From 40c86c7eef6076f6e8d79d58ce53c3f6a4188162 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Fri, 3 Oct 2025 17:07:59 +0300 Subject: [PATCH 1/9] Features: 1) Streamlined stock and price annotations by removing redundant `Max` wrapping; Fixes: None; Extra: 1) Simplified code structure for readability; 2) Optimized boolean calculations for annotations; --- core/filters.py | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/core/filters.py b/core/filters.py index 44edfe79..614ae4f3 100644 --- a/core/filters.py +++ b/core/filters.py @@ -277,20 +277,16 @@ class ProductFilter(FilterSet): ordering_param = self.data.get("order_by", "") qs = qs.annotate( - has_stock=Max( - Case( + has_stock=Case( When(stocks__quantity__gt=0, then=Value(True)), default=Value(False), output_field=BooleanField(), - ) - ), - has_price=Max( - Case( + ), + has_price=Case( When(stocks__price__gt=0, then=Value(True)), default=Value(False), output_field=BooleanField(), - ) - ), + ), ).annotate( personal_orders_only=Case( When(has_stock=False, has_price=False, then=Value(True)), From 90d077fefda0ef59fc6c69c701b1d5e3eb4ecafc Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Fri, 3 Oct 2025 17:16:52 +0300 Subject: [PATCH 2/9] Features: 1) Add setter method for `personal_orders_only` in `core.models.py`; Fixes: 1) Correct exception handling by replacing `self.download.RelatedObjectDoesNotExist` with `DigitalAssetDownload.RelatedObjectDoesNotExist`; Extra: None; --- core/models.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/core/models.py b/core/models.py index 281d484f..8b889b6a 100644 --- a/core/models.py +++ b/core/models.py @@ -601,6 +601,10 @@ class Product(ExportModelOperationsMixin("product"), NiceModel): # type: ignore def personal_orders_only(self) -> bool: return not (self.quantity > 0 and self.price > 0.0) + @personal_orders_only.setter + def personal_orders_only(self, value): + self.__dict__["personal_orders_only"] = value + class Attribute(ExportModelOperationsMixin("attribute"), NiceModel): # type: ignore [misc, django-manager-missing] __doc__ = _( @@ -1782,7 +1786,7 @@ class OrderProduct(ExportModelOperationsMixin("order_product"), NiceModel): # t if self.product.is_digital and self.product.stocks.first().digital_asset: # type: ignore [union-attr] try: return self.download.url - except self.download.RelatedObjectDoesNotExist: + except DigitalAssetDownload.RelatedObjectDoesNotExist: return DigitalAssetDownload.objects.create(order_product=self).url return "" From 9ad79f0c5e64bc3bdb02efda1025c0e30169acda Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Fri, 3 Oct 2025 17:26:58 +0300 Subject: [PATCH 3/9] Fixes: 1) Handle missing DigitalAssetDownload instance in `download_url` method with explicit conditional logic; Extra: 1) Simplify exception handling by replacing it with clear branch logic. --- core/models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/models.py b/core/models.py index 8b889b6a..465f9868 100644 --- a/core/models.py +++ b/core/models.py @@ -1784,9 +1784,9 @@ class OrderProduct(ExportModelOperationsMixin("order_product"), NiceModel): # t def download_url(self: Self) -> str: if self.product and self.product.stocks: if self.product.is_digital and self.product.stocks.first().digital_asset: # type: ignore [union-attr] - try: + if self.download: return self.download.url - except DigitalAssetDownload.RelatedObjectDoesNotExist: + else: return DigitalAssetDownload.objects.create(order_product=self).url return "" From 6fe1664d57d262865ac349ded17258cd30dd598d Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Fri, 3 Oct 2025 17:37:20 +0300 Subject: [PATCH 4/9] Fixes: 1) Corrected `download` attribute check with `hasattr` to prevent potential AttributeError; Extra: n/a; --- core/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/models.py b/core/models.py index 465f9868..3a9498b4 100644 --- a/core/models.py +++ b/core/models.py @@ -1784,7 +1784,7 @@ class OrderProduct(ExportModelOperationsMixin("order_product"), NiceModel): # t def download_url(self: Self) -> str: if self.product and self.product.stocks: if self.product.is_digital and self.product.stocks.first().digital_asset: # type: ignore [union-attr] - if self.download: + if hasattr(self, download): return self.download.url else: return DigitalAssetDownload.objects.create(order_product=self).url From 58e1390d4ddd1dd6c9b4bf08c085de1ac4279642 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Fri, 3 Oct 2025 17:38:18 +0300 Subject: [PATCH 5/9] Fixes: 1) Correct string argument in `hasattr` call within `download_url` method. --- core/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/models.py b/core/models.py index 3a9498b4..fe3deb77 100644 --- a/core/models.py +++ b/core/models.py @@ -1784,7 +1784,7 @@ class OrderProduct(ExportModelOperationsMixin("order_product"), NiceModel): # t def download_url(self: Self) -> str: if self.product and self.product.stocks: if self.product.is_digital and self.product.stocks.first().digital_asset: # type: ignore [union-attr] - if hasattr(self, download): + if hasattr(self, "download"): return self.download.url else: return DigitalAssetDownload.objects.create(order_product=self).url From e1f9a7caced5d84899f76950123ed17b4de5b6dd Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sat, 4 Oct 2025 01:57:31 +0300 Subject: [PATCH 6/9] Features: 1) Update POT-Creation-Date across translation files to reflect the latest changes; 2) Adjust line references in message comments for accurate mappings. Fixes: 1) Harmonize inconsistent whitespace across translation files. Extra: Address formatting issues in translation strings for better readability and maintainability. --- blog/locale/ar_AR/LC_MESSAGES/django.po | 2 +- blog/locale/cs_CZ/LC_MESSAGES/django.po | 2 +- blog/locale/da_DK/LC_MESSAGES/django.po | 2 +- blog/locale/de_DE/LC_MESSAGES/django.po | 2 +- blog/locale/en_GB/LC_MESSAGES/django.po | 2 +- blog/locale/en_US/LC_MESSAGES/django.po | 2 +- blog/locale/es_ES/LC_MESSAGES/django.po | 2 +- blog/locale/fa_IR/LC_MESSAGES/django.po | 4 +- blog/locale/fr_FR/LC_MESSAGES/django.po | 2 +- blog/locale/he_IL/LC_MESSAGES/django.po | 4 +- blog/locale/hi_IN/LC_MESSAGES/django.po | 2 +- blog/locale/hr_HR/LC_MESSAGES/django.po | 4 +- blog/locale/id_ID/LC_MESSAGES/django.po | 8 +- blog/locale/it_IT/LC_MESSAGES/django.po | 2 +- blog/locale/ja_JP/LC_MESSAGES/django.po | 2 +- blog/locale/kk_KZ/LC_MESSAGES/django.po | 2 +- blog/locale/ko_KR/LC_MESSAGES/django.po | 7 +- blog/locale/nl_NL/LC_MESSAGES/django.po | 2 +- blog/locale/no_NO/LC_MESSAGES/django.po | 4 +- blog/locale/pl_PL/LC_MESSAGES/django.po | 2 +- blog/locale/pt_BR/LC_MESSAGES/django.po | 2 +- blog/locale/ro_RO/LC_MESSAGES/django.po | 2 +- blog/locale/ru_RU/LC_MESSAGES/django.po | 2 +- blog/locale/sv_SE/LC_MESSAGES/django.po | 4 +- blog/locale/th_TH/LC_MESSAGES/django.po | 8 +- blog/locale/tr_TR/LC_MESSAGES/django.po | 7 +- blog/locale/vi_VN/LC_MESSAGES/django.po | 4 +- blog/locale/zh_Hans/LC_MESSAGES/django.po | 2 +- core/filters.py | 16 +- core/locale/ar_AR/LC_MESSAGES/django.mo | Bin 70499 -> 80116 bytes core/locale/ar_AR/LC_MESSAGES/django.po | 773 ++++++++++------- core/locale/cs_CZ/LC_MESSAGES/django.mo | Bin 60305 -> 68618 bytes core/locale/cs_CZ/LC_MESSAGES/django.po | 785 ++++++++++------- core/locale/da_DK/LC_MESSAGES/django.mo | Bin 58648 -> 66977 bytes core/locale/da_DK/LC_MESSAGES/django.po | 793 ++++++++++------- core/locale/de_DE/LC_MESSAGES/django.mo | Bin 62147 -> 71050 bytes core/locale/de_DE/LC_MESSAGES/django.po | 801 ++++++++++------- core/locale/en_GB/LC_MESSAGES/django.mo | Bin 56541 -> 64701 bytes core/locale/en_GB/LC_MESSAGES/django.po | 788 ++++++++++------- core/locale/en_US/LC_MESSAGES/django.mo | Bin 56532 -> 64692 bytes core/locale/en_US/LC_MESSAGES/django.po | 788 ++++++++++------- core/locale/es_ES/LC_MESSAGES/django.mo | Bin 60733 -> 69354 bytes core/locale/es_ES/LC_MESSAGES/django.po | 798 ++++++++++------- core/locale/fa_IR/LC_MESSAGES/django.po | 724 +++++++++------- core/locale/fr_FR/LC_MESSAGES/django.mo | Bin 62404 -> 71565 bytes core/locale/fr_FR/LC_MESSAGES/django.po | 804 +++++++++++------- core/locale/he_IL/LC_MESSAGES/django.mo | Bin 65152 -> 74231 bytes core/locale/he_IL/LC_MESSAGES/django.po | 771 ++++++++++------- core/locale/hi_IN/LC_MESSAGES/django.po | 724 +++++++++------- core/locale/hr_HR/LC_MESSAGES/django.po | 724 +++++++++------- core/locale/id_ID/LC_MESSAGES/django.mo | Bin 58724 -> 67032 bytes core/locale/id_ID/LC_MESSAGES/django.po | 791 ++++++++++------- core/locale/it_IT/LC_MESSAGES/django.mo | Bin 61005 -> 69560 bytes core/locale/it_IT/LC_MESSAGES/django.po | 797 ++++++++++------- core/locale/ja_JP/LC_MESSAGES/django.mo | Bin 63597 -> 72845 bytes core/locale/ja_JP/LC_MESSAGES/django.po | 743 +++++++++------- core/locale/kk_KZ/LC_MESSAGES/django.po | 724 +++++++++------- core/locale/ko_KR/LC_MESSAGES/django.mo | Bin 60496 -> 69290 bytes core/locale/ko_KR/LC_MESSAGES/django.po | 756 +++++++++------- core/locale/nl_NL/LC_MESSAGES/django.mo | Bin 60339 -> 69193 bytes core/locale/nl_NL/LC_MESSAGES/django.po | 800 ++++++++++------- core/locale/no_NO/LC_MESSAGES/django.mo | Bin 59136 -> 67480 bytes core/locale/no_NO/LC_MESSAGES/django.po | 793 ++++++++++------- core/locale/pl_PL/LC_MESSAGES/django.mo | Bin 60385 -> 68924 bytes core/locale/pl_PL/LC_MESSAGES/django.po | 793 ++++++++++------- core/locale/pt_BR/LC_MESSAGES/django.mo | Bin 60457 -> 68982 bytes core/locale/pt_BR/LC_MESSAGES/django.po | 794 ++++++++++------- core/locale/ro_RO/LC_MESSAGES/django.mo | Bin 61584 -> 70408 bytes core/locale/ro_RO/LC_MESSAGES/django.po | 798 ++++++++++------- core/locale/ru_RU/LC_MESSAGES/django.mo | Bin 78728 -> 90551 bytes core/locale/ru_RU/LC_MESSAGES/django.po | 791 ++++++++++------- core/locale/sv_SE/LC_MESSAGES/django.mo | Bin 59038 -> 67601 bytes core/locale/sv_SE/LC_MESSAGES/django.po | 794 ++++++++++------- core/locale/th_TH/LC_MESSAGES/django.mo | Bin 93959 -> 108424 bytes core/locale/th_TH/LC_MESSAGES/django.po | 788 ++++++++++------- core/locale/tr_TR/LC_MESSAGES/django.mo | Bin 60703 -> 69303 bytes core/locale/tr_TR/LC_MESSAGES/django.po | 790 ++++++++++------- core/locale/vi_VN/LC_MESSAGES/django.mo | Bin 68120 -> 77598 bytes core/locale/vi_VN/LC_MESSAGES/django.po | 788 ++++++++++------- core/locale/zh_Hans/LC_MESSAGES/django.mo | Bin 53898 -> 61049 bytes core/locale/zh_Hans/LC_MESSAGES/django.po | 740 +++++++++------- core/models.py | 346 ++------ evibes/locale/ar_AR/LC_MESSAGES/django.po | 2 +- evibes/locale/cs_CZ/LC_MESSAGES/django.po | 2 +- evibes/locale/da_DK/LC_MESSAGES/django.po | 2 +- evibes/locale/de_DE/LC_MESSAGES/django.po | 2 +- evibes/locale/en_GB/LC_MESSAGES/django.po | 2 +- evibes/locale/en_US/LC_MESSAGES/django.po | 2 +- evibes/locale/es_ES/LC_MESSAGES/django.po | 2 +- evibes/locale/fa_IR/LC_MESSAGES/django.po | 4 +- evibes/locale/fr_FR/LC_MESSAGES/django.po | 2 +- evibes/locale/he_IL/LC_MESSAGES/django.po | 4 +- evibes/locale/hi_IN/LC_MESSAGES/django.po | 2 +- evibes/locale/hr_HR/LC_MESSAGES/django.po | 4 +- evibes/locale/id_ID/LC_MESSAGES/django.po | 4 +- evibes/locale/it_IT/LC_MESSAGES/django.po | 2 +- evibes/locale/ja_JP/LC_MESSAGES/django.po | 2 +- evibes/locale/kk_KZ/LC_MESSAGES/django.po | 2 +- evibes/locale/ko_KR/LC_MESSAGES/django.po | 4 +- evibes/locale/nl_NL/LC_MESSAGES/django.po | 2 +- evibes/locale/no_NO/LC_MESSAGES/django.po | 4 +- evibes/locale/pl_PL/LC_MESSAGES/django.po | 2 +- evibes/locale/pt_BR/LC_MESSAGES/django.po | 2 +- evibes/locale/ro_RO/LC_MESSAGES/django.po | 2 +- evibes/locale/ru_RU/LC_MESSAGES/django.po | 2 +- evibes/locale/sv_SE/LC_MESSAGES/django.po | 4 +- evibes/locale/th_TH/LC_MESSAGES/django.po | 4 +- evibes/locale/tr_TR/LC_MESSAGES/django.po | 4 +- evibes/locale/vi_VN/LC_MESSAGES/django.po | 4 +- evibes/locale/zh_Hans/LC_MESSAGES/django.po | 2 +- payments/locale/ar_AR/LC_MESSAGES/django.po | 12 +- payments/locale/cs_CZ/LC_MESSAGES/django.po | 12 +- payments/locale/da_DK/LC_MESSAGES/django.po | 12 +- payments/locale/de_DE/LC_MESSAGES/django.po | 12 +- payments/locale/en_GB/LC_MESSAGES/django.po | 12 +- payments/locale/en_US/LC_MESSAGES/django.po | 12 +- payments/locale/es_ES/LC_MESSAGES/django.po | 12 +- payments/locale/fa_IR/LC_MESSAGES/django.po | 14 +- payments/locale/fr_FR/LC_MESSAGES/django.po | 12 +- payments/locale/he_IL/LC_MESSAGES/django.po | 22 +- payments/locale/hi_IN/LC_MESSAGES/django.po | 12 +- payments/locale/hr_HR/LC_MESSAGES/django.po | 14 +- payments/locale/id_ID/LC_MESSAGES/django.po | 28 +- payments/locale/it_IT/LC_MESSAGES/django.po | 12 +- payments/locale/ja_JP/LC_MESSAGES/django.po | 12 +- payments/locale/kk_KZ/LC_MESSAGES/django.po | 12 +- payments/locale/ko_KR/LC_MESSAGES/django.po | 22 +- payments/locale/nl_NL/LC_MESSAGES/django.po | 12 +- payments/locale/no_NO/LC_MESSAGES/django.po | 22 +- payments/locale/pl_PL/LC_MESSAGES/django.po | 12 +- payments/locale/pt_BR/LC_MESSAGES/django.po | 12 +- payments/locale/ro_RO/LC_MESSAGES/django.po | 12 +- payments/locale/ru_RU/LC_MESSAGES/django.po | 12 +- payments/locale/sv_SE/LC_MESSAGES/django.po | 22 +- payments/locale/th_TH/LC_MESSAGES/django.po | 22 +- payments/locale/tr_TR/LC_MESSAGES/django.po | 26 +- payments/locale/vi_VN/LC_MESSAGES/django.po | 26 +- payments/locale/zh_Hans/LC_MESSAGES/django.po | 12 +- vibes_auth/locale/ar_AR/LC_MESSAGES/django.po | 14 +- vibes_auth/locale/cs_CZ/LC_MESSAGES/django.po | 14 +- vibes_auth/locale/da_DK/LC_MESSAGES/django.po | 14 +- vibes_auth/locale/de_DE/LC_MESSAGES/django.po | 14 +- vibes_auth/locale/en_GB/LC_MESSAGES/django.po | 14 +- vibes_auth/locale/en_US/LC_MESSAGES/django.po | 14 +- vibes_auth/locale/es_ES/LC_MESSAGES/django.po | 14 +- vibes_auth/locale/fa_IR/LC_MESSAGES/django.po | 16 +- vibes_auth/locale/fr_FR/LC_MESSAGES/django.po | 14 +- vibes_auth/locale/he_IL/LC_MESSAGES/django.po | 27 +- vibes_auth/locale/hi_IN/LC_MESSAGES/django.po | 14 +- vibes_auth/locale/hr_HR/LC_MESSAGES/django.po | 16 +- vibes_auth/locale/id_ID/LC_MESSAGES/django.po | 30 +- vibes_auth/locale/it_IT/LC_MESSAGES/django.po | 14 +- vibes_auth/locale/ja_JP/LC_MESSAGES/django.po | 14 +- vibes_auth/locale/kk_KZ/LC_MESSAGES/django.po | 14 +- vibes_auth/locale/ko_KR/LC_MESSAGES/django.po | 35 +- vibes_auth/locale/nl_NL/LC_MESSAGES/django.po | 14 +- vibes_auth/locale/no_NO/LC_MESSAGES/django.po | 23 +- vibes_auth/locale/pl_PL/LC_MESSAGES/django.po | 14 +- vibes_auth/locale/pt_BR/LC_MESSAGES/django.po | 14 +- vibes_auth/locale/ro_RO/LC_MESSAGES/django.po | 14 +- vibes_auth/locale/ru_RU/LC_MESSAGES/django.po | 14 +- vibes_auth/locale/sv_SE/LC_MESSAGES/django.po | 27 +- vibes_auth/locale/th_TH/LC_MESSAGES/django.po | 40 +- vibes_auth/locale/tr_TR/LC_MESSAGES/django.po | 27 +- vibes_auth/locale/vi_VN/LC_MESSAGES/django.po | 35 +- .../locale/zh_Hans/LC_MESSAGES/django.po | 14 +- 166 files changed, 13261 insertions(+), 9982 deletions(-) diff --git a/blog/locale/ar_AR/LC_MESSAGES/django.po b/blog/locale/ar_AR/LC_MESSAGES/django.po index a6ace719..1640991d 100644 --- a/blog/locale/ar_AR/LC_MESSAGES/django.po +++ b/blog/locale/ar_AR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/blog/locale/cs_CZ/LC_MESSAGES/django.po b/blog/locale/cs_CZ/LC_MESSAGES/django.po index 9d94fca1..5277451a 100644 --- a/blog/locale/cs_CZ/LC_MESSAGES/django.po +++ b/blog/locale/cs_CZ/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/blog/locale/da_DK/LC_MESSAGES/django.po b/blog/locale/da_DK/LC_MESSAGES/django.po index 5917b53a..e1741de6 100644 --- a/blog/locale/da_DK/LC_MESSAGES/django.po +++ b/blog/locale/da_DK/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/blog/locale/de_DE/LC_MESSAGES/django.po b/blog/locale/de_DE/LC_MESSAGES/django.po index 560cda92..485fb45f 100644 --- a/blog/locale/de_DE/LC_MESSAGES/django.po +++ b/blog/locale/de_DE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/blog/locale/en_GB/LC_MESSAGES/django.po b/blog/locale/en_GB/LC_MESSAGES/django.po index fd7ab858..e5117438 100644 --- a/blog/locale/en_GB/LC_MESSAGES/django.po +++ b/blog/locale/en_GB/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/blog/locale/en_US/LC_MESSAGES/django.po b/blog/locale/en_US/LC_MESSAGES/django.po index 9868cc70..1806d6d9 100644 --- a/blog/locale/en_US/LC_MESSAGES/django.po +++ b/blog/locale/en_US/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/blog/locale/es_ES/LC_MESSAGES/django.po b/blog/locale/es_ES/LC_MESSAGES/django.po index c129548f..80f67efa 100644 --- a/blog/locale/es_ES/LC_MESSAGES/django.po +++ b/blog/locale/es_ES/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/blog/locale/fa_IR/LC_MESSAGES/django.po b/blog/locale/fa_IR/LC_MESSAGES/django.po index 1bc08a12..88231200 100644 --- a/blog/locale/fa_IR/LC_MESSAGES/django.po +++ b/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-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/blog/locale/fr_FR/LC_MESSAGES/django.po b/blog/locale/fr_FR/LC_MESSAGES/django.po index c089d1ec..9c013ae1 100644 --- a/blog/locale/fr_FR/LC_MESSAGES/django.po +++ b/blog/locale/fr_FR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/blog/locale/he_IL/LC_MESSAGES/django.po b/blog/locale/he_IL/LC_MESSAGES/django.po index d254d632..dbb91abf 100644 --- a/blog/locale/he_IL/LC_MESSAGES/django.po +++ b/blog/locale/he_IL/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/blog/locale/hi_IN/LC_MESSAGES/django.po b/blog/locale/hi_IN/LC_MESSAGES/django.po index da8da329..6edbfb85 100644 --- a/blog/locale/hi_IN/LC_MESSAGES/django.po +++ b/blog/locale/hi_IN/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/blog/locale/hr_HR/LC_MESSAGES/django.po b/blog/locale/hr_HR/LC_MESSAGES/django.po index 1bc08a12..88231200 100644 --- a/blog/locale/hr_HR/LC_MESSAGES/django.po +++ b/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-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/blog/locale/id_ID/LC_MESSAGES/django.po b/blog/locale/id_ID/LC_MESSAGES/django.po index b41ccb51..23566dc3 100644 --- a/blog/locale/id_ID/LC_MESSAGES/django.po +++ b/blog/locale/id_ID/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -36,8 +36,8 @@ msgstr "Posting" #: blog/models.py:88 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:90 msgid "" diff --git a/blog/locale/it_IT/LC_MESSAGES/django.po b/blog/locale/it_IT/LC_MESSAGES/django.po index d774430e..492342bb 100644 --- a/blog/locale/it_IT/LC_MESSAGES/django.po +++ b/blog/locale/it_IT/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/blog/locale/ja_JP/LC_MESSAGES/django.po b/blog/locale/ja_JP/LC_MESSAGES/django.po index 1b2395f0..8323d973 100644 --- a/blog/locale/ja_JP/LC_MESSAGES/django.po +++ b/blog/locale/ja_JP/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/blog/locale/kk_KZ/LC_MESSAGES/django.po b/blog/locale/kk_KZ/LC_MESSAGES/django.po index da8da329..6edbfb85 100644 --- a/blog/locale/kk_KZ/LC_MESSAGES/django.po +++ b/blog/locale/kk_KZ/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/blog/locale/ko_KR/LC_MESSAGES/django.po b/blog/locale/ko_KR/LC_MESSAGES/django.po index 67df3b9d..04b294fb 100644 --- a/blog/locale/ko_KR/LC_MESSAGES/django.po +++ b/blog/locale/ko_KR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -35,7 +35,8 @@ msgstr "게시물" #: blog/models.py:88 msgid "markdown files are not supported yet - use markdown content instead" -msgstr "마크다운 파일은 지원되지 않습니다 예 - 대신 마크다운 콘텐츠를 사용하세요!" +msgstr "" +"마크다운 파일은 지원되지 않습니다 예 - 대신 마크다운 콘텐츠를 사용하세요!" #: blog/models.py:90 msgid "" diff --git a/blog/locale/nl_NL/LC_MESSAGES/django.po b/blog/locale/nl_NL/LC_MESSAGES/django.po index 26d54e39..972f6f86 100644 --- a/blog/locale/nl_NL/LC_MESSAGES/django.po +++ b/blog/locale/nl_NL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/blog/locale/no_NO/LC_MESSAGES/django.po b/blog/locale/no_NO/LC_MESSAGES/django.po index a39b1e80..6bb0e797 100644 --- a/blog/locale/no_NO/LC_MESSAGES/django.po +++ b/blog/locale/no_NO/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/blog/locale/pl_PL/LC_MESSAGES/django.po b/blog/locale/pl_PL/LC_MESSAGES/django.po index 8509f86d..dfda196a 100644 --- a/blog/locale/pl_PL/LC_MESSAGES/django.po +++ b/blog/locale/pl_PL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/blog/locale/pt_BR/LC_MESSAGES/django.po b/blog/locale/pt_BR/LC_MESSAGES/django.po index c4b25cab..5329cff8 100644 --- a/blog/locale/pt_BR/LC_MESSAGES/django.po +++ b/blog/locale/pt_BR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/blog/locale/ro_RO/LC_MESSAGES/django.po b/blog/locale/ro_RO/LC_MESSAGES/django.po index 036a8678..4b17ea9d 100644 --- a/blog/locale/ro_RO/LC_MESSAGES/django.po +++ b/blog/locale/ro_RO/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/blog/locale/ru_RU/LC_MESSAGES/django.po b/blog/locale/ru_RU/LC_MESSAGES/django.po index 7e8b5993..6f68a066 100644 --- a/blog/locale/ru_RU/LC_MESSAGES/django.po +++ b/blog/locale/ru_RU/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/blog/locale/sv_SE/LC_MESSAGES/django.po b/blog/locale/sv_SE/LC_MESSAGES/django.po index 518a0fdd..601ccaa5 100644 --- a/blog/locale/sv_SE/LC_MESSAGES/django.po +++ b/blog/locale/sv_SE/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/blog/locale/th_TH/LC_MESSAGES/django.po b/blog/locale/th_TH/LC_MESSAGES/django.po index 64784163..10c1c6a6 100644 --- a/blog/locale/th_TH/LC_MESSAGES/django.po +++ b/blog/locale/th_TH/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -40,9 +40,7 @@ msgstr "ไฟล์มาร์กดาวน์ยังไม่รองร #: blog/models.py:90 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" -msgstr "" -"ไฟล์มาร์กดาวน์หรือเนื้อหาแบบมาร์กดาวน์ต้องได้รับการจัดเตรียมไว้ - " -"ไม่สามารถใช้ร่วมกันได้" +msgstr "ไฟล์มาร์กดาวน์หรือเนื้อหาแบบมาร์กดาวน์ต้องได้รับการจัดเตรียมไว้ - ไม่สามารถใช้ร่วมกันได้" #: blog/models.py:122 msgid "internal tag identifier for the post tag" diff --git a/blog/locale/tr_TR/LC_MESSAGES/django.po b/blog/locale/tr_TR/LC_MESSAGES/django.po index 7ecf4a06..eb5908b5 100644 --- a/blog/locale/tr_TR/LC_MESSAGES/django.po +++ b/blog/locale/tr_TR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -43,8 +43,7 @@ msgstr "" 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:122 msgid "internal tag identifier for the post tag" diff --git a/blog/locale/vi_VN/LC_MESSAGES/django.po b/blog/locale/vi_VN/LC_MESSAGES/django.po index 2829cc99..3d5e7a8e 100644 --- a/blog/locale/vi_VN/LC_MESSAGES/django.po +++ b/blog/locale/vi_VN/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/blog/locale/zh_Hans/LC_MESSAGES/django.po b/blog/locale/zh_Hans/LC_MESSAGES/django.po index 75619bef..a92e04e4 100644 --- a/blog/locale/zh_Hans/LC_MESSAGES/django.po +++ b/blog/locale/zh_Hans/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/core/filters.py b/core/filters.py index 614ae4f3..7b3e66ac 100644 --- a/core/filters.py +++ b/core/filters.py @@ -278,15 +278,15 @@ class ProductFilter(FilterSet): qs = qs.annotate( has_stock=Case( - When(stocks__quantity__gt=0, then=Value(True)), - default=Value(False), - output_field=BooleanField(), - ), + When(stocks__quantity__gt=0, then=Value(True)), + default=Value(False), + output_field=BooleanField(), + ), has_price=Case( - When(stocks__price__gt=0, then=Value(True)), - default=Value(False), - output_field=BooleanField(), - ), + When(stocks__price__gt=0, then=Value(True)), + default=Value(False), + output_field=BooleanField(), + ), ).annotate( personal_orders_only=Case( When(has_stock=False, has_price=False, then=Value(True)), diff --git a/core/locale/ar_AR/LC_MESSAGES/django.mo b/core/locale/ar_AR/LC_MESSAGES/django.mo index 24d744a09bcf9120b8d4ba542a2e146b3ed985e4..788c8e8ea3860580c06ac6f6dd38bbb166fce770 100644 GIT binary patch delta 20800 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 X`+wz06>I7oQI4tBSH8Ppe%}89wy55U delta 12687 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -87,11 +87,11 @@ msgid "selected items have been deactivated." msgstr "تم إلغاء تنشيط العناصر المحددة!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:712 core/models.py:720 +#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 msgid "attribute value" msgstr "قيمة السمة" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:721 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 msgid "attribute values" msgstr "قيم السمات" @@ -103,7 +103,7 @@ msgstr "الصورة" msgid "images" msgstr "الصور" -#: core/admin.py:155 core/models.py:457 +#: core/admin.py:155 core/models.py:445 msgid "stock" msgstr "المخزون" @@ -111,11 +111,11 @@ msgstr "المخزون" msgid "stocks" msgstr "الأسهم" -#: core/admin.py:166 core/models.py:1735 +#: core/admin.py:166 core/models.py:1609 msgid "order product" msgstr "طلب المنتج" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1736 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 msgid "order products" msgstr "اطلب المنتجات" @@ -317,7 +317,7 @@ msgstr "إعادة كتابة فئة موجودة حفظ غير المواد غ msgid "rewrite some fields of an existing category saving non-editables" msgstr "إعادة كتابة بعض حقول فئة موجودة حفظ غير القابلة للتعديل" -#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:553 +#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:487 #: core/graphene/object_types.py:117 core/graphene/object_types.py:207 #: core/graphene/object_types.py:509 msgid "SEO Meta snapshot" @@ -571,47 +571,7 @@ msgstr "قائمة بجميع المنتجات (عرض بسيط)" msgid "(exact) Product UUID" msgstr "(بالضبط) UUID المنتج" -#: core/docs/drf/viewsets.py:384 -msgid "(icontains) Product name" -msgstr "(أيقونات) اسم المنتج" - -#: core/docs/drf/viewsets.py:390 -msgid "(list) Category names, case-insensitive" -msgstr "(قائمة) أسماء الفئات، غير حساسة لحالة الأحرف" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Category UUID" -msgstr "(بالضبط) معرّف الفئة UUID" - -#: core/docs/drf/viewsets.py:402 -msgid "(list) Tag names, case-insensitive" -msgstr "(قائمة) أسماء العلامات، غير حساسة لحالة الأحرف" - -#: core/docs/drf/viewsets.py:408 -msgid "(gte) Minimum stock price" -msgstr "(gte) الحد الأدنى لسعر السهم" - -#: core/docs/drf/viewsets.py:414 -msgid "(lte) Maximum stock price" -msgstr "(lte) الحد الأقصى لسعر السهم" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Only active products" -msgstr "(بالضبط) المنتجات النشطة فقط" - -#: core/docs/drf/viewsets.py:426 -msgid "(iexact) Brand name" -msgstr "(أيكساكت) اسم العلامة التجارية" - -#: core/docs/drf/viewsets.py:438 -msgid "(gt) Minimum stock quantity" -msgstr "(زط) الحد الأدنى لكمية المخزون" - -#: core/docs/drf/viewsets.py:444 -msgid "(exact) Digital vs. physical" -msgstr "(بالضبط) الرقمية مقابل المادية" - -#: core/docs/drf/viewsets.py:451 +#: core/docs/drf/viewsets.py:385 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -619,70 +579,70 @@ msgstr "" "قائمة مفصولة بفواصل من الحقول للفرز حسب. البادئة بـ \"-\" للفرز التنازلي. \n" "**مسموح بها:** uuid، تصنيف، اسم، سبيكة، إنشاء، تعديل، سعر، عشوائي" -#: core/docs/drf/viewsets.py:465 core/docs/drf/viewsets.py:466 +#: core/docs/drf/viewsets.py:399 core/docs/drf/viewsets.py:400 msgid "retrieve a single product (detailed view)" msgstr "استرداد منتج واحد (عرض تفصيلي)" -#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:495 -#: core/docs/drf/viewsets.py:511 core/docs/drf/viewsets.py:527 -#: core/docs/drf/viewsets.py:543 core/docs/drf/viewsets.py:559 +#: core/docs/drf/viewsets.py:405 core/docs/drf/viewsets.py:429 +#: core/docs/drf/viewsets.py:445 core/docs/drf/viewsets.py:461 +#: core/docs/drf/viewsets.py:477 core/docs/drf/viewsets.py:493 msgid "Product UUID or slug" msgstr "معرف المنتج UUID أو سبيكة المنتج" -#: core/docs/drf/viewsets.py:481 core/docs/drf/viewsets.py:482 +#: core/docs/drf/viewsets.py:415 core/docs/drf/viewsets.py:416 msgid "create a product" msgstr "إنشاء منتج" -#: core/docs/drf/viewsets.py:489 core/docs/drf/viewsets.py:490 +#: core/docs/drf/viewsets.py:423 core/docs/drf/viewsets.py:424 msgid "rewrite an existing product, preserving non-editable fields" msgstr "إعادة كتابة منتج موجود، مع الحفاظ على الحقول غير القابلة للتحرير" -#: core/docs/drf/viewsets.py:505 core/docs/drf/viewsets.py:506 +#: core/docs/drf/viewsets.py:439 core/docs/drf/viewsets.py:440 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "تحديث بعض حقول منتج موجود، مع الحفاظ على الحقول غير القابلة للتحرير" -#: core/docs/drf/viewsets.py:521 core/docs/drf/viewsets.py:522 +#: core/docs/drf/viewsets.py:455 core/docs/drf/viewsets.py:456 msgid "delete a product" msgstr "حذف منتج" -#: core/docs/drf/viewsets.py:537 core/docs/drf/viewsets.py:538 +#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:472 msgid "lists all permitted feedbacks for a product" msgstr "سرد جميع الملاحظات المسموح بها للمنتج" -#: core/docs/drf/viewsets.py:554 +#: core/docs/drf/viewsets.py:488 msgid "returns a snapshot of the product's SEO meta data" msgstr "إرجاع لقطة من البيانات الوصفية لتحسين محركات البحث للمنتج" -#: core/docs/drf/viewsets.py:572 +#: core/docs/drf/viewsets.py:506 msgid "list all addresses" msgstr "قائمة بجميع العناوين" -#: core/docs/drf/viewsets.py:579 +#: core/docs/drf/viewsets.py:513 msgid "retrieve a single address" msgstr "استرجاع عنوان واحد" -#: core/docs/drf/viewsets.py:586 +#: core/docs/drf/viewsets.py:520 msgid "create a new address" msgstr "إنشاء عنوان جديد" -#: core/docs/drf/viewsets.py:594 +#: core/docs/drf/viewsets.py:528 msgid "delete an address" msgstr "حذف عنوان" -#: core/docs/drf/viewsets.py:601 +#: core/docs/drf/viewsets.py:535 msgid "update an entire address" msgstr "تحديث عنوان كامل" -#: core/docs/drf/viewsets.py:609 +#: core/docs/drf/viewsets.py:543 msgid "partially update an address" msgstr "تحديث جزئي للعنوان" -#: core/docs/drf/viewsets.py:617 +#: core/docs/drf/viewsets.py:551 msgid "autocomplete address suggestions" msgstr "إدخال عنوان الإكمال التلقائي" -#: core/docs/drf/viewsets.py:622 +#: core/docs/drf/viewsets.py:556 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" "تطبيق docker compose exec تطبيق docker exec الشعر تشغيل إدارة python.py " @@ -691,177 +651,181 @@ msgstr "" "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" -#: core/docs/drf/viewsets.py:628 +#: core/docs/drf/viewsets.py:562 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "تحديد كمية النتائج، 1 < الحد < 10، الافتراضي: 5" -#: core/docs/drf/viewsets.py:641 +#: core/docs/drf/viewsets.py:575 msgid "list all feedbacks (simple view)" msgstr "سرد جميع الملاحظات (عرض بسيط)" -#: core/docs/drf/viewsets.py:645 +#: core/docs/drf/viewsets.py:579 msgid "retrieve a single feedback (detailed view)" msgstr "استرداد تعليق واحد (عرض مفصل)" -#: core/docs/drf/viewsets.py:649 +#: core/docs/drf/viewsets.py:583 msgid "create a feedback" msgstr "إنشاء ملاحظات" -#: core/docs/drf/viewsets.py:653 +#: core/docs/drf/viewsets.py:587 msgid "delete a feedback" msgstr "حذف تعليق" -#: core/docs/drf/viewsets.py:657 +#: core/docs/drf/viewsets.py:591 msgid "rewrite an existing feedback saving non-editables" msgstr "إعادة كتابة ملاحظات حالية تحفظ المواد غير القابلة للتعديل" -#: core/docs/drf/viewsets.py:661 +#: core/docs/drf/viewsets.py:595 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "إعادة كتابة بعض حقول الملاحظات الحالية التي تحفظ غير القابلة للتعديل" -#: core/docs/drf/viewsets.py:668 +#: core/docs/drf/viewsets.py:602 msgid "list all order–product relations (simple view)" msgstr "سرد جميع العلاقات بين الطلب والمنتج (عرض بسيط)" -#: core/docs/drf/viewsets.py:675 +#: core/docs/drf/viewsets.py:609 msgid "retrieve a single order–product relation (detailed view)" msgstr "استرداد علاقة طلب منتج واحد (عرض تفصيلي)" -#: core/docs/drf/viewsets.py:682 +#: core/docs/drf/viewsets.py:616 msgid "create a new order–product relation" msgstr "إنشاء علاقة جديدة بين الطلب والمنتج" -#: core/docs/drf/viewsets.py:689 +#: core/docs/drf/viewsets.py:623 msgid "replace an existing order–product relation" msgstr "استبدال علاقة الطلب-المنتج الحالية" -#: core/docs/drf/viewsets.py:696 +#: core/docs/drf/viewsets.py:630 msgid "partially update an existing order–product relation" msgstr "تحديث جزئي لعلاقة الطلب والمنتج الحالية" -#: core/docs/drf/viewsets.py:703 +#: core/docs/drf/viewsets.py:637 msgid "delete an order–product relation" msgstr "حذف علاقة الطلب-المنتج" -#: core/docs/drf/viewsets.py:710 +#: core/docs/drf/viewsets.py:644 msgid "add or remove feedback on an order–product relation" msgstr "إضافة أو إزالة الملاحظات على العلاقة بين الطلب والمنتج" -#: core/elasticsearch/__init__.py:105 +#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 msgid "no search term provided." msgstr "لم يتم توفير مصطلح بحث." -#: core/filters.py:64 core/filters.py:594 core/filters.py:623 +#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +msgid "Search" +msgstr "بحث" + +#: core/filters.py:66 core/filters.py:554 core/filters.py:583 msgid "UUID" msgstr "UUID" -#: core/filters.py:65 core/filters.py:429 core/filters.py:560 +#: core/filters.py:67 core/filters.py:399 core/filters.py:526 msgid "Name" msgstr "الاسم" -#: core/filters.py:66 core/filters.py:562 +#: core/filters.py:68 core/filters.py:528 msgid "Categories" msgstr "الفئات" -#: core/filters.py:68 +#: core/filters.py:70 msgid "Categories Slugs" msgstr "الفئات الرخويات" -#: core/filters.py:69 core/filters.py:437 +#: core/filters.py:71 core/filters.py:407 msgid "Tags" msgstr "الوسوم" -#: core/filters.py:70 +#: core/filters.py:72 msgid "Min Price" msgstr "الحد الأدنى للسعر" -#: core/filters.py:71 +#: core/filters.py:73 msgid "Max Price" msgstr "ماكس برايس" -#: core/filters.py:72 +#: core/filters.py:74 msgid "Is Active" msgstr "نشط" -#: core/filters.py:73 +#: core/filters.py:75 msgid "Brand" msgstr "العلامة التجارية" -#: core/filters.py:74 +#: core/filters.py:76 msgid "Attributes" msgstr "السمات" -#: core/filters.py:75 +#: core/filters.py:77 msgid "Quantity" msgstr "الكمية" -#: core/filters.py:76 core/filters.py:431 core/filters.py:561 -#: core/models.py:287 core/models.py:381 core/models.py:534 +#: core/filters.py:78 core/filters.py:401 core/filters.py:527 +#: core/models.py:287 core/models.py:369 core/models.py:522 msgid "Slug" msgstr "سبيكة" -#: core/filters.py:77 +#: core/filters.py:79 msgid "Is Digital" msgstr "هو رقمي" -#: core/filters.py:78 +#: core/filters.py:80 msgid "Include sub-categories" msgstr "تضمين الفئات الفرعية" -#: core/filters.py:81 +#: core/filters.py:83 msgid "Include personal ordered" msgstr "تضمين المنتجات المطلوبة شخصيًا" -#: core/filters.py:83 core/models.py:538 +#: core/filters.py:85 core/models.py:526 msgid "SKU" msgstr "وحدة التخزين" -#: core/filters.py:166 +#: core/filters.py:161 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "يجب أن يكون هناك category_uid لاستخدام علامة تضمين_الفئات_الفرعية" -#: core/filters.py:356 +#: core/filters.py:324 msgid "Search (ID, product name or part number)" msgstr "البحث (المعرف أو اسم المنتج أو رقم الجزء)" -#: core/filters.py:359 +#: core/filters.py:327 msgid "Bought after (inclusive)" msgstr "تم الشراء بعد (شامل)" -#: core/filters.py:360 +#: core/filters.py:328 msgid "Bought before (inclusive)" msgstr "تم الشراء من قبل (شامل)" -#: core/filters.py:363 core/filters.py:410 core/filters.py:625 +#: core/filters.py:331 core/filters.py:378 core/filters.py:585 msgid "User email" msgstr "البريد الإلكتروني للمستخدم" -#: core/filters.py:364 core/filters.py:411 core/filters.py:603 -#: core/filters.py:624 +#: core/filters.py:332 core/filters.py:379 core/filters.py:563 +#: core/filters.py:584 msgid "User UUID" msgstr "معرّف المستخدم UUID" -#: core/filters.py:365 +#: core/filters.py:333 msgid "Status" msgstr "الحالة" -#: core/filters.py:369 +#: core/filters.py:337 msgid "Human Readable ID" msgstr "معرّف قابل للقراءة من قبل الإنسان" -#: core/filters.py:430 +#: core/filters.py:400 msgid "Parent" msgstr "الوالدين" -#: core/filters.py:434 +#: core/filters.py:404 msgid "Whole category(has at least 1 product or not)" msgstr "الفئة الكاملة (تحتوي على منتج واحد على الأقل أو لا)" -#: core/filters.py:438 +#: core/filters.py:408 msgid "Level" msgstr "المستوى" -#: core/filters.py:598 +#: core/filters.py:558 msgid "Product UUID" msgstr "UUID المنتج" @@ -917,7 +881,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "يرجى تقديم إما Order_uuid أو order_uid_hr_hr_id - متنافيان!" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:821 +#: core/graphene/mutations.py:527 core/viewsets.py:839 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "جاء نوع خاطئ من طريقة order.buy(): {type(instance)!s}" @@ -978,37 +942,37 @@ msgstr "الرجاء إرسال السمات كسلسلة منسقة مثل attr msgid "add or delete a feedback for orderproduct" msgstr "إضافة أو حذف تعليق على طلبالمنتج" -#: core/graphene/mutations.py:555 +#: core/graphene/mutations.py:556 msgid "action must be either `add` or `remove`" msgstr "يجب أن يكون الإجراء إما \"إضافة\" أو \"إزالة\"!" -#: core/graphene/mutations.py:558 +#: core/graphene/mutations.py:559 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "طلب المنتج {order_product_uuid} غير موجود!" -#: core/graphene/mutations.py:621 +#: core/graphene/mutations.py:622 msgid "original address string provided by the user" msgstr "سلسلة العنوان الأصلي المقدمة من المستخدم" -#: core/graphene/mutations.py:655 core/models.py:896 core/models.py:909 -#: core/models.py:1348 core/models.py:1377 core/models.py:1402 -#: core/viewsets.py:824 +#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 +#: core/models.py:1234 core/models.py:1263 core/models.py:1288 +#: core/viewsets.py:842 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} غير موجود: {uuid}!" -#: core/graphene/mutations.py:668 +#: core/graphene/mutations.py:669 msgid "limit must be between 1 and 10" msgstr "يجب أن يكون الحد بين 1 و10" -#: core/graphene/mutations.py:713 +#: core/graphene/mutations.py:714 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - يعمل مثل السحر" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:666 core/models.py:1234 -#: core/models.py:1809 +#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 +#: core/models.py:1686 msgid "attributes" msgstr "السمات" @@ -1021,11 +985,11 @@ msgid "groups of attributes" msgstr "مجموعات السمات" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:620 +#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:612 msgid "categories" msgstr "الفئات" -#: core/graphene/object_types.py:124 core/models.py:395 +#: core/graphene/object_types.py:124 core/models.py:383 msgid "brands" msgstr "العلامات التجارية" @@ -1081,7 +1045,7 @@ msgid "represents feedback from a user." msgstr "يمثل ملاحظات من المستخدم." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1228 +#: core/models.py:1110 msgid "notifications" msgstr "الإشعارات" @@ -1089,7 +1053,7 @@ msgstr "الإشعارات" msgid "download url for this order product if applicable" msgstr "تحميل الرابط الخاص بمنتج الطلب هذا إن أمكن" -#: core/graphene/object_types.py:400 core/models.py:1938 +#: core/graphene/object_types.py:400 core/models.py:1791 msgid "feedback" msgstr "الملاحظات" @@ -1097,7 +1061,7 @@ msgstr "الملاحظات" msgid "a list of order products in this order" msgstr "قائمة بطلب المنتجات بهذا الترتيب" -#: core/graphene/object_types.py:436 core/models.py:1198 +#: core/graphene/object_types.py:436 core/models.py:1080 msgid "billing address" msgstr "عنوان إرسال الفواتير" @@ -1125,7 +1089,7 @@ msgstr "هل جميع المنتجات في الطلب رقمي" msgid "transactions for this order" msgstr "المعاملات الخاصة بهذا الطلب" -#: core/graphene/object_types.py:465 core/models.py:1262 +#: core/graphene/object_types.py:465 core/models.py:1144 msgid "orders" msgstr "الطلبات" @@ -1137,15 +1101,15 @@ msgstr "رابط الصورة" msgid "product's images" msgstr "صور المنتج" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:477 +#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 msgid "category" msgstr "الفئة" -#: core/graphene/object_types.py:502 core/models.py:1939 +#: core/graphene/object_types.py:502 core/models.py:1792 msgid "feedbacks" msgstr "الملاحظات" -#: core/graphene/object_types.py:503 core/models.py:394 core/models.py:486 +#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 msgid "brand" msgstr "العلامة التجارية" @@ -1177,7 +1141,7 @@ msgstr "عدد الملاحظات" msgid "only available for personal orders" msgstr "المنتجات متاحة للطلبات الشخصية فقط" -#: core/graphene/object_types.py:534 core/models.py:548 +#: core/graphene/object_types.py:534 core/models.py:536 msgid "products" msgstr "المنتجات" @@ -1189,7 +1153,7 @@ msgstr "الرموز الترويجية" msgid "products on sale" msgstr "المنتجات المعروضة للبيع" -#: core/graphene/object_types.py:651 core/models.py:843 +#: core/graphene/object_types.py:651 core/models.py:784 msgid "promotions" msgstr "العروض الترويجية" @@ -1197,7 +1161,7 @@ msgstr "العروض الترويجية" msgid "vendor" msgstr "البائع" -#: core/graphene/object_types.py:656 core/models.py:547 +#: core/graphene/object_types.py:656 core/models.py:535 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1205,11 +1169,11 @@ msgstr "البائع" msgid "product" msgstr "المنتج" -#: core/graphene/object_types.py:667 core/models.py:868 +#: core/graphene/object_types.py:667 core/models.py:807 msgid "wishlisted products" msgstr "المنتجات المفضلة" -#: core/graphene/object_types.py:673 core/models.py:885 +#: core/graphene/object_types.py:673 core/models.py:824 msgid "wishlists" msgstr "قوائم التمنيات" @@ -1217,7 +1181,7 @@ msgstr "قوائم التمنيات" msgid "tagged products" msgstr "المنتجات الموسومة" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:492 +#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 msgid "product tags" msgstr "علامات المنتج" @@ -1328,7 +1292,7 @@ msgstr "مجموعة السمات الرئيسية" msgid "attribute group's name" msgstr "اسم مجموعة السمات" -#: core/models.py:100 core/models.py:628 +#: core/models.py:100 core/models.py:620 msgid "attribute group" msgstr "مجموعة السمات" @@ -1485,51 +1449,64 @@ msgstr "وصف الفئة" msgid "tags that help describe or group this category" msgstr "العلامات التي تساعد في وصف هذه الفئة أو تجميعها" -#: core/models.py:299 core/models.py:387 +#: core/models.py:299 core/models.py:375 msgid "priority" msgstr "الأولوية" -#: core/models.py:340 +#: core/models.py:318 +msgid "" +"Represents a Brand object in the system. This class handles information and " +"attributes related to a brand, including its name, logos, description, " +"associated categories, a unique slug, and priority order. It allows for the " +"organization and representation of brand-related data within the " +"application." +msgstr "" +"يمثل كائن العلامة التجارية في النظام. تتعامل هذه الفئة مع المعلومات والسمات " +"المتعلقة بالعلامة التجارية، بما في ذلك اسمها وشعاراتها ووصفها والفئات " +"المرتبطة بها وسبيكة فريدة وترتيب الأولوية. يسمح بتنظيم وتمثيل البيانات " +"المتعلقة بالعلامة التجارية داخل التطبيق." + +#: core/models.py:328 msgid "name of this brand" msgstr "اسم هذه العلامة التجارية" -#: core/models.py:341 +#: core/models.py:329 msgid "brand name" msgstr "اسم العلامة التجارية" -#: core/models.py:348 +#: core/models.py:336 msgid "upload a logo representing this brand" msgstr "تحميل شعار يمثل هذه العلامة التجارية" -#: core/models.py:350 +#: core/models.py:338 msgid "brand small image" msgstr "صورة العلامة التجارية الصغيرة" -#: core/models.py:356 +#: core/models.py:344 msgid "upload a big logo representing this brand" msgstr "رفع شعار كبير يمثل هذه العلامة التجارية" -#: core/models.py:358 +#: core/models.py:346 msgid "brand big image" msgstr "صورة كبيرة للعلامة التجارية" -#: core/models.py:363 +#: core/models.py:351 msgid "add a detailed description of the brand" msgstr "إضافة وصف تفصيلي للعلامة التجارية" -#: core/models.py:364 +#: core/models.py:352 msgid "brand description" msgstr "وصف العلامة التجارية" -#: core/models.py:369 +#: core/models.py:357 msgid "optional categories that this brand is associated with" msgstr "الفئات الاختيارية التي ترتبط بها هذه العلامة التجارية" -#: core/models.py:370 +#: core/models.py:358 msgid "associated categories" msgstr "الفئات" -#: core/models.py:400 +#: core/models.py:388 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1544,68 +1521,68 @@ msgstr "" "والأصول الرقمية. وهي جزء من نظام إدارة المخزون للسماح بتتبع وتقييم المنتجات " "المتاحة من مختلف البائعين." -#: core/models.py:412 +#: core/models.py:400 msgid "the vendor supplying this product stock" msgstr "البائع الذي يورد هذا المنتج المخزون" -#: core/models.py:413 +#: core/models.py:401 msgid "associated vendor" msgstr "البائع المرتبط" -#: core/models.py:417 +#: core/models.py:405 msgid "final price to the customer after markups" msgstr "السعر النهائي للعميل بعد هوامش الربح" -#: core/models.py:418 +#: core/models.py:406 msgid "selling price" msgstr "سعر البيع" -#: core/models.py:423 +#: core/models.py:411 msgid "the product associated with this stock entry" msgstr "المنتج المرتبط بإدخال المخزون هذا" -#: core/models.py:424 core/models.py:708 core/models.py:765 -#: core/models.py:1709 +#: core/models.py:412 core/models.py:683 core/models.py:730 +#: core/models.py:1583 msgid "associated product" msgstr "المنتج المرتبط" -#: core/models.py:431 +#: core/models.py:419 msgid "the price paid to the vendor for this product" msgstr "السعر المدفوع للبائع مقابل هذا المنتج" -#: core/models.py:432 +#: core/models.py:420 msgid "vendor purchase price" msgstr "سعر الشراء من البائع" -#: core/models.py:436 +#: core/models.py:424 msgid "available quantity of the product in stock" msgstr "الكمية المتوفرة من المنتج في المخزون" -#: core/models.py:437 +#: core/models.py:425 msgid "quantity in stock" msgstr "الكمية في المخزون" -#: core/models.py:441 +#: core/models.py:429 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU المعين من قبل البائع لتحديد المنتج" -#: core/models.py:442 +#: core/models.py:430 msgid "vendor sku" msgstr "وحدة تخزين البائع" -#: core/models.py:448 +#: core/models.py:436 msgid "digital file associated with this stock if applicable" msgstr "الملف الرقمي المرتبط بهذا المخزون إن أمكن" -#: core/models.py:449 +#: core/models.py:437 msgid "digital file" msgstr "ملف رقمي" -#: core/models.py:458 +#: core/models.py:446 msgid "stock entries" msgstr "إدخالات المخزون" -#: core/models.py:463 +#: core/models.py:451 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1625,55 +1602,55 @@ msgstr "" "للخصائص التي يتم الوصول إليها بشكل متكرر لتحسين الأداء. يتم استخدامه لتعريف " "ومعالجة بيانات المنتج والمعلومات المرتبطة به داخل التطبيق." -#: core/models.py:476 +#: core/models.py:464 msgid "category this product belongs to" msgstr "الفئة التي ينتمي إليها هذا المنتج" -#: core/models.py:485 +#: core/models.py:473 msgid "optionally associate this product with a brand" msgstr "ربط هذا المنتج اختياريًا بعلامة تجارية" -#: core/models.py:491 +#: core/models.py:479 msgid "tags that help describe or group this product" msgstr "العلامات التي تساعد في وصف أو تجميع هذا المنتج" -#: core/models.py:496 +#: core/models.py:484 msgid "indicates whether this product is digitally delivered" msgstr "يشير إلى ما إذا كان هذا المنتج يتم تسليمه رقميًا أم لا" -#: core/models.py:497 +#: core/models.py:485 msgid "is product digital" msgstr "هل المنتج رقمي" -#: core/models.py:503 +#: core/models.py:491 msgid "provide a clear identifying name for the product" msgstr "توفير اسم تعريفي واضح للمنتج" -#: core/models.py:504 +#: core/models.py:492 msgid "product name" msgstr "اسم المنتج" -#: core/models.py:509 core/models.py:831 +#: core/models.py:497 core/models.py:772 msgid "add a detailed description of the product" msgstr "إضافة وصف تفصيلي للمنتج" -#: core/models.py:510 +#: core/models.py:498 msgid "product description" msgstr "وصف المنتج" -#: core/models.py:517 +#: core/models.py:505 msgid "part number for this product" msgstr "رقم الجزء لهذا المنتج" -#: core/models.py:518 +#: core/models.py:506 msgid "part number" msgstr "رقم الجزء" -#: core/models.py:537 +#: core/models.py:525 msgid "stock keeping unit for this product" msgstr "وحدة حفظ المخزون لهذا المنتج" -#: core/models.py:607 +#: core/models.py:599 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 " @@ -1688,289 +1665,384 @@ msgstr "" "من القيم، بما في ذلك السلسلة، والعدد الصحيح، والعائم، والمنطقي، والصفيف، " "والكائن. وهذا يسمح بهيكلة ديناميكية ومرنة للبيانات." -#: core/models.py:619 +#: core/models.py:611 msgid "category of this attribute" msgstr "فئة هذه السمة" -#: core/models.py:627 +#: core/models.py:619 msgid "group of this attribute" msgstr "مجموعة هذه السمة" -#: core/models.py:633 +#: core/models.py:625 msgid "string" msgstr "الخيط" -#: core/models.py:634 +#: core/models.py:626 msgid "integer" msgstr "عدد صحيح" -#: core/models.py:635 +#: core/models.py:627 msgid "float" msgstr "تعويم" -#: core/models.py:636 +#: core/models.py:628 msgid "boolean" msgstr "منطقية" -#: core/models.py:637 +#: core/models.py:629 msgid "array" msgstr "المصفوفة" -#: core/models.py:638 +#: core/models.py:630 msgid "object" msgstr "الكائن" -#: core/models.py:640 +#: core/models.py:632 msgid "type of the attribute's value" msgstr "نوع قيمة السمة" -#: core/models.py:641 +#: core/models.py:633 msgid "value type" msgstr "نوع القيمة" -#: core/models.py:646 +#: core/models.py:638 msgid "name of this attribute" msgstr "اسم هذه السمة" -#: core/models.py:647 +#: core/models.py:639 msgid "attribute's name" msgstr "اسم السمة" -#: core/models.py:653 +#: core/models.py:645 msgid "is filterable" msgstr "قابل للتصفية" -#: core/models.py:654 +#: core/models.py:646 msgid "designates whether this attribute can be used for filtering or not" msgstr "يحدد ما إذا كان يمكن استخدام هذه السمة للتصفية أم لا" -#: core/models.py:665 core/models.py:700 +#: core/models.py:657 core/models.py:675 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "السمة" -#: core/models.py:699 +#: core/models.py:663 +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:674 msgid "attribute of this value" msgstr "سمة هذه القيمة" -#: core/models.py:707 +#: core/models.py:682 msgid "the specific product associated with this attribute's value" msgstr "المنتج المحدد المرتبط بقيمة هذه السمة" -#: core/models.py:713 +#: core/models.py:688 msgid "the specific value for this attribute" msgstr "القيمة المحددة لهذه السمة" -#: core/models.py:747 +#: core/models.py:701 +msgid "" +"Represents a product image associated with a product in the system. This " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " +"determining their display order. It also includes an accessibility feature " +"with alternative text for the images." +msgstr "" +"يمثل صورة منتج مرتبطة بمنتج في النظام. صُممت هذه الفئة لإدارة الصور الخاصة " +"بالمنتجات، بما في ذلك وظيفة تحميل ملفات الصور، وربطها بمنتجات معينة، وتحديد " +"ترتيب عرضها. وتتضمن أيضًا ميزة إمكانية الوصول مع نص بديل للصور." + +#: core/models.py:712 msgid "provide alternative text for the image for accessibility" msgstr "توفير نص بديل للصورة لإمكانية الوصول" -#: core/models.py:748 +#: core/models.py:713 msgid "image alt text" msgstr "النص البديل للصورة" -#: core/models.py:751 +#: core/models.py:716 msgid "upload the image file for this product" msgstr "تحميل ملف الصورة لهذا المنتج" -#: core/models.py:752 core/models.py:777 +#: core/models.py:717 core/models.py:742 msgid "product image" msgstr "صورة المنتج" -#: core/models.py:758 +#: core/models.py:723 msgid "determines the order in which images are displayed" msgstr "يحدد الترتيب الذي يتم عرض الصور به" -#: core/models.py:759 +#: core/models.py:724 msgid "display priority" msgstr "أولوية العرض" -#: core/models.py:764 +#: core/models.py:729 msgid "the product that this image represents" msgstr "المنتج الذي تمثله هذه الصورة" -#: core/models.py:778 +#: core/models.py:743 msgid "product images" msgstr "صور المنتج" -#: core/models.py:819 +#: core/models.py:748 +msgid "" +"Represents a promotional campaign for products with a discount. This class " +"is used to define and manage promotional campaigns that offer a percentage-" +"based discount for products. The class includes attributes for setting the " +"discount rate, providing details about the promotion, and linking it to the " +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." +msgstr "" +"يمثل حملة ترويجية للمنتجات ذات الخصم. تُستخدم هذه الفئة لتعريف وإدارة " +"الحملات الترويجية التي تقدم خصمًا على أساس النسبة المئوية للمنتجات. تتضمن " +"الفئة سمات لتعيين معدل الخصم وتوفير تفاصيل حول العرض الترويجي وربطه " +"بالمنتجات القابلة للتطبيق. تتكامل مع كتالوج المنتجات لتحديد العناصر المتأثرة" +" في الحملة." + +#: core/models.py:760 msgid "percentage discount for the selected products" msgstr "النسبة المئوية للخصم على المنتجات المختارة" -#: core/models.py:820 +#: core/models.py:761 msgid "discount percentage" msgstr "نسبة الخصم" -#: core/models.py:825 +#: core/models.py:766 msgid "provide a unique name for this promotion" msgstr "تقديم اسم فريد لهذا العرض الترويجي" -#: core/models.py:826 +#: core/models.py:767 msgid "promotion name" msgstr "اسم الترقية" -#: core/models.py:832 +#: core/models.py:773 msgid "promotion description" msgstr "وصف الترقية" -#: core/models.py:837 +#: core/models.py:778 msgid "select which products are included in this promotion" msgstr "حدد المنتجات المشمولة في هذا العرض الترويجي" -#: core/models.py:838 +#: core/models.py:779 msgid "included products" msgstr "المنتجات المشمولة" -#: core/models.py:842 +#: core/models.py:783 msgid "promotion" msgstr "الترقية" -#: core/models.py:867 +#: core/models.py:794 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"class provides functionality to manage a collection of products, supporting " +"operations such as adding and removing products, as well as supporting " +"operations for adding and removing multiple products at once." +msgstr "" +"يمثل قائمة أمنيات المستخدم لتخزين وإدارة المنتجات المطلوبة. توفر الفئة وظائف" +" لإدارة مجموعة من المنتجات، وتدعم عمليات مثل إضافة المنتجات وإزالتها، " +"بالإضافة إلى دعم عمليات إضافة وإزالة منتجات متعددة في وقت واحد." + +#: core/models.py:806 msgid "products that the user has marked as wanted" msgstr "المنتجات التي حددها المستخدم على أنها مطلوبة" -#: core/models.py:875 +#: core/models.py:814 msgid "user who owns this wishlist" msgstr "المستخدم الذي يمتلك قائمة الرغبات هذه" -#: core/models.py:876 +#: core/models.py:815 msgid "wishlist owner" msgstr "مالك قائمة الرغبات" -#: core/models.py:884 +#: core/models.py:823 msgid "wishlist" msgstr "قائمة الرغبات" -#: core/models.py:951 +#: core/models.py:865 +msgid "" +"Represents a documentary record tied to a product. This class is used to " +"store information about documentaries related to specific products, " +"including file uploads and their metadata. It contains methods and " +"properties to handle the file type and storage path for the documentary " +"files. It extends functionality from specific mixins and provides additional" +" custom features." +msgstr "" +"يمثل سجل وثائقي مرتبط بمنتج ما. تُستخدم هذه الفئة لتخزين معلومات حول الأفلام" +" الوثائقية المرتبطة بمنتجات محددة، بما في ذلك تحميلات الملفات وبياناتها " +"الوصفية. يحتوي على أساليب وخصائص للتعامل مع نوع الملف ومسار التخزين للملفات " +"الوثائقية. وهو يوسع الوظائف من مزيج معين ويوفر ميزات مخصصة إضافية." + +#: core/models.py:878 msgid "documentary" msgstr "فيلم وثائقي" -#: core/models.py:952 +#: core/models.py:879 msgid "documentaries" msgstr "الأفلام الوثائقية" -#: core/models.py:962 +#: core/models.py:889 msgid "unresolved" msgstr "لم يتم حلها" -#: core/models.py:1008 +#: core/models.py:894 +msgid "" +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." +msgstr "" +"يمثل كيان عنوان يتضمن تفاصيل الموقع والارتباطات مع المستخدم. يوفر وظائف " +"لتخزين البيانات الجغرافية وبيانات العنوان، بالإضافة إلى التكامل مع خدمات " +"الترميز الجغرافي. صُممت هذه الفئة لتخزين معلومات العنوان التفصيلية بما في " +"ذلك مكونات مثل الشارع والمدينة والمنطقة والبلد والموقع الجغرافي (خطوط الطول " +"والعرض). وهو يدعم التكامل مع واجهات برمجة التطبيقات للترميز الجغرافي، مما " +"يتيح تخزين استجابات واجهة برمجة التطبيقات الخام لمزيد من المعالجة أو الفحص. " +"تسمح الفئة أيضًا بربط عنوان مع مستخدم، مما يسهل التعامل مع البيانات الشخصية." + +#: core/models.py:909 msgid "address line for the customer" msgstr "سطر العنوان للعميل" -#: core/models.py:1009 +#: core/models.py:910 msgid "address line" msgstr "سطر العنوان" -#: core/models.py:1011 +#: core/models.py:912 msgid "street" msgstr "الشارع" -#: core/models.py:1012 +#: core/models.py:913 msgid "district" msgstr "المنطقة" -#: core/models.py:1013 +#: core/models.py:914 msgid "city" msgstr "المدينة" -#: core/models.py:1014 +#: core/models.py:915 msgid "region" msgstr "المنطقة" -#: core/models.py:1015 +#: core/models.py:916 msgid "postal code" msgstr "الرمز البريدي" -#: core/models.py:1016 +#: core/models.py:917 msgid "country" msgstr "البلد" -#: core/models.py:1023 +#: core/models.py:924 msgid "geolocation point: (longitude, latitude)" msgstr "نقطة تحديد الموقع الجغرافي(خط الطول، خط العرض)" -#: core/models.py:1026 +#: core/models.py:927 msgid "full JSON response from geocoder for this address" msgstr "استجابة JSON كاملة من أداة التشفير الجغرافي لهذا العنوان" -#: core/models.py:1031 +#: core/models.py:932 msgid "stored JSON response from the geocoding service" msgstr "استجابة JSON مخزّنة من خدمة الترميز الجغرافي" -#: core/models.py:1039 +#: core/models.py:940 msgid "address" msgstr "العنوان" -#: core/models.py:1040 +#: core/models.py:941 msgid "addresses" msgstr "العناوين" -#: core/models.py:1085 +#: core/models.py:953 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" +"يمثل الرمز الترويجي الذي يمكن استخدامه للحصول على خصومات وإدارة صلاحيته ونوع" +" الخصم والتطبيق. تقوم فئة PromoCode بتخزين تفاصيل حول الرمز الترويجي، بما في" +" ذلك معرفه الفريد، وخصائص الخصم (المبلغ أو النسبة المئوية)، وفترة الصلاحية، " +"والمستخدم المرتبط به (إن وجد)، وحالة استخدامه. ويتضمن وظيفة للتحقق من صحة " +"الرمز الترويجي وتطبيقه على الطلب مع ضمان استيفاء القيود." + +#: core/models.py:967 msgid "unique code used by a user to redeem a discount" msgstr "الرمز الفريد الذي يستخدمه المستخدم لاسترداد قيمة الخصم" -#: core/models.py:1086 +#: core/models.py:968 msgid "promo code identifier" msgstr "معرّف الرمز الترويجي" -#: core/models.py:1093 +#: core/models.py:975 msgid "fixed discount amount applied if percent is not used" msgstr "مبلغ الخصم الثابت المطبق في حالة عدم استخدام النسبة المئوية" -#: core/models.py:1094 +#: core/models.py:976 msgid "fixed discount amount" msgstr "مبلغ الخصم الثابت" -#: core/models.py:1100 +#: core/models.py:982 msgid "percentage discount applied if fixed amount is not used" msgstr "النسبة المئوية للخصم المطبق في حالة عدم استخدام مبلغ ثابت" -#: core/models.py:1101 +#: core/models.py:983 msgid "percentage discount" msgstr "النسبة المئوية للخصم" -#: core/models.py:1106 +#: core/models.py:988 msgid "timestamp when the promocode expires" msgstr "الطابع الزمني عند انتهاء صلاحية الرمز الترويجي" -#: core/models.py:1107 +#: core/models.py:989 msgid "end validity time" msgstr "وقت انتهاء الصلاحية" -#: core/models.py:1112 +#: core/models.py:994 msgid "timestamp from which this promocode is valid" msgstr "الطابع الزمني الذي يكون هذا الرمز الترويجي صالحاً منه" -#: core/models.py:1113 +#: core/models.py:995 msgid "start validity time" msgstr "وقت بدء الصلاحية" -#: core/models.py:1118 +#: core/models.py:1000 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "الطابع الزمني عند استخدام الرمز الترويجي، فارغ إذا لم يتم استخدامه بعد" -#: core/models.py:1119 +#: core/models.py:1001 msgid "usage timestamp" msgstr "الطابع الزمني للاستخدام" -#: core/models.py:1124 +#: core/models.py:1006 msgid "user assigned to this promocode if applicable" msgstr "المستخدم المعين لهذا الرمز الترويجي إن أمكن" -#: core/models.py:1125 +#: core/models.py:1007 msgid "assigned user" msgstr "المستخدم المعين" -#: core/models.py:1132 +#: core/models.py:1014 msgid "promo code" msgstr "الرمز الترويجي" -#: core/models.py:1133 +#: core/models.py:1015 msgid "promo codes" msgstr "الرموز الترويجية" -#: core/models.py:1140 +#: core/models.py:1022 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -1978,16 +2050,16 @@ msgstr "" "يجب تحديد نوع واحد فقط من الخصم (المبلغ أو النسبة المئوية)، وليس كلا النوعين" " أو لا هذا ولا ذاك." -#: core/models.py:1155 +#: core/models.py:1037 msgid "promocode already used" msgstr "تم استخدام الرمز الترويجي بالفعل" -#: core/models.py:1171 +#: core/models.py:1053 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "نوع الخصم غير صالح للرمز الترويجي {self.uuid}" -#: core/models.py:1180 +#: core/models.py:1062 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 " @@ -2002,134 +2074,134 @@ msgstr "" "مرتبطة، ويمكن تطبيق العروض الترويجية، وتعيين العناوين، وتحديث تفاصيل الشحن " "أو الفوترة. وبالمثل، تدعم الوظيفة إدارة المنتجات في دورة حياة الطلب." -#: core/models.py:1197 +#: core/models.py:1079 msgid "the billing address used for this order" msgstr "عنوان إرسال الفواتير المستخدم لهذا الطلب" -#: core/models.py:1205 +#: core/models.py:1087 msgid "optional promo code applied to this order" msgstr "الرمز الترويجي الاختياري المطبق على هذا الطلب" -#: core/models.py:1206 +#: core/models.py:1088 msgid "applied promo code" msgstr "الرمز الترويجي المطبق" -#: core/models.py:1214 +#: core/models.py:1096 msgid "the shipping address used for this order" msgstr "عنوان الشحن المستخدم لهذا الطلب" -#: core/models.py:1215 +#: core/models.py:1097 msgid "shipping address" msgstr "عنوان الشحن" -#: core/models.py:1221 +#: core/models.py:1103 msgid "current status of the order in its lifecycle" msgstr "الحالة الحالية للطلب في دورة حياته" -#: core/models.py:1222 +#: core/models.py:1104 msgid "order status" msgstr "حالة الطلب" -#: core/models.py:1227 core/models.py:1686 +#: core/models.py:1109 core/models.py:1560 msgid "json structure of notifications to display to users" msgstr "" "بنية JSON للإشعارات التي سيتم عرضها للمستخدمين، في واجهة مستخدم المشرف، يتم " "استخدام عرض الجدول" -#: core/models.py:1233 +#: core/models.py:1115 msgid "json representation of order attributes for this order" msgstr "تمثيل JSON لسمات الطلب لهذا الطلب" -#: core/models.py:1239 +#: core/models.py:1121 msgid "the user who placed the order" msgstr "المستخدم الذي قدم الطلب" -#: core/models.py:1240 +#: core/models.py:1122 msgid "user" msgstr "المستخدم" -#: core/models.py:1246 +#: core/models.py:1128 msgid "the timestamp when the order was finalized" msgstr "الطابع الزمني عند الانتهاء من الطلب" -#: core/models.py:1247 +#: core/models.py:1129 msgid "buy time" msgstr "وقت الشراء" -#: core/models.py:1254 +#: core/models.py:1136 msgid "a human-readable identifier for the order" msgstr "معرّف يمكن قراءته بواسطة البشر للطلب" -#: core/models.py:1255 +#: core/models.py:1137 msgid "human readable id" msgstr "معرّف يمكن قراءته من قبل البشر" -#: core/models.py:1261 +#: core/models.py:1143 msgid "order" msgstr "الطلب" -#: core/models.py:1282 +#: core/models.py:1168 msgid "a user must have only one pending order at a time" msgstr "يجب أن يكون لدى المستخدم طلب واحد فقط معلق في كل مرة!" -#: core/models.py:1316 +#: core/models.py:1202 msgid "you cannot add products to an order that is not a pending one" msgstr "لا يمكنك إضافة منتجات إلى طلب غير معلق إلى طلب غير معلق" -#: core/models.py:1321 +#: core/models.py:1207 msgid "you cannot add inactive products to order" msgstr "لا يمكنك إضافة منتجات غير نشطة للطلب" -#: core/models.py:1338 +#: core/models.py:1224 msgid "you cannot add more products than available in stock" msgstr "لا يمكنك إضافة منتجات أكثر من المتوفرة في المخزون" -#: core/models.py:1360 core/models.py:1385 core/models.py:1393 +#: core/models.py:1246 core/models.py:1271 core/models.py:1279 msgid "you cannot remove products from an order that is not a pending one" msgstr "لا يمكنك إزالة المنتجات من طلب غير معلق من طلب غير معلق" -#: core/models.py:1381 +#: core/models.py:1267 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} غير موجود مع الاستعلام <{query}>!" -#: core/models.py:1413 +#: core/models.py:1299 msgid "promocode does not exist" msgstr "الرمز الترويجي غير موجود" -#: core/models.py:1419 +#: core/models.py:1305 msgid "you can only buy physical products with shipping address specified" msgstr "يمكنك فقط شراء المنتجات المادية مع تحديد عنوان الشحن فقط!" -#: core/models.py:1438 +#: core/models.py:1324 msgid "address does not exist" msgstr "العنوان غير موجود" -#: core/models.py:1459 core/models.py:1528 +#: core/models.py:1345 core/models.py:1414 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "لا يمكنك الشراء في هذه اللحظة، يرجى المحاولة مرة أخرى بعد بضع دقائق." -#: core/models.py:1462 core/models.py:1524 +#: core/models.py:1348 core/models.py:1410 msgid "invalid force value" msgstr "قيمة القوة غير صالحة" -#: core/models.py:1468 core/models.py:1531 +#: core/models.py:1354 core/models.py:1417 msgid "you cannot purchase an empty order!" msgstr "لا يمكنك شراء طلبية فارغة!" -#: core/models.py:1487 +#: core/models.py:1373 msgid "you cannot buy an order without a user" msgstr "لا يمكنك شراء طلب بدون مستخدم!" -#: core/models.py:1501 +#: core/models.py:1387 msgid "a user without a balance cannot buy with balance" msgstr "المستخدم بدون رصيد لا يمكنه الشراء بالرصيد!" -#: core/models.py:1506 +#: core/models.py:1392 msgid "insufficient funds to complete the order" msgstr "عدم كفاية الأموال لإكمال الطلب" -#: core/models.py:1540 +#: core/models.py:1426 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2137,148 +2209,195 @@ msgstr "" "لا يمكنك الشراء بدون تسجيل، يرجى تقديم المعلومات التالية: اسم العميل، البريد" " الإلكتروني للعميل، رقم هاتف العميل" -#: core/models.py:1549 +#: core/models.py:1435 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "طريقة الدفع غير صالحة: {payment_method} من {available_payment_methods}!" -#: core/models.py:1674 +#: core/models.py:1533 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" +"يمثل المنتجات المرتبطة بالطلبات وسماتها. يحتفظ نموذج OrderProduct بمعلومات " +"حول المنتج الذي هو جزء من الطلب، بما في ذلك تفاصيل مثل سعر الشراء والكمية " +"وسمات المنتج وحالته. يدير الإشعارات للمستخدم والمسؤولين ويتعامل مع عمليات " +"مثل إرجاع رصيد المنتج أو إضافة ملاحظات. يوفر هذا النموذج أيضًا أساليب وخصائص" +" تدعم منطق العمل، مثل حساب السعر الإجمالي أو إنشاء عنوان URL للتنزيل " +"للمنتجات الرقمية. يتكامل النموذج مع نموذجي الطلب والمنتج ويخزن مرجعًا لهما." + +#: core/models.py:1548 msgid "the price paid by the customer for this product at purchase time" msgstr "السعر الذي دفعه العميل لهذا المنتج وقت الشراء" -#: core/models.py:1675 +#: core/models.py:1549 msgid "purchase price at order time" msgstr "سعر الشراء وقت الطلب" -#: core/models.py:1680 +#: core/models.py:1554 msgid "internal comments for admins about this ordered product" msgstr "تعليقات داخلية للمسؤولين حول هذا المنتج المطلوب" -#: core/models.py:1681 +#: core/models.py:1555 msgid "internal comments" msgstr "التعليقات الداخلية" -#: core/models.py:1687 +#: core/models.py:1561 msgid "user notifications" msgstr "إشعارات المستخدم" -#: core/models.py:1692 +#: core/models.py:1566 msgid "json representation of this item's attributes" msgstr "تمثيل JSON لسمات هذا العنصر" -#: core/models.py:1693 +#: core/models.py:1567 msgid "ordered product attributes" msgstr "سمات المنتج المطلوبة" -#: core/models.py:1698 +#: core/models.py:1572 msgid "reference to the parent order that contains this product" msgstr "الإشارة إلى الطلب الأصلي الذي يحتوي على هذا المنتج" -#: core/models.py:1699 +#: core/models.py:1573 msgid "parent order" msgstr "ترتيب الوالدين" -#: core/models.py:1708 +#: core/models.py:1582 msgid "the specific product associated with this order line" msgstr "المنتج المحدد المرتبط بخط الطلب هذا" -#: core/models.py:1715 +#: core/models.py:1589 msgid "quantity of this specific product in the order" msgstr "كمية هذا المنتج المحدد في الطلب" -#: core/models.py:1716 +#: core/models.py:1590 msgid "product quantity" msgstr "كمية المنتج" -#: core/models.py:1723 +#: core/models.py:1597 msgid "current status of this product in the order" msgstr "الحالة الحالية لهذا المنتج بالترتيب" -#: core/models.py:1724 +#: core/models.py:1598 msgid "product line status" msgstr "حالة خط الإنتاج" -#: core/models.py:1784 +#: core/models.py:1661 msgid "order product must have an order" msgstr "يجب أن يكون لـ Orderproduct طلب مرتبط به!" -#: core/models.py:1786 +#: core/models.py:1663 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "تم تحديد إجراء خاطئ للتغذية الراجعة: {action}!" -#: core/models.py:1800 +#: core/models.py:1677 msgid "you cannot feedback an order which is not received" msgstr "لا يمكنك التعليق على طلب لم يتم استلامه" -#: core/models.py:1806 +#: core/models.py:1683 msgid "name" msgstr "الاسم" -#: core/models.py:1807 +#: core/models.py:1684 msgid "URL of the integration" msgstr "رابط التكامل" -#: core/models.py:1808 +#: core/models.py:1685 msgid "authentication credentials" msgstr "بيانات اعتماد المصادقة" -#: core/models.py:1822 +#: core/models.py:1699 msgid "you can only have one default CRM provider" msgstr "يمكن أن يكون لديك موفر CRM افتراضي واحد فقط" -#: core/models.py:1826 +#: core/models.py:1703 msgid "CRM" msgstr "إدارة علاقات العملاء" -#: core/models.py:1827 +#: core/models.py:1704 msgid "CRMs" msgstr "إدارة علاقات العملاء" -#: core/models.py:1839 +#: core/models.py:1716 msgid "order CRM link" msgstr "رابط إدارة علاقات العملاء الخاصة بالطلب" -#: core/models.py:1840 +#: core/models.py:1717 msgid "orders CRM links" msgstr "روابط إدارة علاقات العملاء الخاصة بالطلبات" -#: core/models.py:1874 +#: core/models.py:1722 +msgid "" +"Represents the downloading functionality for digital assets associated with " +"orders. The DigitalAssetDownload class provides the ability to manage and " +"access downloads related to order products. It maintains information about " +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." +msgstr "" +"يمثل وظيفة التنزيل للأصول الرقمية المرتبطة بالطلبات. توفر فئة " +"DigitalAssetDownload القدرة على إدارة التنزيلات المتعلقة بمنتجات الطلبات " +"والوصول إليها. وتحتفظ بمعلومات حول منتج الطلب المرتبط، وعدد التنزيلات، وما " +"إذا كان الأصل مرئيًا للعامة. وتتضمن طريقة لإنشاء عنوان URL لتنزيل الأصل " +"عندما يكون الطلب المرتبط في حالة مكتملة." + +#: core/models.py:1736 msgid "download" msgstr "تنزيل" -#: core/models.py:1875 +#: core/models.py:1737 msgid "downloads" msgstr "التنزيلات" -#: core/models.py:1883 +#: core/models.py:1745 msgid "you can not download a digital asset for a non-finished order" msgstr "لا يمكنك تنزيل أصل رقمي لطلب غير مكتمل" -#: core/models.py:1913 +#: core/models.py:1754 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." +msgstr "" +"يدير ملاحظات المستخدمين للمنتجات. تم تصميم هذه الفئة لالتقاط وتخزين تعليقات " +"المستخدمين لمنتجات محددة قاموا بشرائها. وهو يحتوي على سمات لتخزين تعليقات " +"المستخدم، ومرجع إلى المنتج ذي الصلة في الطلب، وتقييم معين من قبل المستخدم. " +"يستخدم الفصل حقول قاعدة البيانات لنمذجة وإدارة بيانات الملاحظات بشكل فعال." + +#: core/models.py:1766 msgid "user-provided comments about their experience with the product" msgstr "التعليقات المقدمة من المستخدمين حول تجربتهم مع المنتج" -#: core/models.py:1914 +#: core/models.py:1767 msgid "feedback comments" msgstr "تعليقات على الملاحظات" -#: core/models.py:1921 +#: core/models.py:1774 msgid "" "references the specific product in an order that this feedback is about" msgstr "الإشارة إلى المنتج المحدد في الطلب الذي تدور حوله هذه الملاحظات" -#: core/models.py:1922 +#: core/models.py:1775 msgid "related order product" msgstr "منتجات الطلبات ذات الصلة" -#: core/models.py:1927 +#: core/models.py:1780 msgid "user-assigned rating for the product" msgstr "التصنيف المعين من قبل المستخدم للمنتج" -#: core/models.py:1928 +#: core/models.py:1781 msgid "product rating" msgstr "تصنيف المنتج" @@ -2489,17 +2608,17 @@ msgstr "قيمة المهلة غير صالحة، يجب أن تكون بين 0 msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | بادر بالاتصال بنا" -#: core/utils/emailing.py:64 +#: core/utils/emailing.py:74 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | تأكيد الطلب" -#: core/utils/emailing.py:99 +#: core/utils/emailing.py:109 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | طلبية تم تسليمها" -#: core/utils/emailing.py:187 +#: core/utils/emailing.py:197 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | الرمز الترويجي الممنوح" @@ -2521,15 +2640,15 @@ msgstr "يجب ألا تتجاوز أبعاد الصورة w{max_width} x h{max_ msgid "invalid phone number format" msgstr "تنسيق رقم الهاتف غير صالح" -#: core/views.py:481 +#: core/views.py:489 msgid "you can only download the digital asset once" msgstr "يمكنك تنزيل الأصل الرقمي مرة واحدة فقط" -#: core/views.py:539 +#: core/views.py:547 msgid "favicon not found" msgstr "الرمز المفضل غير موجود" -#: core/viewsets.py:1319 +#: core/viewsets.py:1357 #, python-brace-format msgid "Geocoding error: {e}" msgstr "خطأ في الترميز الجغرافي: {e}" diff --git a/core/locale/cs_CZ/LC_MESSAGES/django.mo b/core/locale/cs_CZ/LC_MESSAGES/django.mo index 514b7cc194c460fd8f0da06403b048a96372444f..5606a786b678184ba14fc2207fc91993149887de 100644 GIT binary patch delta 20670 zcmaKy2bfev_P6hVWXVAklnbb&VH71O20&3kB`Cox-sx_brqkGAV8+$Pgcv|^SOXx6 z8C?W-Ty+hsI*d82c}=X@UDq|c=H37MtE%qlLB8)kPxV`;Zruv!oH|wa&a8aB^(EKr zl;754r{8;A!&`Y?e;DuXc^{B}Xpl-hZ%T#d^@3Ajdw4qR2p7P4(tfC+S+rpoqDwgeQJKPx#MD7iTz;SRlI1m1b zf!4tTk@wx-H0UjaW003P-s|`o)I2}iEs@(4Qhfv!k*9@=XpERzt@XQFE|iN#baSP z4NrilFvIu(p7$o@PmcGz9OXA1geKswhj`x6aMGc40xz3Dp86k6^t@}4ha8UD;iHp1 z?-`!2IT8~iA9j@IeFNuBLH|>EVAj!|_j?MiJJ$0y!2PFtUNz!l7^j)Qn$p<*z$=8w^wa0qg^(%(eCA%|-uGU6=x?ItfR@S~v{e z2KR<9!cp)Ch`GJtCs<9L0_787I2c|A_1tDy4&QY5+ns33_kk$UI|<5%R-K6ccPF!n z0`WOl@n3KZa_^I@X^w%rAfEwImbVzTgN?8cd zbv4vLHo&g10cyaFup7+3Nk%jKm#fhFG<&0`*)vcxeF>_8ccE0?dY<)# zZcsDb6?TGyp$4{(yMHoNyCEn|Bu#mqbxuah?;v1lM?rOTAe3pQLbW#!s+|Pvl_yh2Mh{*N_24RKG~sv`)BqoWvi+-2 zw)+{%6gvkt1pAKTp*o%oHIXn>yNh5s%tQIwA7Eb2@HbcR1v~(`U!@JHv!MpE!tn;E zj{oT7MyLV23U`J7bZi~61K1r7qI@LOKxRUjCkfgWthh;K=#5{>xA{e;ba5U&A(V$O5b3k?5Z@*d<80$z6~{_HdS_DL!dgE4z*mDLaB5elyBS(efT((vwi|KfmTt^n+AKq8dwPv z@C~Q|<&Rouy?z=zl7drV2Y3@~3pYYFbPtqC9*0BWFHi&CD`xMHgc{%kI07z$`@ox^ zO!zXK3O|AU;HWrf0ImONWYpnhP&T~^YGyaXvG6`P5`GT%hy59TYd8~XAhTg-cs5kS zmpb`2xCio|piJ-zRJ$FLcF*W(S3aVe`&$2_$#j8-Ks9tM)UrGdYQ$AgDm)AJg_pz5 z@OD>zFO;dCh86HdC~x=9WTyjzp)`3m90u=!s<#d18$N)Rq4SPDZZCSq)`!=>IqhuA)F4 z{sZ=c-$H4o18YV$>`%>^7^x@u%?eaPb%0$&r4Q_y11rI`^srMEf4ky-HQ^lYrv<#~LN+@T$ z366y?!NXyPI@2!epNy8pQYfc+9%_WILXG%eP#t~;<<-5 zrGW*GSHdBx568ogpq8CaU#fRB+z-n4Mv=VR`8fc->2CB~V&x;DI?6lV4W-Ht;6bp* zx%U2aC=D)wli-t1?s%Tv?T&Y>hlgp1C)2a1P8%)p}e{E z1?&&77nJjy3AGxQK&_TlP|vM~gW>H^CVdv}17C)R!PXbr@*^)q|Ee&J0@-LbRD<)N zI?O;h(*;n@v>YmMTo2{#o1irEIMjOo4n7SBFZDde?0pVpiu6TR6RV->y#*DJIxIuw zdy^Tv%zFE2P^w)DrJ2XzUhsP;+wFd_-4mujH9Q|qfGgk__&ij@J6+;=d%{uhU^o|c zg!QluTnDvmZ_bmEb8UuF+0(Ee{2VHfbiCAdxC@jD$G{FS0_8I)*b&|i`@#k|6+R1x z!9JJS2~32;k>^8AcqNo3^Y@e4iOiEws(B9ffImYGq|0(Uli^Sg&VYx)8mO8432Fcj z!nW{nsDV5OJHd~kmh;z8_1dqn6X^-t(Z6>%8CH~c46J}p!GZ7xI2rDCx%Gj0unTe( zlv6H(@|D$48o3LOg!e<4@MEaeFz5>F^_!qbU z=4GQH*VyH@KU7DP;aE5g%DXRsn#oq!hMvBH3y{BGV@)xS-U8(FpfvX(JP;1L&N|+Qh5g!>_v z-C#8~8or2pkdr&Fw;lI_ohcs*W!kap^VTa*qhNd)&IOmWqLUkG2zk$2I8ee7w{i-C z_ub}sC&OQFw_ij~yn_=m^|#&Wc{fmg*rC)57{+p+f$rxoOLx8T|E@JH+nw>@fY`~{STzJcRltH-Qr$2(4d#)Pnv z`_o`AxEaa>O|UC`8g_^IH_7Zz<})|~`i*uO9t#geJ`2j04?s2iEtL2E3ip9Sw%X@T zfGR&94ul)wAov123V!Y6@lCe;G+3eazl6+TRM-S3siLbe`f*$F1b77Hb+9db1Zw0@ zz;5sj=)+H8Ti6M`p9p)v888O*{DW{hEPK*EHxrK1`VYt`1lPM88=+LT1+s#?m*Ku} z;Zs(HYhWMb8(;@`ACwb6>dIe-?T|l*8t8vuU)cU>D-VRKzd!6o|K3!0<76n?#9@2* zJE#XQgc{&Fh|0YC;ZXPqRK)A{j9s3G!o84VP|Iv3)Ie^5L*PayzX~+q`Dqf;+*}kRxz^*a+Kc{eMqJq4a-nFF5XXyUb35vym@@yTJFL zI`|QGhn@dsZ8-pHMiZd!p9DiN0Z)K0Iu3iou8MP^p1%anpnq>I89n%!tDuklJ&-%V zF|a?J0FQ^A;gzsAya65s?}ds7|AiHB$Xj;6bKz9vB-H);;S~5D)an@iHu~2{#**m+ zr@({ZJg8;17A}QPKrNT)@7Mv&fokAVC>vi5HLwR^fA|zU2!0GTu|eCchQ~T4p-g$} zHuOJ=%681tq1`dE{!1i#7lP`v|kT*b; z|LWNGJ!^ul@8#{x22vmm425cNf|F;%a^x7)dcFqA7jA;m$b;}e_!t}qe}RkP==W{; zMz}xnCr}gY_kq>i(XcP_+&md|oPtu-QrHcyhSJQPPy=`e%2XXcwDx5IGR#h7Aq4oa+nL!kM40nPZ{$Xv^1-3)p1$Kc0 zpfpecwK^t3&2$!2z*z{T!8*qkQ1x$gyvOlz*q-vg!QHg}-y@?2e}NiE*MC|s-w&$c zDyW7Q!@=+psQP!oe(+H!)xP88Z`}Q^pW4Vc2&$cOC=(qF)!r0XLI2*#WKe~7F_h|V zhZEsjPy_1!FKdzsuo8J5)MoM+)cr4EN7(Z-JCHr#Sme?02pEHN;oWcoZ2xa7Pl5Ti z6kJb64c!VQKLs_@zdC*kM&v9BNrT1?6PFI(f|3R&!CP`*%QT zbQ|0ocK^om0C*hoyl>FIRB|^38sS%P3Y_?@_1cS}n7P~QFn zJQVi&*}m(|f(^(k;W_Y#Uu?%)p-lNb91h3-Y6Drs@k%&S>;Erg#!=zla1`9@zg9IT z!2OZWa`Glvf&4O@23!5l4qzrc5P1dE^H0JV@FytE9PO1Er#=;SMh?LN@Jwjl|5uXP zgMx>kRPz?>1wVol;ZIPeIjF46IL*;e4XuTJ;T{*2vb;GcoZ7z3*z_8xjy{GfVD}DX=8sZ0Ky~~H zoCG^}EHe>s2Aqw2Hk5{5g7W&#oyv@_OoTX@mx5~dI;c4CB-{;t(J5bsb@6chaP4E^ z9pz-Hbtd^QT=@jY{*L#;q1+!>kjeka?!gJ)mAx$Lh*$UfHrYj52fPW$BpHQ~ILrJ>+>FWFu&U1N{e@y-g($6Jj#r_ji zkaPTwn^Q>mnm33JKh~367m)r+noW6o$_K!q@Jx6Wgq{*g=-J)|A91*g5|F8O60d?pbQ23A^1EHg8IIrYn|h}-WyHE@IDZH{l1Jn$}Mm%H+_C|^PT9=MKl zwX1h5)K+{A_qxKp==4AEAISQjA6-jG-O0a4GWNfYf`D`x1vMnj6W%Ux7al&F{NChs zEhY6M-<@(@H<({G6Uz2*Wohz1k@iMzaQBHbX8AhN9AYk|?0>``Q}zMEbtJ9Don1pG zAl^y3hE%V6TnZwaU49Dra`FpEyOUz7;I3(|j>IQOapc`-SFzz}@)6zOdRqNIT~c{3 z^1VnYZhi*;M0%BUHK}lYUXt%jes>za+}*qt`5c#j&+#jaJ^0%LOO-AgWxT2G}JdjUEjfDNHfWgBV9uNXx-o%L+Xm$o1}1G zdgY0z#p_0w_u*X9@!a{`-7P~tk^E@LmTs=U^E=<=t0D+boC&qaL@Ga6Fl)nHMlm1}qpnt9!D|mOov7{SG zUr_06(h;P>^?e~z!cVyW8uAL#ucQ&kcaqL?&-G&fx&|Td3IFcOH^BdL{_xH-w>hUd zc5n}zgnS{D{tX9H)`s*P@-fK6$ajPnAU{evk#rNO6-ifT(#xa;q&}{_pUC&;{&=YC zG}0{1zlS7uT@Nd$^n;T-@o+zvA5MN3@{_rrBPB==kq)xikX|Dn zh4Wq69dID&N76%-U#9)%3Nn8twRM$_g?*6sfkQ~Yk}gFa26ZiiXOLQ3(bEdjbuJtP zSCMWa?S?!UdT8x=@|{SJBAyS|l71o0ko}J&^9DDbfCuUUt~V{r?baH$0V@dx+ zt|L88Itlq(lCI<67Sc=PhtP51+D4|{3FBPdq-5ED2?a;OPf0hEe(x$g10O(c15bzV zlYS-@u4i55R9AmEyqK~(3Kihaq^=C)9anY{b$XE6QP!8T{9*hYNWpAZVJi6vBwZs( z_mRFOy+YX=q@BpGgcp+@CO?XFCg~;QUNov}E$MHh$0^hGm}5El+ep1#z58@(uXZ=v zapMTm{UqIQODbMNBa4Gjc9=gioeJkdS%1!)sgoP#?2~GnPX-Gj89$ear2YAkNVqZx z#r*lHv|nv&W-9#IRnd$eiU*mDPbM76L>D9@VLzMlLqT;mmyY;BGVEuvDRRGUCsQ2> zMdwFD#RmOsRgmQ;QtMX*HTj5NolA$Rf=nb_;ZM!_p;R&(M3Wgm$Y#^g%3PMw(N#(F zp;RIfNoF(Ue&DAg^CRg1e)MO)>3ECKZYry@dE(kV;1*Mt!+t^vqnu&%|>J zta7T;QEp~yeWNgAkRTpUEy@_5kb+a`1wk@e*F4B{q&gkRU=UlBns0|Uk`ebZT}mJR zqG-0t+M@oML;E#+Hg;U=J;SL`PL>SPwb(60mwq;CJu4^}u>QF5ee>4%Ewoda%4PlL z2AEIL^zxSNovu__^P_PbwK|>(u&V6Cw4!N05y=L|bS=D)(yDyQRm7>PBWcEHyun({ zxR+@%TU*_{6yy=rLAI)>x8||d;!#-JC^xb=8%fgo{9F>pN+pB1ls`Y6N;J<=$JlW>PWtng!8%ZakNmm&wg`=73 zc+k>6GbuL`>4lXO3Pt*`x+|krnN}~RpZY~r1IjWD2Oo4t>rwQSNEK8VB&q|#L5s*| zM;55dP%4+q$`$JuPUtavM^EAr3Tr7ML|ST&q(k!T1(A`8Ae`(2^{U$FAXcG#OLHC{fl1#h|)69t{PR_&s&C z0a)*gCJ6>=KV#;aHyyhg1ovz}G*KG`GZ1CzE-+D$IYo(M3R=d4}Mb%j9t%6UuWL9LK~5yTY(f%LRr_jAk&Md0uL$Em$wX z#%wgrR*|%U++S3spchGIa%riSO*WHFv(2(^1Z>+xIqa4%HC!=-(h*yPjs#j;g&oP- zkys&b+b(9Ck*i#bBH|AzJ~Twm#Qtk{ogt>>A!tB548zLf6ImAgZ}*sRExQ|Mh~Mrt zMQ^PN(wuP6b|xDQWw!G|seFi>JW~~?f|-pxL%NXutdHjZ%*VBBjz0xoqRa;0 z-x$LM$pFR1<2oX+fn&=;BjtW3S6!WA=b#7qj@c?Rl!l1On1Eo;oxFyUjwI*>srg}Q zEQ-YAs=4EKjB#umEt*K=;@N0*$*RYGeu~r5cIv5N55m3;|337KvV1tqCX&Hdvf7Hw zaxHpcJVjK{v8rr|D#q=-D#RTx!6MgykTaFFM)Ak(k{ zv}%eoFT^VKZuT--z|Ey8`l^YBw4?sNkE$jPxM5@7LVu-a3OmcZTI7gXol2qt`FD&1 zQZ^llWXt`K2}SA10!D$PrJp7?X$B0ZsGXtlRB}NynfjlL~s zls8kFG;=EZYa~g`)_AmxoKoah>0psh4SXfTFm+g!O6TX&)H5e{l#$VMlyY+5Fw`6% zZCDKAY?|(5SF|4w1j$2+x^X84nX=rUAB41>G81ay!5MQ_sY8|KcxTQ++-i7c;R?x6o$joQ~U=mlS)%PAE*7H-b`Q+1;=CJY)Sd!bGK|h#r|(Kqfsn~Bu(6slW_1} zl+^jzpL6`NZUe{PP4&X@Vm2zVV=VZ&J7pMU89N(4Xkl!tEwfhH4S)N3muL~Vr1io` zH0+jPS#}9W?XYn1h_<@s_n;DYltLr^WLtHTYEIVl@|vGrEky;Z$H1K{*~$uGUjd9m zCrT|0r^VZd@%n;k?aAx^=hUW?OeSA=Woz*`2O-9g%q1$dPjVb`meA`Q!&p>>3vkD^ z5#gwz`+Wm1G?aj`}Owyk-qhMOsL%}hOF4d7e_m$|>4wMc# z5^5_&TZl3H~^sH!%Us%c!G zY}`oyxmdh$eb`F2`Nj>V`PyRhdDDKxkEN2abmN9B4<<@_EB9j@D0nIprS(`US4{}4 z@MlzJf+`IV77btBG>pU)Z=Y#BgaL zoQq}s8uPIroNQcQ!{QHo?2=6JCZQ@#*G8MJ4eAg!G&gF#Bsg`{)Y4buMl@hQUNo++ zlREtB6i0xV&!>_YA1^e?oL!oGH){(^(C5}QdeT{=pstFB2QELqte-j7(|cA^*C!2z zTbB&BE|1mLC)Vzkufvu`{p!+%YBPtTn#`PwQ|8NxeLR)pyo?pINxEMsjZ~$4G*DN= z4Wd-Q+fS-Gnn98d!f9rS5*{XQ#qbe*&1l?Mp65}v&dAo~=!XXMO(TZ}t5YZ~jQ+w+ zo8l4tDx2bjSmDn}q?)!gEi;pGpEN>I>YF2`rpbn9l+j|;^jR`)%!Sqxdak;D-0J=f z$F0n^&d+SRHWJ3?jbn#XG5d`}rN884Yi(M7Q-L$E~KR#90v>xx4 zHHhLdltufclL%GS&$znxF5w{Fw4Q$K7|5u0DALflYEIeSsY+&47byk|MpB(xC|B_b zf_8;P62@6eBL_#Tg7e!JVkp8@Z`xF%GSe4*au2)hNPQU=hQ<&>(@v3vWm{NkoF-$b z{0`#{`cgP6)GT_gYpIU5&GO$^VwG$VW1X6j70jV%kjdt%Sxz!Z5GRNw+1R!6Sr}Qq zId#dINfZX#(BZ1XcRGM+RR;@L(0VGS*ZHPpCH`3}&(FjoHK|-nSFQi+>OLn&&EhF4 zva~I;PHBy1ixHKBZR5r|t#u7VpGtC#>*MNJJ>*Ket?zzi&wMe4Slw%NS#Q#KY80Z` zH&A+YDif>CCUaReoC>E?m2xBmPP;KPL=#}tsdWuHR8&D@@mv!-$HR%{)xx3A9MN+N z`AV(HE8ggvNF<>K6tLwVL1nF9SsUj#fRCHtj1l?xLfEB1u3)wi#VZ;qC^p;paIA5C zh1VilXjsiAXl&rafq6Fnuph501_YYM1Enb1E^eU+;6+ znQScZlaWf(hm4=%J4iT%9t-1-wv6?0MfBoE8u5o#6ZFDIXd4J1-B^CTF(d7|Vs7heN=^Xw&+vT~~aEbSsSA zUc2(f?TlG+s<8WbmWXJN45-HX1Os+Ksx(AZ`1x75r=sB?_rxIX7nRL9X^=S?WK+38 zdJk>d;^&(8vv{Q11j)judgJ%*6AGu8mRnq@iLkhwI#=Pf+{7{wvuSCautYYNT0)*! zdeXuWCYYizMiqopHLQENzH3|2zTks)u@+)JX9YE8AJ6BAlJN+kz4<|{?l50b^niJh z(kt6S&Sg@f?89Nt?Pu6793jFGi;bB}7OQU~rfa}-xr1j1H9uU#39V!lIEK6;m1{U; z^{`fXoR@cd-qCm$FRb+Sc#bPIw4>`Eb*})y}XCKTLeA#+cNoR5@ojlnHjIMC#W?K{9?4r#igRnh>Hh)tw zOJ)OyaCe@T2kR(iKdcu{;5IHa#MdTT*RQ;~SDx+J?r7|VC6P;}FCOX&yJ&?!jr9@t z&0F|PEe`%XS+WllEG@@%>$YXYO66=AXJjr&=GWI~rz^Tc^H!o=zpzSUoJx3xkk6q$ zkt9N7vaB!m(2`dv6M`7DB6@{CtMH1Ls>3^Yui|+bx_RBGYPF7C_LZrqH|=P@i4!%{ zv+q-NO`GT;tJv( z6o(P$U9;em=IqnlC1)VszzR#}H(y@#;iW{+c!_x%&`BrHY0pHtI-^4!bDNf#qSBGH zcx7YC&cH1u%^P4i-LyqIDRuW2j~0)4xx(0;o6BZIefo4pV8h}2Nuu1Zv!5l*>~p;5 zML20Jlos{ZJ3eS|J}f!C8y~V~@f{f3*jm2c+|Qw=VHQs;T+61<;LYacUWv8w6pk#s cr(tbbOK*s&r1?zJ@cQ+Slr=0{-{I*01BgvWGXMYp delta 12689 zcma*tcYKdm|Httw5+VqRy?w<@0`5_=Q1YL!TW$U-87yS~)yur*p#YmZuOD6N{Y zT2$?t)vD3zO;NqI+PYuw?>Xu1cmIBW{I192ljr%IbB(jEE2>_9+h^VdZ}+vrK5sc3 zA-NocSEBgejPt{9W|MmFRMDh zfwaZqI0*eP9o3OZSOVX`+&te|NkJE^N1b@UdK}f$^QZ?r!6o=7YGm)!H&gsR79ih- z>d=1FNY7(`2J{VHB5%T|g1zWeW5;<3n>S(pTX4dnrjGN7ii^!1=Pf)DNoO#orQ=LP z|JG(?3)+~aSdAgva6PJHr%@fcVDoDjOMU~3WBaz|yg{e|#-e5-xh?Y_Mj?ZWP+W^u z@f5NO&J$$WoNDdNi29>8Q!G}(H&NGZ#Ts}CgVDFWsjr0$*6E8{;)Pfaw^&cKXa04A zyHqf%PO%PV3Ok|JXfSrfap;TLs1Y4QP5F1I8{S7h^ylP0SOU9Z3P#`_WD=dfurRjj z#Ky(mZVGx$Ud4i#i8^65PQaa51;aa=x1k^UlMlvXn2b7qDr)mBLUm+47Q!r4hqEyN zFQEo@*S5R8yO@R|*2hq`YJ z7Q$p(KN0no%)o+r|CdtG6n=nu;2zY-kE0%V+t&YrF7jMarUR8wyT1l%q;;?mHbN~; z2h{xrq3)A}dhmGEb#u^H@BcyyTDzsz&8QRiq1OH!2H;cFQWWTJKA|paW7LCtq6QL+ z>d;uMfo`mh8&P}VYn$IkcS9=5ylB37Ju#4cw)K6~gFmu)HmU>XP~Z9=tlm9L2g;$A zDhvx_6l#fLP)m`7d{UfoSQmHoVE#2V_o&e8_Y{j@ou1~wZ7?r+Z}dzhYORy7B4*h3 zC0K`i73zWK(X(eTlH9wO>0oQr0DGdoGedhZ|JrP`Y{Np-1J~Gm3+jgZF%*ws1AL6D zF|4;a{|pu*zk=cT5VhNb`50)1!;r77GZfX)6{saT>!uJw;RuuD?a`knbE?5-PaR?^iMO25{^)ug@F388#aSx!N5w1kd#3s~@ zwqZRyjOySYs2*48Z`#999gIM2uCZ7PSE82i40gcVSO)71;1>>dK|SwHWJ%plCIyXb z71qZc7>4)o1uQ$z{L+a+b)+Y9q4Nsr#&6hsEtV(Wj#`4VsQdc8YMdd6e4@XVm1T2YjP$OQ4s{a_ZR9|3CJcZirPBg#ipb}~(U%^n^hC1&W zY7h7iF&!v^ZapxFf<7SiP!DQ@F6@E&fTW>%yd3qqZpE^=8#VGvs17|weJ}n%UFRQT z2G$sL|L)ijqfwi9ag2Tcw@{IviqB9tK8jk~o2X6b6>BzM18W3oCfcDkVSm(~S%6ym z{kHyBY)xJ>&dg9Mb|=q7J?~B&^RJ%#LPc)$8*0|55NfxVL_NrbnwfCaOtiH1-BB|V zhZ^~4+dc*Lfcdt4nQi|7wMRa~Qh3O18@@rk=Rae0%sb57I2`rqY=Qc~bVl8H2x`wH zqxQ%&)Mi|UI)5wbHQR-{?hvZumu>rxs7>yEOuTvUVwL`7ZNYoA2V+GuW%%*c0 zt6^lkS*irgOFk2I{yfxXTZ!6)r?D0KjWGA^g6+tsV;;T#Us6yH&!HdQMLqB_24S%T zV?(S$-rwevQB$}IwdQ+Jd*>16!+=E2#WL6f$D;PaG3=oBByCdGzaIq`6*EwKVIAtm zyRkZ6z&hxiY^;aX$cI_yW3bN0#&{D$(UoG(>xgy9$Dr=B4mHDxWpA{026`!lO)kSJV_v!WMYc=J`gO-*zur7hp5m&)U3js+p-CSc&?X=+=~Oq~MRI zQB!^$1JFB-{~pAmSP(~H5uAj2TNa|OTa3ElI%G|q<5&yNU`zBKW9r*lyP%e+=NRT+ zHylKT9+-;SOj9usXJH|H54GF3pl0MShT&uU0xP9E&J?_dT8hzQ%}gvtop%{)px-$2 z+qFK1kPjTk{A+5bQxT2_P&4u`)Ebw|FuxPpqi#GDBXBm>!!J=c_8IRum9Y*s#onk9 zEe%qc&af zf0zM8q6RP&tKvM=OzuP0(3iXw(&ThPmeTEfPN5s@{#|a0AA;y;uth+7vaW zn+LVUAo3BYshx$|lxt8I9!D+Jk60S>%rLvXB5EK*Q0Kjmd2kPEMh~Hu=1bIlzel$( zg+D2HWA2$oKU_-gkDBTYs6Da`b>R`*i`P+W{{Cy`_1%bh$#_Bzkt zK_hS&`N&z!zef7?EYBZaoTsP}44iHLgJcP6>U(o&4(nf+!g(q*Rep2%;}iy<^6yX&`~m&(Pppdh=b7DI7boSS z)0l^)+_Qi`J>j8+=5J2&XYwa%+UG4|i7{d^e}zMPU#9m4K6by$j;3(&J=3GKO~nKB!Jzf#mrXEgvouF-vi7$AW%MN7z#ZH*d1I{Kj-)uGpH{w`{y zYf<;xVe7v@&B$5QeQ$1L{xyZqsL%}pHOlih=MBUBIKk#KtV^&0 z^;=NaokZQ|JZedPHNSp|gi=v?vzfB4))>?$bR3q&Ok1C2J&O6Lzl!>P+`%v` zv&D3v11gV4y=IFr63?TSpu|?wk(zD_>RCI~$OhVc6qYBSf$GQ_TYnI>RF`c27ZxBd z`k}c`MQlml0M)Vas3q8h>c~DUh|f^Za~J%`Oi>VO(}bWJnxVeo-BD9N6FcI3EQD84 z9r-6lVPKYdO^2Y?b_!}{-$j2sf*R;KR0r-F-Olf}!f%^-4NIbW+5zdLGZQt{jklYQ zwZXdNeNk)sCicboI1qor7qH{UW|vPyeMzUI-kv>J6TiovdjE^;F#qW_9E;E}2?KE< zYBQ}tjp(p#zm75FzhEDHX{T{3>aEE8iMc)yyOCEy-8U80J_8HmT&&0Qos|?K@FHre zN_}dkDj3_5H$#07rlESi8B5?*?0}DLd&Dk2Qsl!?Z^wtIf$YZOcoLi9Ev$x>K4bl- zQ|L-Tugf{ChgVQHD7@ROad}k7T4Gs@!X}u68rgbmfV-`au{L?w9`n6;8P)N*Hs6cd zq!0Em|2i>zuel%&>yu}qKE)@nD4xa&cpEi^zWYobfIY}-qw1$xXQ4)(i5l2C)C_Dv z-S03ezr4?FKCKU_&?c*}-%M>a)P*gv5q3b0a0-sYUA8{_fZ1%xs1dF}&D<%}hvq8k zLBFDA%0JtD0V`r1^15ycH7LZQdOXjbuoCt9Y(q`?HPnrtqHgGW&^)j_mLuf+Q&A@il>v04%(o3ih&I8mGdL1#uBp-r7Jl|PKL2Ggthu|#?!w$zxkH=y@ z^2Ml*tj7Ad3)|pB?2QeNoA1aRRDKfkVAT`mK4GXl3N_F^=vH9@h3fd8Z8&DVZ!Pkr z`8%8j7^?G8BVLXA0&d5y=zr35XaFi-fwk}fR>O*4nfJak>g|~G74xsnw2q3#cp3G& z6+dNOt0>fKH`V5!VI=v_Hm`HqOlcferT%T}UhGbO3nQ@M8PlP0*q;0dw!?t4%)csL zI%|H5Ek|AO5M!|JIrBFlnW&|Cgi+Z0ym77d2@asX!v*vA2y0L?dl{?XGc1TzzBa!l z!%=xJH-*U*Vr|7OEJgkpb7P^4W-}GT%H+Z5i=DA9_Qd`;19kol^ur%8KR!ZF2T*TA zl}l#nBC!OyJBmVa3d2#m-Hpw02{yw^n1v-ToB!>89QEK%SIk;YM6K<9tbspSOISIkB`e7G*4V&QwY=p(WF*oRj-N+|nAf7_)>Ko{f zKVk)Zg6dew>*n=qg_@ZmSQHa6Qt$s{3R;T;s7-SUb)!n(nq684W63+BMz95S<8QGx z7WmHO%}_Hq9QB~77>Tn{ukA_H`8QEBRs068G0%5eQD}_gQER&$wRXEPFMf{Y@H7^} zpHU-lzBixhVi-;uggUv|4d_zbn#T{q2r;?Z4_iVO-G(R{3eyDkFW{eKrLy7JLWk_IGg}WNZ$#tg>eZe=6eh+~ z-^sjZcZr+yQzeHstd2l#m~)h+eFHI& ziZ^WKTynl$&M2ZbZ&LmUmlAK;lR9Ec zB9pdKSc!-Jg15*Y*lQ<}7ozNqI+hTFh}Wr0BY3HtVpxo8-4jSEllbCPq7>yqH0W4n za0XLX*4B-r{Di1X{-JHpMc%@e#bDw!>T-^6DeG^&{-PqEy-zR7>$U!w6z18JOVYTR z@;#z0_0{k*q6`sFo^x~}&p8fJ7-4gLMcY%3v5iOZ=yT^*qFk6rqW(wB@?!qaP|&}6 z$~k^|uAHB889Ft~Hm)N7hb@0&?N42Ed(Cj_PEyWgN7==m^8&t2c-eYYzrcB)=dAxZ zD)hipJ!`?()8h*ERS25O>OWU67b3Bf7^tru@Yp@_~+4j8uW)BsMh`GcH&M(2apHNOG z3glw_>r?q2v6hMe`;Z9oR^+v?91bPM6Z?pG>S|#ihGSD4LtG(rlqa@O-eL1|Sb_U~ zgh_;-=Pdpl;Ayw>-<_l!CzbG2nm_BsP~OkUALCA<5@jFa4a$Y=P58azOeGJs`5wyC ziGPtFz+Z@b#3>?Ysqa%hN&5h7r^;wzA&HJ*R+Yci4~|jP^&sjHMNF0F_k3PDtUp>k zf3)D7;zSfNmWCs?@mF#kKVuM4n(_zeUc--Ml0~Sa5solL=Q`#2#7vvlv!+@%(pH>K zB;rLPg!&VhPHeE}h%{TS!nsW;zfb&=b0&B(DXl0RB6K`9{EweEX*)~Jo5WKhlzcrg z$zG$sR@dPouZdUj8)7Z-2Qf*F98(A%&h@qD_fehR|GN|_Qt3?`z|aj5HG2c<1qEPiP0wY{H#e{!R8;}C*%bP9l<=$eS;*M*hEEj ze3uwY^U9LMIMG#wEj;i zyhcSZ>Uf4P6aFT3Ua|FVtU=v;VmVQgJPiNB{rl$?O7m=1&z_TL^NHlGDc>Ph5DRSk z=aT0;-V_Glb>h5jr0DrS+p?dn3&9!W>r`ov;^@yhUbgu(&IurLQx`%>7j1hx z%FPHJ^$GWOemo>jQ+a_XNO=yiG$SXC}8mXCB1eZq3-?gpdhsCEwC%V#8 zYq~}b&q$4riB9~xv0HLthKq~i)8kwtN2kP&iAhWSyD`dC*xL=`30>lodLuaa&(d!Y_D66j!uqs znYzUI)aS>c%G4UJnCR5FFzyhSoEop5Iw9t~p5f8MJQx1o=XkmlJ?^;+N`!$*7Ar2-dTz5fAz}R*tw~9R$$LXURhgu&5Z2T$;@edoSlV{ zhu(=xO+L6J)a9Ai?B$8c*_%9bJ2Yc_d`v?2dMD&R=R~E986W40PN3I1%`?LZX&DQu zXO?y|XLic$O;QsQqhnLjv)8+ll2Z=tNli=7-t_#;+S6j\n" "Language-Team: BRITISH ENGLISH \n" @@ -89,11 +89,11 @@ msgid "selected items have been deactivated." msgstr "Vybrané položky byly deaktivovány!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:712 core/models.py:720 +#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 msgid "attribute value" msgstr "Hodnota atributu" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:721 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 msgid "attribute values" msgstr "Hodnoty atributů" @@ -105,7 +105,7 @@ msgstr "Obrázek" msgid "images" msgstr "Obrázky" -#: core/admin.py:155 core/models.py:457 +#: core/admin.py:155 core/models.py:445 msgid "stock" msgstr "Stock" @@ -113,11 +113,11 @@ msgstr "Stock" msgid "stocks" msgstr "Zásoby" -#: core/admin.py:166 core/models.py:1735 +#: core/admin.py:166 core/models.py:1609 msgid "order product" msgstr "Objednat produkt" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1736 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 msgid "order products" msgstr "Objednat produkty" @@ -328,7 +328,7 @@ 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:155 core/docs/drf/viewsets.py:553 +#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:487 #: core/graphene/object_types.py:117 core/graphene/object_types.py:207 #: core/graphene/object_types.py:509 msgid "SEO Meta snapshot" @@ -595,47 +595,7 @@ msgstr "Seznam všech produktů (jednoduché zobrazení)" msgid "(exact) Product UUID" msgstr "(přesně) UUID produktu" -#: core/docs/drf/viewsets.py:384 -msgid "(icontains) Product name" -msgstr "(icontains) Název produktu" - -#: core/docs/drf/viewsets.py:390 -msgid "(list) Category names, case-insensitive" -msgstr "(seznam) Názvy kategorií, nerozlišuje velká a malá písmena" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Category UUID" -msgstr "(přesně) Kategorie UUID" - -#: core/docs/drf/viewsets.py:402 -msgid "(list) Tag names, case-insensitive" -msgstr "(seznam) Názvy značek, nerozlišuje velká a malá písmena" - -#: core/docs/drf/viewsets.py:408 -msgid "(gte) Minimum stock price" -msgstr "(gte) Minimální cena akcií" - -#: core/docs/drf/viewsets.py:414 -msgid "(lte) Maximum stock price" -msgstr "(lte) Maximální cena akcií" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Only active products" -msgstr "(přesně) Pouze aktivní produkty" - -#: core/docs/drf/viewsets.py:426 -msgid "(iexact) Brand name" -msgstr "(iexact) Obchodní značka" - -#: core/docs/drf/viewsets.py:438 -msgid "(gt) Minimum stock quantity" -msgstr "(gt) Minimální skladové množství" - -#: core/docs/drf/viewsets.py:444 -msgid "(exact) Digital vs. physical" -msgstr "(přesně) Digitální vs. fyzické" - -#: core/docs/drf/viewsets.py:451 +#: core/docs/drf/viewsets.py:385 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -643,251 +603,255 @@ 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:465 core/docs/drf/viewsets.py:466 +#: core/docs/drf/viewsets.py:399 core/docs/drf/viewsets.py:400 msgid "retrieve a single product (detailed view)" msgstr "Vyhledání jednoho produktu (podrobné zobrazení)" -#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:495 -#: core/docs/drf/viewsets.py:511 core/docs/drf/viewsets.py:527 -#: core/docs/drf/viewsets.py:543 core/docs/drf/viewsets.py:559 +#: core/docs/drf/viewsets.py:405 core/docs/drf/viewsets.py:429 +#: core/docs/drf/viewsets.py:445 core/docs/drf/viewsets.py:461 +#: core/docs/drf/viewsets.py:477 core/docs/drf/viewsets.py:493 msgid "Product UUID or slug" msgstr "Identifikátor UUID produktu nebo Slug" -#: core/docs/drf/viewsets.py:481 core/docs/drf/viewsets.py:482 +#: core/docs/drf/viewsets.py:415 core/docs/drf/viewsets.py:416 msgid "create a product" msgstr "Vytvoření produktu" -#: core/docs/drf/viewsets.py:489 core/docs/drf/viewsets.py:490 +#: core/docs/drf/viewsets.py:423 core/docs/drf/viewsets.py:424 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:505 core/docs/drf/viewsets.py:506 +#: core/docs/drf/viewsets.py:439 core/docs/drf/viewsets.py:440 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:521 core/docs/drf/viewsets.py:522 +#: core/docs/drf/viewsets.py:455 core/docs/drf/viewsets.py:456 msgid "delete a product" msgstr "Odstranění produktu" -#: core/docs/drf/viewsets.py:537 core/docs/drf/viewsets.py:538 +#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:472 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:554 +#: core/docs/drf/viewsets.py:488 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:572 +#: core/docs/drf/viewsets.py:506 msgid "list all addresses" msgstr "Seznam všech adres" -#: core/docs/drf/viewsets.py:579 +#: core/docs/drf/viewsets.py:513 msgid "retrieve a single address" msgstr "Získání jedné adresy" -#: core/docs/drf/viewsets.py:586 +#: core/docs/drf/viewsets.py:520 msgid "create a new address" msgstr "Vytvoření nové adresy" -#: core/docs/drf/viewsets.py:594 +#: core/docs/drf/viewsets.py:528 msgid "delete an address" msgstr "Odstranění adresy" -#: core/docs/drf/viewsets.py:601 +#: core/docs/drf/viewsets.py:535 msgid "update an entire address" msgstr "Aktualizace celé adresy" -#: core/docs/drf/viewsets.py:609 +#: core/docs/drf/viewsets.py:543 msgid "partially update an address" msgstr "Částečná aktualizace adresy" -#: core/docs/drf/viewsets.py:617 +#: core/docs/drf/viewsets.py:551 msgid "autocomplete address suggestions" msgstr "Automatické dokončování zadávání adresy" -#: core/docs/drf/viewsets.py:622 +#: core/docs/drf/viewsets.py:556 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:628 +#: core/docs/drf/viewsets.py:562 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:641 +#: core/docs/drf/viewsets.py:575 msgid "list all feedbacks (simple view)" msgstr "seznam všech ohlasů (jednoduché zobrazení)" -#: core/docs/drf/viewsets.py:645 +#: core/docs/drf/viewsets.py:579 msgid "retrieve a single feedback (detailed view)" msgstr "načtení jedné zpětné vazby (podrobné zobrazení)." -#: core/docs/drf/viewsets.py:649 +#: core/docs/drf/viewsets.py:583 msgid "create a feedback" msgstr "vytvořit zpětnou vazbu" -#: core/docs/drf/viewsets.py:653 +#: core/docs/drf/viewsets.py:587 msgid "delete a feedback" msgstr "odstranit zpětnou vazbu" -#: core/docs/drf/viewsets.py:657 +#: core/docs/drf/viewsets.py:591 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:661 +#: core/docs/drf/viewsets.py:595 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:668 +#: core/docs/drf/viewsets.py:602 msgid "list all order–product relations (simple view)" msgstr "seznam všech vztahů objednávka-produkt (jednoduché zobrazení)" -#: core/docs/drf/viewsets.py:675 +#: core/docs/drf/viewsets.py:609 msgid "retrieve a single order–product relation (detailed view)" msgstr "načtení jednoho vztahu zakázka-produkt (podrobné zobrazení)" -#: core/docs/drf/viewsets.py:682 +#: core/docs/drf/viewsets.py:616 msgid "create a new order–product relation" msgstr "vytvořit nový vztah objednávka-produkt" -#: core/docs/drf/viewsets.py:689 +#: core/docs/drf/viewsets.py:623 msgid "replace an existing order–product relation" msgstr "nahradit existující vztah objednávka-produkt" -#: core/docs/drf/viewsets.py:696 +#: core/docs/drf/viewsets.py:630 msgid "partially update an existing order–product relation" msgstr "částečně aktualizovat existující vztah objednávka-produkt" -#: core/docs/drf/viewsets.py:703 +#: core/docs/drf/viewsets.py:637 msgid "delete an order–product relation" msgstr "odstranit vztah objednávka-produkt" -#: core/docs/drf/viewsets.py:710 +#: core/docs/drf/viewsets.py:644 msgid "add or remove feedback on an order–product relation" msgstr "přidat nebo odebrat zpětnou vazbu na vztah objednávka-produkt." -#: core/elasticsearch/__init__.py:105 +#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 msgid "no search term provided." msgstr "Nebyl zadán žádný vyhledávací termín." -#: core/filters.py:64 core/filters.py:594 core/filters.py:623 +#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +msgid "Search" +msgstr "Vyhledávání" + +#: core/filters.py:66 core/filters.py:554 core/filters.py:583 msgid "UUID" msgstr "UUID" -#: core/filters.py:65 core/filters.py:429 core/filters.py:560 +#: core/filters.py:67 core/filters.py:399 core/filters.py:526 msgid "Name" msgstr "Název" -#: core/filters.py:66 core/filters.py:562 +#: core/filters.py:68 core/filters.py:528 msgid "Categories" msgstr "Kategorie" -#: core/filters.py:68 +#: core/filters.py:70 msgid "Categories Slugs" msgstr "Kategorie Slimáci" -#: core/filters.py:69 core/filters.py:437 +#: core/filters.py:71 core/filters.py:407 msgid "Tags" msgstr "Štítky" -#: core/filters.py:70 +#: core/filters.py:72 msgid "Min Price" msgstr "Minimální cena" -#: core/filters.py:71 +#: core/filters.py:73 msgid "Max Price" msgstr "Max Price" -#: core/filters.py:72 +#: core/filters.py:74 msgid "Is Active" msgstr "Je aktivní" -#: core/filters.py:73 +#: core/filters.py:75 msgid "Brand" msgstr "Značka" -#: core/filters.py:74 +#: core/filters.py:76 msgid "Attributes" msgstr "Atributy" -#: core/filters.py:75 +#: core/filters.py:77 msgid "Quantity" msgstr "Množství" -#: core/filters.py:76 core/filters.py:431 core/filters.py:561 -#: core/models.py:287 core/models.py:381 core/models.py:534 +#: core/filters.py:78 core/filters.py:401 core/filters.py:527 +#: core/models.py:287 core/models.py:369 core/models.py:522 msgid "Slug" msgstr "Slug" -#: core/filters.py:77 +#: core/filters.py:79 msgid "Is Digital" msgstr "Je digitální" -#: core/filters.py:78 +#: core/filters.py:80 msgid "Include sub-categories" msgstr "Zahrnout podkategorie" -#: core/filters.py:81 +#: core/filters.py:83 msgid "Include personal ordered" msgstr "Zahrnout osobně objednané produkty" -#: core/filters.py:83 core/models.py:538 +#: core/filters.py:85 core/models.py:526 msgid "SKU" msgstr "SKU" -#: core/filters.py:166 +#: core/filters.py:161 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:356 +#: core/filters.py:324 msgid "Search (ID, product name or part number)" msgstr "Vyhledávání (ID, název produktu nebo číslo dílu)" -#: core/filters.py:359 +#: core/filters.py:327 msgid "Bought after (inclusive)" msgstr "Koupeno po (včetně)" -#: core/filters.py:360 +#: core/filters.py:328 msgid "Bought before (inclusive)" msgstr "Koupeno před (včetně)" -#: core/filters.py:363 core/filters.py:410 core/filters.py:625 +#: core/filters.py:331 core/filters.py:378 core/filters.py:585 msgid "User email" msgstr "E-mail uživatele" -#: core/filters.py:364 core/filters.py:411 core/filters.py:603 -#: core/filters.py:624 +#: core/filters.py:332 core/filters.py:379 core/filters.py:563 +#: core/filters.py:584 msgid "User UUID" msgstr "UUID uživatele" -#: core/filters.py:365 +#: core/filters.py:333 msgid "Status" msgstr "Stav" -#: core/filters.py:369 +#: core/filters.py:337 msgid "Human Readable ID" msgstr "Lidsky čitelné ID" -#: core/filters.py:430 +#: core/filters.py:400 msgid "Parent" msgstr "Rodič" -#: core/filters.py:434 +#: core/filters.py:404 msgid "Whole category(has at least 1 product or not)" msgstr "Celá kategorie (má nebo nemá alespoň 1 produkt)" -#: core/filters.py:438 +#: core/filters.py:408 msgid "Level" msgstr "Úroveň" -#: core/filters.py:598 +#: core/filters.py:558 msgid "Product UUID" msgstr "UUID produktu" @@ -942,7 +906,7 @@ 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:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:821 +#: core/graphene/mutations.py:527 core/viewsets.py:839 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Z metody order.buy() pochází nesprávný typ: {type(instance)!s}" @@ -1005,37 +969,37 @@ msgstr "" 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:555 +#: core/graphene/mutations.py:556 msgid "action must be either `add` or `remove`" msgstr "Akce musí být buď `add` nebo `remove`!" -#: core/graphene/mutations.py:558 +#: core/graphene/mutations.py:559 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderproduct {order_product_uuid} nenalezen!" -#: core/graphene/mutations.py:621 +#: core/graphene/mutations.py:622 msgid "original address string provided by the user" msgstr "Původní řetězec adresy zadaný uživatelem" -#: core/graphene/mutations.py:655 core/models.py:896 core/models.py:909 -#: core/models.py:1348 core/models.py:1377 core/models.py:1402 -#: core/viewsets.py:824 +#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 +#: core/models.py:1234 core/models.py:1263 core/models.py:1288 +#: core/viewsets.py:842 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} neexistuje: {uuid}!" -#: core/graphene/mutations.py:668 +#: core/graphene/mutations.py:669 msgid "limit must be between 1 and 10" msgstr "Limit musí být mezi 1 a 10" -#: core/graphene/mutations.py:713 +#: core/graphene/mutations.py:714 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - funguje jako kouzlo" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:666 core/models.py:1234 -#: core/models.py:1809 +#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 +#: core/models.py:1686 msgid "attributes" msgstr "Atributy" @@ -1048,11 +1012,11 @@ msgid "groups of attributes" msgstr "Skupiny atributů" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:620 +#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:612 msgid "categories" msgstr "Kategorie" -#: core/graphene/object_types.py:124 core/models.py:395 +#: core/graphene/object_types.py:124 core/models.py:383 msgid "brands" msgstr "Značky" @@ -1109,7 +1073,7 @@ msgid "represents feedback from a user." msgstr "Představuje zpětnou vazbu od uživatele." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1228 +#: core/models.py:1110 msgid "notifications" msgstr "Oznámení" @@ -1117,7 +1081,7 @@ msgstr "Oznámení" 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:400 core/models.py:1938 +#: core/graphene/object_types.py:400 core/models.py:1791 msgid "feedback" msgstr "Zpětná vazba" @@ -1125,7 +1089,7 @@ msgstr "Zpětná vazba" msgid "a list of order products in this order" msgstr "Seznam objednaných produktů v tomto pořadí" -#: core/graphene/object_types.py:436 core/models.py:1198 +#: core/graphene/object_types.py:436 core/models.py:1080 msgid "billing address" msgstr "Fakturační adresa" @@ -1153,7 +1117,7 @@ msgstr "Jsou všechny produkty v objednávce digitální" msgid "transactions for this order" msgstr "Transakce pro tuto objednávku" -#: core/graphene/object_types.py:465 core/models.py:1262 +#: core/graphene/object_types.py:465 core/models.py:1144 msgid "orders" msgstr "Objednávky" @@ -1165,15 +1129,15 @@ msgstr "Adresa URL obrázku" msgid "product's images" msgstr "Obrázky produktu" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:477 +#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 msgid "category" msgstr "Kategorie" -#: core/graphene/object_types.py:502 core/models.py:1939 +#: core/graphene/object_types.py:502 core/models.py:1792 msgid "feedbacks" msgstr "Zpětná vazba" -#: core/graphene/object_types.py:503 core/models.py:394 core/models.py:486 +#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 msgid "brand" msgstr "Značka" @@ -1205,7 +1169,7 @@ msgstr "Počet zpětných vazeb" msgid "only available for personal orders" msgstr "Produkty jsou k dispozici pouze pro osobní objednávky" -#: core/graphene/object_types.py:534 core/models.py:548 +#: core/graphene/object_types.py:534 core/models.py:536 msgid "products" msgstr "Produkty" @@ -1217,7 +1181,7 @@ msgstr "Propagační kódy" msgid "products on sale" msgstr "Produkty v prodeji" -#: core/graphene/object_types.py:651 core/models.py:843 +#: core/graphene/object_types.py:651 core/models.py:784 msgid "promotions" msgstr "Propagační akce" @@ -1225,7 +1189,7 @@ msgstr "Propagační akce" msgid "vendor" msgstr "Prodejce" -#: core/graphene/object_types.py:656 core/models.py:547 +#: core/graphene/object_types.py:656 core/models.py:535 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1233,11 +1197,11 @@ msgstr "Prodejce" msgid "product" msgstr "Produkt" -#: core/graphene/object_types.py:667 core/models.py:868 +#: core/graphene/object_types.py:667 core/models.py:807 msgid "wishlisted products" msgstr "Produkty uvedené na seznamu přání" -#: core/graphene/object_types.py:673 core/models.py:885 +#: core/graphene/object_types.py:673 core/models.py:824 msgid "wishlists" msgstr "Seznamy přání" @@ -1245,7 +1209,7 @@ msgstr "Seznamy přání" msgid "tagged products" msgstr "Produkty s příznakem" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:492 +#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 msgid "product tags" msgstr "Štítky produktu" @@ -1356,7 +1320,7 @@ msgstr "Nadřazená skupina atributů" msgid "attribute group's name" msgstr "Název skupiny atributů" -#: core/models.py:100 core/models.py:628 +#: core/models.py:100 core/models.py:620 msgid "attribute group" msgstr "Skupina atributů" @@ -1519,51 +1483,64 @@ msgstr "Popis kategorie" msgid "tags that help describe or group this category" msgstr "značky, které pomáhají popsat nebo seskupit tuto kategorii" -#: core/models.py:299 core/models.py:387 +#: core/models.py:299 core/models.py:375 msgid "priority" msgstr "Priorita" -#: core/models.py:340 +#: core/models.py:318 +msgid "" +"Represents a Brand object in the system. This class handles information and " +"attributes related to a brand, including its name, logos, description, " +"associated categories, a unique slug, and priority order. It allows for the " +"organization and representation of brand-related data within the " +"application." +msgstr "" +"Reprezentuje objekt značky v systému. Tato třída zpracovává informace a " +"atributy související se značkou, včetně jejího názvu, loga, popisu, " +"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:328 msgid "name of this brand" msgstr "Název této značky" -#: core/models.py:341 +#: core/models.py:329 msgid "brand name" msgstr "Název značky" -#: core/models.py:348 +#: core/models.py:336 msgid "upload a logo representing this brand" msgstr "Nahrát logo reprezentující tuto značku" -#: core/models.py:350 +#: core/models.py:338 msgid "brand small image" msgstr "Malý obrázek značky" -#: core/models.py:356 +#: core/models.py:344 msgid "upload a big logo representing this brand" msgstr "Nahrát velké logo reprezentující tuto značku" -#: core/models.py:358 +#: core/models.py:346 msgid "brand big image" msgstr "Velká image značky" -#: core/models.py:363 +#: core/models.py:351 msgid "add a detailed description of the brand" msgstr "Přidejte podrobný popis značky" -#: core/models.py:364 +#: core/models.py:352 msgid "brand description" msgstr "Popis značky" -#: core/models.py:369 +#: core/models.py:357 msgid "optional categories that this brand is associated with" msgstr "Volitelné kategorie, se kterými je tato značka spojena" -#: core/models.py:370 +#: core/models.py:358 msgid "associated categories" msgstr "Kategorie" -#: core/models.py:400 +#: core/models.py:388 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1579,68 +1556,68 @@ msgstr "" "zásob, který umožňuje sledovat a vyhodnocovat produkty dostupné od různých " "dodavatelů." -#: core/models.py:412 +#: core/models.py:400 msgid "the vendor supplying this product stock" msgstr "Prodejce dodávající tento výrobek na sklad" -#: core/models.py:413 +#: core/models.py:401 msgid "associated vendor" msgstr "Přidružený prodejce" -#: core/models.py:417 +#: core/models.py:405 msgid "final price to the customer after markups" msgstr "Konečná cena pro zákazníka po přirážkách" -#: core/models.py:418 +#: core/models.py:406 msgid "selling price" msgstr "Prodejní cena" -#: core/models.py:423 +#: core/models.py:411 msgid "the product associated with this stock entry" msgstr "Produkt spojený s touto skladovou položkou" -#: core/models.py:424 core/models.py:708 core/models.py:765 -#: core/models.py:1709 +#: core/models.py:412 core/models.py:683 core/models.py:730 +#: core/models.py:1583 msgid "associated product" msgstr "Související produkt" -#: core/models.py:431 +#: core/models.py:419 msgid "the price paid to the vendor for this product" msgstr "Cena zaplacená prodejci za tento výrobek" -#: core/models.py:432 +#: core/models.py:420 msgid "vendor purchase price" msgstr "Kupní cena prodejce" -#: core/models.py:436 +#: core/models.py:424 msgid "available quantity of the product in stock" msgstr "Dostupné množství produktu na skladě" -#: core/models.py:437 +#: core/models.py:425 msgid "quantity in stock" msgstr "Množství na skladě" -#: core/models.py:441 +#: core/models.py:429 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU přidělený prodejcem pro identifikaci výrobku" -#: core/models.py:442 +#: core/models.py:430 msgid "vendor sku" msgstr "SKU prodejce" -#: core/models.py:448 +#: core/models.py:436 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:449 +#: core/models.py:437 msgid "digital file" msgstr "Digitální soubor" -#: core/models.py:458 +#: core/models.py:446 msgid "stock entries" msgstr "Zápisy do zásob" -#: core/models.py:463 +#: core/models.py:451 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1661,55 +1638,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:476 +#: core/models.py:464 msgid "category this product belongs to" msgstr "Kategorie, do které tento produkt patří" -#: core/models.py:485 +#: core/models.py:473 msgid "optionally associate this product with a brand" msgstr "Volitelně přiřadit tento produkt ke značce" -#: core/models.py:491 +#: core/models.py:479 msgid "tags that help describe or group this product" msgstr "Značky, které pomáhají popsat nebo seskupit tento produkt" -#: core/models.py:496 +#: core/models.py:484 msgid "indicates whether this product is digitally delivered" msgstr "Označuje, zda je tento produkt dodáván digitálně" -#: core/models.py:497 +#: core/models.py:485 msgid "is product digital" msgstr "Je produkt digitální" -#: core/models.py:503 +#: core/models.py:491 msgid "provide a clear identifying name for the product" msgstr "Uveďte jasný identifikační název výrobku" -#: core/models.py:504 +#: core/models.py:492 msgid "product name" msgstr "Název produktu" -#: core/models.py:509 core/models.py:831 +#: core/models.py:497 core/models.py:772 msgid "add a detailed description of the product" msgstr "Přidejte podrobný popis produktu" -#: core/models.py:510 +#: core/models.py:498 msgid "product description" msgstr "Popis produktu" -#: core/models.py:517 +#: core/models.py:505 msgid "part number for this product" msgstr "Číslo dílu pro tento produkt" -#: core/models.py:518 +#: core/models.py:506 msgid "part number" msgstr "Číslo dílu" -#: core/models.py:537 +#: core/models.py:525 msgid "stock keeping unit for this product" msgstr "Skladová jednotka pro tento produkt" -#: core/models.py:607 +#: core/models.py:599 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 " @@ -1725,288 +1702,390 @@ msgstr "" "booleanu, pole a objektu. To umožňuje dynamické a flexibilní strukturování " "dat." -#: core/models.py:619 +#: core/models.py:611 msgid "category of this attribute" msgstr "Kategorie tohoto atributu" -#: core/models.py:627 +#: core/models.py:619 msgid "group of this attribute" msgstr "Skupina tohoto atributu" -#: core/models.py:633 +#: core/models.py:625 msgid "string" msgstr "Řetězec" -#: core/models.py:634 +#: core/models.py:626 msgid "integer" msgstr "Celé číslo" -#: core/models.py:635 +#: core/models.py:627 msgid "float" msgstr "Float" -#: core/models.py:636 +#: core/models.py:628 msgid "boolean" msgstr "Boolean" -#: core/models.py:637 +#: core/models.py:629 msgid "array" msgstr "Pole" -#: core/models.py:638 +#: core/models.py:630 msgid "object" msgstr "Objekt" -#: core/models.py:640 +#: core/models.py:632 msgid "type of the attribute's value" msgstr "Typ hodnoty atributu" -#: core/models.py:641 +#: core/models.py:633 msgid "value type" msgstr "Typ hodnoty" -#: core/models.py:646 +#: core/models.py:638 msgid "name of this attribute" msgstr "Název tohoto atributu" -#: core/models.py:647 +#: core/models.py:639 msgid "attribute's name" msgstr "Název atributu" -#: core/models.py:653 +#: core/models.py:645 msgid "is filterable" msgstr "je filtrovatelný" -#: core/models.py:654 +#: core/models.py:646 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:665 core/models.py:700 +#: core/models.py:657 core/models.py:675 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Atribut" -#: core/models.py:699 +#: core/models.py:663 +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 "" +"Představuje konkrétní hodnotu atributu, který je spojen s produktem. Spojuje" +" \"atribut\" s jedinečnou \"hodnotou\", což umožňuje lepší organizaci a " +"dynamickou reprezentaci vlastností produktu." + +#: core/models.py:674 msgid "attribute of this value" msgstr "Atribut této hodnoty" -#: core/models.py:707 +#: core/models.py:682 msgid "the specific product associated with this attribute's value" msgstr "Konkrétní produkt spojený s hodnotou tohoto atributu" -#: core/models.py:713 +#: core/models.py:688 msgid "the specific value for this attribute" msgstr "Konkrétní hodnota tohoto atributu" -#: core/models.py:747 +#: core/models.py:701 +msgid "" +"Represents a product image associated with a product in the system. This " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " +"determining their display order. It also includes an accessibility feature " +"with alternative text for the images." +msgstr "" +"Představuje obrázek produktu spojený s produktem v systému. Tato třída je " +"určena ke správě obrázků produktů, včetně funkcí pro nahrávání souborů s " +"obrázky, jejich přiřazování ke konkrétním produktům a určování pořadí jejich" +" zobrazení. Obsahuje také funkci pro zpřístupnění alternativního textu pro " +"obrázky." + +#: core/models.py:712 msgid "provide alternative text for the image for accessibility" msgstr "Poskytněte alternativní text k obrázku kvůli přístupnosti." -#: core/models.py:748 +#: core/models.py:713 msgid "image alt text" msgstr "Text alt obrázku" -#: core/models.py:751 +#: core/models.py:716 msgid "upload the image file for this product" msgstr "Nahrát soubor s obrázkem tohoto produktu" -#: core/models.py:752 core/models.py:777 +#: core/models.py:717 core/models.py:742 msgid "product image" msgstr "Obrázek produktu" -#: core/models.py:758 +#: core/models.py:723 msgid "determines the order in which images are displayed" msgstr "Určuje pořadí, v jakém se obrázky zobrazují." -#: core/models.py:759 +#: core/models.py:724 msgid "display priority" msgstr "Priorita zobrazení" -#: core/models.py:764 +#: core/models.py:729 msgid "the product that this image represents" msgstr "Výrobek, který tento obrázek představuje" -#: core/models.py:778 +#: core/models.py:743 msgid "product images" msgstr "Obrázky produktů" -#: core/models.py:819 +#: core/models.py:748 +msgid "" +"Represents a promotional campaign for products with a discount. This class " +"is used to define and manage promotional campaigns that offer a percentage-" +"based discount for products. The class includes attributes for setting the " +"discount rate, providing details about the promotion, and linking it to the " +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." +msgstr "" +"Představuje propagační kampaň na produkty se slevou. Tato třída se používá k" +" definici a správě propagačních kampaní, které nabízejí procentuální slevu " +"na produkty. Třída obsahuje atributy pro nastavení slevové sazby, poskytnutí" +" 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:760 msgid "percentage discount for the selected products" msgstr "Procentuální sleva na vybrané produkty" -#: core/models.py:820 +#: core/models.py:761 msgid "discount percentage" msgstr "Procento slevy" -#: core/models.py:825 +#: core/models.py:766 msgid "provide a unique name for this promotion" msgstr "Uveďte jedinečný název této propagační akce" -#: core/models.py:826 +#: core/models.py:767 msgid "promotion name" msgstr "Název akce" -#: core/models.py:832 +#: core/models.py:773 msgid "promotion description" msgstr "Popis propagace" -#: core/models.py:837 +#: core/models.py:778 msgid "select which products are included in this promotion" msgstr "Vyberte, které produkty jsou zahrnuty do této akce" -#: core/models.py:838 +#: core/models.py:779 msgid "included products" msgstr "Zahrnuté produkty" -#: core/models.py:842 +#: core/models.py:783 msgid "promotion" msgstr "Propagace" -#: core/models.py:867 +#: core/models.py:794 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"class provides functionality to manage a collection of products, supporting " +"operations such as adding and removing products, as well as supporting " +"operations for adding and removing multiple products at once." +msgstr "" +"Představuje seznam přání uživatele pro ukládání a správu požadovaných " +"produktů. Třída poskytuje funkce pro správu kolekce produktů, podporuje " +"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:806 msgid "products that the user has marked as wanted" msgstr "Výrobky, které uživatel označil jako požadované" -#: core/models.py:875 +#: core/models.py:814 msgid "user who owns this wishlist" msgstr "Uživatel, který vlastní tento seznam přání" -#: core/models.py:876 +#: core/models.py:815 msgid "wishlist owner" msgstr "Majitel seznamu přání" -#: core/models.py:884 +#: core/models.py:823 msgid "wishlist" msgstr "Seznam přání" -#: core/models.py:951 +#: core/models.py:865 +msgid "" +"Represents a documentary record tied to a product. This class is used to " +"store information about documentaries related to specific products, " +"including file uploads and their metadata. It contains methods and " +"properties to handle the file type and storage path for the documentary " +"files. It extends functionality from specific mixins and provides additional" +" custom features." +msgstr "" +"Představuje dokumentační záznam vázaný na produkt. Tato třída se používá k " +"ukládání informací o dokumentech souvisejících s konkrétními produkty, " +"včetně nahrávání souborů a jejich metadat. Obsahuje metody a vlastnosti pro " +"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:878 msgid "documentary" msgstr "Dokumentární film" -#: core/models.py:952 +#: core/models.py:879 msgid "documentaries" msgstr "Dokumentární filmy" -#: core/models.py:962 +#: core/models.py:889 msgid "unresolved" msgstr "Nevyřešené" -#: core/models.py:1008 +#: core/models.py:894 +msgid "" +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." +msgstr "" +"Reprezentuje entitu adresy, která obsahuje údaje o umístění a asociace s " +"uživatelem. Poskytuje funkce pro ukládání geografických a adresních dat a " +"integraci se službami geokódování. Tato třída je určena k ukládání " +"podrobných informací o adrese včetně komponent, jako je ulice, město, " +"region, země a geolokace (zeměpisná délka a šířka). Podporuje integraci se " +"službami API pro geokódování a umožňuje ukládání nezpracovaných odpovědí API" +" 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:909 msgid "address line for the customer" msgstr "Adresní řádek pro zákazníka" -#: core/models.py:1009 +#: core/models.py:910 msgid "address line" msgstr "Adresní řádek" -#: core/models.py:1011 +#: core/models.py:912 msgid "street" msgstr "Ulice" -#: core/models.py:1012 +#: core/models.py:913 msgid "district" msgstr "Okres" -#: core/models.py:1013 +#: core/models.py:914 msgid "city" msgstr "Město" -#: core/models.py:1014 +#: core/models.py:915 msgid "region" msgstr "Region" -#: core/models.py:1015 +#: core/models.py:916 msgid "postal code" msgstr "Poštovní směrovací číslo" -#: core/models.py:1016 +#: core/models.py:917 msgid "country" msgstr "Země" -#: core/models.py:1023 +#: core/models.py:924 msgid "geolocation point: (longitude, latitude)" msgstr "Geolokace Bod(Zeměpisná délka, Zeměpisná šířka)" -#: core/models.py:1026 +#: core/models.py:927 msgid "full JSON response from geocoder for this address" msgstr "Úplná odpověď JSON z geokodéru pro tuto adresu" -#: core/models.py:1031 +#: core/models.py:932 msgid "stored JSON response from the geocoding service" msgstr "Uložená odpověď JSON ze služby geokódování" -#: core/models.py:1039 +#: core/models.py:940 msgid "address" msgstr "Adresa" -#: core/models.py:1040 +#: core/models.py:941 msgid "addresses" msgstr "Adresy" -#: core/models.py:1085 +#: core/models.py:953 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" +"Představuje propagační kód, který lze použít pro slevy, spravuje jeho " +"platnost, typ slevy a použití. Třída PromoCode uchovává podrobnosti o " +"propagačním kódu, včetně jeho jedinečného identifikátoru, vlastností slevy " +"(částka nebo procento), doby platnosti, přidruženého uživatele (pokud " +"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:967 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:1086 +#: core/models.py:968 msgid "promo code identifier" msgstr "Identifikátor propagačního kódu" -#: core/models.py:1093 +#: core/models.py:975 msgid "fixed discount amount applied if percent is not used" msgstr "Pevná výše slevy, pokud není použito procento" -#: core/models.py:1094 +#: core/models.py:976 msgid "fixed discount amount" msgstr "Pevná výše slevy" -#: core/models.py:1100 +#: core/models.py:982 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:1101 +#: core/models.py:983 msgid "percentage discount" msgstr "Procentuální sleva" -#: core/models.py:1106 +#: core/models.py:988 msgid "timestamp when the promocode expires" msgstr "Časové razítko ukončení platnosti promokódu" -#: core/models.py:1107 +#: core/models.py:989 msgid "end validity time" msgstr "Doba ukončení platnosti" -#: core/models.py:1112 +#: core/models.py:994 msgid "timestamp from which this promocode is valid" msgstr "Časové razítko, od kterého je tento promokód platný" -#: core/models.py:1113 +#: core/models.py:995 msgid "start validity time" msgstr "Čas zahájení platnosti" -#: core/models.py:1118 +#: core/models.py:1000 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:1119 +#: core/models.py:1001 msgid "usage timestamp" msgstr "Časové razítko použití" -#: core/models.py:1124 +#: core/models.py:1006 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:1125 +#: core/models.py:1007 msgid "assigned user" msgstr "Přiřazený uživatel" -#: core/models.py:1132 +#: core/models.py:1014 msgid "promo code" msgstr "Propagační kód" -#: core/models.py:1133 +#: core/models.py:1015 msgid "promo codes" msgstr "Propagační kódy" -#: core/models.py:1140 +#: core/models.py:1022 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2014,16 +2093,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:1155 +#: core/models.py:1037 msgid "promocode already used" msgstr "Promo kód byl již použit" -#: core/models.py:1171 +#: core/models.py:1053 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Neplatný typ slevy pro promokód {self.uuid}!" -#: core/models.py:1180 +#: core/models.py:1062 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 " @@ -2040,136 +2119,136 @@ msgstr "" "fakturaci. Stejně tak funkce podporuje správu produktů v životním cyklu " "objednávky." -#: core/models.py:1197 +#: core/models.py:1079 msgid "the billing address used for this order" msgstr "Fakturační adresa použitá pro tuto objednávku" -#: core/models.py:1205 +#: core/models.py:1087 msgid "optional promo code applied to this order" msgstr "Volitelný promo kód použitý na tuto objednávku" -#: core/models.py:1206 +#: core/models.py:1088 msgid "applied promo code" msgstr "Použitý promo kód" -#: core/models.py:1214 +#: core/models.py:1096 msgid "the shipping address used for this order" msgstr "Dodací adresa použitá pro tuto objednávku" -#: core/models.py:1215 +#: core/models.py:1097 msgid "shipping address" msgstr "Dodací adresa" -#: core/models.py:1221 +#: core/models.py:1103 msgid "current status of the order in its lifecycle" msgstr "Aktuální stav zakázky v jejím životním cyklu" -#: core/models.py:1222 +#: core/models.py:1104 msgid "order status" msgstr "Stav objednávky" -#: core/models.py:1227 core/models.py:1686 +#: core/models.py:1109 core/models.py:1560 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:1233 +#: core/models.py:1115 msgid "json representation of order attributes for this order" msgstr "JSON reprezentace atributů objednávky pro tuto objednávku" -#: core/models.py:1239 +#: core/models.py:1121 msgid "the user who placed the order" msgstr "Uživatel, který zadal objednávku" -#: core/models.py:1240 +#: core/models.py:1122 msgid "user" msgstr "Uživatel" -#: core/models.py:1246 +#: core/models.py:1128 msgid "the timestamp when the order was finalized" msgstr "Časové razítko, kdy byla objednávka dokončena." -#: core/models.py:1247 +#: core/models.py:1129 msgid "buy time" msgstr "Kupte si čas" -#: core/models.py:1254 +#: core/models.py:1136 msgid "a human-readable identifier for the order" msgstr "Lidsky čitelný identifikátor objednávky" -#: core/models.py:1255 +#: core/models.py:1137 msgid "human readable id" msgstr "lidsky čitelné ID" -#: core/models.py:1261 +#: core/models.py:1143 msgid "order" msgstr "Objednávka" -#: core/models.py:1282 +#: core/models.py:1168 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:1316 +#: core/models.py:1202 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:1321 +#: core/models.py:1207 msgid "you cannot add inactive products to order" msgstr "Do objednávky nelze přidat neaktivní produkty" -#: core/models.py:1338 +#: core/models.py:1224 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:1360 core/models.py:1385 core/models.py:1393 +#: core/models.py:1246 core/models.py:1271 core/models.py:1279 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:1381 +#: core/models.py:1267 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} neexistuje s dotazem <{query}>!" -#: core/models.py:1413 +#: core/models.py:1299 msgid "promocode does not exist" msgstr "Promo kód neexistuje" -#: core/models.py:1419 +#: core/models.py:1305 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:1438 +#: core/models.py:1324 msgid "address does not exist" msgstr "Adresa neexistuje" -#: core/models.py:1459 core/models.py:1528 +#: core/models.py:1345 core/models.py:1414 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:1462 core/models.py:1524 +#: core/models.py:1348 core/models.py:1410 msgid "invalid force value" msgstr "Neplatná hodnota síly" -#: core/models.py:1468 core/models.py:1531 +#: core/models.py:1354 core/models.py:1417 msgid "you cannot purchase an empty order!" msgstr "Nelze zakoupit prázdnou objednávku!" -#: core/models.py:1487 +#: core/models.py:1373 msgid "you cannot buy an order without a user" msgstr "Bez uživatele nelze objednávku zakoupit!" -#: core/models.py:1501 +#: core/models.py:1387 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:1506 +#: core/models.py:1392 msgid "insufficient funds to complete the order" msgstr "Nedostatek finančních prostředků na dokončení objednávky" -#: core/models.py:1540 +#: core/models.py:1426 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2177,150 +2256,202 @@ 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:1549 +#: core/models.py:1435 #, 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:1674 +#: core/models.py:1533 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" +"Reprezentuje produkty spojené s objednávkami a jejich atributy. Model " +"OrderProduct uchovává informace o produktu, který je součástí objednávky, " +"včetně podrobností, jako je kupní cena, množství, atributy produktu a stav. " +"Spravuje oznámení pro uživatele a správce a zpracovává operace, jako je " +"vrácení zůstatku produktu nebo přidání zpětné vazby. Tento model také " +"poskytuje metody a vlastnosti, které podporují obchodní logiku, například " +"výpočet celkové ceny nebo generování adresy URL ke stažení u digitálních " +"produktů. Model se integruje s modely objednávek a produktů a ukládá na ně " +"odkaz." + +#: core/models.py:1548 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:1675 +#: core/models.py:1549 msgid "purchase price at order time" msgstr "Nákupní cena v době objednávky" -#: core/models.py:1680 +#: core/models.py:1554 msgid "internal comments for admins about this ordered product" msgstr "Interní komentáře pro administrátory k tomuto objednanému produktu" -#: core/models.py:1681 +#: core/models.py:1555 msgid "internal comments" msgstr "Interní připomínky" -#: core/models.py:1687 +#: core/models.py:1561 msgid "user notifications" msgstr "Oznámení uživatele" -#: core/models.py:1692 +#: core/models.py:1566 msgid "json representation of this item's attributes" msgstr "JSON reprezentace atributů této položky" -#: core/models.py:1693 +#: core/models.py:1567 msgid "ordered product attributes" msgstr "Objednané atributy produktu" -#: core/models.py:1698 +#: core/models.py:1572 msgid "reference to the parent order that contains this product" msgstr "Odkaz na nadřazenou objednávku, která obsahuje tento produkt" -#: core/models.py:1699 +#: core/models.py:1573 msgid "parent order" msgstr "Objednávka rodičů" -#: core/models.py:1708 +#: core/models.py:1582 msgid "the specific product associated with this order line" msgstr "Konkrétní produkt spojený s touto objednávkou" -#: core/models.py:1715 +#: core/models.py:1589 msgid "quantity of this specific product in the order" msgstr "Množství tohoto konkrétního produktu v objednávce" -#: core/models.py:1716 +#: core/models.py:1590 msgid "product quantity" msgstr "Množství produktu" -#: core/models.py:1723 +#: core/models.py:1597 msgid "current status of this product in the order" msgstr "Aktuální stav tohoto produktu v objednávce" -#: core/models.py:1724 +#: core/models.py:1598 msgid "product line status" msgstr "Stav produktové řady" -#: core/models.py:1784 +#: core/models.py:1661 msgid "order product must have an order" msgstr "Orderproduct musí mít přiřazenou objednávku!" -#: core/models.py:1786 +#: core/models.py:1663 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Špatně zadaná akce pro zpětnou vazbu: {action}!" -#: core/models.py:1800 +#: core/models.py:1677 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:1806 +#: core/models.py:1683 msgid "name" msgstr "Název" -#: core/models.py:1807 +#: core/models.py:1684 msgid "URL of the integration" msgstr "Adresa URL integrace" -#: core/models.py:1808 +#: core/models.py:1685 msgid "authentication credentials" msgstr "Ověřovací pověření" -#: core/models.py:1822 +#: core/models.py:1699 msgid "you can only have one default CRM provider" msgstr "Můžete mít pouze jednoho výchozího poskytovatele CRM" -#: core/models.py:1826 +#: core/models.py:1703 msgid "CRM" msgstr "CRM" -#: core/models.py:1827 +#: core/models.py:1704 msgid "CRMs" msgstr "CRM" -#: core/models.py:1839 +#: core/models.py:1716 msgid "order CRM link" msgstr "Odkaz na CRM objednávky" -#: core/models.py:1840 +#: core/models.py:1717 msgid "orders CRM links" msgstr "Odkazy CRM objednávek" -#: core/models.py:1874 +#: core/models.py:1722 +msgid "" +"Represents the downloading functionality for digital assets associated with " +"orders. The DigitalAssetDownload class provides the ability to manage and " +"access downloads related to order products. It maintains information about " +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." +msgstr "" +"Představuje funkci stahování digitálních aktiv spojených s objednávkami. " +"Třída DigitalAssetDownload poskytuje možnost spravovat a zpřístupňovat " +"stahování související s produkty objednávek. Udržuje informace o " +"souvisejícím produktu objednávky, počtu stažení a o tom, zda je aktivum " +"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:1736 msgid "download" msgstr "Stáhnout" -#: core/models.py:1875 +#: core/models.py:1737 msgid "downloads" msgstr "Ke stažení na" -#: core/models.py:1883 +#: core/models.py:1745 msgid "you can not download a digital asset for a non-finished order" msgstr "Digitální aktivum pro nedokončenou objednávku nelze stáhnout." -#: core/models.py:1913 +#: core/models.py:1754 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." +msgstr "" +"spravuje zpětnou vazbu uživatelů k produktům. Tato třída je určena k " +"zachycování a ukládání zpětné vazby uživatelů ke konkrétním produktům, které" +" si zakoupili. Obsahuje atributy pro ukládání komentářů uživatelů, odkaz na " +"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:1766 msgid "user-provided comments about their experience with the product" msgstr "Komentáře uživatelů o jejich zkušenostech s produktem" -#: core/models.py:1914 +#: core/models.py:1767 msgid "feedback comments" msgstr "Zpětná vazba" -#: core/models.py:1921 +#: core/models.py:1774 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:1922 +#: core/models.py:1775 msgid "related order product" msgstr "Související objednávka produktu" -#: core/models.py:1927 +#: core/models.py:1780 msgid "user-assigned rating for the product" msgstr "Hodnocení produktu přidělené uživatelem" -#: core/models.py:1928 +#: core/models.py:1781 msgid "product rating" msgstr "Hodnocení produktu" @@ -2538,17 +2669,17 @@ msgstr "Nesprávná hodnota timeoutu, musí být v rozmezí 0 až 216000 sekund. msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | kontaktujte nás inicioval" -#: core/utils/emailing.py:64 +#: core/utils/emailing.py:74 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Potvrzení objednávky" -#: core/utils/emailing.py:99 +#: core/utils/emailing.py:109 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Objednávka doručena" -#: core/utils/emailing.py:187 +#: core/utils/emailing.py:197 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | promocode uděleno" @@ -2571,15 +2702,15 @@ msgstr "" msgid "invalid phone number format" msgstr "Nesprávný formát telefonního čísla" -#: core/views.py:481 +#: core/views.py:489 msgid "you can only download the digital asset once" msgstr "Digitální aktivum můžete stáhnout pouze jednou" -#: core/views.py:539 +#: core/views.py:547 msgid "favicon not found" msgstr "favicon nebyl nalezen" -#: core/viewsets.py:1319 +#: core/viewsets.py:1357 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Chyba v zeměpisném kódování: {e}" diff --git a/core/locale/da_DK/LC_MESSAGES/django.mo b/core/locale/da_DK/LC_MESSAGES/django.mo index 2b0aac4d379117068a057803049de07d2ffb0a57..ac285fa3c749855353c03adf87d0e6a48a281ab9 100644 GIT binary patch delta 20469 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 diff --git a/core/locale/da_DK/LC_MESSAGES/django.po b/core/locale/da_DK/LC_MESSAGES/django.po index e05550d1..2f72c304 100644 --- a/core/locale/da_DK/LC_MESSAGES/django.po +++ b/core/locale/da_DK/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:52+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -88,11 +88,11 @@ msgid "selected items have been deactivated." msgstr "Udvalgte varer er blevet deaktiveret!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:712 core/models.py:720 +#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 msgid "attribute value" msgstr "Attributværdi" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:721 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 msgid "attribute values" msgstr "Attributværdier" @@ -104,7 +104,7 @@ msgstr "Billede" msgid "images" msgstr "Billeder" -#: core/admin.py:155 core/models.py:457 +#: core/admin.py:155 core/models.py:445 msgid "stock" msgstr "Lager" @@ -112,11 +112,11 @@ msgstr "Lager" msgid "stocks" msgstr "Aktier" -#: core/admin.py:166 core/models.py:1735 +#: core/admin.py:166 core/models.py:1609 msgid "order product" msgstr "Bestil produkt" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1736 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 msgid "order products" msgstr "Bestil produkter" @@ -329,7 +329,7 @@ msgstr "" "Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare " "felter" -#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:553 +#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:487 #: core/graphene/object_types.py:117 core/graphene/object_types.py:207 #: core/graphene/object_types.py:509 msgid "SEO Meta snapshot" @@ -599,47 +599,7 @@ msgstr "Liste over alle produkter (enkel visning)" msgid "(exact) Product UUID" msgstr "(præcis) Produkt-UUID" -#: core/docs/drf/viewsets.py:384 -msgid "(icontains) Product name" -msgstr "(icontains) Produktnavn" - -#: core/docs/drf/viewsets.py:390 -msgid "(list) Category names, case-insensitive" -msgstr "(liste) Kategorinavne, skelner ikke mellem store og små bogstaver" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Category UUID" -msgstr "(præcis) UUID for kategori" - -#: core/docs/drf/viewsets.py:402 -msgid "(list) Tag names, case-insensitive" -msgstr "(liste) Tag-navne, skelner ikke mellem store og små bogstaver" - -#: core/docs/drf/viewsets.py:408 -msgid "(gte) Minimum stock price" -msgstr "(gte) Minimum aktiekurs" - -#: core/docs/drf/viewsets.py:414 -msgid "(lte) Maximum stock price" -msgstr "(lte) Maksimal aktiekurs" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Only active products" -msgstr "(præcis) Kun aktive produkter" - -#: core/docs/drf/viewsets.py:426 -msgid "(iexact) Brand name" -msgstr "(iexact) Mærkenavn" - -#: core/docs/drf/viewsets.py:438 -msgid "(gt) Minimum stock quantity" -msgstr "(gt) Minimum lagermængde" - -#: core/docs/drf/viewsets.py:444 -msgid "(exact) Digital vs. physical" -msgstr "(præcis) Digital vs. fysisk" - -#: core/docs/drf/viewsets.py:451 +#: core/docs/drf/viewsets.py:385 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -647,249 +607,253 @@ 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:465 core/docs/drf/viewsets.py:466 +#: core/docs/drf/viewsets.py:399 core/docs/drf/viewsets.py:400 msgid "retrieve a single product (detailed view)" msgstr "Hent et enkelt produkt (detaljeret visning)" -#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:495 -#: core/docs/drf/viewsets.py:511 core/docs/drf/viewsets.py:527 -#: core/docs/drf/viewsets.py:543 core/docs/drf/viewsets.py:559 +#: core/docs/drf/viewsets.py:405 core/docs/drf/viewsets.py:429 +#: core/docs/drf/viewsets.py:445 core/docs/drf/viewsets.py:461 +#: core/docs/drf/viewsets.py:477 core/docs/drf/viewsets.py:493 msgid "Product UUID or slug" msgstr "Produkt UUID eller Slug" -#: core/docs/drf/viewsets.py:481 core/docs/drf/viewsets.py:482 +#: core/docs/drf/viewsets.py:415 core/docs/drf/viewsets.py:416 msgid "create a product" msgstr "Opret et produkt" -#: core/docs/drf/viewsets.py:489 core/docs/drf/viewsets.py:490 +#: core/docs/drf/viewsets.py:423 core/docs/drf/viewsets.py:424 msgid "rewrite an existing product, preserving non-editable fields" msgstr "Omskriv et eksisterende produkt og bevar ikke-redigerbare felter" -#: core/docs/drf/viewsets.py:505 core/docs/drf/viewsets.py:506 +#: core/docs/drf/viewsets.py:439 core/docs/drf/viewsets.py:440 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:521 core/docs/drf/viewsets.py:522 +#: core/docs/drf/viewsets.py:455 core/docs/drf/viewsets.py:456 msgid "delete a product" msgstr "Slet et produkt" -#: core/docs/drf/viewsets.py:537 core/docs/drf/viewsets.py:538 +#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:472 msgid "lists all permitted feedbacks for a product" msgstr "viser alle tilladte tilbagemeldinger for et produkt" -#: core/docs/drf/viewsets.py:554 +#: core/docs/drf/viewsets.py:488 msgid "returns a snapshot of the product's SEO meta data" msgstr "Returnerer et øjebliksbillede af produktets SEO-metadata" -#: core/docs/drf/viewsets.py:572 +#: core/docs/drf/viewsets.py:506 msgid "list all addresses" msgstr "Angiv alle adresser" -#: core/docs/drf/viewsets.py:579 +#: core/docs/drf/viewsets.py:513 msgid "retrieve a single address" msgstr "Hent en enkelt adresse" -#: core/docs/drf/viewsets.py:586 +#: core/docs/drf/viewsets.py:520 msgid "create a new address" msgstr "Opret en ny adresse" -#: core/docs/drf/viewsets.py:594 +#: core/docs/drf/viewsets.py:528 msgid "delete an address" msgstr "Slet en adresse" -#: core/docs/drf/viewsets.py:601 +#: core/docs/drf/viewsets.py:535 msgid "update an entire address" msgstr "Opdater en hel adresse" -#: core/docs/drf/viewsets.py:609 +#: core/docs/drf/viewsets.py:543 msgid "partially update an address" msgstr "Delvis opdatering af en adresse" -#: core/docs/drf/viewsets.py:617 +#: core/docs/drf/viewsets.py:551 msgid "autocomplete address suggestions" msgstr "Automatisk udfyldning af adresseinput" -#: core/docs/drf/viewsets.py:622 +#: core/docs/drf/viewsets.py:556 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:628 +#: core/docs/drf/viewsets.py:562 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:641 +#: core/docs/drf/viewsets.py:575 msgid "list all feedbacks (simple view)" msgstr "Vis alle tilbagemeldinger (enkel visning)" -#: core/docs/drf/viewsets.py:645 +#: core/docs/drf/viewsets.py:579 msgid "retrieve a single feedback (detailed view)" msgstr "Hent en enkelt feedback (detaljeret visning)" -#: core/docs/drf/viewsets.py:649 +#: core/docs/drf/viewsets.py:583 msgid "create a feedback" msgstr "skab en feedback" -#: core/docs/drf/viewsets.py:653 +#: core/docs/drf/viewsets.py:587 msgid "delete a feedback" msgstr "Slet en tilbagemelding" -#: core/docs/drf/viewsets.py:657 +#: core/docs/drf/viewsets.py:591 msgid "rewrite an existing feedback saving non-editables" msgstr "omskriv en eksisterende feedback, der gemmer ikke-redigerbare filer" -#: core/docs/drf/viewsets.py:661 +#: core/docs/drf/viewsets.py:595 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:668 +#: core/docs/drf/viewsets.py:602 msgid "list all order–product relations (simple view)" msgstr "liste alle ordre-produkt-relationer (simpel visning)" -#: core/docs/drf/viewsets.py:675 +#: core/docs/drf/viewsets.py:609 msgid "retrieve a single order–product relation (detailed view)" msgstr "Hent en enkelt ordre-produkt-relation (detaljeret visning)" -#: core/docs/drf/viewsets.py:682 +#: core/docs/drf/viewsets.py:616 msgid "create a new order–product relation" msgstr "Opret en ny ordre-produkt-relation" -#: core/docs/drf/viewsets.py:689 +#: core/docs/drf/viewsets.py:623 msgid "replace an existing order–product relation" msgstr "erstatte en eksisterende ordre-produkt-relation" -#: core/docs/drf/viewsets.py:696 +#: core/docs/drf/viewsets.py:630 msgid "partially update an existing order–product relation" msgstr "delvist opdatere en eksisterende ordre-produkt-relation" -#: core/docs/drf/viewsets.py:703 +#: core/docs/drf/viewsets.py:637 msgid "delete an order–product relation" msgstr "slette en ordre-produkt-relation" -#: core/docs/drf/viewsets.py:710 +#: core/docs/drf/viewsets.py:644 msgid "add or remove feedback on an order–product relation" msgstr "tilføje eller fjerne feedback på en ordre-produkt-relation" -#: core/elasticsearch/__init__.py:105 +#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 msgid "no search term provided." msgstr "Der er ikke angivet noget søgeord." -#: core/filters.py:64 core/filters.py:594 core/filters.py:623 +#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +msgid "Search" +msgstr "Søg efter" + +#: core/filters.py:66 core/filters.py:554 core/filters.py:583 msgid "UUID" msgstr "UUID" -#: core/filters.py:65 core/filters.py:429 core/filters.py:560 +#: core/filters.py:67 core/filters.py:399 core/filters.py:526 msgid "Name" msgstr "Navn" -#: core/filters.py:66 core/filters.py:562 +#: core/filters.py:68 core/filters.py:528 msgid "Categories" msgstr "Kategorier" -#: core/filters.py:68 +#: core/filters.py:70 msgid "Categories Slugs" msgstr "Kategorier Snegle" -#: core/filters.py:69 core/filters.py:437 +#: core/filters.py:71 core/filters.py:407 msgid "Tags" msgstr "Tags" -#: core/filters.py:70 +#: core/filters.py:72 msgid "Min Price" msgstr "Min. pris" -#: core/filters.py:71 +#: core/filters.py:73 msgid "Max Price" msgstr "Maks. pris" -#: core/filters.py:72 +#: core/filters.py:74 msgid "Is Active" msgstr "Er aktiv" -#: core/filters.py:73 +#: core/filters.py:75 msgid "Brand" msgstr "Brand" -#: core/filters.py:74 +#: core/filters.py:76 msgid "Attributes" msgstr "Egenskaber" -#: core/filters.py:75 +#: core/filters.py:77 msgid "Quantity" msgstr "Mængde" -#: core/filters.py:76 core/filters.py:431 core/filters.py:561 -#: core/models.py:287 core/models.py:381 core/models.py:534 +#: core/filters.py:78 core/filters.py:401 core/filters.py:527 +#: core/models.py:287 core/models.py:369 core/models.py:522 msgid "Slug" msgstr "Snegl" -#: core/filters.py:77 +#: core/filters.py:79 msgid "Is Digital" msgstr "Er digital" -#: core/filters.py:78 +#: core/filters.py:80 msgid "Include sub-categories" msgstr "Inkluder underkategorier" -#: core/filters.py:81 +#: core/filters.py:83 msgid "Include personal ordered" msgstr "Inkluder personligt bestilte produkter" -#: core/filters.py:83 core/models.py:538 +#: core/filters.py:85 core/models.py:526 msgid "SKU" msgstr "VARENUMMER" -#: core/filters.py:166 +#: core/filters.py:161 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:356 +#: core/filters.py:324 msgid "Search (ID, product name or part number)" msgstr "Søg (ID, produktnavn eller reservedelsnummer)" -#: core/filters.py:359 +#: core/filters.py:327 msgid "Bought after (inclusive)" msgstr "Købt efter (inklusive)" -#: core/filters.py:360 +#: core/filters.py:328 msgid "Bought before (inclusive)" msgstr "Købt før (inklusive)" -#: core/filters.py:363 core/filters.py:410 core/filters.py:625 +#: core/filters.py:331 core/filters.py:378 core/filters.py:585 msgid "User email" msgstr "Brugerens e-mail" -#: core/filters.py:364 core/filters.py:411 core/filters.py:603 -#: core/filters.py:624 +#: core/filters.py:332 core/filters.py:379 core/filters.py:563 +#: core/filters.py:584 msgid "User UUID" msgstr "Bruger UUID" -#: core/filters.py:365 +#: core/filters.py:333 msgid "Status" msgstr "Status" -#: core/filters.py:369 +#: core/filters.py:337 msgid "Human Readable ID" msgstr "Menneskeligt læsbart ID" -#: core/filters.py:430 +#: core/filters.py:400 msgid "Parent" msgstr "Forælder" -#: core/filters.py:434 +#: core/filters.py:404 msgid "Whole category(has at least 1 product or not)" msgstr "Hele kategorien (har mindst 1 produkt eller ej)" -#: core/filters.py:438 +#: core/filters.py:408 msgid "Level" msgstr "Niveau" -#: core/filters.py:598 +#: core/filters.py:558 msgid "Product UUID" msgstr "Produkt UUID" @@ -944,7 +908,7 @@ 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:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:821 +#: core/graphene/mutations.py:527 core/viewsets.py:839 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Forkert type kom fra metoden order.buy(): {type(instance)!s}" @@ -1007,37 +971,37 @@ msgstr "" msgid "add or delete a feedback for orderproduct" msgstr "Tilføj eller slet en feedback til ordreproduktet" -#: core/graphene/mutations.py:555 +#: core/graphene/mutations.py:556 msgid "action must be either `add` or `remove`" msgstr "Handlingen skal være enten `add` eller `remove`!" -#: core/graphene/mutations.py:558 +#: core/graphene/mutations.py:559 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Ordreprodukt {order_product_uuid} ikke fundet!" -#: core/graphene/mutations.py:621 +#: core/graphene/mutations.py:622 msgid "original address string provided by the user" msgstr "Original adressestreng leveret af brugeren" -#: core/graphene/mutations.py:655 core/models.py:896 core/models.py:909 -#: core/models.py:1348 core/models.py:1377 core/models.py:1402 -#: core/viewsets.py:824 +#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 +#: core/models.py:1234 core/models.py:1263 core/models.py:1288 +#: core/viewsets.py:842 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} findes ikke: {uuid}!" -#: core/graphene/mutations.py:668 +#: core/graphene/mutations.py:669 msgid "limit must be between 1 and 10" msgstr "Grænsen skal være mellem 1 og 10" -#: core/graphene/mutations.py:713 +#: core/graphene/mutations.py:714 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - fungerer som en charme" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:666 core/models.py:1234 -#: core/models.py:1809 +#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 +#: core/models.py:1686 msgid "attributes" msgstr "Egenskaber" @@ -1050,11 +1014,11 @@ 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:224 core/models.py:312 core/models.py:620 +#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:612 msgid "categories" msgstr "Kategorier" -#: core/graphene/object_types.py:124 core/models.py:395 +#: core/graphene/object_types.py:124 core/models.py:383 msgid "brands" msgstr "Mærker" @@ -1115,7 +1079,7 @@ msgid "represents feedback from a user." msgstr "Repræsenterer feedback fra en bruger." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1228 +#: core/models.py:1110 msgid "notifications" msgstr "Meddelelser" @@ -1123,7 +1087,7 @@ msgstr "Meddelelser" msgid "download url for this order product if applicable" msgstr "Download url for dette ordreprodukt, hvis det er relevant" -#: core/graphene/object_types.py:400 core/models.py:1938 +#: core/graphene/object_types.py:400 core/models.py:1791 msgid "feedback" msgstr "Feedback" @@ -1131,7 +1095,7 @@ msgstr "Feedback" msgid "a list of order products in this order" msgstr "En liste over bestillingsprodukter i denne ordre" -#: core/graphene/object_types.py:436 core/models.py:1198 +#: core/graphene/object_types.py:436 core/models.py:1080 msgid "billing address" msgstr "Faktureringsadresse" @@ -1159,7 +1123,7 @@ msgstr "Er alle produkterne i ordren digitale?" msgid "transactions for this order" msgstr "Transaktioner for denne ordre" -#: core/graphene/object_types.py:465 core/models.py:1262 +#: core/graphene/object_types.py:465 core/models.py:1144 msgid "orders" msgstr "Bestillinger" @@ -1171,15 +1135,15 @@ msgstr "Billed-URL" msgid "product's images" msgstr "Produktets billeder" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:477 +#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 msgid "category" msgstr "Kategori" -#: core/graphene/object_types.py:502 core/models.py:1939 +#: core/graphene/object_types.py:502 core/models.py:1792 msgid "feedbacks" msgstr "Tilbagemeldinger" -#: core/graphene/object_types.py:503 core/models.py:394 core/models.py:486 +#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 msgid "brand" msgstr "Brand" @@ -1211,7 +1175,7 @@ msgstr "Antal tilbagemeldinger" msgid "only available for personal orders" msgstr "Produkter kun tilgængelige for personlige bestillinger" -#: core/graphene/object_types.py:534 core/models.py:548 +#: core/graphene/object_types.py:534 core/models.py:536 msgid "products" msgstr "Produkter" @@ -1223,7 +1187,7 @@ msgstr "Promokoder" msgid "products on sale" msgstr "Produkter til salg" -#: core/graphene/object_types.py:651 core/models.py:843 +#: core/graphene/object_types.py:651 core/models.py:784 msgid "promotions" msgstr "Kampagner" @@ -1231,7 +1195,7 @@ msgstr "Kampagner" msgid "vendor" msgstr "Leverandør" -#: core/graphene/object_types.py:656 core/models.py:547 +#: core/graphene/object_types.py:656 core/models.py:535 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1239,11 +1203,11 @@ msgstr "Leverandør" msgid "product" msgstr "Produkt" -#: core/graphene/object_types.py:667 core/models.py:868 +#: core/graphene/object_types.py:667 core/models.py:807 msgid "wishlisted products" msgstr "Produkter på ønskelisten" -#: core/graphene/object_types.py:673 core/models.py:885 +#: core/graphene/object_types.py:673 core/models.py:824 msgid "wishlists" msgstr "Ønskelister" @@ -1251,7 +1215,7 @@ msgstr "Ønskelister" msgid "tagged products" msgstr "Mærkede produkter" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:492 +#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 msgid "product tags" msgstr "Produktmærker" @@ -1362,7 +1326,7 @@ msgstr "Overordnet attributgruppe" msgid "attribute group's name" msgstr "Attributgruppens navn" -#: core/models.py:100 core/models.py:628 +#: core/models.py:100 core/models.py:620 msgid "attribute group" msgstr "Attributgruppe" @@ -1527,51 +1491,65 @@ msgstr "Beskrivelse af kategori" msgid "tags that help describe or group this category" msgstr "tags, der hjælper med at beskrive eller gruppere denne kategori" -#: core/models.py:299 core/models.py:387 +#: core/models.py:299 core/models.py:375 msgid "priority" msgstr "Prioritet" -#: core/models.py:340 +#: core/models.py:318 +msgid "" +"Represents a Brand object in the system. This class handles information and " +"attributes related to a brand, including its name, logos, description, " +"associated categories, a unique slug, and priority order. It allows for the " +"organization and representation of brand-related data within the " +"application." +msgstr "" +"Repræsenterer et brand-objekt i systemet. Denne klasse håndterer oplysninger" +" og attributter relateret til et brand, herunder dets navn, logoer, " +"beskrivelse, tilknyttede kategorier, en unik slug og prioriteret rækkefølge." +" Den gør det muligt at organisere og repræsentere brand-relaterede data i " +"applikationen." + +#: core/models.py:328 msgid "name of this brand" msgstr "Navnet på dette mærke" -#: core/models.py:341 +#: core/models.py:329 msgid "brand name" msgstr "Varemærke" -#: core/models.py:348 +#: core/models.py:336 msgid "upload a logo representing this brand" msgstr "Upload et logo, der repræsenterer dette brand" -#: core/models.py:350 +#: core/models.py:338 msgid "brand small image" msgstr "Brandets lille image" -#: core/models.py:356 +#: core/models.py:344 msgid "upload a big logo representing this brand" msgstr "Upload et stort logo, der repræsenterer dette brand" -#: core/models.py:358 +#: core/models.py:346 msgid "brand big image" msgstr "Brandets store image" -#: core/models.py:363 +#: core/models.py:351 msgid "add a detailed description of the brand" msgstr "Tilføj en detaljeret beskrivelse af brandet" -#: core/models.py:364 +#: core/models.py:352 msgid "brand description" msgstr "Varemærkebeskrivelse" -#: core/models.py:369 +#: core/models.py:357 msgid "optional categories that this brand is associated with" msgstr "Valgfrie kategorier, som dette brand er forbundet med" -#: core/models.py:370 +#: core/models.py:358 msgid "associated categories" msgstr "Kategorier" -#: core/models.py:400 +#: core/models.py:388 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1587,68 +1565,68 @@ msgstr "" "muliggøre sporing og evaluering af produkter, der er tilgængelige fra " "forskellige leverandører." -#: core/models.py:412 +#: core/models.py:400 msgid "the vendor supplying this product stock" msgstr "Den leverandør, der leverer dette produkt, lagerfører" -#: core/models.py:413 +#: core/models.py:401 msgid "associated vendor" msgstr "Tilknyttet leverandør" -#: core/models.py:417 +#: core/models.py:405 msgid "final price to the customer after markups" msgstr "Endelig pris til kunden efter tillæg" -#: core/models.py:418 +#: core/models.py:406 msgid "selling price" msgstr "Salgspris" -#: core/models.py:423 +#: core/models.py:411 msgid "the product associated with this stock entry" msgstr "Det produkt, der er knyttet til denne lagerpost" -#: core/models.py:424 core/models.py:708 core/models.py:765 -#: core/models.py:1709 +#: core/models.py:412 core/models.py:683 core/models.py:730 +#: core/models.py:1583 msgid "associated product" msgstr "Tilknyttet produkt" -#: core/models.py:431 +#: core/models.py:419 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:432 +#: core/models.py:420 msgid "vendor purchase price" msgstr "Leverandørens købspris" -#: core/models.py:436 +#: core/models.py:424 msgid "available quantity of the product in stock" msgstr "Tilgængelig mængde af produktet på lager" -#: core/models.py:437 +#: core/models.py:425 msgid "quantity in stock" msgstr "Antal på lager" -#: core/models.py:441 +#: core/models.py:429 msgid "vendor-assigned SKU for identifying the product" msgstr "Leverandørtildelt SKU til identifikation af produktet" -#: core/models.py:442 +#: core/models.py:430 msgid "vendor sku" msgstr "Leverandørens SKU" -#: core/models.py:448 +#: core/models.py:436 msgid "digital file associated with this stock if applicable" msgstr "Digital fil knyttet til dette lager, hvis relevant" -#: core/models.py:449 +#: core/models.py:437 msgid "digital file" msgstr "Digital fil" -#: core/models.py:458 +#: core/models.py:446 msgid "stock entries" msgstr "Lagerposteringer" -#: core/models.py:463 +#: core/models.py:451 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1668,55 +1646,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:476 +#: core/models.py:464 msgid "category this product belongs to" msgstr "Kategori, som dette produkt tilhører" -#: core/models.py:485 +#: core/models.py:473 msgid "optionally associate this product with a brand" msgstr "Tilknyt eventuelt dette produkt til et brand" -#: core/models.py:491 +#: core/models.py:479 msgid "tags that help describe or group this product" msgstr "Tags, der hjælper med at beskrive eller gruppere dette produkt" -#: core/models.py:496 +#: core/models.py:484 msgid "indicates whether this product is digitally delivered" msgstr "Angiver, om dette produkt leveres digitalt" -#: core/models.py:497 +#: core/models.py:485 msgid "is product digital" msgstr "Er produktet digitalt?" -#: core/models.py:503 +#: core/models.py:491 msgid "provide a clear identifying name for the product" msgstr "Giv produktet et klart identificerende navn" -#: core/models.py:504 +#: core/models.py:492 msgid "product name" msgstr "Produktets navn" -#: core/models.py:509 core/models.py:831 +#: core/models.py:497 core/models.py:772 msgid "add a detailed description of the product" msgstr "Tilføj en detaljeret beskrivelse af produktet" -#: core/models.py:510 +#: core/models.py:498 msgid "product description" msgstr "Produktbeskrivelse" -#: core/models.py:517 +#: core/models.py:505 msgid "part number for this product" msgstr "Reservedelsnummer for dette produkt" -#: core/models.py:518 +#: core/models.py:506 msgid "part number" msgstr "Varenummer" -#: core/models.py:537 +#: core/models.py:525 msgid "stock keeping unit for this product" msgstr "Lagerbeholdning for dette produkt" -#: core/models.py:607 +#: core/models.py:599 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 " @@ -1732,291 +1710,398 @@ msgstr "" "string, integer, float, boolean, array og object. Det giver mulighed for " "dynamisk og fleksibel datastrukturering." -#: core/models.py:619 +#: core/models.py:611 msgid "category of this attribute" msgstr "Kategori for denne attribut" -#: core/models.py:627 +#: core/models.py:619 msgid "group of this attribute" msgstr "Gruppe af denne attribut" -#: core/models.py:633 +#: core/models.py:625 msgid "string" msgstr "Streng" -#: core/models.py:634 +#: core/models.py:626 msgid "integer" msgstr "Heltal" -#: core/models.py:635 +#: core/models.py:627 msgid "float" msgstr "Flyder" -#: core/models.py:636 +#: core/models.py:628 msgid "boolean" msgstr "Boolsk" -#: core/models.py:637 +#: core/models.py:629 msgid "array" msgstr "Array" -#: core/models.py:638 +#: core/models.py:630 msgid "object" msgstr "Objekt" -#: core/models.py:640 +#: core/models.py:632 msgid "type of the attribute's value" msgstr "Type af attributtens værdi" -#: core/models.py:641 +#: core/models.py:633 msgid "value type" msgstr "Værditype" -#: core/models.py:646 +#: core/models.py:638 msgid "name of this attribute" msgstr "Navn på denne attribut" -#: core/models.py:647 +#: core/models.py:639 msgid "attribute's name" msgstr "Attributtens navn" -#: core/models.py:653 +#: core/models.py:645 msgid "is filterable" msgstr "er filtrerbar" -#: core/models.py:654 +#: core/models.py:646 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:665 core/models.py:700 +#: core/models.py:657 core/models.py:675 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attribut" -#: core/models.py:699 +#: core/models.py:663 +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 "" +"Repræsenterer en specifik værdi for en attribut, der er knyttet til et " +"produkt. Den forbinder 'attributten' med en unik 'værdi', hvilket giver " +"mulighed for bedre organisering og dynamisk repræsentation af " +"produktegenskaber." + +#: core/models.py:674 msgid "attribute of this value" msgstr "Attribut for denne værdi" -#: core/models.py:707 +#: core/models.py:682 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:713 +#: core/models.py:688 msgid "the specific value for this attribute" msgstr "Den specifikke værdi for denne attribut" -#: core/models.py:747 +#: core/models.py:701 +msgid "" +"Represents a product image associated with a product in the system. This " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " +"determining their display order. It also includes an accessibility feature " +"with alternative text for the images." +msgstr "" +"Repræsenterer et produktbillede, der er knyttet til et produkt i systemet. " +"Denne klasse er designet til at administrere billeder til produkter, " +"herunder funktionalitet til at uploade billedfiler, knytte dem til " +"specifikke produkter og bestemme deres visningsrækkefølge. Den indeholder " +"også en tilgængelighedsfunktion med alternativ tekst til billederne." + +#: core/models.py:712 msgid "provide alternative text for the image for accessibility" msgstr "Giv alternativ tekst til billedet af hensyn til tilgængeligheden" -#: core/models.py:748 +#: core/models.py:713 msgid "image alt text" msgstr "Billedets alt-tekst" -#: core/models.py:751 +#: core/models.py:716 msgid "upload the image file for this product" msgstr "Upload billedfilen til dette produkt" -#: core/models.py:752 core/models.py:777 +#: core/models.py:717 core/models.py:742 msgid "product image" msgstr "Produktbillede" -#: core/models.py:758 +#: core/models.py:723 msgid "determines the order in which images are displayed" msgstr "Bestemmer den rækkefølge, billederne vises i" -#: core/models.py:759 +#: core/models.py:724 msgid "display priority" msgstr "Skærm-prioritet" -#: core/models.py:764 +#: core/models.py:729 msgid "the product that this image represents" msgstr "Det produkt, som dette billede repræsenterer" -#: core/models.py:778 +#: core/models.py:743 msgid "product images" msgstr "Produktbilleder" -#: core/models.py:819 +#: core/models.py:748 +msgid "" +"Represents a promotional campaign for products with a discount. This class " +"is used to define and manage promotional campaigns that offer a percentage-" +"based discount for products. The class includes attributes for setting the " +"discount rate, providing details about the promotion, and linking it to the " +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." +msgstr "" +"Repræsenterer en reklamekampagne for produkter med rabat. Denne klasse " +"bruges til at definere og administrere kampagner, der tilbyder en " +"procentbaseret rabat på produkter. Klassen indeholder attributter til at " +"indstille rabatsatsen, give detaljer om kampagnen og linke den til de " +"relevante produkter. Den integreres med produktkataloget for at bestemme de " +"berørte varer i kampagnen." + +#: core/models.py:760 msgid "percentage discount for the selected products" msgstr "Procentvis rabat for de valgte produkter" -#: core/models.py:820 +#: core/models.py:761 msgid "discount percentage" msgstr "Rabatprocent" -#: core/models.py:825 +#: core/models.py:766 msgid "provide a unique name for this promotion" msgstr "Giv et unikt navn til denne kampagne" -#: core/models.py:826 +#: core/models.py:767 msgid "promotion name" msgstr "Navn på kampagne" -#: core/models.py:832 +#: core/models.py:773 msgid "promotion description" msgstr "Beskrivelse af kampagnen" -#: core/models.py:837 +#: core/models.py:778 msgid "select which products are included in this promotion" msgstr "Vælg, hvilke produkter der er inkluderet i denne kampagne" -#: core/models.py:838 +#: core/models.py:779 msgid "included products" msgstr "Inkluderede produkter" -#: core/models.py:842 +#: core/models.py:783 msgid "promotion" msgstr "Forfremmelse" -#: core/models.py:867 +#: core/models.py:794 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"class provides functionality to manage a collection of products, supporting " +"operations such as adding and removing products, as well as supporting " +"operations for adding and removing multiple products at once." +msgstr "" +"Repræsenterer en brugers ønskeliste til opbevaring og administration af " +"ønskede produkter. Klassen giver funktionalitet til at administrere en " +"samling af produkter og understøtter operationer som at tilføje og fjerne " +"produkter samt operationer til at tilføje og fjerne flere produkter på én " +"gang." + +#: core/models.py:806 msgid "products that the user has marked as wanted" msgstr "Produkter, som brugeren har markeret som ønskede" -#: core/models.py:875 +#: core/models.py:814 msgid "user who owns this wishlist" msgstr "Bruger, der ejer denne ønskeliste" -#: core/models.py:876 +#: core/models.py:815 msgid "wishlist owner" msgstr "Ønskelistens ejer" -#: core/models.py:884 +#: core/models.py:823 msgid "wishlist" msgstr "Ønskeliste" -#: core/models.py:951 +#: core/models.py:865 +msgid "" +"Represents a documentary record tied to a product. This class is used to " +"store information about documentaries related to specific products, " +"including file uploads and their metadata. It contains methods and " +"properties to handle the file type and storage path for the documentary " +"files. It extends functionality from specific mixins and provides additional" +" custom features." +msgstr "" +"Repræsenterer en dokumentarisk post, der er knyttet til et produkt. Denne " +"klasse bruges til at gemme oplysninger om dokumentarfilm relateret til " +"specifikke produkter, herunder filuploads og deres metadata. Den indeholder " +"metoder og egenskaber til at håndtere filtypen og lagringsstien for " +"dokumentarfilerne. Den udvider funktionaliteten fra specifikke mixins og " +"giver yderligere brugerdefinerede funktioner." + +#: core/models.py:878 msgid "documentary" msgstr "Dokumentarfilm" -#: core/models.py:952 +#: core/models.py:879 msgid "documentaries" msgstr "Dokumentarfilm" -#: core/models.py:962 +#: core/models.py:889 msgid "unresolved" msgstr "Uafklaret" -#: core/models.py:1008 +#: core/models.py:894 +msgid "" +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." +msgstr "" +"Repræsenterer en adresseenhed, der indeholder placeringsoplysninger og " +"tilknytninger til en bruger. Indeholder funktionalitet til lagring af " +"geografiske data og adressedata samt integration med geokodningstjenester. " +"Denne klasse er designet til at gemme detaljerede adresseoplysninger, " +"herunder komponenter som gade, by, region, land og geolokalisering (længde- " +"og breddegrad). Den understøtter integration med geokodnings-API'er og " +"muliggør lagring af rå API-svar til videre behandling eller inspektion. " +"Klassen gør det også muligt at knytte en adresse til en bruger, hvilket " +"letter personlig datahåndtering." + +#: core/models.py:909 msgid "address line for the customer" msgstr "Adresselinje til kunden" -#: core/models.py:1009 +#: core/models.py:910 msgid "address line" msgstr "Adresselinje" -#: core/models.py:1011 +#: core/models.py:912 msgid "street" msgstr "Gade" -#: core/models.py:1012 +#: core/models.py:913 msgid "district" msgstr "Distrikt" -#: core/models.py:1013 +#: core/models.py:914 msgid "city" msgstr "By" -#: core/models.py:1014 +#: core/models.py:915 msgid "region" msgstr "Region" -#: core/models.py:1015 +#: core/models.py:916 msgid "postal code" msgstr "Postnummer" -#: core/models.py:1016 +#: core/models.py:917 msgid "country" msgstr "Land" -#: core/models.py:1023 +#: core/models.py:924 msgid "geolocation point: (longitude, latitude)" msgstr "Geolokaliseringspunkt (længdegrad, breddegrad)" -#: core/models.py:1026 +#: core/models.py:927 msgid "full JSON response from geocoder for this address" msgstr "Fuldt JSON-svar fra geokoderen for denne adresse" -#: core/models.py:1031 +#: core/models.py:932 msgid "stored JSON response from the geocoding service" msgstr "Gemt JSON-svar fra geokodningstjenesten" -#: core/models.py:1039 +#: core/models.py:940 msgid "address" msgstr "Adresse" -#: core/models.py:1040 +#: core/models.py:941 msgid "addresses" msgstr "Adresser" -#: core/models.py:1085 +#: core/models.py:953 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" +"Repræsenterer en kampagnekode, der kan bruges til rabatter, og styrer dens " +"gyldighed, rabattype og anvendelse. PromoCode-klassen gemmer oplysninger om " +"en kampagnekode, herunder dens unikke identifikator, rabattegenskaber (beløb" +" eller procent), gyldighedsperiode, tilknyttet bruger (hvis nogen) og status" +" 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:967 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:1086 +#: core/models.py:968 msgid "promo code identifier" msgstr "Identifikator for kampagnekode" -#: core/models.py:1093 +#: core/models.py:975 msgid "fixed discount amount applied if percent is not used" msgstr "Fast rabatbeløb anvendes, hvis procent ikke bruges" -#: core/models.py:1094 +#: core/models.py:976 msgid "fixed discount amount" msgstr "Fast rabatbeløb" -#: core/models.py:1100 +#: core/models.py:982 msgid "percentage discount applied if fixed amount is not used" msgstr "Procentvis rabat, hvis det faste beløb ikke bruges" -#: core/models.py:1101 +#: core/models.py:983 msgid "percentage discount" msgstr "Procentvis rabat" -#: core/models.py:1106 +#: core/models.py:988 msgid "timestamp when the promocode expires" msgstr "Tidsstempel, når promokoden udløber" -#: core/models.py:1107 +#: core/models.py:989 msgid "end validity time" msgstr "Slut gyldighedstid" -#: core/models.py:1112 +#: core/models.py:994 msgid "timestamp from which this promocode is valid" msgstr "Tidsstempel, hvorfra denne promokode er gyldig" -#: core/models.py:1113 +#: core/models.py:995 msgid "start validity time" msgstr "Start gyldighedstid" -#: core/models.py:1118 +#: core/models.py:1000 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:1119 +#: core/models.py:1001 msgid "usage timestamp" msgstr "Tidsstempel for brug" -#: core/models.py:1124 +#: core/models.py:1006 msgid "user assigned to this promocode if applicable" msgstr "Bruger tildelt denne promokode, hvis relevant" -#: core/models.py:1125 +#: core/models.py:1007 msgid "assigned user" msgstr "Tildelt bruger" -#: core/models.py:1132 +#: core/models.py:1014 msgid "promo code" msgstr "Kampagnekode" -#: core/models.py:1133 +#: core/models.py:1015 msgid "promo codes" msgstr "Kampagnekoder" -#: core/models.py:1140 +#: core/models.py:1022 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2024,16 +2109,16 @@ msgstr "" "Der skal kun defineres én type rabat (beløb eller procent), men ikke begge " "eller ingen af dem." -#: core/models.py:1155 +#: core/models.py:1037 msgid "promocode already used" msgstr "Promokoden er allerede blevet brugt" -#: core/models.py:1171 +#: core/models.py:1053 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Ugyldig rabattype for promokode {self.uuid}!" -#: core/models.py:1180 +#: core/models.py:1062 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 " @@ -2050,138 +2135,138 @@ msgstr "" " eller faktureringsoplysninger kan opdateres. Ligeledes understøtter " "funktionaliteten håndtering af produkterne i ordrens livscyklus." -#: core/models.py:1197 +#: core/models.py:1079 msgid "the billing address used for this order" msgstr "Den faktureringsadresse, der bruges til denne ordre" -#: core/models.py:1205 +#: core/models.py:1087 msgid "optional promo code applied to this order" msgstr "Valgfri kampagnekode anvendt på denne ordre" -#: core/models.py:1206 +#: core/models.py:1088 msgid "applied promo code" msgstr "Anvendt kampagnekode" -#: core/models.py:1214 +#: core/models.py:1096 msgid "the shipping address used for this order" msgstr "Den leveringsadresse, der er brugt til denne ordre" -#: core/models.py:1215 +#: core/models.py:1097 msgid "shipping address" msgstr "Leveringsadresse" -#: core/models.py:1221 +#: core/models.py:1103 msgid "current status of the order in its lifecycle" msgstr "Ordrens aktuelle status i dens livscyklus" -#: core/models.py:1222 +#: core/models.py:1104 msgid "order status" msgstr "Bestillingsstatus" -#: core/models.py:1227 core/models.py:1686 +#: core/models.py:1109 core/models.py:1560 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:1233 +#: core/models.py:1115 msgid "json representation of order attributes for this order" msgstr "JSON-repræsentation af ordreattributter for denne ordre" -#: core/models.py:1239 +#: core/models.py:1121 msgid "the user who placed the order" msgstr "Den bruger, der har afgivet ordren" -#: core/models.py:1240 +#: core/models.py:1122 msgid "user" msgstr "Bruger" -#: core/models.py:1246 +#: core/models.py:1128 msgid "the timestamp when the order was finalized" msgstr "Tidsstemplet for, hvornår ordren blev afsluttet" -#: core/models.py:1247 +#: core/models.py:1129 msgid "buy time" msgstr "Køb tid" -#: core/models.py:1254 +#: core/models.py:1136 msgid "a human-readable identifier for the order" msgstr "En menneskeligt læsbar identifikator for ordren" -#: core/models.py:1255 +#: core/models.py:1137 msgid "human readable id" msgstr "menneskeligt læsbart ID" -#: core/models.py:1261 +#: core/models.py:1143 msgid "order" msgstr "Bestil" -#: core/models.py:1282 +#: core/models.py:1168 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:1316 +#: core/models.py:1202 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:1321 +#: core/models.py:1207 msgid "you cannot add inactive products to order" msgstr "Du kan ikke tilføje inaktive produkter til en ordre" -#: core/models.py:1338 +#: core/models.py:1224 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:1360 core/models.py:1385 core/models.py:1393 +#: core/models.py:1246 core/models.py:1271 core/models.py:1279 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:1381 +#: core/models.py:1267 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} findes ikke med forespørgslen <{query}>!" -#: core/models.py:1413 +#: core/models.py:1299 msgid "promocode does not exist" msgstr "Promokode findes ikke" -#: core/models.py:1419 +#: core/models.py:1305 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:1438 +#: core/models.py:1324 msgid "address does not exist" msgstr "Adressen findes ikke" -#: core/models.py:1459 core/models.py:1528 +#: core/models.py:1345 core/models.py:1414 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:1462 core/models.py:1524 +#: core/models.py:1348 core/models.py:1410 msgid "invalid force value" msgstr "Ugyldig kraftværdi" -#: core/models.py:1468 core/models.py:1531 +#: core/models.py:1354 core/models.py:1417 msgid "you cannot purchase an empty order!" msgstr "Du kan ikke købe en tom ordre!" -#: core/models.py:1487 +#: core/models.py:1373 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:1501 +#: core/models.py:1387 msgid "a user without a balance cannot buy with balance" msgstr "En bruger uden saldo kan ikke købe med saldo!" -#: core/models.py:1506 +#: core/models.py:1392 msgid "insufficient funds to complete the order" msgstr "Utilstrækkelige midler til at gennemføre ordren" -#: core/models.py:1540 +#: core/models.py:1426 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2189,152 +2274,206 @@ msgstr "" "du kan ikke købe uden registrering, angiv venligst følgende oplysninger: " "kundens navn, kundens e-mail, kundens telefonnummer" -#: core/models.py:1549 +#: core/models.py:1435 #, 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:1674 +#: core/models.py:1533 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" +"Repræsenterer produkter forbundet med ordrer og deres attributter. " +"OrderProduct-modellen vedligeholder oplysninger om et produkt, der er en del" +" af en ordre, herunder detaljer som købspris, antal, produktattributter og " +"status. Den administrerer notifikationer til brugeren og administratorer og " +"håndterer operationer som f.eks. at returnere produktsaldoen eller tilføje " +"feedback. Modellen indeholder også metoder og egenskaber, der understøtter " +"forretningslogik, f.eks. beregning af den samlede pris eller generering af " +"en download-URL for digitale produkter. Modellen integreres med Order- og " +"Product-modellerne og gemmer en reference til dem." + +#: core/models.py:1548 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:1675 +#: core/models.py:1549 msgid "purchase price at order time" msgstr "Købspris på bestillingstidspunktet" -#: core/models.py:1680 +#: core/models.py:1554 msgid "internal comments for admins about this ordered product" msgstr "Interne kommentarer til administratorer om dette bestilte produkt" -#: core/models.py:1681 +#: core/models.py:1555 msgid "internal comments" msgstr "Interne kommentarer" -#: core/models.py:1687 +#: core/models.py:1561 msgid "user notifications" msgstr "Notifikationer til brugere" -#: core/models.py:1692 +#: core/models.py:1566 msgid "json representation of this item's attributes" msgstr "JSON-repræsentation af dette elements attributter" -#: core/models.py:1693 +#: core/models.py:1567 msgid "ordered product attributes" msgstr "Bestilte produktattributter" -#: core/models.py:1698 +#: core/models.py:1572 msgid "reference to the parent order that contains this product" msgstr "Henvisning til den overordnede ordre, der indeholder dette produkt" -#: core/models.py:1699 +#: core/models.py:1573 msgid "parent order" msgstr "Forældreordre" -#: core/models.py:1708 +#: core/models.py:1582 msgid "the specific product associated with this order line" msgstr "Det specifikke produkt, der er knyttet til denne ordrelinje" -#: core/models.py:1715 +#: core/models.py:1589 msgid "quantity of this specific product in the order" msgstr "Mængde af dette specifikke produkt i ordren" -#: core/models.py:1716 +#: core/models.py:1590 msgid "product quantity" msgstr "Produktmængde" -#: core/models.py:1723 +#: core/models.py:1597 msgid "current status of this product in the order" msgstr "Aktuel status for dette produkt i bestillingen" -#: core/models.py:1724 +#: core/models.py:1598 msgid "product line status" msgstr "Status for produktlinje" -#: core/models.py:1784 +#: core/models.py:1661 msgid "order product must have an order" msgstr "Orderproduct skal have en tilknyttet ordre!" -#: core/models.py:1786 +#: core/models.py:1663 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Forkert handling angivet for feedback: {action}!" -#: core/models.py:1800 +#: core/models.py:1677 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:1806 +#: core/models.py:1683 msgid "name" msgstr "Navn" -#: core/models.py:1807 +#: core/models.py:1684 msgid "URL of the integration" msgstr "URL til integrationen" -#: core/models.py:1808 +#: core/models.py:1685 msgid "authentication credentials" msgstr "Legitimationsoplysninger til godkendelse" -#: core/models.py:1822 +#: core/models.py:1699 msgid "you can only have one default CRM provider" msgstr "Du kan kun have én standard CRM-udbyder" -#: core/models.py:1826 +#: core/models.py:1703 msgid "CRM" msgstr "CRM" -#: core/models.py:1827 +#: core/models.py:1704 msgid "CRMs" msgstr "CRM'er" -#: core/models.py:1839 +#: core/models.py:1716 msgid "order CRM link" msgstr "Ordrens CRM-link" -#: core/models.py:1840 +#: core/models.py:1717 msgid "orders CRM links" msgstr "Bestillingernes CRM-links" -#: core/models.py:1874 +#: core/models.py:1722 +msgid "" +"Represents the downloading functionality for digital assets associated with " +"orders. The DigitalAssetDownload class provides the ability to manage and " +"access downloads related to order products. It maintains information about " +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." +msgstr "" +"Repræsenterer downloadfunktionen for digitale aktiver, der er forbundet med " +"ordrer. DigitalAssetDownload-klassen giver mulighed for at administrere og " +"få adgang til downloads relateret til ordreprodukter. Den vedligeholder " +"oplysninger om det tilknyttede ordreprodukt, antallet af downloads, og om " +"aktivet er offentligt synligt. Den indeholder en metode til at generere en " +"URL til download af aktivet, når den tilknyttede ordre har status som " +"afsluttet." + +#: core/models.py:1736 msgid "download" msgstr "Download" -#: core/models.py:1875 +#: core/models.py:1737 msgid "downloads" msgstr "Downloads" -#: core/models.py:1883 +#: core/models.py:1745 msgid "you can not download a digital asset for a non-finished order" msgstr "Du kan ikke downloade et digitalt aktiv for en ikke-færdiggjort ordre" -#: core/models.py:1913 +#: core/models.py:1754 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." +msgstr "" +"Håndterer brugerfeedback for produkter. Denne klasse er designet til at " +"indfange og gemme brugerfeedback for specifikke produkter, som de har købt. " +"Den indeholder attributter til at gemme brugerkommentarer, en reference til " +"det relaterede produkt i ordren og en brugertildelt vurdering. Klassen " +"bruger databasefelter til effektivt at modellere og administrere " +"feedbackdata." + +#: core/models.py:1766 msgid "user-provided comments about their experience with the product" msgstr "Brugernes kommentarer om deres oplevelse med produktet" -#: core/models.py:1914 +#: core/models.py:1767 msgid "feedback comments" msgstr "Kommentarer til feedback" -#: core/models.py:1921 +#: core/models.py:1774 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:1922 +#: core/models.py:1775 msgid "related order product" msgstr "Relateret ordreprodukt" -#: core/models.py:1927 +#: core/models.py:1780 msgid "user-assigned rating for the product" msgstr "Brugertildelt vurdering af produktet" -#: core/models.py:1928 +#: core/models.py:1781 msgid "product rating" msgstr "Produktvurdering" @@ -2552,17 +2691,17 @@ msgstr "Ugyldig timeout-værdi, den skal være mellem 0 og 216000 sekunder" msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | kontakt os påbegyndt" -#: core/utils/emailing.py:64 +#: core/utils/emailing.py:74 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Ordrebekræftelse" -#: core/utils/emailing.py:99 +#: core/utils/emailing.py:109 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Order Delivered" -#: core/utils/emailing.py:187 +#: core/utils/emailing.py:197 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | promokode givet" @@ -2586,15 +2725,15 @@ msgstr "" msgid "invalid phone number format" msgstr "Ugyldigt telefonnummerformat" -#: core/views.py:481 +#: core/views.py:489 msgid "you can only download the digital asset once" msgstr "Du kan kun downloade det digitale aktiv én gang" -#: core/views.py:539 +#: core/views.py:547 msgid "favicon not found" msgstr "Favicon ikke fundet" -#: core/viewsets.py:1319 +#: core/viewsets.py:1357 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Fejl i geokodning: {e}" diff --git a/core/locale/de_DE/LC_MESSAGES/django.mo b/core/locale/de_DE/LC_MESSAGES/django.mo index 243efe5aea95e5ea7b187c37a9423384b50b1f8b..f74fc3c26d35eef9eec9b2b3366a93ac96e00dcf 100644 GIT binary patch delta 21095 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -90,11 +90,11 @@ msgid "selected items have been deactivated." msgstr "Ausgewählte Artikel wurden deaktiviert!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:712 core/models.py:720 +#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 msgid "attribute value" msgstr "Attribut Wert" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:721 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 msgid "attribute values" msgstr "Attribut Werte" @@ -106,7 +106,7 @@ msgstr "Bild" msgid "images" msgstr "Bilder" -#: core/admin.py:155 core/models.py:457 +#: core/admin.py:155 core/models.py:445 msgid "stock" msgstr "Lagerbestand" @@ -114,11 +114,11 @@ msgstr "Lagerbestand" msgid "stocks" msgstr "Bestände" -#: core/admin.py:166 core/models.py:1735 +#: core/admin.py:166 core/models.py:1609 msgid "order product" msgstr "Produkt bestellen" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1736 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 msgid "order products" msgstr "Produkte bestellen" @@ -335,7 +335,7 @@ msgstr "" "Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare" " Daten zu speichern" -#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:553 +#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:487 #: core/graphene/object_types.py:117 core/graphene/object_types.py:207 #: core/graphene/object_types.py:509 msgid "SEO Meta snapshot" @@ -617,49 +617,7 @@ msgstr "Alle Produkte auflisten (einfache Ansicht)" msgid "(exact) Product UUID" msgstr "(genaue) Produkt-UUID" -#: core/docs/drf/viewsets.py:384 -msgid "(icontains) Product name" -msgstr "(icontains) Produktname" - -#: core/docs/drf/viewsets.py:390 -msgid "(list) Category names, case-insensitive" -msgstr "" -"(Liste) Kategorienamen, Groß- und Kleinschreibung wird nicht berücksichtigt" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Category UUID" -msgstr "(genau) Kategorie UUID" - -#: core/docs/drf/viewsets.py:402 -msgid "(list) Tag names, case-insensitive" -msgstr "" -"(Liste) Tag-Namen, Groß- und Kleinschreibung wird nicht berücksichtigt" - -#: core/docs/drf/viewsets.py:408 -msgid "(gte) Minimum stock price" -msgstr "(gte) Mindestaktienkurs" - -#: core/docs/drf/viewsets.py:414 -msgid "(lte) Maximum stock price" -msgstr "(lte) Maximaler Aktienkurs" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Only active products" -msgstr "(genau) Nur aktive Produkte" - -#: core/docs/drf/viewsets.py:426 -msgid "(iexact) Brand name" -msgstr "(iexact) Markenname" - -#: core/docs/drf/viewsets.py:438 -msgid "(gt) Minimum stock quantity" -msgstr "(gt) Mindestlagermenge" - -#: core/docs/drf/viewsets.py:444 -msgid "(exact) Digital vs. physical" -msgstr "(genau) Digital vs. physisch" - -#: core/docs/drf/viewsets.py:451 +#: core/docs/drf/viewsets.py:385 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -667,74 +625,74 @@ 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:465 core/docs/drf/viewsets.py:466 +#: core/docs/drf/viewsets.py:399 core/docs/drf/viewsets.py:400 msgid "retrieve a single product (detailed view)" msgstr "Ein einzelnes Produkt abrufen (Detailansicht)" -#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:495 -#: core/docs/drf/viewsets.py:511 core/docs/drf/viewsets.py:527 -#: core/docs/drf/viewsets.py:543 core/docs/drf/viewsets.py:559 +#: core/docs/drf/viewsets.py:405 core/docs/drf/viewsets.py:429 +#: core/docs/drf/viewsets.py:445 core/docs/drf/viewsets.py:461 +#: core/docs/drf/viewsets.py:477 core/docs/drf/viewsets.py:493 msgid "Product UUID or slug" msgstr "Produkt UUID oder Slug" -#: core/docs/drf/viewsets.py:481 core/docs/drf/viewsets.py:482 +#: core/docs/drf/viewsets.py:415 core/docs/drf/viewsets.py:416 msgid "create a product" msgstr "Ein Produkt erstellen" -#: core/docs/drf/viewsets.py:489 core/docs/drf/viewsets.py:490 +#: core/docs/drf/viewsets.py:423 core/docs/drf/viewsets.py:424 msgid "rewrite an existing product, preserving non-editable fields" msgstr "" "Umschreiben eines bestehenden Produkts unter Beibehaltung nicht editierbarer" " Felder" -#: core/docs/drf/viewsets.py:505 core/docs/drf/viewsets.py:506 +#: core/docs/drf/viewsets.py:439 core/docs/drf/viewsets.py:440 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:521 core/docs/drf/viewsets.py:522 +#: core/docs/drf/viewsets.py:455 core/docs/drf/viewsets.py:456 msgid "delete a product" msgstr "Ein Produkt löschen" -#: core/docs/drf/viewsets.py:537 core/docs/drf/viewsets.py:538 +#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:472 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:554 +#: core/docs/drf/viewsets.py:488 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:572 +#: core/docs/drf/viewsets.py:506 msgid "list all addresses" msgstr "Alle Adressen auflisten" -#: core/docs/drf/viewsets.py:579 +#: core/docs/drf/viewsets.py:513 msgid "retrieve a single address" msgstr "Eine einzelne Adresse abrufen" -#: core/docs/drf/viewsets.py:586 +#: core/docs/drf/viewsets.py:520 msgid "create a new address" msgstr "Eine neue Adresse erstellen" -#: core/docs/drf/viewsets.py:594 +#: core/docs/drf/viewsets.py:528 msgid "delete an address" msgstr "Eine Adresse löschen" -#: core/docs/drf/viewsets.py:601 +#: core/docs/drf/viewsets.py:535 msgid "update an entire address" msgstr "Eine ganze Adresse aktualisieren" -#: core/docs/drf/viewsets.py:609 +#: core/docs/drf/viewsets.py:543 msgid "partially update an address" msgstr "Teilweise Aktualisierung einer Adresse" -#: core/docs/drf/viewsets.py:617 +#: core/docs/drf/viewsets.py:551 msgid "autocomplete address suggestions" msgstr "Autovervollständigung der Adresseingabe" -#: core/docs/drf/viewsets.py:622 +#: core/docs/drf/viewsets.py:556 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" @@ -742,183 +700,187 @@ msgstr "" "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" -#: core/docs/drf/viewsets.py:628 +#: core/docs/drf/viewsets.py:562 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:641 +#: core/docs/drf/viewsets.py:575 msgid "list all feedbacks (simple view)" msgstr "alle Rückmeldungen auflisten (einfache Ansicht)" -#: core/docs/drf/viewsets.py:645 +#: core/docs/drf/viewsets.py:579 msgid "retrieve a single feedback (detailed view)" msgstr "eine einzelne Rückmeldung abrufen (detaillierte Ansicht)" -#: core/docs/drf/viewsets.py:649 +#: core/docs/drf/viewsets.py:583 msgid "create a feedback" msgstr "ein Feedback erstellen" -#: core/docs/drf/viewsets.py:653 +#: core/docs/drf/viewsets.py:587 msgid "delete a feedback" msgstr "eine Rückmeldung löschen" -#: core/docs/drf/viewsets.py:657 +#: core/docs/drf/viewsets.py:591 msgid "rewrite an existing feedback saving non-editables" msgstr "" "Eine bestehende Kategorie umschreiben und dabei Nicht-Editierbares speichern" -#: core/docs/drf/viewsets.py:661 +#: core/docs/drf/viewsets.py:595 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:668 +#: core/docs/drf/viewsets.py:602 msgid "list all order–product relations (simple view)" msgstr "alle Bestell-Produkt-Beziehungen auflisten (einfache Ansicht)" -#: core/docs/drf/viewsets.py:675 +#: core/docs/drf/viewsets.py:609 msgid "retrieve a single order–product relation (detailed view)" msgstr "eine einzelne Auftrag-Produkt-Relation abrufen (Detailansicht)" -#: core/docs/drf/viewsets.py:682 +#: core/docs/drf/viewsets.py:616 msgid "create a new order–product relation" msgstr "eine neue Auftrag-Produkt-Beziehung erstellen" -#: core/docs/drf/viewsets.py:689 +#: core/docs/drf/viewsets.py:623 msgid "replace an existing order–product relation" msgstr "eine bestehende Auftrag-Produkt-Relation ersetzen" -#: core/docs/drf/viewsets.py:696 +#: core/docs/drf/viewsets.py:630 msgid "partially update an existing order–product relation" msgstr "eine bestehende Auftrag-Produkt-Beziehung teilweise aktualisieren" -#: core/docs/drf/viewsets.py:703 +#: core/docs/drf/viewsets.py:637 msgid "delete an order–product relation" msgstr "eine Auftrag-Produkt-Beziehung löschen" -#: core/docs/drf/viewsets.py:710 +#: core/docs/drf/viewsets.py:644 msgid "add or remove feedback on an order–product relation" msgstr "" "Feedback zu einer Bestellung-Produkt-Beziehung hinzufügen oder entfernen" -#: core/elasticsearch/__init__.py:105 +#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 msgid "no search term provided." msgstr "Kein Suchbegriff angegeben." -#: core/filters.py:64 core/filters.py:594 core/filters.py:623 +#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +msgid "Search" +msgstr "Suche" + +#: core/filters.py:66 core/filters.py:554 core/filters.py:583 msgid "UUID" msgstr "UUID" -#: core/filters.py:65 core/filters.py:429 core/filters.py:560 +#: core/filters.py:67 core/filters.py:399 core/filters.py:526 msgid "Name" msgstr "Name" -#: core/filters.py:66 core/filters.py:562 +#: core/filters.py:68 core/filters.py:528 msgid "Categories" msgstr "Kategorien" -#: core/filters.py:68 +#: core/filters.py:70 msgid "Categories Slugs" msgstr "Kategorien Schnecken" -#: core/filters.py:69 core/filters.py:437 +#: core/filters.py:71 core/filters.py:407 msgid "Tags" msgstr "Tags" -#: core/filters.py:70 +#: core/filters.py:72 msgid "Min Price" msgstr "Mindestpreis" -#: core/filters.py:71 +#: core/filters.py:73 msgid "Max Price" msgstr "Maximaler Preis" -#: core/filters.py:72 +#: core/filters.py:74 msgid "Is Active" msgstr "Ist aktiv" -#: core/filters.py:73 +#: core/filters.py:75 msgid "Brand" msgstr "Marke" -#: core/filters.py:74 +#: core/filters.py:76 msgid "Attributes" msgstr "Attribute" -#: core/filters.py:75 +#: core/filters.py:77 msgid "Quantity" msgstr "Menge" -#: core/filters.py:76 core/filters.py:431 core/filters.py:561 -#: core/models.py:287 core/models.py:381 core/models.py:534 +#: core/filters.py:78 core/filters.py:401 core/filters.py:527 +#: core/models.py:287 core/models.py:369 core/models.py:522 msgid "Slug" msgstr "Schnecke" -#: core/filters.py:77 +#: core/filters.py:79 msgid "Is Digital" msgstr "Is Digital" -#: core/filters.py:78 +#: core/filters.py:80 msgid "Include sub-categories" msgstr "Unterkategorien einbeziehen" -#: core/filters.py:81 +#: core/filters.py:83 msgid "Include personal ordered" msgstr "Persönlich bestellte Produkte einbeziehen" -#: core/filters.py:83 core/models.py:538 +#: core/filters.py:85 core/models.py:526 msgid "SKU" msgstr "SKU" -#: core/filters.py:166 +#: core/filters.py:161 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:356 +#: core/filters.py:324 msgid "Search (ID, product name or part number)" msgstr "Suche (ID, Produktname oder Teilenummer)" -#: core/filters.py:359 +#: core/filters.py:327 msgid "Bought after (inclusive)" msgstr "Gekauft nach (einschließlich)" -#: core/filters.py:360 +#: core/filters.py:328 msgid "Bought before (inclusive)" msgstr "Gekauft vor (einschließlich)" -#: core/filters.py:363 core/filters.py:410 core/filters.py:625 +#: core/filters.py:331 core/filters.py:378 core/filters.py:585 msgid "User email" msgstr "Benutzer-E-Mail" -#: core/filters.py:364 core/filters.py:411 core/filters.py:603 -#: core/filters.py:624 +#: core/filters.py:332 core/filters.py:379 core/filters.py:563 +#: core/filters.py:584 msgid "User UUID" msgstr "User UUID" -#: core/filters.py:365 +#: core/filters.py:333 msgid "Status" msgstr "Status" -#: core/filters.py:369 +#: core/filters.py:337 msgid "Human Readable ID" msgstr "Human Readable ID" -#: core/filters.py:430 +#: core/filters.py:400 msgid "Parent" msgstr "Elternteil" -#: core/filters.py:434 +#: core/filters.py:404 msgid "Whole category(has at least 1 product or not)" msgstr "Gesamte Kategorie (mit oder ohne mindestens 1 Produkt)" -#: core/filters.py:438 +#: core/filters.py:408 msgid "Level" msgstr "Ebene" -#: core/filters.py:598 +#: core/filters.py:558 msgid "Product UUID" msgstr "Produkt UUID" @@ -975,7 +937,7 @@ msgstr "" "sich gegenseitig aus!" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:821 +#: core/graphene/mutations.py:527 core/viewsets.py:839 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Von der Methode order.buy() kam der falsche Typ: {type(instance)!s}" @@ -1039,37 +1001,37 @@ msgid "add or delete a feedback for orderproduct" msgstr "" "Feedback zu einer Bestellung-Produkt-Beziehung hinzufügen oder entfernen" -#: core/graphene/mutations.py:555 +#: core/graphene/mutations.py:556 msgid "action must be either `add` or `remove`" msgstr "Aktion muss entweder `Add` oder `remove` sein!" -#: core/graphene/mutations.py:558 +#: core/graphene/mutations.py:559 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Bestellprodukt {order_product_uuid} nicht gefunden!" -#: core/graphene/mutations.py:621 +#: core/graphene/mutations.py:622 msgid "original address string provided by the user" msgstr "Vom Benutzer angegebene Originaladresse" -#: core/graphene/mutations.py:655 core/models.py:896 core/models.py:909 -#: core/models.py:1348 core/models.py:1377 core/models.py:1402 -#: core/viewsets.py:824 +#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 +#: core/models.py:1234 core/models.py:1263 core/models.py:1288 +#: core/viewsets.py:842 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} existiert nicht: {uuid}!" -#: core/graphene/mutations.py:668 +#: core/graphene/mutations.py:669 msgid "limit must be between 1 and 10" msgstr "Der Grenzwert muss zwischen 1 und 10 liegen." -#: core/graphene/mutations.py:713 +#: core/graphene/mutations.py:714 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - funktioniert wie ein Zauber" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:666 core/models.py:1234 -#: core/models.py:1809 +#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 +#: core/models.py:1686 msgid "attributes" msgstr "Attribute" @@ -1082,11 +1044,11 @@ 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:224 core/models.py:312 core/models.py:620 +#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:612 msgid "categories" msgstr "Kategorien" -#: core/graphene/object_types.py:124 core/models.py:395 +#: core/graphene/object_types.py:124 core/models.py:383 msgid "brands" msgstr "Marken" @@ -1146,7 +1108,7 @@ msgid "represents feedback from a user." msgstr "Stellt das Feedback eines Benutzers dar." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1228 +#: core/models.py:1110 msgid "notifications" msgstr "Benachrichtigungen" @@ -1154,7 +1116,7 @@ msgstr "Benachrichtigungen" msgid "download url for this order product if applicable" msgstr "Download-Url für dieses Bestellprodukt, falls zutreffend" -#: core/graphene/object_types.py:400 core/models.py:1938 +#: core/graphene/object_types.py:400 core/models.py:1791 msgid "feedback" msgstr "Rückmeldung" @@ -1162,7 +1124,7 @@ msgstr "Rückmeldung" msgid "a list of order products in this order" msgstr "Eine Liste der bestellten Produkte in dieser Reihenfolge" -#: core/graphene/object_types.py:436 core/models.py:1198 +#: core/graphene/object_types.py:436 core/models.py:1080 msgid "billing address" msgstr "Rechnungsadresse" @@ -1190,7 +1152,7 @@ msgstr "Sind alle Produkte in der Bestellung digital" msgid "transactions for this order" msgstr "Vorgänge für diesen Auftrag" -#: core/graphene/object_types.py:465 core/models.py:1262 +#: core/graphene/object_types.py:465 core/models.py:1144 msgid "orders" msgstr "Bestellungen" @@ -1202,15 +1164,15 @@ msgstr "Bild URL" msgid "product's images" msgstr "Bilder des Produkts" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:477 +#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 msgid "category" msgstr "Kategorie" -#: core/graphene/object_types.py:502 core/models.py:1939 +#: core/graphene/object_types.py:502 core/models.py:1792 msgid "feedbacks" msgstr "Rückmeldungen" -#: core/graphene/object_types.py:503 core/models.py:394 core/models.py:486 +#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 msgid "brand" msgstr "Marke" @@ -1242,7 +1204,7 @@ msgstr "Anzahl der Rückmeldungen" msgid "only available for personal orders" msgstr "Produkte nur für persönliche Bestellungen verfügbar" -#: core/graphene/object_types.py:534 core/models.py:548 +#: core/graphene/object_types.py:534 core/models.py:536 msgid "products" msgstr "Produkte" @@ -1254,7 +1216,7 @@ msgstr "Promocodes" msgid "products on sale" msgstr "Zum Verkauf stehende Produkte" -#: core/graphene/object_types.py:651 core/models.py:843 +#: core/graphene/object_types.py:651 core/models.py:784 msgid "promotions" msgstr "Werbeaktionen" @@ -1262,7 +1224,7 @@ msgstr "Werbeaktionen" msgid "vendor" msgstr "Anbieter" -#: core/graphene/object_types.py:656 core/models.py:547 +#: core/graphene/object_types.py:656 core/models.py:535 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1270,11 +1232,11 @@ msgstr "Anbieter" msgid "product" msgstr "Produkt" -#: core/graphene/object_types.py:667 core/models.py:868 +#: core/graphene/object_types.py:667 core/models.py:807 msgid "wishlisted products" msgstr "Auf dem Wunschzettel stehende Produkte" -#: core/graphene/object_types.py:673 core/models.py:885 +#: core/graphene/object_types.py:673 core/models.py:824 msgid "wishlists" msgstr "Wunschzettel" @@ -1282,7 +1244,7 @@ msgstr "Wunschzettel" msgid "tagged products" msgstr "Markierte Produkte" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:492 +#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 msgid "product tags" msgstr "Produkt-Tags" @@ -1393,7 +1355,7 @@ msgstr "Übergeordnete Attributgruppe" msgid "attribute group's name" msgstr "Name der Attributgruppe" -#: core/models.py:100 core/models.py:628 +#: core/models.py:100 core/models.py:620 msgid "attribute group" msgstr "Attribut-Gruppe" @@ -1563,52 +1525,66 @@ msgstr "Beschreibung der Kategorie" msgid "tags that help describe or group this category" msgstr "Tags, die helfen, diese Kategorie zu beschreiben oder zu gruppieren" -#: core/models.py:299 core/models.py:387 +#: core/models.py:299 core/models.py:375 msgid "priority" msgstr "Priorität" -#: core/models.py:340 +#: core/models.py:318 +msgid "" +"Represents a Brand object in the system. This class handles information and " +"attributes related to a brand, including its name, logos, description, " +"associated categories, a unique slug, and priority order. It allows for the " +"organization and representation of brand-related data within the " +"application." +msgstr "" +"Stellt ein Markenobjekt im System dar. Diese Klasse verwaltet Informationen " +"und Attribute in Bezug auf eine Marke, einschließlich ihres Namens, Logos, " +"ihrer Beschreibung, der zugehörigen Kategorien, eines eindeutigen Slugs und " +"der Prioritätsreihenfolge. Sie ermöglicht die Organisation und Darstellung " +"von markenbezogenen Daten innerhalb der Anwendung." + +#: core/models.py:328 msgid "name of this brand" msgstr "Name dieser Marke" -#: core/models.py:341 +#: core/models.py:329 msgid "brand name" msgstr "Markenname" -#: core/models.py:348 +#: core/models.py:336 msgid "upload a logo representing this brand" msgstr "Laden Sie ein Logo hoch, das diese Marke repräsentiert" -#: core/models.py:350 +#: core/models.py:338 msgid "brand small image" msgstr "Marke kleines Bild" -#: core/models.py:356 +#: core/models.py:344 msgid "upload a big logo representing this brand" msgstr "Laden Sie ein großes Logo hoch, das diese Marke repräsentiert" -#: core/models.py:358 +#: core/models.py:346 msgid "brand big image" msgstr "Großes Image der Marke" -#: core/models.py:363 +#: core/models.py:351 msgid "add a detailed description of the brand" msgstr "Fügen Sie eine detaillierte Beschreibung der Marke hinzu" -#: core/models.py:364 +#: core/models.py:352 msgid "brand description" msgstr "Beschreibung der Marke" -#: core/models.py:369 +#: core/models.py:357 msgid "optional categories that this brand is associated with" msgstr "" "Optionale Kategorien, mit denen diese Marke in Verbindung gebracht wird" -#: core/models.py:370 +#: core/models.py:358 msgid "associated categories" msgstr "Kategorien" -#: core/models.py:400 +#: core/models.py:388 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1624,69 +1600,69 @@ msgstr "" "Bestandsverwaltungssystems, um die Nachverfolgung und Bewertung der von " "verschiedenen Anbietern verfügbaren Produkte zu ermöglichen." -#: core/models.py:412 +#: core/models.py:400 msgid "the vendor supplying this product stock" msgstr "Der Verkäufer, der dieses Produkt liefert, hat folgende Bestände" -#: core/models.py:413 +#: core/models.py:401 msgid "associated vendor" msgstr "Zugehöriger Anbieter" -#: core/models.py:417 +#: core/models.py:405 msgid "final price to the customer after markups" msgstr "Endpreis für den Kunden nach Aufschlägen" -#: core/models.py:418 +#: core/models.py:406 msgid "selling price" msgstr "Verkaufspreis" -#: core/models.py:423 +#: core/models.py:411 msgid "the product associated with this stock entry" msgstr "Das mit diesem Bestandseintrag verbundene Produkt" -#: core/models.py:424 core/models.py:708 core/models.py:765 -#: core/models.py:1709 +#: core/models.py:412 core/models.py:683 core/models.py:730 +#: core/models.py:1583 msgid "associated product" msgstr "Zugehöriges Produkt" -#: core/models.py:431 +#: core/models.py:419 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:432 +#: core/models.py:420 msgid "vendor purchase price" msgstr "Einkaufspreis des Verkäufers" -#: core/models.py:436 +#: core/models.py:424 msgid "available quantity of the product in stock" msgstr "Verfügbare Menge des Produkts auf Lager" -#: core/models.py:437 +#: core/models.py:425 msgid "quantity in stock" msgstr "Vorrätige Menge" -#: core/models.py:441 +#: core/models.py:429 msgid "vendor-assigned SKU for identifying the product" msgstr "Vom Hersteller zugewiesene SKU zur Identifizierung des Produkts" -#: core/models.py:442 +#: core/models.py:430 msgid "vendor sku" msgstr "SKU des Verkäufers" -#: core/models.py:448 +#: core/models.py:436 msgid "digital file associated with this stock if applicable" msgstr "" "Digitale Datei, die mit diesem Bestand verbunden ist, falls zutreffend" -#: core/models.py:449 +#: core/models.py:437 msgid "digital file" msgstr "Digitale Datei" -#: core/models.py:458 +#: core/models.py:446 msgid "stock entries" msgstr "Bestandseinträge" -#: core/models.py:463 +#: core/models.py:451 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1708,56 +1684,56 @@ msgstr "" " um Produktdaten und die damit verbundenen Informationen innerhalb einer " "Anwendung zu definieren und zu manipulieren." -#: core/models.py:476 +#: core/models.py:464 msgid "category this product belongs to" msgstr "Kategorie, zu der dieses Produkt gehört" -#: core/models.py:485 +#: core/models.py:473 msgid "optionally associate this product with a brand" msgstr "Optional können Sie dieses Produkt mit einer Marke verknüpfen" -#: core/models.py:491 +#: core/models.py:479 msgid "tags that help describe or group this product" msgstr "Tags, die helfen, dieses Produkt zu beschreiben oder zu gruppieren" -#: core/models.py:496 +#: core/models.py:484 msgid "indicates whether this product is digitally delivered" msgstr "Gibt an, ob dieses Produkt digital geliefert wird" -#: core/models.py:497 +#: core/models.py:485 msgid "is product digital" msgstr "Ist das Produkt digital" -#: core/models.py:503 +#: core/models.py:491 msgid "provide a clear identifying name for the product" msgstr "" "Geben Sie einen eindeutigen Namen zur Identifizierung des Produkts an." -#: core/models.py:504 +#: core/models.py:492 msgid "product name" msgstr "Name des Produkts" -#: core/models.py:509 core/models.py:831 +#: core/models.py:497 core/models.py:772 msgid "add a detailed description of the product" msgstr "Fügen Sie eine detaillierte Beschreibung des Produkts hinzu" -#: core/models.py:510 +#: core/models.py:498 msgid "product description" msgstr "Beschreibung des Produkts" -#: core/models.py:517 +#: core/models.py:505 msgid "part number for this product" msgstr "Teilenummer für dieses Produkt" -#: core/models.py:518 +#: core/models.py:506 msgid "part number" msgstr "Teilnummer" -#: core/models.py:537 +#: core/models.py:525 msgid "stock keeping unit for this product" msgstr "Lagerhaltende Einheit für dieses Produkt" -#: core/models.py:607 +#: core/models.py:599 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 " @@ -1774,298 +1750,410 @@ msgstr "" "Array und Object. Dies ermöglicht eine dynamische und flexible " "Datenstrukturierung." -#: core/models.py:619 +#: core/models.py:611 msgid "category of this attribute" msgstr "Kategorie dieses Attributs" -#: core/models.py:627 +#: core/models.py:619 msgid "group of this attribute" msgstr "Gruppe dieses Attributs" -#: core/models.py:633 +#: core/models.py:625 msgid "string" msgstr "Zeichenfolge" -#: core/models.py:634 +#: core/models.py:626 msgid "integer" msgstr "Integer" -#: core/models.py:635 +#: core/models.py:627 msgid "float" msgstr "Schwimmer" -#: core/models.py:636 +#: core/models.py:628 msgid "boolean" msgstr "Boolesche" -#: core/models.py:637 +#: core/models.py:629 msgid "array" msgstr "Array" -#: core/models.py:638 +#: core/models.py:630 msgid "object" msgstr "Objekt" -#: core/models.py:640 +#: core/models.py:632 msgid "type of the attribute's value" msgstr "Typ des Attributwerts" -#: core/models.py:641 +#: core/models.py:633 msgid "value type" msgstr "Werttyp" -#: core/models.py:646 +#: core/models.py:638 msgid "name of this attribute" msgstr "Name dieses Attributs" -#: core/models.py:647 +#: core/models.py:639 msgid "attribute's name" msgstr "Name des Attributs" -#: core/models.py:653 +#: core/models.py:645 msgid "is filterable" msgstr "ist filterbar" -#: core/models.py:654 +#: core/models.py:646 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:665 core/models.py:700 +#: core/models.py:657 core/models.py:675 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attribut" -#: core/models.py:699 +#: core/models.py:663 +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 "" +"Stellt einen spezifischen Wert für ein Attribut dar, das mit einem Produkt " +"verknüpft ist. Es verknüpft das \"Attribut\" mit einem eindeutigen \"Wert\" " +"und ermöglicht so eine bessere Organisation und dynamische Darstellung der " +"Produktmerkmale." + +#: core/models.py:674 msgid "attribute of this value" msgstr "Attribut dieses Wertes" -#: core/models.py:707 +#: core/models.py:682 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:713 +#: core/models.py:688 msgid "the specific value for this attribute" msgstr "Der spezifische Wert für dieses Attribut" -#: core/models.py:747 +#: core/models.py:701 +msgid "" +"Represents a product image associated with a product in the system. This " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " +"determining their display order. It also includes an accessibility feature " +"with alternative text for the images." +msgstr "" +"Stellt ein Produktbild dar, das mit einem Produkt im System verbunden ist. " +"Diese Klasse dient der Verwaltung von Bildern für Produkte, einschließlich " +"der Funktionen zum Hochladen von Bilddateien, der Zuordnung zu bestimmten " +"Produkten und der Festlegung ihrer Anzeigereihenfolge. Sie enthält auch eine" +" Funktion zur Barrierefreiheit mit alternativem Text für die Bilder." + +#: core/models.py:712 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:748 +#: core/models.py:713 msgid "image alt text" msgstr "Bild-Alt-Text" -#: core/models.py:751 +#: core/models.py:716 msgid "upload the image file for this product" msgstr "Laden Sie die Bilddatei für dieses Produkt hoch" -#: core/models.py:752 core/models.py:777 +#: core/models.py:717 core/models.py:742 msgid "product image" msgstr "Produktbild" -#: core/models.py:758 +#: core/models.py:723 msgid "determines the order in which images are displayed" msgstr "Legt die Reihenfolge fest, in der die Bilder angezeigt werden" -#: core/models.py:759 +#: core/models.py:724 msgid "display priority" msgstr "Priorität anzeigen" -#: core/models.py:764 +#: core/models.py:729 msgid "the product that this image represents" msgstr "Das Produkt, das dieses Bild darstellt" -#: core/models.py:778 +#: core/models.py:743 msgid "product images" msgstr "Produktbilder" -#: core/models.py:819 +#: core/models.py:748 +msgid "" +"Represents a promotional campaign for products with a discount. This class " +"is used to define and manage promotional campaigns that offer a percentage-" +"based discount for products. The class includes attributes for setting the " +"discount rate, providing details about the promotion, and linking it to the " +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." +msgstr "" +"Repräsentiert eine Werbekampagne für Produkte mit einem Rabatt. Diese Klasse" +" wird verwendet, um Werbekampagnen zu definieren und zu verwalten, die einen" +" prozentualen Rabatt für Produkte anbieten. Die Klasse enthält Attribute zum" +" Festlegen des Rabattsatzes, zum Bereitstellen von Details über die " +"Werbeaktion und zum Verknüpfen der Aktion mit den entsprechenden Produkten. " +"Sie ist mit dem Produktkatalog integriert, um die betroffenen Artikel in der" +" Kampagne zu bestimmen." + +#: core/models.py:760 msgid "percentage discount for the selected products" msgstr "Prozentualer Rabatt für die ausgewählten Produkte" -#: core/models.py:820 +#: core/models.py:761 msgid "discount percentage" msgstr "Prozentsatz der Ermäßigung" -#: core/models.py:825 +#: core/models.py:766 msgid "provide a unique name for this promotion" msgstr "Geben Sie einen eindeutigen Namen für diese Aktion an" -#: core/models.py:826 +#: core/models.py:767 msgid "promotion name" msgstr "Name der Aktion" -#: core/models.py:832 +#: core/models.py:773 msgid "promotion description" msgstr "Promotion description" -#: core/models.py:837 +#: core/models.py:778 msgid "select which products are included in this promotion" msgstr "Wählen Sie aus, welche Produkte in dieser Aktion enthalten sind" -#: core/models.py:838 +#: core/models.py:779 msgid "included products" msgstr "Enthaltene Produkte" -#: core/models.py:842 +#: core/models.py:783 msgid "promotion" msgstr "Förderung" -#: core/models.py:867 +#: core/models.py:794 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"class provides functionality to manage a collection of products, supporting " +"operations such as adding and removing products, as well as supporting " +"operations for adding and removing multiple products at once." +msgstr "" +"Stellt die Wunschliste eines Benutzers zum Speichern und Verwalten " +"gewünschter Produkte dar. Die Klasse bietet Funktionen zur Verwaltung einer " +"Sammlung von Produkten und unterstützt Vorgänge wie das Hinzufügen und " +"Entfernen von Produkten sowie das Hinzufügen und Entfernen mehrerer Produkte" +" gleichzeitig." + +#: core/models.py:806 msgid "products that the user has marked as wanted" msgstr "Produkte, die der Benutzer als gewünscht markiert hat" -#: core/models.py:875 +#: core/models.py:814 msgid "user who owns this wishlist" msgstr "Benutzer, dem diese Wunschliste gehört" -#: core/models.py:876 +#: core/models.py:815 msgid "wishlist owner" msgstr "Besitzer der Wishlist" -#: core/models.py:884 +#: core/models.py:823 msgid "wishlist" msgstr "Wunschzettel" -#: core/models.py:951 +#: core/models.py:865 +msgid "" +"Represents a documentary record tied to a product. This class is used to " +"store information about documentaries related to specific products, " +"including file uploads and their metadata. It contains methods and " +"properties to handle the file type and storage path for the documentary " +"files. It extends functionality from specific mixins and provides additional" +" custom features." +msgstr "" +"Stellt einen dokumentarischen Datensatz dar, der an ein Produkt gebunden " +"ist. Diese Klasse wird verwendet, um Informationen über Dokumentationen zu " +"bestimmten Produkten zu speichern, einschließlich Datei-Uploads und deren " +"Metadaten. Sie enthält Methoden und Eigenschaften zur Handhabung des " +"Dateityps und des Speicherpfads für die Dokumentationsdateien. Sie erweitert" +" die Funktionalität von bestimmten Mixins und bietet zusätzliche " +"benutzerdefinierte Funktionen." + +#: core/models.py:878 msgid "documentary" msgstr "Dokumentarfilm" -#: core/models.py:952 +#: core/models.py:879 msgid "documentaries" msgstr "Dokumentarfilme" -#: core/models.py:962 +#: core/models.py:889 msgid "unresolved" msgstr "Ungelöst" -#: core/models.py:1008 +#: core/models.py:894 +msgid "" +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." +msgstr "" +"Stellt eine Adresseinheit dar, die Standortdetails und Assoziationen mit " +"einem Benutzer enthält. Bietet Funktionen für die Speicherung von " +"geografischen und Adressdaten sowie für die Integration mit " +"Geokodierungsdiensten. Diese Klasse ist für die Speicherung detaillierter " +"Adressinformationen mit Komponenten wie Straße, Stadt, Region, Land und " +"Geolocation (Längen- und Breitengrad) konzipiert. Sie unterstützt die " +"Integration mit Geokodierungs-APIs und ermöglicht die Speicherung von rohen " +"API-Antworten zur weiteren Verarbeitung oder Überprüfung. Die Klasse " +"ermöglicht es auch, eine Adresse mit einem Benutzer zu verknüpfen, was die " +"personalisierte Datenverarbeitung erleichtert." + +#: core/models.py:909 msgid "address line for the customer" msgstr "Adresszeile für den Kunden" -#: core/models.py:1009 +#: core/models.py:910 msgid "address line" msgstr "Adresszeile" -#: core/models.py:1011 +#: core/models.py:912 msgid "street" msgstr "Straße" -#: core/models.py:1012 +#: core/models.py:913 msgid "district" msgstr "Bezirk" -#: core/models.py:1013 +#: core/models.py:914 msgid "city" msgstr "Stadt" -#: core/models.py:1014 +#: core/models.py:915 msgid "region" msgstr "Region" -#: core/models.py:1015 +#: core/models.py:916 msgid "postal code" msgstr "Postleitzahl" -#: core/models.py:1016 +#: core/models.py:917 msgid "country" msgstr "Land" -#: core/models.py:1023 +#: core/models.py:924 msgid "geolocation point: (longitude, latitude)" msgstr "Geolocation Point(Längengrad, Breitengrad)" -#: core/models.py:1026 +#: core/models.py:927 msgid "full JSON response from geocoder for this address" msgstr "Vollständige JSON-Antwort vom Geocoder für diese Adresse" -#: core/models.py:1031 +#: core/models.py:932 msgid "stored JSON response from the geocoding service" msgstr "Gespeicherte JSON-Antwort vom Geokodierungsdienst" -#: core/models.py:1039 +#: core/models.py:940 msgid "address" msgstr "Adresse" -#: core/models.py:1040 +#: core/models.py:941 msgid "addresses" msgstr "Adressen" -#: core/models.py:1085 +#: core/models.py:953 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" +"Stellt einen Aktionscode dar, der für Rabatte verwendet werden kann, und " +"verwaltet seine Gültigkeit, die Art des Rabatts und die Anwendung. Die " +"Klasse PromoCode speichert Details zu einem Aktionscode, einschließlich " +"seines eindeutigen Bezeichners, der Rabatteigenschaften (Betrag oder " +"Prozentsatz), der Gültigkeitsdauer, des zugehörigen Benutzers (falls " +"vorhanden) und des Status seiner Verwendung. Sie enthält Funktionen zur " +"Validierung und Anwendung des Promo-Codes auf eine Bestellung, wobei " +"sichergestellt wird, dass die Einschränkungen eingehalten werden." + +#: core/models.py:967 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:1086 +#: core/models.py:968 msgid "promo code identifier" msgstr "Kennung des Promo-Codes" -#: core/models.py:1093 +#: core/models.py:975 msgid "fixed discount amount applied if percent is not used" msgstr "" "Fester Rabattbetrag, der angewandt wird, wenn kein Prozentsatz verwendet " "wird" -#: core/models.py:1094 +#: core/models.py:976 msgid "fixed discount amount" msgstr "Fester Rabattbetrag" -#: core/models.py:1100 +#: core/models.py:982 msgid "percentage discount applied if fixed amount is not used" msgstr "Prozentualer Rabatt, wenn der Festbetrag nicht verwendet wird" -#: core/models.py:1101 +#: core/models.py:983 msgid "percentage discount" msgstr "Prozentualer Rabatt" -#: core/models.py:1106 +#: core/models.py:988 msgid "timestamp when the promocode expires" msgstr "Zeitstempel, wann der Promocode abläuft" -#: core/models.py:1107 +#: core/models.py:989 msgid "end validity time" msgstr "Ende der Gültigkeitsdauer" -#: core/models.py:1112 +#: core/models.py:994 msgid "timestamp from which this promocode is valid" msgstr "Zeitstempel, ab dem dieser Promocode gültig ist" -#: core/models.py:1113 +#: core/models.py:995 msgid "start validity time" msgstr "Beginn der Gültigkeitsdauer" -#: core/models.py:1118 +#: core/models.py:1000 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:1119 +#: core/models.py:1001 msgid "usage timestamp" msgstr "Zeitstempel der Verwendung" -#: core/models.py:1124 +#: core/models.py:1006 msgid "user assigned to this promocode if applicable" msgstr "Diesem Promocode zugewiesener Benutzer, falls zutreffend" -#: core/models.py:1125 +#: core/models.py:1007 msgid "assigned user" msgstr "Zugewiesener Benutzer" -#: core/models.py:1132 +#: core/models.py:1014 msgid "promo code" msgstr "Promo-Code" -#: core/models.py:1133 +#: core/models.py:1015 msgid "promo codes" msgstr "Promo-Codes" -#: core/models.py:1140 +#: core/models.py:1022 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2073,16 +2161,16 @@ msgstr "" "Es sollte nur eine Art von Rabatt definiert werden (Betrag oder " "Prozentsatz), aber nicht beides oder keines von beiden." -#: core/models.py:1155 +#: core/models.py:1037 msgid "promocode already used" msgstr "Promocode wurde bereits verwendet" -#: core/models.py:1171 +#: core/models.py:1053 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Ungültiger Rabatttyp für den Promocode {self.uuid}!" -#: core/models.py:1180 +#: core/models.py:1062 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 " @@ -2100,143 +2188,143 @@ msgstr "" "aktualisiert werden. Ebenso unterstützt die Funktionalität die Verwaltung " "der Produkte im Lebenszyklus der Bestellung." -#: core/models.py:1197 +#: core/models.py:1079 msgid "the billing address used for this order" msgstr "Die für diese Bestellung verwendete Rechnungsadresse" -#: core/models.py:1205 +#: core/models.py:1087 msgid "optional promo code applied to this order" msgstr "Optionaler Promo-Code für diese Bestellung" -#: core/models.py:1206 +#: core/models.py:1088 msgid "applied promo code" msgstr "Angewandter Promo-Code" -#: core/models.py:1214 +#: core/models.py:1096 msgid "the shipping address used for this order" msgstr "Die für diese Bestellung verwendete Lieferadresse" -#: core/models.py:1215 +#: core/models.py:1097 msgid "shipping address" msgstr "Lieferadresse" -#: core/models.py:1221 +#: core/models.py:1103 msgid "current status of the order in its lifecycle" msgstr "Aktueller Status des Auftrags in seinem Lebenszyklus" -#: core/models.py:1222 +#: core/models.py:1104 msgid "order status" msgstr "Status der Bestellung" -#: core/models.py:1227 core/models.py:1686 +#: core/models.py:1109 core/models.py:1560 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:1233 +#: core/models.py:1115 msgid "json representation of order attributes for this order" msgstr "JSON-Darstellung der Auftragsattribute für diesen Auftrag" -#: core/models.py:1239 +#: core/models.py:1121 msgid "the user who placed the order" msgstr "Der Benutzer, der die Bestellung aufgegeben hat" -#: core/models.py:1240 +#: core/models.py:1122 msgid "user" msgstr "Benutzer" -#: core/models.py:1246 +#: core/models.py:1128 msgid "the timestamp when the order was finalized" msgstr "Der Zeitstempel, zu dem der Auftrag abgeschlossen wurde" -#: core/models.py:1247 +#: core/models.py:1129 msgid "buy time" msgstr "Zeit kaufen" -#: core/models.py:1254 +#: core/models.py:1136 msgid "a human-readable identifier for the order" msgstr "Ein von Menschen lesbarer Identifikator für den Auftrag" -#: core/models.py:1255 +#: core/models.py:1137 msgid "human readable id" msgstr "menschenlesbare ID" -#: core/models.py:1261 +#: core/models.py:1143 msgid "order" msgstr "Bestellung" -#: core/models.py:1282 +#: core/models.py:1168 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:1316 +#: core/models.py:1202 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:1321 +#: core/models.py:1207 msgid "you cannot add inactive products to order" msgstr "Sie können keine inaktiven Produkte zur Bestellung hinzufügen" -#: core/models.py:1338 +#: core/models.py:1224 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:1360 core/models.py:1385 core/models.py:1393 +#: core/models.py:1246 core/models.py:1271 core/models.py:1279 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:1381 +#: core/models.py:1267 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} existiert nicht mit Abfrage <{query}>!" -#: core/models.py:1413 +#: core/models.py:1299 msgid "promocode does not exist" msgstr "Promocode existiert nicht" -#: core/models.py:1419 +#: core/models.py:1305 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:1438 +#: core/models.py:1324 msgid "address does not exist" msgstr "Adresse ist nicht vorhanden" -#: core/models.py:1459 core/models.py:1528 +#: core/models.py:1345 core/models.py:1414 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:1462 core/models.py:1524 +#: core/models.py:1348 core/models.py:1410 msgid "invalid force value" msgstr "Ungültiger Force-Wert" -#: core/models.py:1468 core/models.py:1531 +#: core/models.py:1354 core/models.py:1417 msgid "you cannot purchase an empty order!" msgstr "Sie können keine leere Bestellung kaufen!" -#: core/models.py:1487 +#: core/models.py:1373 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:1501 +#: core/models.py:1387 msgid "a user without a balance cannot buy with balance" msgstr "Ein Benutzer ohne Guthaben kann nicht mit Guthaben kaufen!" -#: core/models.py:1506 +#: core/models.py:1392 msgid "insufficient funds to complete the order" msgstr "Unzureichende Mittel für die Ausführung des Auftrags" -#: core/models.py:1540 +#: core/models.py:1426 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2244,156 +2332,211 @@ msgstr "" "Sie können nicht ohne Registrierung kaufen, bitte geben Sie die folgenden " "Informationen an: Kundenname, Kunden-E-Mail, Kunden-Telefonnummer" -#: core/models.py:1549 +#: core/models.py:1435 #, 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:1674 +#: core/models.py:1533 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" +"Stellt die mit Bestellungen verbundenen Produkte und ihre Attribute dar. Das" +" OrderProduct-Modell verwaltet Informationen über ein Produkt, das Teil " +"einer Bestellung ist, einschließlich Details wie Kaufpreis, Menge, " +"Produktattribute und Status. Es verwaltet Benachrichtigungen für Benutzer " +"und Administratoren und führt Vorgänge wie die Rückgabe des Produktsaldos " +"oder das Hinzufügen von Feedback durch. Dieses Modell bietet auch Methoden " +"und Eigenschaften, die die Geschäftslogik unterstützen, z. B. die Berechnung" +" des Gesamtpreises oder die Generierung einer Download-URL für digitale " +"Produkte. Das Modell ist mit den Modellen \"Order\" und \"Product\" " +"integriert und speichert einen Verweis auf diese." + +#: core/models.py:1548 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:1675 +#: core/models.py:1549 msgid "purchase price at order time" msgstr "Einkaufspreis zum Zeitpunkt der Bestellung" -#: core/models.py:1680 +#: core/models.py:1554 msgid "internal comments for admins about this ordered product" msgstr "Interne Kommentare für Administratoren zu diesem bestellten Produkt" -#: core/models.py:1681 +#: core/models.py:1555 msgid "internal comments" msgstr "Interne Kommentare" -#: core/models.py:1687 +#: core/models.py:1561 msgid "user notifications" msgstr "Benutzerbenachrichtigungen" -#: core/models.py:1692 +#: core/models.py:1566 msgid "json representation of this item's attributes" msgstr "JSON-Darstellung der Attribute dieses Artikels" -#: core/models.py:1693 +#: core/models.py:1567 msgid "ordered product attributes" msgstr "Bestellte Produktattribute" -#: core/models.py:1698 +#: core/models.py:1572 msgid "reference to the parent order that contains this product" msgstr "Verweis auf den übergeordneten Auftrag, der dieses Produkt enthält" -#: core/models.py:1699 +#: core/models.py:1573 msgid "parent order" msgstr "Übergeordneter Auftrag" -#: core/models.py:1708 +#: core/models.py:1582 msgid "the specific product associated with this order line" msgstr "Das spezifische Produkt, das mit dieser Auftragszeile verbunden ist" -#: core/models.py:1715 +#: core/models.py:1589 msgid "quantity of this specific product in the order" msgstr "Menge dieses spezifischen Produkts in der Bestellung" -#: core/models.py:1716 +#: core/models.py:1590 msgid "product quantity" msgstr "Produktmenge" -#: core/models.py:1723 +#: core/models.py:1597 msgid "current status of this product in the order" msgstr "Aktueller Status dieses Produkts im Auftrag" -#: core/models.py:1724 +#: core/models.py:1598 msgid "product line status" msgstr "Status der Produktlinie" -#: core/models.py:1784 +#: core/models.py:1661 msgid "order product must have an order" msgstr "Das Bestellprodukt muss eine zugehörige Bestellung haben!" -#: core/models.py:1786 +#: core/models.py:1663 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Falsche Aktion für Feedback angegeben: {action}!" -#: core/models.py:1800 +#: core/models.py:1677 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:1806 +#: core/models.py:1683 msgid "name" msgstr "Name" -#: core/models.py:1807 +#: core/models.py:1684 msgid "URL of the integration" msgstr "URL der Integration" -#: core/models.py:1808 +#: core/models.py:1685 msgid "authentication credentials" msgstr "Anmeldeinformationen zur Authentifizierung" -#: core/models.py:1822 +#: core/models.py:1699 msgid "you can only have one default CRM provider" msgstr "Sie können nur einen Standard-CRM-Anbieter haben" -#: core/models.py:1826 +#: core/models.py:1703 msgid "CRM" msgstr "CRM" -#: core/models.py:1827 +#: core/models.py:1704 msgid "CRMs" msgstr "CRMs" -#: core/models.py:1839 +#: core/models.py:1716 msgid "order CRM link" msgstr "CRM-Link der Bestellung" -#: core/models.py:1840 +#: core/models.py:1717 msgid "orders CRM links" msgstr "CRM-Links der Bestellungen" -#: core/models.py:1874 +#: core/models.py:1722 +msgid "" +"Represents the downloading functionality for digital assets associated with " +"orders. The DigitalAssetDownload class provides the ability to manage and " +"access downloads related to order products. It maintains information about " +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." +msgstr "" +"Stellt die Download-Funktionalität für digitale Assets in Verbindung mit " +"Bestellungen dar. Die Klasse DigitalAssetDownload ermöglicht die Verwaltung " +"und den Zugriff auf Downloads im Zusammenhang mit Auftragsprodukten. Sie " +"verwaltet Informationen über das zugehörige Auftragsprodukt, die Anzahl der " +"Downloads und ob das Asset öffentlich sichtbar ist. Sie enthält eine Methode" +" zur Generierung einer URL für das Herunterladen des Assets, wenn sich die " +"zugehörige Bestellung in einem abgeschlossenen Status befindet." + +#: core/models.py:1736 msgid "download" msgstr "Herunterladen" -#: core/models.py:1875 +#: core/models.py:1737 msgid "downloads" msgstr "Herunterladen" -#: core/models.py:1883 +#: core/models.py:1745 msgid "you can not download a digital asset for a non-finished order" msgstr "" "Sie können kein digitales Asset für eine nicht abgeschlossene Bestellung " "herunterladen" -#: core/models.py:1913 +#: core/models.py:1754 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." +msgstr "" +"Verwaltet Benutzerfeedback für Produkte. Diese Klasse dient der Erfassung " +"und Speicherung von Benutzerfeedback für bestimmte Produkte, die sie gekauft" +" haben. Sie enthält Attribute zum Speichern von Benutzerkommentaren, einen " +"Verweis auf das entsprechende Produkt in der Bestellung und eine vom " +"Benutzer zugewiesene Bewertung. Die Klasse verwendet Datenbankfelder, um " +"Feedbackdaten effektiv zu modellieren und zu verwalten." + +#: core/models.py:1766 msgid "user-provided comments about their experience with the product" msgstr "Kommentare der Nutzer über ihre Erfahrungen mit dem Produkt" -#: core/models.py:1914 +#: core/models.py:1767 msgid "feedback comments" msgstr "Kommentare zum Feedback" -#: core/models.py:1921 +#: core/models.py:1774 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:1922 +#: core/models.py:1775 msgid "related order product" msgstr "Produkt zur Bestellung" -#: core/models.py:1927 +#: core/models.py:1780 msgid "user-assigned rating for the product" msgstr "Vom Benutzer zugewiesene Bewertung für das Produkt" -#: core/models.py:1928 +#: core/models.py:1781 msgid "product rating" msgstr "Produktbewertung" @@ -2613,17 +2756,17 @@ msgstr "" msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | Kontakt eingeleitet" -#: core/utils/emailing.py:64 +#: core/utils/emailing.py:74 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Auftragsbestätigung" -#: core/utils/emailing.py:99 +#: core/utils/emailing.py:109 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Bestellung ausgeliefert" -#: core/utils/emailing.py:187 +#: core/utils/emailing.py:197 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | Promocode gewährt" @@ -2647,15 +2790,15 @@ msgstr "" msgid "invalid phone number format" msgstr "Ungültiges Rufnummernformat" -#: core/views.py:481 +#: core/views.py:489 msgid "you can only download the digital asset once" msgstr "Sie können das digitale Asset nur einmal herunterladen" -#: core/views.py:539 +#: core/views.py:547 msgid "favicon not found" msgstr "Favicon nicht gefunden" -#: core/viewsets.py:1319 +#: core/viewsets.py:1357 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Geocodierungsfehler: {e}" diff --git a/core/locale/en_GB/LC_MESSAGES/django.mo b/core/locale/en_GB/LC_MESSAGES/django.mo index 4735aea9e8071834a8384440e74e979db0fd6ab7..5db53afc01febfe5aecb2d727780951fe8e6b88f 100644 GIT binary patch literal 64701 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 T3J3Y`_mMv{CqMINX7axQcp!;a delta 12616 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -92,11 +92,11 @@ msgid "selected items have been deactivated." msgstr "Selected items have been deactivated!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:712 core/models.py:720 +#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 msgid "attribute value" msgstr "Attribute Value" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:721 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 msgid "attribute values" msgstr "Attribute Values" @@ -108,7 +108,7 @@ msgstr "Image" msgid "images" msgstr "Images" -#: core/admin.py:155 core/models.py:457 +#: core/admin.py:155 core/models.py:445 msgid "stock" msgstr "Stock" @@ -116,11 +116,11 @@ msgstr "Stock" msgid "stocks" msgstr "Stocks" -#: core/admin.py:166 core/models.py:1735 +#: core/admin.py:166 core/models.py:1609 msgid "order product" msgstr "Order Product" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1736 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 msgid "order products" msgstr "Order Products" @@ -324,7 +324,7 @@ msgstr "Rewrite an existing category saving non-editables" 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:155 core/docs/drf/viewsets.py:553 +#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:487 #: core/graphene/object_types.py:117 core/graphene/object_types.py:207 #: core/graphene/object_types.py:509 msgid "SEO Meta snapshot" @@ -580,47 +580,7 @@ msgstr "List all products (simple view)" msgid "(exact) Product UUID" msgstr "(exact) Product UUID" -#: core/docs/drf/viewsets.py:384 -msgid "(icontains) Product name" -msgstr "(icontains) Product name" - -#: core/docs/drf/viewsets.py:390 -msgid "(list) Category names, case-insensitive" -msgstr "(list) Category names, case-insensitive" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Category UUID" -msgstr "(exact) Category UUID" - -#: core/docs/drf/viewsets.py:402 -msgid "(list) Tag names, case-insensitive" -msgstr "(list) Tag names, case-insensitive" - -#: core/docs/drf/viewsets.py:408 -msgid "(gte) Minimum stock price" -msgstr "(gte) Minimum stock price" - -#: core/docs/drf/viewsets.py:414 -msgid "(lte) Maximum stock price" -msgstr "(lte) Maximum stock price" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Only active products" -msgstr "(exact) Only active products" - -#: core/docs/drf/viewsets.py:426 -msgid "(iexact) Brand name" -msgstr "(iexact) Brand name" - -#: core/docs/drf/viewsets.py:438 -msgid "(gt) Minimum stock quantity" -msgstr "(gt) Minimum stock quantity" - -#: core/docs/drf/viewsets.py:444 -msgid "(exact) Digital vs. physical" -msgstr "(exact) Digital vs. physical" - -#: core/docs/drf/viewsets.py:451 +#: core/docs/drf/viewsets.py:385 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -628,245 +588,249 @@ 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:465 core/docs/drf/viewsets.py:466 +#: core/docs/drf/viewsets.py:399 core/docs/drf/viewsets.py:400 msgid "retrieve a single product (detailed view)" msgstr "Retrieve a single product (detailed view)" -#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:495 -#: core/docs/drf/viewsets.py:511 core/docs/drf/viewsets.py:527 -#: core/docs/drf/viewsets.py:543 core/docs/drf/viewsets.py:559 +#: core/docs/drf/viewsets.py:405 core/docs/drf/viewsets.py:429 +#: core/docs/drf/viewsets.py:445 core/docs/drf/viewsets.py:461 +#: core/docs/drf/viewsets.py:477 core/docs/drf/viewsets.py:493 msgid "Product UUID or slug" msgstr "Product UUID or Slug" -#: core/docs/drf/viewsets.py:481 core/docs/drf/viewsets.py:482 +#: core/docs/drf/viewsets.py:415 core/docs/drf/viewsets.py:416 msgid "create a product" msgstr "Create a product" -#: core/docs/drf/viewsets.py:489 core/docs/drf/viewsets.py:490 +#: core/docs/drf/viewsets.py:423 core/docs/drf/viewsets.py:424 msgid "rewrite an existing product, preserving non-editable fields" msgstr "Rewrite an existing product, preserving non-editable fields" -#: core/docs/drf/viewsets.py:505 core/docs/drf/viewsets.py:506 +#: core/docs/drf/viewsets.py:439 core/docs/drf/viewsets.py:440 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:521 core/docs/drf/viewsets.py:522 +#: core/docs/drf/viewsets.py:455 core/docs/drf/viewsets.py:456 msgid "delete a product" msgstr "Delete a product" -#: core/docs/drf/viewsets.py:537 core/docs/drf/viewsets.py:538 +#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:472 msgid "lists all permitted feedbacks for a product" msgstr "lists all permitted feedbacks for a product" -#: core/docs/drf/viewsets.py:554 +#: core/docs/drf/viewsets.py:488 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:572 +#: core/docs/drf/viewsets.py:506 msgid "list all addresses" msgstr "List all addresses" -#: core/docs/drf/viewsets.py:579 +#: core/docs/drf/viewsets.py:513 msgid "retrieve a single address" msgstr "Retrieve a single address" -#: core/docs/drf/viewsets.py:586 +#: core/docs/drf/viewsets.py:520 msgid "create a new address" msgstr "Create a new address" -#: core/docs/drf/viewsets.py:594 +#: core/docs/drf/viewsets.py:528 msgid "delete an address" msgstr "Delete an address" -#: core/docs/drf/viewsets.py:601 +#: core/docs/drf/viewsets.py:535 msgid "update an entire address" msgstr "Update an entire address" -#: core/docs/drf/viewsets.py:609 +#: core/docs/drf/viewsets.py:543 msgid "partially update an address" msgstr "Partially update an address" -#: core/docs/drf/viewsets.py:617 +#: core/docs/drf/viewsets.py:551 msgid "autocomplete address suggestions" msgstr "Autocomplete address input" -#: core/docs/drf/viewsets.py:622 +#: core/docs/drf/viewsets.py:556 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:628 +#: core/docs/drf/viewsets.py:562 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:641 +#: core/docs/drf/viewsets.py:575 msgid "list all feedbacks (simple view)" msgstr "list all feedbacks (simple view)" -#: core/docs/drf/viewsets.py:645 +#: core/docs/drf/viewsets.py:579 msgid "retrieve a single feedback (detailed view)" msgstr "retrieve a single feedback (detailed view)" -#: core/docs/drf/viewsets.py:649 +#: core/docs/drf/viewsets.py:583 msgid "create a feedback" msgstr "create a feedback" -#: core/docs/drf/viewsets.py:653 +#: core/docs/drf/viewsets.py:587 msgid "delete a feedback" msgstr "delete a feedback" -#: core/docs/drf/viewsets.py:657 +#: core/docs/drf/viewsets.py:591 msgid "rewrite an existing feedback saving non-editables" msgstr "rewrite an existing feedback saving non-editables" -#: core/docs/drf/viewsets.py:661 +#: core/docs/drf/viewsets.py:595 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:668 +#: core/docs/drf/viewsets.py:602 msgid "list all order–product relations (simple view)" msgstr "list all order–product relations (simple view)" -#: core/docs/drf/viewsets.py:675 +#: core/docs/drf/viewsets.py:609 msgid "retrieve a single order–product relation (detailed view)" msgstr "retrieve a single order–product relation (detailed view)" -#: core/docs/drf/viewsets.py:682 +#: core/docs/drf/viewsets.py:616 msgid "create a new order–product relation" msgstr "create a new order–product relation" -#: core/docs/drf/viewsets.py:689 +#: core/docs/drf/viewsets.py:623 msgid "replace an existing order–product relation" msgstr "replace an existing order–product relation" -#: core/docs/drf/viewsets.py:696 +#: core/docs/drf/viewsets.py:630 msgid "partially update an existing order–product relation" msgstr "partially update an existing order–product relation" -#: core/docs/drf/viewsets.py:703 +#: core/docs/drf/viewsets.py:637 msgid "delete an order–product relation" msgstr "delete an order–product relation" -#: core/docs/drf/viewsets.py:710 +#: core/docs/drf/viewsets.py:644 msgid "add or remove feedback on an order–product relation" msgstr "add or remove feedback on an order–product relation" -#: core/elasticsearch/__init__.py:105 +#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 msgid "no search term provided." msgstr "No search term provided." -#: core/filters.py:64 core/filters.py:594 core/filters.py:623 +#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +msgid "Search" +msgstr "Search" + +#: core/filters.py:66 core/filters.py:554 core/filters.py:583 msgid "UUID" msgstr "UUID" -#: core/filters.py:65 core/filters.py:429 core/filters.py:560 +#: core/filters.py:67 core/filters.py:399 core/filters.py:526 msgid "Name" msgstr "Name" -#: core/filters.py:66 core/filters.py:562 +#: core/filters.py:68 core/filters.py:528 msgid "Categories" msgstr "Categories" -#: core/filters.py:68 +#: core/filters.py:70 msgid "Categories Slugs" msgstr "Categories Slugs" -#: core/filters.py:69 core/filters.py:437 +#: core/filters.py:71 core/filters.py:407 msgid "Tags" msgstr "Tags" -#: core/filters.py:70 +#: core/filters.py:72 msgid "Min Price" msgstr "Min Price" -#: core/filters.py:71 +#: core/filters.py:73 msgid "Max Price" msgstr "Max Price" -#: core/filters.py:72 +#: core/filters.py:74 msgid "Is Active" msgstr "Is Active" -#: core/filters.py:73 +#: core/filters.py:75 msgid "Brand" msgstr "Brand" -#: core/filters.py:74 +#: core/filters.py:76 msgid "Attributes" msgstr "Attributes" -#: core/filters.py:75 +#: core/filters.py:77 msgid "Quantity" msgstr "Quantity" -#: core/filters.py:76 core/filters.py:431 core/filters.py:561 -#: core/models.py:287 core/models.py:381 core/models.py:534 +#: core/filters.py:78 core/filters.py:401 core/filters.py:527 +#: core/models.py:287 core/models.py:369 core/models.py:522 msgid "Slug" msgstr "Slug" -#: core/filters.py:77 +#: core/filters.py:79 msgid "Is Digital" msgstr "Is Digital" -#: core/filters.py:78 +#: core/filters.py:80 msgid "Include sub-categories" msgstr "Include sub-categories" -#: core/filters.py:81 +#: core/filters.py:83 msgid "Include personal ordered" msgstr "Include personal ordered products" -#: core/filters.py:83 core/models.py:538 +#: core/filters.py:85 core/models.py:526 msgid "SKU" msgstr "SKU" -#: core/filters.py:166 +#: core/filters.py:161 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:356 +#: core/filters.py:324 msgid "Search (ID, product name or part number)" msgstr "Search (ID, product name or part number)" -#: core/filters.py:359 +#: core/filters.py:327 msgid "Bought after (inclusive)" msgstr "Bought after (inclusive)" -#: core/filters.py:360 +#: core/filters.py:328 msgid "Bought before (inclusive)" msgstr "Bought before (inclusive)" -#: core/filters.py:363 core/filters.py:410 core/filters.py:625 +#: core/filters.py:331 core/filters.py:378 core/filters.py:585 msgid "User email" msgstr "User email" -#: core/filters.py:364 core/filters.py:411 core/filters.py:603 -#: core/filters.py:624 +#: core/filters.py:332 core/filters.py:379 core/filters.py:563 +#: core/filters.py:584 msgid "User UUID" msgstr "User UUID" -#: core/filters.py:365 +#: core/filters.py:333 msgid "Status" msgstr "Status" -#: core/filters.py:369 +#: core/filters.py:337 msgid "Human Readable ID" msgstr "Human Readable ID" -#: core/filters.py:430 +#: core/filters.py:400 msgid "Parent" msgstr "Parent" -#: core/filters.py:434 +#: core/filters.py:404 msgid "Whole category(has at least 1 product or not)" msgstr "Whole category(has at least 1 product or not)" -#: core/filters.py:438 +#: core/filters.py:408 msgid "Level" msgstr "Level" -#: core/filters.py:598 +#: core/filters.py:558 msgid "Product UUID" msgstr "Product UUID" @@ -921,7 +885,7 @@ 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:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:821 +#: core/graphene/mutations.py:527 core/viewsets.py:839 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Wrong type came from order.buy() method: {type(instance)!s}" @@ -984,37 +948,37 @@ msgstr "" msgid "add or delete a feedback for orderproduct" msgstr "Add or delete a feedback for the orderproduct" -#: core/graphene/mutations.py:555 +#: core/graphene/mutations.py:556 msgid "action must be either `add` or `remove`" msgstr "Action must be either `add` or `remove`!" -#: core/graphene/mutations.py:558 +#: core/graphene/mutations.py:559 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderproduct {order_product_uuid} not found!" -#: core/graphene/mutations.py:621 +#: core/graphene/mutations.py:622 msgid "original address string provided by the user" msgstr "Original address string provided by the user" -#: core/graphene/mutations.py:655 core/models.py:896 core/models.py:909 -#: core/models.py:1348 core/models.py:1377 core/models.py:1402 -#: core/viewsets.py:824 +#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 +#: core/models.py:1234 core/models.py:1263 core/models.py:1288 +#: core/viewsets.py:842 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} does not exist: {uuid}!" -#: core/graphene/mutations.py:668 +#: core/graphene/mutations.py:669 msgid "limit must be between 1 and 10" msgstr "Limit must be between 1 and 10" -#: core/graphene/mutations.py:713 +#: core/graphene/mutations.py:714 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - works like a charm" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:666 core/models.py:1234 -#: core/models.py:1809 +#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 +#: core/models.py:1686 msgid "attributes" msgstr "Attributes" @@ -1027,11 +991,11 @@ 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:224 core/models.py:312 core/models.py:620 +#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:612 msgid "categories" msgstr "Categories" -#: core/graphene/object_types.py:124 core/models.py:395 +#: core/graphene/object_types.py:124 core/models.py:383 msgid "brands" msgstr "Brands" @@ -1087,7 +1051,7 @@ msgid "represents feedback from a user." msgstr "Represents feedback from a user." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1228 +#: core/models.py:1110 msgid "notifications" msgstr "Notifications" @@ -1095,7 +1059,7 @@ msgstr "Notifications" msgid "download url for this order product if applicable" msgstr "Download url for this order product if applicable" -#: core/graphene/object_types.py:400 core/models.py:1938 +#: core/graphene/object_types.py:400 core/models.py:1791 msgid "feedback" msgstr "Feedback" @@ -1103,7 +1067,7 @@ msgstr "Feedback" msgid "a list of order products in this order" msgstr "A list of order products in this order" -#: core/graphene/object_types.py:436 core/models.py:1198 +#: core/graphene/object_types.py:436 core/models.py:1080 msgid "billing address" msgstr "Billing address" @@ -1131,7 +1095,7 @@ msgstr "Are all of the products in the order digital" msgid "transactions for this order" msgstr "Transactions for this order" -#: core/graphene/object_types.py:465 core/models.py:1262 +#: core/graphene/object_types.py:465 core/models.py:1144 msgid "orders" msgstr "Orders" @@ -1143,15 +1107,15 @@ msgstr "Image URL" msgid "product's images" msgstr "Product's images" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:477 +#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 msgid "category" msgstr "Category" -#: core/graphene/object_types.py:502 core/models.py:1939 +#: core/graphene/object_types.py:502 core/models.py:1792 msgid "feedbacks" msgstr "Feedbacks" -#: core/graphene/object_types.py:503 core/models.py:394 core/models.py:486 +#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 msgid "brand" msgstr "Brand" @@ -1183,7 +1147,7 @@ msgstr "Number of feedbacks" msgid "only available for personal orders" msgstr "Products only available for personal orders" -#: core/graphene/object_types.py:534 core/models.py:548 +#: core/graphene/object_types.py:534 core/models.py:536 msgid "products" msgstr "Products" @@ -1195,7 +1159,7 @@ msgstr "Promocodes" msgid "products on sale" msgstr "Products on sale" -#: core/graphene/object_types.py:651 core/models.py:843 +#: core/graphene/object_types.py:651 core/models.py:784 msgid "promotions" msgstr "Promotions" @@ -1203,7 +1167,7 @@ msgstr "Promotions" msgid "vendor" msgstr "Vendor" -#: core/graphene/object_types.py:656 core/models.py:547 +#: core/graphene/object_types.py:656 core/models.py:535 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1211,11 +1175,11 @@ msgstr "Vendor" msgid "product" msgstr "Product" -#: core/graphene/object_types.py:667 core/models.py:868 +#: core/graphene/object_types.py:667 core/models.py:807 msgid "wishlisted products" msgstr "Wishlisted products" -#: core/graphene/object_types.py:673 core/models.py:885 +#: core/graphene/object_types.py:673 core/models.py:824 msgid "wishlists" msgstr "Wishlists" @@ -1223,7 +1187,7 @@ msgstr "Wishlists" msgid "tagged products" msgstr "Tagged products" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:492 +#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 msgid "product tags" msgstr "Product tags" @@ -1332,7 +1296,7 @@ msgstr "Parent attribute group" msgid "attribute group's name" msgstr "Attribute group's name" -#: core/models.py:100 core/models.py:628 +#: core/models.py:100 core/models.py:620 msgid "attribute group" msgstr "Attribute group" @@ -1493,51 +1457,65 @@ msgstr "Category description" msgid "tags that help describe or group this category" msgstr "tags that help describe or group this category" -#: core/models.py:299 core/models.py:387 +#: core/models.py:299 core/models.py:375 msgid "priority" msgstr "Priority" -#: core/models.py:340 +#: core/models.py:318 +msgid "" +"Represents a Brand object in the system. This class handles information and " +"attributes related to a brand, including its name, logos, description, " +"associated categories, a unique slug, and priority order. It allows for the " +"organization and representation of brand-related data within the " +"application." +msgstr "" +"Represents a Brand object in the system. This class handles information and " +"attributes related to a brand, including its name, logos, description, " +"associated categories, a unique slug, and priority order. It allows for the " +"organization and representation of brand-related data within the " +"application." + +#: core/models.py:328 msgid "name of this brand" msgstr "Name of this brand" -#: core/models.py:341 +#: core/models.py:329 msgid "brand name" msgstr "Brand name" -#: core/models.py:348 +#: core/models.py:336 msgid "upload a logo representing this brand" msgstr "Upload a logo representing this brand" -#: core/models.py:350 +#: core/models.py:338 msgid "brand small image" msgstr "Brand small image" -#: core/models.py:356 +#: core/models.py:344 msgid "upload a big logo representing this brand" msgstr "Upload a big logo representing this brand" -#: core/models.py:358 +#: core/models.py:346 msgid "brand big image" msgstr "Brand big image" -#: core/models.py:363 +#: core/models.py:351 msgid "add a detailed description of the brand" msgstr "Add a detailed description of the brand" -#: core/models.py:364 +#: core/models.py:352 msgid "brand description" msgstr "Brand description" -#: core/models.py:369 +#: core/models.py:357 msgid "optional categories that this brand is associated with" msgstr "Optional categories that this brand is associated with" -#: core/models.py:370 +#: core/models.py:358 msgid "associated categories" msgstr "Categories" -#: core/models.py:400 +#: core/models.py:388 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1553,68 +1531,68 @@ msgstr "" "management system to allow tracking and evaluation of products available " "from various vendors." -#: core/models.py:412 +#: core/models.py:400 msgid "the vendor supplying this product stock" msgstr "The vendor supplying this product stock" -#: core/models.py:413 +#: core/models.py:401 msgid "associated vendor" msgstr "Associated vendor" -#: core/models.py:417 +#: core/models.py:405 msgid "final price to the customer after markups" msgstr "Final price to the customer after markups" -#: core/models.py:418 +#: core/models.py:406 msgid "selling price" msgstr "Selling price" -#: core/models.py:423 +#: core/models.py:411 msgid "the product associated with this stock entry" msgstr "The product associated with this stock entry" -#: core/models.py:424 core/models.py:708 core/models.py:765 -#: core/models.py:1709 +#: core/models.py:412 core/models.py:683 core/models.py:730 +#: core/models.py:1583 msgid "associated product" msgstr "Associated product" -#: core/models.py:431 +#: core/models.py:419 msgid "the price paid to the vendor for this product" msgstr "The price paid to the vendor for this product" -#: core/models.py:432 +#: core/models.py:420 msgid "vendor purchase price" msgstr "Vendor purchase price" -#: core/models.py:436 +#: core/models.py:424 msgid "available quantity of the product in stock" msgstr "Available quantity of the product in stock" -#: core/models.py:437 +#: core/models.py:425 msgid "quantity in stock" msgstr "Quantity in stock" -#: core/models.py:441 +#: core/models.py:429 msgid "vendor-assigned SKU for identifying the product" msgstr "Vendor-assigned SKU for identifying the product" -#: core/models.py:442 +#: core/models.py:430 msgid "vendor sku" msgstr "Vendor's SKU" -#: core/models.py:448 +#: core/models.py:436 msgid "digital file associated with this stock if applicable" msgstr "Digital file associated with this stock if applicable" -#: core/models.py:449 +#: core/models.py:437 msgid "digital file" msgstr "Digital file" -#: core/models.py:458 +#: core/models.py:446 msgid "stock entries" msgstr "Stock entries" -#: core/models.py:463 +#: core/models.py:451 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1634,55 +1612,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:476 +#: core/models.py:464 msgid "category this product belongs to" msgstr "Category this product belongs to" -#: core/models.py:485 +#: core/models.py:473 msgid "optionally associate this product with a brand" msgstr "Optionally associate this product with a brand" -#: core/models.py:491 +#: core/models.py:479 msgid "tags that help describe or group this product" msgstr "Tags that help describe or group this product" -#: core/models.py:496 +#: core/models.py:484 msgid "indicates whether this product is digitally delivered" msgstr "Indicates whether this product is digitally delivered" -#: core/models.py:497 +#: core/models.py:485 msgid "is product digital" msgstr "Is product digital" -#: core/models.py:503 +#: core/models.py:491 msgid "provide a clear identifying name for the product" msgstr "Provide a clear identifying name for the product" -#: core/models.py:504 +#: core/models.py:492 msgid "product name" msgstr "Product name" -#: core/models.py:509 core/models.py:831 +#: core/models.py:497 core/models.py:772 msgid "add a detailed description of the product" msgstr "Add a detailed description of the product" -#: core/models.py:510 +#: core/models.py:498 msgid "product description" msgstr "Product description" -#: core/models.py:517 +#: core/models.py:505 msgid "part number for this product" msgstr "Part number for this product" -#: core/models.py:518 +#: core/models.py:506 msgid "part number" msgstr "Part number" -#: core/models.py:537 +#: core/models.py:525 msgid "stock keeping unit for this product" msgstr "Stock Keeping Unit for this product" -#: core/models.py:607 +#: core/models.py:599 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 " @@ -1698,288 +1676,392 @@ msgstr "" " including string, integer, float, boolean, array, and object. This allows " "for dynamic and flexible data structuring." -#: core/models.py:619 +#: core/models.py:611 msgid "category of this attribute" msgstr "Category of this attribute" -#: core/models.py:627 +#: core/models.py:619 msgid "group of this attribute" msgstr "Group of this attribute" -#: core/models.py:633 +#: core/models.py:625 msgid "string" msgstr "String" -#: core/models.py:634 +#: core/models.py:626 msgid "integer" msgstr "Integer" -#: core/models.py:635 +#: core/models.py:627 msgid "float" msgstr "Float" -#: core/models.py:636 +#: core/models.py:628 msgid "boolean" msgstr "Boolean" -#: core/models.py:637 +#: core/models.py:629 msgid "array" msgstr "Array" -#: core/models.py:638 +#: core/models.py:630 msgid "object" msgstr "Object" -#: core/models.py:640 +#: core/models.py:632 msgid "type of the attribute's value" msgstr "Type of the attribute's value" -#: core/models.py:641 +#: core/models.py:633 msgid "value type" msgstr "Value type" -#: core/models.py:646 +#: core/models.py:638 msgid "name of this attribute" msgstr "Name of this attribute" -#: core/models.py:647 +#: core/models.py:639 msgid "attribute's name" msgstr "Attribute's name" -#: core/models.py:653 +#: core/models.py:645 msgid "is filterable" msgstr "is filterable" -#: core/models.py:654 +#: core/models.py:646 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:665 core/models.py:700 +#: core/models.py:657 core/models.py:675 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attribute" -#: core/models.py:699 +#: core/models.py:663 +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 "" +"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." + +#: core/models.py:674 msgid "attribute of this value" msgstr "Attribute of this value" -#: core/models.py:707 +#: core/models.py:682 msgid "the specific product associated with this attribute's value" msgstr "The specific product associated with this attribute's value" -#: core/models.py:713 +#: core/models.py:688 msgid "the specific value for this attribute" msgstr "The specific value for this attribute" -#: core/models.py:747 +#: core/models.py:701 +msgid "" +"Represents a product image associated with a product in the system. This " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " +"determining their display order. It also includes an accessibility feature " +"with alternative text for the images." +msgstr "" +"Represents a product image associated with a product in the system. This " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " +"determining their display order. It also includes an accessibility feature " +"with alternative text for the images." + +#: core/models.py:712 msgid "provide alternative text for the image for accessibility" msgstr "Provide alternative text for the image for accessibility" -#: core/models.py:748 +#: core/models.py:713 msgid "image alt text" msgstr "Image alt text" -#: core/models.py:751 +#: core/models.py:716 msgid "upload the image file for this product" msgstr "Upload the image file for this product" -#: core/models.py:752 core/models.py:777 +#: core/models.py:717 core/models.py:742 msgid "product image" msgstr "Product image" -#: core/models.py:758 +#: core/models.py:723 msgid "determines the order in which images are displayed" msgstr "Determines the order in which images are displayed" -#: core/models.py:759 +#: core/models.py:724 msgid "display priority" msgstr "Display priority" -#: core/models.py:764 +#: core/models.py:729 msgid "the product that this image represents" msgstr "The product that this image represents" -#: core/models.py:778 +#: core/models.py:743 msgid "product images" msgstr "Product images" -#: core/models.py:819 +#: core/models.py:748 +msgid "" +"Represents a promotional campaign for products with a discount. This class " +"is used to define and manage promotional campaigns that offer a percentage-" +"based discount for products. The class includes attributes for setting the " +"discount rate, providing details about the promotion, and linking it to the " +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." +msgstr "" +"Represents a promotional campaign for products with a discount. This class " +"is used to define and manage promotional campaigns that offer a percentage-" +"based discount for products. The class includes attributes for setting the " +"discount rate, providing details about the promotion, and linking it to the " +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." + +#: core/models.py:760 msgid "percentage discount for the selected products" msgstr "Percentage discount for the selected products" -#: core/models.py:820 +#: core/models.py:761 msgid "discount percentage" msgstr "Discount percentage" -#: core/models.py:825 +#: core/models.py:766 msgid "provide a unique name for this promotion" msgstr "Provide a unique name for this promotion" -#: core/models.py:826 +#: core/models.py:767 msgid "promotion name" msgstr "Promotion name" -#: core/models.py:832 +#: core/models.py:773 msgid "promotion description" msgstr "Promotion description" -#: core/models.py:837 +#: core/models.py:778 msgid "select which products are included in this promotion" msgstr "Select which products are included in this promotion" -#: core/models.py:838 +#: core/models.py:779 msgid "included products" msgstr "Included products" -#: core/models.py:842 +#: core/models.py:783 msgid "promotion" msgstr "Promotion" -#: core/models.py:867 +#: core/models.py:794 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"class provides functionality to manage a collection of products, supporting " +"operations such as adding and removing products, as well as supporting " +"operations for adding and removing multiple products at once." +msgstr "" +"Represents a user's wishlist for storing and managing desired products. The " +"class provides functionality to manage a collection of products, supporting " +"operations such as adding and removing products, as well as supporting " +"operations for adding and removing multiple products at once." + +#: core/models.py:806 msgid "products that the user has marked as wanted" msgstr "Products that the user has marked as wanted" -#: core/models.py:875 +#: core/models.py:814 msgid "user who owns this wishlist" msgstr "User who owns this wishlist" -#: core/models.py:876 +#: core/models.py:815 msgid "wishlist owner" msgstr "Wishlist's Owner" -#: core/models.py:884 +#: core/models.py:823 msgid "wishlist" msgstr "Wishlist" -#: core/models.py:951 +#: core/models.py:865 +msgid "" +"Represents a documentary record tied to a product. This class is used to " +"store information about documentaries related to specific products, " +"including file uploads and their metadata. It contains methods and " +"properties to handle the file type and storage path for the documentary " +"files. It extends functionality from specific mixins and provides additional" +" custom features." +msgstr "" +"Represents a documentary record tied to a product. This class is used to " +"store information about documentaries related to specific products, " +"including file uploads and their metadata. It contains methods and " +"properties to handle the file type and storage path for the documentary " +"files. It extends functionality from specific mixins and provides additional" +" custom features." + +#: core/models.py:878 msgid "documentary" msgstr "Documentary" -#: core/models.py:952 +#: core/models.py:879 msgid "documentaries" msgstr "Documentaries" -#: core/models.py:962 +#: core/models.py:889 msgid "unresolved" msgstr "Unresolved" -#: core/models.py:1008 +#: core/models.py:894 +msgid "" +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." +msgstr "" +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." + +#: core/models.py:909 msgid "address line for the customer" msgstr "Address line for the customer" -#: core/models.py:1009 +#: core/models.py:910 msgid "address line" msgstr "Address line" -#: core/models.py:1011 +#: core/models.py:912 msgid "street" msgstr "Street" -#: core/models.py:1012 +#: core/models.py:913 msgid "district" msgstr "District" -#: core/models.py:1013 +#: core/models.py:914 msgid "city" msgstr "City" -#: core/models.py:1014 +#: core/models.py:915 msgid "region" msgstr "Region" -#: core/models.py:1015 +#: core/models.py:916 msgid "postal code" msgstr "Postal code" -#: core/models.py:1016 +#: core/models.py:917 msgid "country" msgstr "Country" -#: core/models.py:1023 +#: core/models.py:924 msgid "geolocation point: (longitude, latitude)" msgstr "Geolocation Point(Longitude, Latitude)" -#: core/models.py:1026 +#: core/models.py:927 msgid "full JSON response from geocoder for this address" msgstr "Full JSON response from geocoder for this address" -#: core/models.py:1031 +#: core/models.py:932 msgid "stored JSON response from the geocoding service" msgstr "Stored JSON response from the geocoding service" -#: core/models.py:1039 +#: core/models.py:940 msgid "address" msgstr "Address" -#: core/models.py:1040 +#: core/models.py:941 msgid "addresses" msgstr "Adresses" -#: core/models.py:1085 +#: core/models.py:953 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"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:967 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:1086 +#: core/models.py:968 msgid "promo code identifier" msgstr "Promo code identifier" -#: core/models.py:1093 +#: core/models.py:975 msgid "fixed discount amount applied if percent is not used" msgstr "Fixed discount amount applied if percent is not used" -#: core/models.py:1094 +#: core/models.py:976 msgid "fixed discount amount" msgstr "Fixed discount amount" -#: core/models.py:1100 +#: core/models.py:982 msgid "percentage discount applied if fixed amount is not used" msgstr "Percentage discount applied if fixed amount is not used" -#: core/models.py:1101 +#: core/models.py:983 msgid "percentage discount" msgstr "Percentage discount" -#: core/models.py:1106 +#: core/models.py:988 msgid "timestamp when the promocode expires" msgstr "Timestamp when the promocode expires" -#: core/models.py:1107 +#: core/models.py:989 msgid "end validity time" msgstr "End validity time" -#: core/models.py:1112 +#: core/models.py:994 msgid "timestamp from which this promocode is valid" msgstr "Timestamp from which this promocode is valid" -#: core/models.py:1113 +#: core/models.py:995 msgid "start validity time" msgstr "Start validity time" -#: core/models.py:1118 +#: core/models.py:1000 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:1119 +#: core/models.py:1001 msgid "usage timestamp" msgstr "Usage timestamp" -#: core/models.py:1124 +#: core/models.py:1006 msgid "user assigned to this promocode if applicable" msgstr "User assigned to this promocode if applicable" -#: core/models.py:1125 +#: core/models.py:1007 msgid "assigned user" msgstr "Assigned user" -#: core/models.py:1132 +#: core/models.py:1014 msgid "promo code" msgstr "Promo code" -#: core/models.py:1133 +#: core/models.py:1015 msgid "promo codes" msgstr "Promo codes" -#: core/models.py:1140 +#: core/models.py:1022 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -1987,16 +2069,16 @@ msgstr "" "Only one type of discount should be defined (amount or percent), but not " "both or neither." -#: core/models.py:1155 +#: core/models.py:1037 msgid "promocode already used" msgstr "Promocode has been used already" -#: core/models.py:1171 +#: core/models.py:1053 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Invalid discount type for promocode {self.uuid}!" -#: core/models.py:1180 +#: core/models.py:1062 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 " @@ -2012,135 +2094,135 @@ msgstr "" "set, and shipping or billing details updated. Equally, functionality " "supports managing the products in the order lifecycle." -#: core/models.py:1197 +#: core/models.py:1079 msgid "the billing address used for this order" msgstr "The billing address used for this order" -#: core/models.py:1205 +#: core/models.py:1087 msgid "optional promo code applied to this order" msgstr "Optional promo code applied to this order" -#: core/models.py:1206 +#: core/models.py:1088 msgid "applied promo code" msgstr "Applied promo code" -#: core/models.py:1214 +#: core/models.py:1096 msgid "the shipping address used for this order" msgstr "The shipping address used for this order" -#: core/models.py:1215 +#: core/models.py:1097 msgid "shipping address" msgstr "Shipping address" -#: core/models.py:1221 +#: core/models.py:1103 msgid "current status of the order in its lifecycle" msgstr "Current status of the order in its lifecycle" -#: core/models.py:1222 +#: core/models.py:1104 msgid "order status" msgstr "Order status" -#: core/models.py:1227 core/models.py:1686 +#: core/models.py:1109 core/models.py:1560 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:1233 +#: core/models.py:1115 msgid "json representation of order attributes for this order" msgstr "JSON representation of order attributes for this order" -#: core/models.py:1239 +#: core/models.py:1121 msgid "the user who placed the order" msgstr "The user who placed the order" -#: core/models.py:1240 +#: core/models.py:1122 msgid "user" msgstr "User" -#: core/models.py:1246 +#: core/models.py:1128 msgid "the timestamp when the order was finalized" msgstr "The timestamp when the order was finalized" -#: core/models.py:1247 +#: core/models.py:1129 msgid "buy time" msgstr "Buy time" -#: core/models.py:1254 +#: core/models.py:1136 msgid "a human-readable identifier for the order" msgstr "A human-readable identifier for the order" -#: core/models.py:1255 +#: core/models.py:1137 msgid "human readable id" msgstr "human-readable ID" -#: core/models.py:1261 +#: core/models.py:1143 msgid "order" msgstr "Order" -#: core/models.py:1282 +#: core/models.py:1168 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:1316 +#: core/models.py:1202 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:1321 +#: core/models.py:1207 msgid "you cannot add inactive products to order" msgstr "You cannot add inactive products to order" -#: core/models.py:1338 +#: core/models.py:1224 msgid "you cannot add more products than available in stock" msgstr "You cannot add more products than available in stock" -#: core/models.py:1360 core/models.py:1385 core/models.py:1393 +#: core/models.py:1246 core/models.py:1271 core/models.py:1279 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:1381 +#: core/models.py:1267 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} does not exist with query <{query}>!" -#: core/models.py:1413 +#: core/models.py:1299 msgid "promocode does not exist" msgstr "Promocode does not exist" -#: core/models.py:1419 +#: core/models.py:1305 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:1438 +#: core/models.py:1324 msgid "address does not exist" msgstr "Address does not exist" -#: core/models.py:1459 core/models.py:1528 +#: core/models.py:1345 core/models.py:1414 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:1462 core/models.py:1524 +#: core/models.py:1348 core/models.py:1410 msgid "invalid force value" msgstr "Invalid force value" -#: core/models.py:1468 core/models.py:1531 +#: core/models.py:1354 core/models.py:1417 msgid "you cannot purchase an empty order!" msgstr "You cannot purchase an empty order!" -#: core/models.py:1487 +#: core/models.py:1373 msgid "you cannot buy an order without a user" msgstr "You cannot buy an order without a user!" -#: core/models.py:1501 +#: core/models.py:1387 msgid "a user without a balance cannot buy with balance" msgstr "A user without a balance cannot buy with balance!" -#: core/models.py:1506 +#: core/models.py:1392 msgid "insufficient funds to complete the order" msgstr "Insufficient funds to complete the order" -#: core/models.py:1540 +#: core/models.py:1426 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2148,149 +2230,201 @@ msgstr "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" -#: core/models.py:1549 +#: core/models.py:1435 #, 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:1674 +#: core/models.py:1533 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." + +#: core/models.py:1548 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:1675 +#: core/models.py:1549 msgid "purchase price at order time" msgstr "Purchase price at order time" -#: core/models.py:1680 +#: core/models.py:1554 msgid "internal comments for admins about this ordered product" msgstr "Internal comments for admins about this ordered product" -#: core/models.py:1681 +#: core/models.py:1555 msgid "internal comments" msgstr "Internal comments" -#: core/models.py:1687 +#: core/models.py:1561 msgid "user notifications" msgstr "User notifications" -#: core/models.py:1692 +#: core/models.py:1566 msgid "json representation of this item's attributes" msgstr "JSON representation of this item's attributes" -#: core/models.py:1693 +#: core/models.py:1567 msgid "ordered product attributes" msgstr "Ordered product attributes" -#: core/models.py:1698 +#: core/models.py:1572 msgid "reference to the parent order that contains this product" msgstr "Reference to the parent order that contains this product" -#: core/models.py:1699 +#: core/models.py:1573 msgid "parent order" msgstr "Parent order" -#: core/models.py:1708 +#: core/models.py:1582 msgid "the specific product associated with this order line" msgstr "The specific product associated with this order line" -#: core/models.py:1715 +#: core/models.py:1589 msgid "quantity of this specific product in the order" msgstr "Quantity of this specific product in the order" -#: core/models.py:1716 +#: core/models.py:1590 msgid "product quantity" msgstr "Product quantity" -#: core/models.py:1723 +#: core/models.py:1597 msgid "current status of this product in the order" msgstr "Current status of this product in the order" -#: core/models.py:1724 +#: core/models.py:1598 msgid "product line status" msgstr "Product line status" -#: core/models.py:1784 +#: core/models.py:1661 msgid "order product must have an order" msgstr "Orderproduct must have an associated order!" -#: core/models.py:1786 +#: core/models.py:1663 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Wrong action specified for feedback: {action}!" -#: core/models.py:1800 +#: core/models.py:1677 msgid "you cannot feedback an order which is not received" msgstr "you cannot feedback an order which is not received" -#: core/models.py:1806 +#: core/models.py:1683 msgid "name" msgstr "Name" -#: core/models.py:1807 +#: core/models.py:1684 msgid "URL of the integration" msgstr "URL of the integration" -#: core/models.py:1808 +#: core/models.py:1685 msgid "authentication credentials" msgstr "Authentication credentials" -#: core/models.py:1822 +#: core/models.py:1699 msgid "you can only have one default CRM provider" msgstr "You can only have one default CRM provider" -#: core/models.py:1826 +#: core/models.py:1703 msgid "CRM" msgstr "CRM" -#: core/models.py:1827 +#: core/models.py:1704 msgid "CRMs" msgstr "CRMs" -#: core/models.py:1839 +#: core/models.py:1716 msgid "order CRM link" msgstr "Order's CRM link" -#: core/models.py:1840 +#: core/models.py:1717 msgid "orders CRM links" msgstr "Orders' CRM links" -#: core/models.py:1874 +#: core/models.py:1722 +msgid "" +"Represents the downloading functionality for digital assets associated with " +"orders. The DigitalAssetDownload class provides the ability to manage and " +"access downloads related to order products. It maintains information about " +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." +msgstr "" +"Represents the downloading functionality for digital assets associated with " +"orders. The DigitalAssetDownload class provides the ability to manage and " +"access downloads related to order products. It maintains information about " +"the associated order product, the number of downloads, and whether the asset" +" 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:1736 msgid "download" msgstr "Download" -#: core/models.py:1875 +#: core/models.py:1737 msgid "downloads" msgstr "Downloads" -#: core/models.py:1883 +#: core/models.py:1745 msgid "you can not download a digital asset for a non-finished order" msgstr "You can not download a digital asset for a non-finished order" -#: core/models.py:1913 +#: core/models.py:1754 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." +msgstr "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." + +#: core/models.py:1766 msgid "user-provided comments about their experience with the product" msgstr "User-provided comments about their experience with the product" -#: core/models.py:1914 +#: core/models.py:1767 msgid "feedback comments" msgstr "Feedback comments" -#: core/models.py:1921 +#: core/models.py:1774 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:1922 +#: core/models.py:1775 msgid "related order product" msgstr "Related order product" -#: core/models.py:1927 +#: core/models.py:1780 msgid "user-assigned rating for the product" msgstr "User-assigned rating for the product" -#: core/models.py:1928 +#: core/models.py:1781 msgid "product rating" msgstr "Product rating" @@ -2507,17 +2641,17 @@ msgstr "Invalid timeout value, it must be between 0 and 216000 seconds" msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | contact us initiated" -#: core/utils/emailing.py:64 +#: core/utils/emailing.py:74 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Order Confirmation" -#: core/utils/emailing.py:99 +#: core/utils/emailing.py:109 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Order Delivered" -#: core/utils/emailing.py:187 +#: core/utils/emailing.py:197 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | promocode granted" @@ -2540,15 +2674,15 @@ msgstr "" msgid "invalid phone number format" msgstr "Invalid phone number format" -#: core/views.py:481 +#: core/views.py:489 msgid "you can only download the digital asset once" msgstr "You can only download the digital asset once" -#: core/views.py:539 +#: core/views.py:547 msgid "favicon not found" msgstr "favicon not found" -#: core/viewsets.py:1319 +#: core/viewsets.py:1357 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Geocoding error: {e}" diff --git a/core/locale/en_US/LC_MESSAGES/django.mo b/core/locale/en_US/LC_MESSAGES/django.mo index d5d7265ec6cf29c8ccba98fd23a2f240da139272..9de69688ef9ad7b558f2d798ab175808db18ea19 100644 GIT binary patch literal 64692 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 PuuuA#KJigM)06)P3mbv- delta 12617 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 buPC~St0Z<+=>IdXMceu\n" "Language-Team: BRITISH ENGLISH \n" @@ -88,11 +88,11 @@ msgid "selected items have been deactivated." msgstr "Selected items have been deactivated!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:712 core/models.py:720 +#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 msgid "attribute value" msgstr "Attribute Value" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:721 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 msgid "attribute values" msgstr "Attribute Values" @@ -104,7 +104,7 @@ msgstr "Image" msgid "images" msgstr "Images" -#: core/admin.py:155 core/models.py:457 +#: core/admin.py:155 core/models.py:445 msgid "stock" msgstr "Stock" @@ -112,11 +112,11 @@ msgstr "Stock" msgid "stocks" msgstr "Stocks" -#: core/admin.py:166 core/models.py:1735 +#: core/admin.py:166 core/models.py:1609 msgid "order product" msgstr "Order Product" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1736 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 msgid "order products" msgstr "Order Products" @@ -320,7 +320,7 @@ msgstr "Rewrite an existing category saving non-editables" 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:155 core/docs/drf/viewsets.py:553 +#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:487 #: core/graphene/object_types.py:117 core/graphene/object_types.py:207 #: core/graphene/object_types.py:509 msgid "SEO Meta snapshot" @@ -576,47 +576,7 @@ msgstr "List all products (simple view)" msgid "(exact) Product UUID" msgstr "(exact) Product UUID" -#: core/docs/drf/viewsets.py:384 -msgid "(icontains) Product name" -msgstr "(icontains) Product name" - -#: core/docs/drf/viewsets.py:390 -msgid "(list) Category names, case-insensitive" -msgstr "(list) Category names, case-insensitive" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Category UUID" -msgstr "(exact) Category UUID" - -#: core/docs/drf/viewsets.py:402 -msgid "(list) Tag names, case-insensitive" -msgstr "(list) Tag names, case-insensitive" - -#: core/docs/drf/viewsets.py:408 -msgid "(gte) Minimum stock price" -msgstr "(gte) Minimum stock price" - -#: core/docs/drf/viewsets.py:414 -msgid "(lte) Maximum stock price" -msgstr "(lte) Maximum stock price" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Only active products" -msgstr "(exact) Only active products" - -#: core/docs/drf/viewsets.py:426 -msgid "(iexact) Brand name" -msgstr "(iexact) Brand name" - -#: core/docs/drf/viewsets.py:438 -msgid "(gt) Minimum stock quantity" -msgstr "(gt) Minimum stock quantity" - -#: core/docs/drf/viewsets.py:444 -msgid "(exact) Digital vs. physical" -msgstr "(exact) Digital vs. physical" - -#: core/docs/drf/viewsets.py:451 +#: core/docs/drf/viewsets.py:385 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -624,245 +584,249 @@ 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:465 core/docs/drf/viewsets.py:466 +#: core/docs/drf/viewsets.py:399 core/docs/drf/viewsets.py:400 msgid "retrieve a single product (detailed view)" msgstr "Retrieve a single product (detailed view)" -#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:495 -#: core/docs/drf/viewsets.py:511 core/docs/drf/viewsets.py:527 -#: core/docs/drf/viewsets.py:543 core/docs/drf/viewsets.py:559 +#: core/docs/drf/viewsets.py:405 core/docs/drf/viewsets.py:429 +#: core/docs/drf/viewsets.py:445 core/docs/drf/viewsets.py:461 +#: core/docs/drf/viewsets.py:477 core/docs/drf/viewsets.py:493 msgid "Product UUID or slug" msgstr "Product UUID or Slug" -#: core/docs/drf/viewsets.py:481 core/docs/drf/viewsets.py:482 +#: core/docs/drf/viewsets.py:415 core/docs/drf/viewsets.py:416 msgid "create a product" msgstr "Create a product" -#: core/docs/drf/viewsets.py:489 core/docs/drf/viewsets.py:490 +#: core/docs/drf/viewsets.py:423 core/docs/drf/viewsets.py:424 msgid "rewrite an existing product, preserving non-editable fields" msgstr "Rewrite an existing product, preserving non-editable fields" -#: core/docs/drf/viewsets.py:505 core/docs/drf/viewsets.py:506 +#: core/docs/drf/viewsets.py:439 core/docs/drf/viewsets.py:440 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:521 core/docs/drf/viewsets.py:522 +#: core/docs/drf/viewsets.py:455 core/docs/drf/viewsets.py:456 msgid "delete a product" msgstr "Delete a product" -#: core/docs/drf/viewsets.py:537 core/docs/drf/viewsets.py:538 +#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:472 msgid "lists all permitted feedbacks for a product" msgstr "lists all permitted feedbacks for a product" -#: core/docs/drf/viewsets.py:554 +#: core/docs/drf/viewsets.py:488 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:572 +#: core/docs/drf/viewsets.py:506 msgid "list all addresses" msgstr "List all addresses" -#: core/docs/drf/viewsets.py:579 +#: core/docs/drf/viewsets.py:513 msgid "retrieve a single address" msgstr "Retrieve a single address" -#: core/docs/drf/viewsets.py:586 +#: core/docs/drf/viewsets.py:520 msgid "create a new address" msgstr "Create a new address" -#: core/docs/drf/viewsets.py:594 +#: core/docs/drf/viewsets.py:528 msgid "delete an address" msgstr "Delete an address" -#: core/docs/drf/viewsets.py:601 +#: core/docs/drf/viewsets.py:535 msgid "update an entire address" msgstr "Update an entire address" -#: core/docs/drf/viewsets.py:609 +#: core/docs/drf/viewsets.py:543 msgid "partially update an address" msgstr "Partially update an address" -#: core/docs/drf/viewsets.py:617 +#: core/docs/drf/viewsets.py:551 msgid "autocomplete address suggestions" msgstr "Autocomplete address input" -#: core/docs/drf/viewsets.py:622 +#: core/docs/drf/viewsets.py:556 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:628 +#: core/docs/drf/viewsets.py:562 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:641 +#: core/docs/drf/viewsets.py:575 msgid "list all feedbacks (simple view)" msgstr "list all feedbacks (simple view)" -#: core/docs/drf/viewsets.py:645 +#: core/docs/drf/viewsets.py:579 msgid "retrieve a single feedback (detailed view)" msgstr "retrieve a single feedback (detailed view)" -#: core/docs/drf/viewsets.py:649 +#: core/docs/drf/viewsets.py:583 msgid "create a feedback" msgstr "create a feedback" -#: core/docs/drf/viewsets.py:653 +#: core/docs/drf/viewsets.py:587 msgid "delete a feedback" msgstr "delete a feedback" -#: core/docs/drf/viewsets.py:657 +#: core/docs/drf/viewsets.py:591 msgid "rewrite an existing feedback saving non-editables" msgstr "rewrite an existing feedback saving non-editables" -#: core/docs/drf/viewsets.py:661 +#: core/docs/drf/viewsets.py:595 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:668 +#: core/docs/drf/viewsets.py:602 msgid "list all order–product relations (simple view)" msgstr "list all order–product relations (simple view)" -#: core/docs/drf/viewsets.py:675 +#: core/docs/drf/viewsets.py:609 msgid "retrieve a single order–product relation (detailed view)" msgstr "retrieve a single order–product relation (detailed view)" -#: core/docs/drf/viewsets.py:682 +#: core/docs/drf/viewsets.py:616 msgid "create a new order–product relation" msgstr "create a new order–product relation" -#: core/docs/drf/viewsets.py:689 +#: core/docs/drf/viewsets.py:623 msgid "replace an existing order–product relation" msgstr "replace an existing order–product relation" -#: core/docs/drf/viewsets.py:696 +#: core/docs/drf/viewsets.py:630 msgid "partially update an existing order–product relation" msgstr "partially update an existing order–product relation" -#: core/docs/drf/viewsets.py:703 +#: core/docs/drf/viewsets.py:637 msgid "delete an order–product relation" msgstr "delete an order–product relation" -#: core/docs/drf/viewsets.py:710 +#: core/docs/drf/viewsets.py:644 msgid "add or remove feedback on an order–product relation" msgstr "add or remove feedback on an order–product relation" -#: core/elasticsearch/__init__.py:105 +#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 msgid "no search term provided." msgstr "No search term provided." -#: core/filters.py:64 core/filters.py:594 core/filters.py:623 +#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +msgid "Search" +msgstr "Search" + +#: core/filters.py:66 core/filters.py:554 core/filters.py:583 msgid "UUID" msgstr "UUID" -#: core/filters.py:65 core/filters.py:429 core/filters.py:560 +#: core/filters.py:67 core/filters.py:399 core/filters.py:526 msgid "Name" msgstr "Name" -#: core/filters.py:66 core/filters.py:562 +#: core/filters.py:68 core/filters.py:528 msgid "Categories" msgstr "Categories" -#: core/filters.py:68 +#: core/filters.py:70 msgid "Categories Slugs" msgstr "Categories Slugs" -#: core/filters.py:69 core/filters.py:437 +#: core/filters.py:71 core/filters.py:407 msgid "Tags" msgstr "Tags" -#: core/filters.py:70 +#: core/filters.py:72 msgid "Min Price" msgstr "Min Price" -#: core/filters.py:71 +#: core/filters.py:73 msgid "Max Price" msgstr "Max Price" -#: core/filters.py:72 +#: core/filters.py:74 msgid "Is Active" msgstr "Is Active" -#: core/filters.py:73 +#: core/filters.py:75 msgid "Brand" msgstr "Brand" -#: core/filters.py:74 +#: core/filters.py:76 msgid "Attributes" msgstr "Attributes" -#: core/filters.py:75 +#: core/filters.py:77 msgid "Quantity" msgstr "Quantity" -#: core/filters.py:76 core/filters.py:431 core/filters.py:561 -#: core/models.py:287 core/models.py:381 core/models.py:534 +#: core/filters.py:78 core/filters.py:401 core/filters.py:527 +#: core/models.py:287 core/models.py:369 core/models.py:522 msgid "Slug" msgstr "Slug" -#: core/filters.py:77 +#: core/filters.py:79 msgid "Is Digital" msgstr "Is Digital" -#: core/filters.py:78 +#: core/filters.py:80 msgid "Include sub-categories" msgstr "Include sub-categories" -#: core/filters.py:81 +#: core/filters.py:83 msgid "Include personal ordered" msgstr "Include personal ordered products" -#: core/filters.py:83 core/models.py:538 +#: core/filters.py:85 core/models.py:526 msgid "SKU" msgstr "SKU" -#: core/filters.py:166 +#: core/filters.py:161 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:356 +#: core/filters.py:324 msgid "Search (ID, product name or part number)" msgstr "Search (ID, product name or part number)" -#: core/filters.py:359 +#: core/filters.py:327 msgid "Bought after (inclusive)" msgstr "Bought after (inclusive)" -#: core/filters.py:360 +#: core/filters.py:328 msgid "Bought before (inclusive)" msgstr "Bought before (inclusive)" -#: core/filters.py:363 core/filters.py:410 core/filters.py:625 +#: core/filters.py:331 core/filters.py:378 core/filters.py:585 msgid "User email" msgstr "User email" -#: core/filters.py:364 core/filters.py:411 core/filters.py:603 -#: core/filters.py:624 +#: core/filters.py:332 core/filters.py:379 core/filters.py:563 +#: core/filters.py:584 msgid "User UUID" msgstr "User UUID" -#: core/filters.py:365 +#: core/filters.py:333 msgid "Status" msgstr "Status" -#: core/filters.py:369 +#: core/filters.py:337 msgid "Human Readable ID" msgstr "Human Readable ID" -#: core/filters.py:430 +#: core/filters.py:400 msgid "Parent" msgstr "Parent" -#: core/filters.py:434 +#: core/filters.py:404 msgid "Whole category(has at least 1 product or not)" msgstr "Whole category(has at least 1 product or not)" -#: core/filters.py:438 +#: core/filters.py:408 msgid "Level" msgstr "Level" -#: core/filters.py:598 +#: core/filters.py:558 msgid "Product UUID" msgstr "Product UUID" @@ -917,7 +881,7 @@ 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:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:821 +#: core/graphene/mutations.py:527 core/viewsets.py:839 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Wrong type came from order.buy() method: {type(instance)!s}" @@ -980,37 +944,37 @@ msgstr "" msgid "add or delete a feedback for orderproduct" msgstr "Add or delete a feedback for the orderproduct" -#: core/graphene/mutations.py:555 +#: core/graphene/mutations.py:556 msgid "action must be either `add` or `remove`" msgstr "Action must be either `add` or `remove`!" -#: core/graphene/mutations.py:558 +#: core/graphene/mutations.py:559 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderproduct {order_product_uuid} not found!" -#: core/graphene/mutations.py:621 +#: core/graphene/mutations.py:622 msgid "original address string provided by the user" msgstr "Original address string provided by the user" -#: core/graphene/mutations.py:655 core/models.py:896 core/models.py:909 -#: core/models.py:1348 core/models.py:1377 core/models.py:1402 -#: core/viewsets.py:824 +#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 +#: core/models.py:1234 core/models.py:1263 core/models.py:1288 +#: core/viewsets.py:842 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} does not exist: {uuid}!" -#: core/graphene/mutations.py:668 +#: core/graphene/mutations.py:669 msgid "limit must be between 1 and 10" msgstr "Limit must be between 1 and 10" -#: core/graphene/mutations.py:713 +#: core/graphene/mutations.py:714 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - works like a charm" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:666 core/models.py:1234 -#: core/models.py:1809 +#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 +#: core/models.py:1686 msgid "attributes" msgstr "Attributes" @@ -1023,11 +987,11 @@ 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:224 core/models.py:312 core/models.py:620 +#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:612 msgid "categories" msgstr "Categories" -#: core/graphene/object_types.py:124 core/models.py:395 +#: core/graphene/object_types.py:124 core/models.py:383 msgid "brands" msgstr "Brands" @@ -1083,7 +1047,7 @@ msgid "represents feedback from a user." msgstr "Represents feedback from a user." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1228 +#: core/models.py:1110 msgid "notifications" msgstr "Notifications" @@ -1091,7 +1055,7 @@ msgstr "Notifications" msgid "download url for this order product if applicable" msgstr "Download url for this order product if applicable" -#: core/graphene/object_types.py:400 core/models.py:1938 +#: core/graphene/object_types.py:400 core/models.py:1791 msgid "feedback" msgstr "Feedback" @@ -1099,7 +1063,7 @@ msgstr "Feedback" msgid "a list of order products in this order" msgstr "A list of order products in this order" -#: core/graphene/object_types.py:436 core/models.py:1198 +#: core/graphene/object_types.py:436 core/models.py:1080 msgid "billing address" msgstr "Billing address" @@ -1127,7 +1091,7 @@ msgstr "Are all of the products in the order digital" msgid "transactions for this order" msgstr "Transactions for this order" -#: core/graphene/object_types.py:465 core/models.py:1262 +#: core/graphene/object_types.py:465 core/models.py:1144 msgid "orders" msgstr "Orders" @@ -1139,15 +1103,15 @@ msgstr "Image URL" msgid "product's images" msgstr "Product's images" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:477 +#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 msgid "category" msgstr "Category" -#: core/graphene/object_types.py:502 core/models.py:1939 +#: core/graphene/object_types.py:502 core/models.py:1792 msgid "feedbacks" msgstr "Feedbacks" -#: core/graphene/object_types.py:503 core/models.py:394 core/models.py:486 +#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 msgid "brand" msgstr "Brand" @@ -1179,7 +1143,7 @@ msgstr "Number of feedbacks" msgid "only available for personal orders" msgstr "Products only available for personal orders" -#: core/graphene/object_types.py:534 core/models.py:548 +#: core/graphene/object_types.py:534 core/models.py:536 msgid "products" msgstr "Products" @@ -1191,7 +1155,7 @@ msgstr "Promocodes" msgid "products on sale" msgstr "Products on sale" -#: core/graphene/object_types.py:651 core/models.py:843 +#: core/graphene/object_types.py:651 core/models.py:784 msgid "promotions" msgstr "Promotions" @@ -1199,7 +1163,7 @@ msgstr "Promotions" msgid "vendor" msgstr "Vendor" -#: core/graphene/object_types.py:656 core/models.py:547 +#: core/graphene/object_types.py:656 core/models.py:535 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1207,11 +1171,11 @@ msgstr "Vendor" msgid "product" msgstr "Product" -#: core/graphene/object_types.py:667 core/models.py:868 +#: core/graphene/object_types.py:667 core/models.py:807 msgid "wishlisted products" msgstr "Wishlisted products" -#: core/graphene/object_types.py:673 core/models.py:885 +#: core/graphene/object_types.py:673 core/models.py:824 msgid "wishlists" msgstr "Wishlists" @@ -1219,7 +1183,7 @@ msgstr "Wishlists" msgid "tagged products" msgstr "Tagged products" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:492 +#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 msgid "product tags" msgstr "Product tags" @@ -1328,7 +1292,7 @@ msgstr "Parent attribute group" msgid "attribute group's name" msgstr "Attribute group's name" -#: core/models.py:100 core/models.py:628 +#: core/models.py:100 core/models.py:620 msgid "attribute group" msgstr "Attribute group" @@ -1489,51 +1453,65 @@ msgstr "Category description" msgid "tags that help describe or group this category" msgstr "tags that help describe or group this category" -#: core/models.py:299 core/models.py:387 +#: core/models.py:299 core/models.py:375 msgid "priority" msgstr "Priority" -#: core/models.py:340 +#: core/models.py:318 +msgid "" +"Represents a Brand object in the system. This class handles information and " +"attributes related to a brand, including its name, logos, description, " +"associated categories, a unique slug, and priority order. It allows for the " +"organization and representation of brand-related data within the " +"application." +msgstr "" +"Represents a Brand object in the system. This class handles information and " +"attributes related to a brand, including its name, logos, description, " +"associated categories, a unique slug, and priority order. It allows for the " +"organization and representation of brand-related data within the " +"application." + +#: core/models.py:328 msgid "name of this brand" msgstr "Name of this brand" -#: core/models.py:341 +#: core/models.py:329 msgid "brand name" msgstr "Brand name" -#: core/models.py:348 +#: core/models.py:336 msgid "upload a logo representing this brand" msgstr "Upload a logo representing this brand" -#: core/models.py:350 +#: core/models.py:338 msgid "brand small image" msgstr "Brand small image" -#: core/models.py:356 +#: core/models.py:344 msgid "upload a big logo representing this brand" msgstr "Upload a big logo representing this brand" -#: core/models.py:358 +#: core/models.py:346 msgid "brand big image" msgstr "Brand big image" -#: core/models.py:363 +#: core/models.py:351 msgid "add a detailed description of the brand" msgstr "Add a detailed description of the brand" -#: core/models.py:364 +#: core/models.py:352 msgid "brand description" msgstr "Brand description" -#: core/models.py:369 +#: core/models.py:357 msgid "optional categories that this brand is associated with" msgstr "Optional categories that this brand is associated with" -#: core/models.py:370 +#: core/models.py:358 msgid "associated categories" msgstr "Categories" -#: core/models.py:400 +#: core/models.py:388 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1549,68 +1527,68 @@ msgstr "" "management system to allow tracking and evaluation of products available " "from various vendors." -#: core/models.py:412 +#: core/models.py:400 msgid "the vendor supplying this product stock" msgstr "The vendor supplying this product stock" -#: core/models.py:413 +#: core/models.py:401 msgid "associated vendor" msgstr "Associated vendor" -#: core/models.py:417 +#: core/models.py:405 msgid "final price to the customer after markups" msgstr "Final price to the customer after markups" -#: core/models.py:418 +#: core/models.py:406 msgid "selling price" msgstr "Selling price" -#: core/models.py:423 +#: core/models.py:411 msgid "the product associated with this stock entry" msgstr "The product associated with this stock entry" -#: core/models.py:424 core/models.py:708 core/models.py:765 -#: core/models.py:1709 +#: core/models.py:412 core/models.py:683 core/models.py:730 +#: core/models.py:1583 msgid "associated product" msgstr "Associated product" -#: core/models.py:431 +#: core/models.py:419 msgid "the price paid to the vendor for this product" msgstr "The price paid to the vendor for this product" -#: core/models.py:432 +#: core/models.py:420 msgid "vendor purchase price" msgstr "Vendor purchase price" -#: core/models.py:436 +#: core/models.py:424 msgid "available quantity of the product in stock" msgstr "Available quantity of the product in stock" -#: core/models.py:437 +#: core/models.py:425 msgid "quantity in stock" msgstr "Quantity in stock" -#: core/models.py:441 +#: core/models.py:429 msgid "vendor-assigned SKU for identifying the product" msgstr "Vendor-assigned SKU for identifying the product" -#: core/models.py:442 +#: core/models.py:430 msgid "vendor sku" msgstr "Vendor's SKU" -#: core/models.py:448 +#: core/models.py:436 msgid "digital file associated with this stock if applicable" msgstr "Digital file associated with this stock if applicable" -#: core/models.py:449 +#: core/models.py:437 msgid "digital file" msgstr "Digital file" -#: core/models.py:458 +#: core/models.py:446 msgid "stock entries" msgstr "Stock entries" -#: core/models.py:463 +#: core/models.py:451 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1630,55 +1608,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:476 +#: core/models.py:464 msgid "category this product belongs to" msgstr "Category this product belongs to" -#: core/models.py:485 +#: core/models.py:473 msgid "optionally associate this product with a brand" msgstr "Optionally associate this product with a brand" -#: core/models.py:491 +#: core/models.py:479 msgid "tags that help describe or group this product" msgstr "Tags that help describe or group this product" -#: core/models.py:496 +#: core/models.py:484 msgid "indicates whether this product is digitally delivered" msgstr "Indicates whether this product is digitally delivered" -#: core/models.py:497 +#: core/models.py:485 msgid "is product digital" msgstr "Is product digital" -#: core/models.py:503 +#: core/models.py:491 msgid "provide a clear identifying name for the product" msgstr "Provide a clear identifying name for the product" -#: core/models.py:504 +#: core/models.py:492 msgid "product name" msgstr "Product name" -#: core/models.py:509 core/models.py:831 +#: core/models.py:497 core/models.py:772 msgid "add a detailed description of the product" msgstr "Add a detailed description of the product" -#: core/models.py:510 +#: core/models.py:498 msgid "product description" msgstr "Product description" -#: core/models.py:517 +#: core/models.py:505 msgid "part number for this product" msgstr "Part number for this product" -#: core/models.py:518 +#: core/models.py:506 msgid "part number" msgstr "Part number" -#: core/models.py:537 +#: core/models.py:525 msgid "stock keeping unit for this product" msgstr "Stock Keeping Unit for this product" -#: core/models.py:607 +#: core/models.py:599 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 " @@ -1694,288 +1672,392 @@ msgstr "" " including string, integer, float, boolean, array, and object. This allows " "for dynamic and flexible data structuring." -#: core/models.py:619 +#: core/models.py:611 msgid "category of this attribute" msgstr "Category of this attribute" -#: core/models.py:627 +#: core/models.py:619 msgid "group of this attribute" msgstr "Group of this attribute" -#: core/models.py:633 +#: core/models.py:625 msgid "string" msgstr "String" -#: core/models.py:634 +#: core/models.py:626 msgid "integer" msgstr "Integer" -#: core/models.py:635 +#: core/models.py:627 msgid "float" msgstr "Float" -#: core/models.py:636 +#: core/models.py:628 msgid "boolean" msgstr "Boolean" -#: core/models.py:637 +#: core/models.py:629 msgid "array" msgstr "Array" -#: core/models.py:638 +#: core/models.py:630 msgid "object" msgstr "Object" -#: core/models.py:640 +#: core/models.py:632 msgid "type of the attribute's value" msgstr "Type of the attribute's value" -#: core/models.py:641 +#: core/models.py:633 msgid "value type" msgstr "Value type" -#: core/models.py:646 +#: core/models.py:638 msgid "name of this attribute" msgstr "Name of this attribute" -#: core/models.py:647 +#: core/models.py:639 msgid "attribute's name" msgstr "Attribute's name" -#: core/models.py:653 +#: core/models.py:645 msgid "is filterable" msgstr "is filterable" -#: core/models.py:654 +#: core/models.py:646 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:665 core/models.py:700 +#: core/models.py:657 core/models.py:675 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attribute" -#: core/models.py:699 +#: core/models.py:663 +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 "" +"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." + +#: core/models.py:674 msgid "attribute of this value" msgstr "Attribute of this value" -#: core/models.py:707 +#: core/models.py:682 msgid "the specific product associated with this attribute's value" msgstr "The specific product associated with this attribute's value" -#: core/models.py:713 +#: core/models.py:688 msgid "the specific value for this attribute" msgstr "The specific value for this attribute" -#: core/models.py:747 +#: core/models.py:701 +msgid "" +"Represents a product image associated with a product in the system. This " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " +"determining their display order. It also includes an accessibility feature " +"with alternative text for the images." +msgstr "" +"Represents a product image associated with a product in the system. This " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " +"determining their display order. It also includes an accessibility feature " +"with alternative text for the images." + +#: core/models.py:712 msgid "provide alternative text for the image for accessibility" msgstr "Provide alternative text for the image for accessibility" -#: core/models.py:748 +#: core/models.py:713 msgid "image alt text" msgstr "Image alt text" -#: core/models.py:751 +#: core/models.py:716 msgid "upload the image file for this product" msgstr "Upload the image file for this product" -#: core/models.py:752 core/models.py:777 +#: core/models.py:717 core/models.py:742 msgid "product image" msgstr "Product image" -#: core/models.py:758 +#: core/models.py:723 msgid "determines the order in which images are displayed" msgstr "Determines the order in which images are displayed" -#: core/models.py:759 +#: core/models.py:724 msgid "display priority" msgstr "Display priority" -#: core/models.py:764 +#: core/models.py:729 msgid "the product that this image represents" msgstr "The product that this image represents" -#: core/models.py:778 +#: core/models.py:743 msgid "product images" msgstr "Product images" -#: core/models.py:819 +#: core/models.py:748 +msgid "" +"Represents a promotional campaign for products with a discount. This class " +"is used to define and manage promotional campaigns that offer a percentage-" +"based discount for products. The class includes attributes for setting the " +"discount rate, providing details about the promotion, and linking it to the " +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." +msgstr "" +"Represents a promotional campaign for products with a discount. This class " +"is used to define and manage promotional campaigns that offer a percentage-" +"based discount for products. The class includes attributes for setting the " +"discount rate, providing details about the promotion, and linking it to the " +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." + +#: core/models.py:760 msgid "percentage discount for the selected products" msgstr "Percentage discount for the selected products" -#: core/models.py:820 +#: core/models.py:761 msgid "discount percentage" msgstr "Discount percentage" -#: core/models.py:825 +#: core/models.py:766 msgid "provide a unique name for this promotion" msgstr "Provide a unique name for this promotion" -#: core/models.py:826 +#: core/models.py:767 msgid "promotion name" msgstr "Promotion name" -#: core/models.py:832 +#: core/models.py:773 msgid "promotion description" msgstr "Promotion description" -#: core/models.py:837 +#: core/models.py:778 msgid "select which products are included in this promotion" msgstr "Select which products are included in this promotion" -#: core/models.py:838 +#: core/models.py:779 msgid "included products" msgstr "Included products" -#: core/models.py:842 +#: core/models.py:783 msgid "promotion" msgstr "Promotion" -#: core/models.py:867 +#: core/models.py:794 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"class provides functionality to manage a collection of products, supporting " +"operations such as adding and removing products, as well as supporting " +"operations for adding and removing multiple products at once." +msgstr "" +"Represents a user's wishlist for storing and managing desired products. The " +"class provides functionality to manage a collection of products, supporting " +"operations such as adding and removing products, as well as supporting " +"operations for adding and removing multiple products at once." + +#: core/models.py:806 msgid "products that the user has marked as wanted" msgstr "Products that the user has marked as wanted" -#: core/models.py:875 +#: core/models.py:814 msgid "user who owns this wishlist" msgstr "User who owns this wishlist" -#: core/models.py:876 +#: core/models.py:815 msgid "wishlist owner" msgstr "Wishlist's Owner" -#: core/models.py:884 +#: core/models.py:823 msgid "wishlist" msgstr "Wishlist" -#: core/models.py:951 +#: core/models.py:865 +msgid "" +"Represents a documentary record tied to a product. This class is used to " +"store information about documentaries related to specific products, " +"including file uploads and their metadata. It contains methods and " +"properties to handle the file type and storage path for the documentary " +"files. It extends functionality from specific mixins and provides additional" +" custom features." +msgstr "" +"Represents a documentary record tied to a product. This class is used to " +"store information about documentaries related to specific products, " +"including file uploads and their metadata. It contains methods and " +"properties to handle the file type and storage path for the documentary " +"files. It extends functionality from specific mixins and provides additional" +" custom features." + +#: core/models.py:878 msgid "documentary" msgstr "Documentary" -#: core/models.py:952 +#: core/models.py:879 msgid "documentaries" msgstr "Documentaries" -#: core/models.py:962 +#: core/models.py:889 msgid "unresolved" msgstr "Unresolved" -#: core/models.py:1008 +#: core/models.py:894 +msgid "" +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." +msgstr "" +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." + +#: core/models.py:909 msgid "address line for the customer" msgstr "Address line for the customer" -#: core/models.py:1009 +#: core/models.py:910 msgid "address line" msgstr "Address line" -#: core/models.py:1011 +#: core/models.py:912 msgid "street" msgstr "Street" -#: core/models.py:1012 +#: core/models.py:913 msgid "district" msgstr "District" -#: core/models.py:1013 +#: core/models.py:914 msgid "city" msgstr "City" -#: core/models.py:1014 +#: core/models.py:915 msgid "region" msgstr "Region" -#: core/models.py:1015 +#: core/models.py:916 msgid "postal code" msgstr "Postal code" -#: core/models.py:1016 +#: core/models.py:917 msgid "country" msgstr "Country" -#: core/models.py:1023 +#: core/models.py:924 msgid "geolocation point: (longitude, latitude)" msgstr "Geolocation Point(Longitude, Latitude)" -#: core/models.py:1026 +#: core/models.py:927 msgid "full JSON response from geocoder for this address" msgstr "Full JSON response from geocoder for this address" -#: core/models.py:1031 +#: core/models.py:932 msgid "stored JSON response from the geocoding service" msgstr "Stored JSON response from the geocoding service" -#: core/models.py:1039 +#: core/models.py:940 msgid "address" msgstr "Address" -#: core/models.py:1040 +#: core/models.py:941 msgid "addresses" msgstr "Adresses" -#: core/models.py:1085 +#: core/models.py:953 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"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:967 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:1086 +#: core/models.py:968 msgid "promo code identifier" msgstr "Promo code identifier" -#: core/models.py:1093 +#: core/models.py:975 msgid "fixed discount amount applied if percent is not used" msgstr "Fixed discount amount applied if percent is not used" -#: core/models.py:1094 +#: core/models.py:976 msgid "fixed discount amount" msgstr "Fixed discount amount" -#: core/models.py:1100 +#: core/models.py:982 msgid "percentage discount applied if fixed amount is not used" msgstr "Percentage discount applied if fixed amount is not used" -#: core/models.py:1101 +#: core/models.py:983 msgid "percentage discount" msgstr "Percentage discount" -#: core/models.py:1106 +#: core/models.py:988 msgid "timestamp when the promocode expires" msgstr "Timestamp when the promocode expires" -#: core/models.py:1107 +#: core/models.py:989 msgid "end validity time" msgstr "End validity time" -#: core/models.py:1112 +#: core/models.py:994 msgid "timestamp from which this promocode is valid" msgstr "Timestamp from which this promocode is valid" -#: core/models.py:1113 +#: core/models.py:995 msgid "start validity time" msgstr "Start validity time" -#: core/models.py:1118 +#: core/models.py:1000 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:1119 +#: core/models.py:1001 msgid "usage timestamp" msgstr "Usage timestamp" -#: core/models.py:1124 +#: core/models.py:1006 msgid "user assigned to this promocode if applicable" msgstr "User assigned to this promocode if applicable" -#: core/models.py:1125 +#: core/models.py:1007 msgid "assigned user" msgstr "Assigned user" -#: core/models.py:1132 +#: core/models.py:1014 msgid "promo code" msgstr "Promo code" -#: core/models.py:1133 +#: core/models.py:1015 msgid "promo codes" msgstr "Promo codes" -#: core/models.py:1140 +#: core/models.py:1022 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -1983,16 +2065,16 @@ msgstr "" "Only one type of discount should be defined (amount or percent), but not " "both or neither." -#: core/models.py:1155 +#: core/models.py:1037 msgid "promocode already used" msgstr "Promocode has been used already" -#: core/models.py:1171 +#: core/models.py:1053 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Invalid discount type for promocode {self.uuid}!" -#: core/models.py:1180 +#: core/models.py:1062 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 " @@ -2008,135 +2090,135 @@ msgstr "" "set, and shipping or billing details updated. Equally, functionality " "supports managing the products in the order lifecycle." -#: core/models.py:1197 +#: core/models.py:1079 msgid "the billing address used for this order" msgstr "The billing address used for this order" -#: core/models.py:1205 +#: core/models.py:1087 msgid "optional promo code applied to this order" msgstr "Optional promo code applied to this order" -#: core/models.py:1206 +#: core/models.py:1088 msgid "applied promo code" msgstr "Applied promo code" -#: core/models.py:1214 +#: core/models.py:1096 msgid "the shipping address used for this order" msgstr "The shipping address used for this order" -#: core/models.py:1215 +#: core/models.py:1097 msgid "shipping address" msgstr "Shipping address" -#: core/models.py:1221 +#: core/models.py:1103 msgid "current status of the order in its lifecycle" msgstr "Current status of the order in its lifecycle" -#: core/models.py:1222 +#: core/models.py:1104 msgid "order status" msgstr "Order status" -#: core/models.py:1227 core/models.py:1686 +#: core/models.py:1109 core/models.py:1560 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:1233 +#: core/models.py:1115 msgid "json representation of order attributes for this order" msgstr "JSON representation of order attributes for this order" -#: core/models.py:1239 +#: core/models.py:1121 msgid "the user who placed the order" msgstr "The user who placed the order" -#: core/models.py:1240 +#: core/models.py:1122 msgid "user" msgstr "User" -#: core/models.py:1246 +#: core/models.py:1128 msgid "the timestamp when the order was finalized" msgstr "The timestamp when the order was finalized" -#: core/models.py:1247 +#: core/models.py:1129 msgid "buy time" msgstr "Buy time" -#: core/models.py:1254 +#: core/models.py:1136 msgid "a human-readable identifier for the order" msgstr "A human-readable identifier for the order" -#: core/models.py:1255 +#: core/models.py:1137 msgid "human readable id" msgstr "human-readable ID" -#: core/models.py:1261 +#: core/models.py:1143 msgid "order" msgstr "Order" -#: core/models.py:1282 +#: core/models.py:1168 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:1316 +#: core/models.py:1202 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:1321 +#: core/models.py:1207 msgid "you cannot add inactive products to order" msgstr "You cannot add inactive products to order" -#: core/models.py:1338 +#: core/models.py:1224 msgid "you cannot add more products than available in stock" msgstr "You cannot add more products than available in stock" -#: core/models.py:1360 core/models.py:1385 core/models.py:1393 +#: core/models.py:1246 core/models.py:1271 core/models.py:1279 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:1381 +#: core/models.py:1267 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} does not exist with query <{query}>!" -#: core/models.py:1413 +#: core/models.py:1299 msgid "promocode does not exist" msgstr "Promocode does not exist" -#: core/models.py:1419 +#: core/models.py:1305 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:1438 +#: core/models.py:1324 msgid "address does not exist" msgstr "Address does not exist" -#: core/models.py:1459 core/models.py:1528 +#: core/models.py:1345 core/models.py:1414 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:1462 core/models.py:1524 +#: core/models.py:1348 core/models.py:1410 msgid "invalid force value" msgstr "Invalid force value" -#: core/models.py:1468 core/models.py:1531 +#: core/models.py:1354 core/models.py:1417 msgid "you cannot purchase an empty order!" msgstr "You cannot purchase an empty order!" -#: core/models.py:1487 +#: core/models.py:1373 msgid "you cannot buy an order without a user" msgstr "You cannot buy an order without a user!" -#: core/models.py:1501 +#: core/models.py:1387 msgid "a user without a balance cannot buy with balance" msgstr "A user without a balance cannot buy with balance!" -#: core/models.py:1506 +#: core/models.py:1392 msgid "insufficient funds to complete the order" msgstr "Insufficient funds to complete the order" -#: core/models.py:1540 +#: core/models.py:1426 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2144,149 +2226,201 @@ msgstr "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" -#: core/models.py:1549 +#: core/models.py:1435 #, 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:1674 +#: core/models.py:1533 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." + +#: core/models.py:1548 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:1675 +#: core/models.py:1549 msgid "purchase price at order time" msgstr "Purchase price at order time" -#: core/models.py:1680 +#: core/models.py:1554 msgid "internal comments for admins about this ordered product" msgstr "Internal comments for admins about this ordered product" -#: core/models.py:1681 +#: core/models.py:1555 msgid "internal comments" msgstr "Internal comments" -#: core/models.py:1687 +#: core/models.py:1561 msgid "user notifications" msgstr "User notifications" -#: core/models.py:1692 +#: core/models.py:1566 msgid "json representation of this item's attributes" msgstr "JSON representation of this item's attributes" -#: core/models.py:1693 +#: core/models.py:1567 msgid "ordered product attributes" msgstr "Ordered product attributes" -#: core/models.py:1698 +#: core/models.py:1572 msgid "reference to the parent order that contains this product" msgstr "Reference to the parent order that contains this product" -#: core/models.py:1699 +#: core/models.py:1573 msgid "parent order" msgstr "Parent order" -#: core/models.py:1708 +#: core/models.py:1582 msgid "the specific product associated with this order line" msgstr "The specific product associated with this order line" -#: core/models.py:1715 +#: core/models.py:1589 msgid "quantity of this specific product in the order" msgstr "Quantity of this specific product in the order" -#: core/models.py:1716 +#: core/models.py:1590 msgid "product quantity" msgstr "Product quantity" -#: core/models.py:1723 +#: core/models.py:1597 msgid "current status of this product in the order" msgstr "Current status of this product in the order" -#: core/models.py:1724 +#: core/models.py:1598 msgid "product line status" msgstr "Product line status" -#: core/models.py:1784 +#: core/models.py:1661 msgid "order product must have an order" msgstr "Orderproduct must have an associated order!" -#: core/models.py:1786 +#: core/models.py:1663 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Wrong action specified for feedback: {action}!" -#: core/models.py:1800 +#: core/models.py:1677 msgid "you cannot feedback an order which is not received" msgstr "you cannot feedback an order which is not received" -#: core/models.py:1806 +#: core/models.py:1683 msgid "name" msgstr "Name" -#: core/models.py:1807 +#: core/models.py:1684 msgid "URL of the integration" msgstr "URL of the integration" -#: core/models.py:1808 +#: core/models.py:1685 msgid "authentication credentials" msgstr "Authentication credentials" -#: core/models.py:1822 +#: core/models.py:1699 msgid "you can only have one default CRM provider" msgstr "You can only have one default CRM provider" -#: core/models.py:1826 +#: core/models.py:1703 msgid "CRM" msgstr "CRM" -#: core/models.py:1827 +#: core/models.py:1704 msgid "CRMs" msgstr "CRMs" -#: core/models.py:1839 +#: core/models.py:1716 msgid "order CRM link" msgstr "Order's CRM link" -#: core/models.py:1840 +#: core/models.py:1717 msgid "orders CRM links" msgstr "Orders' CRM links" -#: core/models.py:1874 +#: core/models.py:1722 +msgid "" +"Represents the downloading functionality for digital assets associated with " +"orders. The DigitalAssetDownload class provides the ability to manage and " +"access downloads related to order products. It maintains information about " +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." +msgstr "" +"Represents the downloading functionality for digital assets associated with " +"orders. The DigitalAssetDownload class provides the ability to manage and " +"access downloads related to order products. It maintains information about " +"the associated order product, the number of downloads, and whether the asset" +" 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:1736 msgid "download" msgstr "Download" -#: core/models.py:1875 +#: core/models.py:1737 msgid "downloads" msgstr "Downloads" -#: core/models.py:1883 +#: core/models.py:1745 msgid "you can not download a digital asset for a non-finished order" msgstr "You can not download a digital asset for a non-finished order" -#: core/models.py:1913 +#: core/models.py:1754 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." +msgstr "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." + +#: core/models.py:1766 msgid "user-provided comments about their experience with the product" msgstr "User-provided comments about their experience with the product" -#: core/models.py:1914 +#: core/models.py:1767 msgid "feedback comments" msgstr "Feedback comments" -#: core/models.py:1921 +#: core/models.py:1774 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:1922 +#: core/models.py:1775 msgid "related order product" msgstr "Related order product" -#: core/models.py:1927 +#: core/models.py:1780 msgid "user-assigned rating for the product" msgstr "User-assigned rating for the product" -#: core/models.py:1928 +#: core/models.py:1781 msgid "product rating" msgstr "Product rating" @@ -2503,17 +2637,17 @@ msgstr "Invalid timeout value, it must be between 0 and 216000 seconds" msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | contact us initiated" -#: core/utils/emailing.py:64 +#: core/utils/emailing.py:74 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Order Confirmation" -#: core/utils/emailing.py:99 +#: core/utils/emailing.py:109 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Order Delivered" -#: core/utils/emailing.py:187 +#: core/utils/emailing.py:197 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | promocode granted" @@ -2536,15 +2670,15 @@ msgstr "" msgid "invalid phone number format" msgstr "Invalid phone number format" -#: core/views.py:481 +#: core/views.py:489 msgid "you can only download the digital asset once" msgstr "You can only download the digital asset once" -#: core/views.py:539 +#: core/views.py:547 msgid "favicon not found" msgstr "favicon not found" -#: core/viewsets.py:1319 +#: core/viewsets.py:1357 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Geocoding error: {e}" diff --git a/core/locale/es_ES/LC_MESSAGES/django.mo b/core/locale/es_ES/LC_MESSAGES/django.mo index ac70d03bb8098184471e8f20a7d2dae0b5989f63..d127adf7be6373971a01641cec6e99b473910ba5 100644 GIT binary patch delta 20727 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 S&GN}Sx$jG_%%ul9bo?K`xp?*f diff --git a/core/locale/es_ES/LC_MESSAGES/django.po b/core/locale/es_ES/LC_MESSAGES/django.po index e23ec019..ad0a97d5 100644 --- a/core/locale/es_ES/LC_MESSAGES/django.po +++ b/core/locale/es_ES/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:52+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -90,11 +90,11 @@ msgid "selected items have been deactivated." msgstr "Los artículos seleccionados se han desactivado." #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:712 core/models.py:720 +#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 msgid "attribute value" msgstr "Atributo Valor" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:721 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 msgid "attribute values" msgstr "Valores de los atributos" @@ -106,7 +106,7 @@ msgstr "Imagen" msgid "images" msgstr "Imágenes" -#: core/admin.py:155 core/models.py:457 +#: core/admin.py:155 core/models.py:445 msgid "stock" msgstr "Stock" @@ -114,11 +114,11 @@ msgstr "Stock" msgid "stocks" msgstr "Acciones" -#: core/admin.py:166 core/models.py:1735 +#: core/admin.py:166 core/models.py:1609 msgid "order product" msgstr "Pedir un producto" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1736 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 msgid "order products" msgstr "Pedir productos" @@ -329,7 +329,7 @@ msgstr "" "Reescribir algunos campos de una categoría existente guardando los no " "editables" -#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:553 +#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:487 #: core/graphene/object_types.py:117 core/graphene/object_types.py:207 #: core/graphene/object_types.py:509 msgid "SEO Meta snapshot" @@ -605,49 +605,7 @@ msgstr "Listar todos los productos (vista simple)" msgid "(exact) Product UUID" msgstr "UUID (exacto) del producto" -#: core/docs/drf/viewsets.py:384 -msgid "(icontains) Product name" -msgstr "(icontains) Nombre del producto" - -#: core/docs/drf/viewsets.py:390 -msgid "(list) Category names, case-insensitive" -msgstr "" -"(lista) Nombres de categoría, sin distinción entre mayúsculas y minúsculas" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Category UUID" -msgstr "(exacto) Categoría UUID" - -#: core/docs/drf/viewsets.py:402 -msgid "(list) Tag names, case-insensitive" -msgstr "" -"(lista) Nombres de etiquetas, sin distinción entre mayúsculas y minúsculas" - -#: core/docs/drf/viewsets.py:408 -msgid "(gte) Minimum stock price" -msgstr "(gte) Precio mínimo de las acciones" - -#: core/docs/drf/viewsets.py:414 -msgid "(lte) Maximum stock price" -msgstr "(lte) Precio máximo de las acciones" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Only active products" -msgstr "(exacto) Sólo productos activos" - -#: core/docs/drf/viewsets.py:426 -msgid "(iexact) Brand name" -msgstr "(iexact) Marca" - -#: core/docs/drf/viewsets.py:438 -msgid "(gt) Minimum stock quantity" -msgstr "(gt) Cantidad mínima de existencias" - -#: core/docs/drf/viewsets.py:444 -msgid "(exact) Digital vs. physical" -msgstr "(exacto) Digital frente a físico" - -#: core/docs/drf/viewsets.py:451 +#: core/docs/drf/viewsets.py:385 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -655,251 +613,255 @@ 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:465 core/docs/drf/viewsets.py:466 +#: core/docs/drf/viewsets.py:399 core/docs/drf/viewsets.py:400 msgid "retrieve a single product (detailed view)" msgstr "Recuperar un solo producto (vista detallada)" -#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:495 -#: core/docs/drf/viewsets.py:511 core/docs/drf/viewsets.py:527 -#: core/docs/drf/viewsets.py:543 core/docs/drf/viewsets.py:559 +#: core/docs/drf/viewsets.py:405 core/docs/drf/viewsets.py:429 +#: core/docs/drf/viewsets.py:445 core/docs/drf/viewsets.py:461 +#: core/docs/drf/viewsets.py:477 core/docs/drf/viewsets.py:493 msgid "Product UUID or slug" msgstr "UUID o babosa del producto" -#: core/docs/drf/viewsets.py:481 core/docs/drf/viewsets.py:482 +#: core/docs/drf/viewsets.py:415 core/docs/drf/viewsets.py:416 msgid "create a product" msgstr "Crear un producto" -#: core/docs/drf/viewsets.py:489 core/docs/drf/viewsets.py:490 +#: core/docs/drf/viewsets.py:423 core/docs/drf/viewsets.py:424 msgid "rewrite an existing product, preserving non-editable fields" msgstr "Reescribir un producto existente conservando los campos no editables" -#: core/docs/drf/viewsets.py:505 core/docs/drf/viewsets.py:506 +#: core/docs/drf/viewsets.py:439 core/docs/drf/viewsets.py:440 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:521 core/docs/drf/viewsets.py:522 +#: core/docs/drf/viewsets.py:455 core/docs/drf/viewsets.py:456 msgid "delete a product" msgstr "Eliminar un producto" -#: core/docs/drf/viewsets.py:537 core/docs/drf/viewsets.py:538 +#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:472 msgid "lists all permitted feedbacks for a product" msgstr "enumera todas las opiniones permitidas sobre un producto" -#: core/docs/drf/viewsets.py:554 +#: core/docs/drf/viewsets.py:488 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:572 +#: core/docs/drf/viewsets.py:506 msgid "list all addresses" msgstr "Enumerar todas las direcciones" -#: core/docs/drf/viewsets.py:579 +#: core/docs/drf/viewsets.py:513 msgid "retrieve a single address" msgstr "Recuperar una única dirección" -#: core/docs/drf/viewsets.py:586 +#: core/docs/drf/viewsets.py:520 msgid "create a new address" msgstr "Crear una nueva dirección" -#: core/docs/drf/viewsets.py:594 +#: core/docs/drf/viewsets.py:528 msgid "delete an address" msgstr "Borrar una dirección" -#: core/docs/drf/viewsets.py:601 +#: core/docs/drf/viewsets.py:535 msgid "update an entire address" msgstr "Actualizar una dirección completa" -#: core/docs/drf/viewsets.py:609 +#: core/docs/drf/viewsets.py:543 msgid "partially update an address" msgstr "Actualizar parcialmente una dirección" -#: core/docs/drf/viewsets.py:617 +#: core/docs/drf/viewsets.py:551 msgid "autocomplete address suggestions" msgstr "Autocompletar direcciones" -#: core/docs/drf/viewsets.py:622 +#: core/docs/drf/viewsets.py:556 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:628 +#: core/docs/drf/viewsets.py:562 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:641 +#: core/docs/drf/viewsets.py:575 msgid "list all feedbacks (simple view)" msgstr "lista de todas las reacciones (vista simple)" -#: core/docs/drf/viewsets.py:645 +#: core/docs/drf/viewsets.py:579 msgid "retrieve a single feedback (detailed view)" msgstr "recuperar una sola respuesta (vista detallada)" -#: core/docs/drf/viewsets.py:649 +#: core/docs/drf/viewsets.py:583 msgid "create a feedback" msgstr "crear una retroalimentación" -#: core/docs/drf/viewsets.py:653 +#: core/docs/drf/viewsets.py:587 msgid "delete a feedback" msgstr "eliminar un comentario" -#: core/docs/drf/viewsets.py:657 +#: core/docs/drf/viewsets.py:591 msgid "rewrite an existing feedback saving non-editables" msgstr "reescribir una respuesta existente guardando los no editables" -#: core/docs/drf/viewsets.py:661 +#: core/docs/drf/viewsets.py:595 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:668 +#: core/docs/drf/viewsets.py:602 msgid "list all order–product relations (simple view)" msgstr "listar todas las relaciones pedido-producto (vista simple)" -#: core/docs/drf/viewsets.py:675 +#: core/docs/drf/viewsets.py:609 msgid "retrieve a single order–product relation (detailed view)" msgstr "recuperar una única relación pedido-producto (vista detallada)" -#: core/docs/drf/viewsets.py:682 +#: core/docs/drf/viewsets.py:616 msgid "create a new order–product relation" msgstr "crear una nueva relación pedido-producto" -#: core/docs/drf/viewsets.py:689 +#: core/docs/drf/viewsets.py:623 msgid "replace an existing order–product relation" msgstr "sustituir una relación pedido-producto existente" -#: core/docs/drf/viewsets.py:696 +#: core/docs/drf/viewsets.py:630 msgid "partially update an existing order–product relation" msgstr "actualizar parcialmente una relación pedido-producto existente" -#: core/docs/drf/viewsets.py:703 +#: core/docs/drf/viewsets.py:637 msgid "delete an order–product relation" msgstr "suprimir una relación pedido-producto" -#: core/docs/drf/viewsets.py:710 +#: core/docs/drf/viewsets.py:644 msgid "add or remove feedback on an order–product relation" msgstr "añadir o eliminar comentarios en una relación pedido-producto" -#: core/elasticsearch/__init__.py:105 +#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 msgid "no search term provided." msgstr "No se proporciona ningún término de búsqueda." -#: core/filters.py:64 core/filters.py:594 core/filters.py:623 +#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +msgid "Search" +msgstr "Buscar en" + +#: core/filters.py:66 core/filters.py:554 core/filters.py:583 msgid "UUID" msgstr "UUID" -#: core/filters.py:65 core/filters.py:429 core/filters.py:560 +#: core/filters.py:67 core/filters.py:399 core/filters.py:526 msgid "Name" msgstr "Nombre" -#: core/filters.py:66 core/filters.py:562 +#: core/filters.py:68 core/filters.py:528 msgid "Categories" msgstr "Categorías" -#: core/filters.py:68 +#: core/filters.py:70 msgid "Categories Slugs" msgstr "Categorías Babosas" -#: core/filters.py:69 core/filters.py:437 +#: core/filters.py:71 core/filters.py:407 msgid "Tags" msgstr "Etiquetas" -#: core/filters.py:70 +#: core/filters.py:72 msgid "Min Price" msgstr "Precio mínimo" -#: core/filters.py:71 +#: core/filters.py:73 msgid "Max Price" msgstr "Precio máximo" -#: core/filters.py:72 +#: core/filters.py:74 msgid "Is Active" msgstr "Está activo" -#: core/filters.py:73 +#: core/filters.py:75 msgid "Brand" msgstr "Marca" -#: core/filters.py:74 +#: core/filters.py:76 msgid "Attributes" msgstr "Atributos" -#: core/filters.py:75 +#: core/filters.py:77 msgid "Quantity" msgstr "Cantidad" -#: core/filters.py:76 core/filters.py:431 core/filters.py:561 -#: core/models.py:287 core/models.py:381 core/models.py:534 +#: core/filters.py:78 core/filters.py:401 core/filters.py:527 +#: core/models.py:287 core/models.py:369 core/models.py:522 msgid "Slug" msgstr "Babosa" -#: core/filters.py:77 +#: core/filters.py:79 msgid "Is Digital" msgstr "Es Digital" -#: core/filters.py:78 +#: core/filters.py:80 msgid "Include sub-categories" msgstr "Incluir subcategorías" -#: core/filters.py:81 +#: core/filters.py:83 msgid "Include personal ordered" msgstr "Incluir productos personales solicitados" -#: core/filters.py:83 core/models.py:538 +#: core/filters.py:85 core/models.py:526 msgid "SKU" msgstr "SKU" -#: core/filters.py:166 +#: core/filters.py:161 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:356 +#: core/filters.py:324 msgid "Search (ID, product name or part number)" msgstr "Búsqueda (ID, nombre del producto o número de pieza)" -#: core/filters.py:359 +#: core/filters.py:327 msgid "Bought after (inclusive)" msgstr "Comprado después (inclusive)" -#: core/filters.py:360 +#: core/filters.py:328 msgid "Bought before (inclusive)" msgstr "Comprado antes (inclusive)" -#: core/filters.py:363 core/filters.py:410 core/filters.py:625 +#: core/filters.py:331 core/filters.py:378 core/filters.py:585 msgid "User email" msgstr "Correo electrónico del usuario" -#: core/filters.py:364 core/filters.py:411 core/filters.py:603 -#: core/filters.py:624 +#: core/filters.py:332 core/filters.py:379 core/filters.py:563 +#: core/filters.py:584 msgid "User UUID" msgstr "UUID de usuario" -#: core/filters.py:365 +#: core/filters.py:333 msgid "Status" msgstr "Estado" -#: core/filters.py:369 +#: core/filters.py:337 msgid "Human Readable ID" msgstr "Identificación legible" -#: core/filters.py:430 +#: core/filters.py:400 msgid "Parent" msgstr "Padres" -#: core/filters.py:434 +#: core/filters.py:404 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:438 +#: core/filters.py:408 msgid "Level" msgstr "Nivel" -#: core/filters.py:598 +#: core/filters.py:558 msgid "Product UUID" msgstr "UUID del producto" @@ -954,7 +916,7 @@ 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:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:821 +#: core/graphene/mutations.py:527 core/viewsets.py:839 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" "Tipo incorrecto proveniente del método order.buy(): {type(instance)!s}" @@ -1018,37 +980,37 @@ msgstr "" msgid "add or delete a feedback for orderproduct" msgstr "Añadir o eliminar un comentario para el pedido-producto" -#: core/graphene/mutations.py:555 +#: core/graphene/mutations.py:556 msgid "action must be either `add` or `remove`" msgstr "La acción debe ser \"añadir\" o \"eliminar\"." -#: core/graphene/mutations.py:558 +#: core/graphene/mutations.py:559 #, 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:621 +#: core/graphene/mutations.py:622 msgid "original address string provided by the user" msgstr "Cadena de dirección original proporcionada por el usuario" -#: core/graphene/mutations.py:655 core/models.py:896 core/models.py:909 -#: core/models.py:1348 core/models.py:1377 core/models.py:1402 -#: core/viewsets.py:824 +#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 +#: core/models.py:1234 core/models.py:1263 core/models.py:1288 +#: core/viewsets.py:842 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} no existe: ¡{uuid}!" -#: core/graphene/mutations.py:668 +#: core/graphene/mutations.py:669 msgid "limit must be between 1 and 10" msgstr "El límite debe estar entre 1 y 10" -#: core/graphene/mutations.py:713 +#: core/graphene/mutations.py:714 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - funciona a las mil maravillas" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:666 core/models.py:1234 -#: core/models.py:1809 +#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 +#: core/models.py:1686 msgid "attributes" msgstr "Atributos" @@ -1061,11 +1023,11 @@ 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:224 core/models.py:312 core/models.py:620 +#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:612 msgid "categories" msgstr "Categorías" -#: core/graphene/object_types.py:124 core/models.py:395 +#: core/graphene/object_types.py:124 core/models.py:383 msgid "brands" msgstr "Marcas" @@ -1125,7 +1087,7 @@ msgid "represents feedback from a user." msgstr "Representa la opinión de un usuario." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1228 +#: core/models.py:1110 msgid "notifications" msgstr "Notificaciones" @@ -1133,7 +1095,7 @@ msgstr "Notificaciones" msgid "download url for this order product if applicable" msgstr "Descargar url para este producto de pedido si procede" -#: core/graphene/object_types.py:400 core/models.py:1938 +#: core/graphene/object_types.py:400 core/models.py:1791 msgid "feedback" msgstr "Comentarios" @@ -1141,7 +1103,7 @@ msgstr "Comentarios" msgid "a list of order products in this order" msgstr "Una lista de los productos del pedido" -#: core/graphene/object_types.py:436 core/models.py:1198 +#: core/graphene/object_types.py:436 core/models.py:1080 msgid "billing address" msgstr "Dirección de facturación" @@ -1169,7 +1131,7 @@ msgstr "¿Están todos los productos en el pedido digital" msgid "transactions for this order" msgstr "Transacciones para este pedido" -#: core/graphene/object_types.py:465 core/models.py:1262 +#: core/graphene/object_types.py:465 core/models.py:1144 msgid "orders" msgstr "Pedidos" @@ -1181,15 +1143,15 @@ msgstr "URL de la imagen" msgid "product's images" msgstr "Imágenes del producto" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:477 +#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 msgid "category" msgstr "Categoría" -#: core/graphene/object_types.py:502 core/models.py:1939 +#: core/graphene/object_types.py:502 core/models.py:1792 msgid "feedbacks" msgstr "Comentarios" -#: core/graphene/object_types.py:503 core/models.py:394 core/models.py:486 +#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 msgid "brand" msgstr "Marca" @@ -1221,7 +1183,7 @@ msgstr "Número de reacciones" msgid "only available for personal orders" msgstr "Productos sólo disponibles para pedidos personales" -#: core/graphene/object_types.py:534 core/models.py:548 +#: core/graphene/object_types.py:534 core/models.py:536 msgid "products" msgstr "Productos" @@ -1233,7 +1195,7 @@ msgstr "Códigos promocionales" msgid "products on sale" msgstr "Productos a la venta" -#: core/graphene/object_types.py:651 core/models.py:843 +#: core/graphene/object_types.py:651 core/models.py:784 msgid "promotions" msgstr "Promociones" @@ -1241,7 +1203,7 @@ msgstr "Promociones" msgid "vendor" msgstr "Vendedor" -#: core/graphene/object_types.py:656 core/models.py:547 +#: core/graphene/object_types.py:656 core/models.py:535 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1249,11 +1211,11 @@ msgstr "Vendedor" msgid "product" msgstr "Producto" -#: core/graphene/object_types.py:667 core/models.py:868 +#: core/graphene/object_types.py:667 core/models.py:807 msgid "wishlisted products" msgstr "Productos deseados" -#: core/graphene/object_types.py:673 core/models.py:885 +#: core/graphene/object_types.py:673 core/models.py:824 msgid "wishlists" msgstr "Listas de deseos" @@ -1261,7 +1223,7 @@ msgstr "Listas de deseos" msgid "tagged products" msgstr "Productos con etiqueta" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:492 +#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 msgid "product tags" msgstr "Etiquetas del producto" @@ -1372,7 +1334,7 @@ msgstr "Grupo de atributos padre" msgid "attribute group's name" msgstr "Nombre del grupo de atributos" -#: core/models.py:100 core/models.py:628 +#: core/models.py:100 core/models.py:620 msgid "attribute group" msgstr "Grupo de atributos" @@ -1540,51 +1502,65 @@ msgstr "Descripción de la categoría" msgid "tags that help describe or group this category" msgstr "etiquetas que ayudan a describir o agrupar esta categoría" -#: core/models.py:299 core/models.py:387 +#: core/models.py:299 core/models.py:375 msgid "priority" msgstr "Prioridad" -#: core/models.py:340 +#: core/models.py:318 +msgid "" +"Represents a Brand object in the system. This class handles information and " +"attributes related to a brand, including its name, logos, description, " +"associated categories, a unique slug, and priority order. It allows for the " +"organization and representation of brand-related data within the " +"application." +msgstr "" +"Representa un objeto Marca en el sistema. Esta clase maneja información y " +"atributos relacionados con una marca, incluyendo su nombre, logotipos, " +"descripción, categorías asociadas, un slug único y orden de prioridad. " +"Permite organizar y representar los datos relacionados con la marca dentro " +"de la aplicación." + +#: core/models.py:328 msgid "name of this brand" msgstr "Nombre de esta marca" -#: core/models.py:341 +#: core/models.py:329 msgid "brand name" msgstr "Marca" -#: core/models.py:348 +#: core/models.py:336 msgid "upload a logo representing this brand" msgstr "Cargar un logotipo que represente a esta marca" -#: core/models.py:350 +#: core/models.py:338 msgid "brand small image" msgstr "Marca pequeña imagen" -#: core/models.py:356 +#: core/models.py:344 msgid "upload a big logo representing this brand" msgstr "Sube un logotipo grande que represente a esta marca" -#: core/models.py:358 +#: core/models.py:346 msgid "brand big image" msgstr "Gran imagen de marca" -#: core/models.py:363 +#: core/models.py:351 msgid "add a detailed description of the brand" msgstr "Añadir una descripción detallada de la marca" -#: core/models.py:364 +#: core/models.py:352 msgid "brand description" msgstr "Descripción de la marca" -#: core/models.py:369 +#: core/models.py:357 msgid "optional categories that this brand is associated with" msgstr "Categorías opcionales a las que se asocia esta marca" -#: core/models.py:370 +#: core/models.py:358 msgid "associated categories" msgstr "Categorías" -#: core/models.py:400 +#: core/models.py:388 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1601,68 +1577,68 @@ msgstr "" "seguimiento y la evaluación de los productos disponibles de varios " "vendedores." -#: core/models.py:412 +#: core/models.py:400 msgid "the vendor supplying this product stock" msgstr "El vendedor que suministra este producto dispone de" -#: core/models.py:413 +#: core/models.py:401 msgid "associated vendor" msgstr "Proveedor asociado" -#: core/models.py:417 +#: core/models.py:405 msgid "final price to the customer after markups" msgstr "Precio final al cliente después de márgenes" -#: core/models.py:418 +#: core/models.py:406 msgid "selling price" msgstr "Precio de venta" -#: core/models.py:423 +#: core/models.py:411 msgid "the product associated with this stock entry" msgstr "El producto asociado a esta entrada en stock" -#: core/models.py:424 core/models.py:708 core/models.py:765 -#: core/models.py:1709 +#: core/models.py:412 core/models.py:683 core/models.py:730 +#: core/models.py:1583 msgid "associated product" msgstr "Producto asociado" -#: core/models.py:431 +#: core/models.py:419 msgid "the price paid to the vendor for this product" msgstr "El precio pagado al vendedor por este producto" -#: core/models.py:432 +#: core/models.py:420 msgid "vendor purchase price" msgstr "Precio de compra al vendedor" -#: core/models.py:436 +#: core/models.py:424 msgid "available quantity of the product in stock" msgstr "Cantidad disponible del producto en stock" -#: core/models.py:437 +#: core/models.py:425 msgid "quantity in stock" msgstr "Cantidad en stock" -#: core/models.py:441 +#: core/models.py:429 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU asignada por el proveedor para identificar el producto" -#: core/models.py:442 +#: core/models.py:430 msgid "vendor sku" msgstr "SKU del vendedor" -#: core/models.py:448 +#: core/models.py:436 msgid "digital file associated with this stock if applicable" msgstr "Archivo digital asociado a esta acción, si procede" -#: core/models.py:449 +#: core/models.py:437 msgid "digital file" msgstr "Archivo digital" -#: core/models.py:458 +#: core/models.py:446 msgid "stock entries" msgstr "Entradas en existencias" -#: core/models.py:463 +#: core/models.py:451 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1684,55 +1660,55 @@ msgstr "" "para definir y manipular datos de productos y su información asociada dentro" " de una aplicación." -#: core/models.py:476 +#: core/models.py:464 msgid "category this product belongs to" msgstr "Categoría a la que pertenece este producto" -#: core/models.py:485 +#: core/models.py:473 msgid "optionally associate this product with a brand" msgstr "Si lo desea, puede asociar este producto a una marca" -#: core/models.py:491 +#: core/models.py:479 msgid "tags that help describe or group this product" msgstr "Etiquetas que ayudan a describir o agrupar este producto" -#: core/models.py:496 +#: core/models.py:484 msgid "indicates whether this product is digitally delivered" msgstr "Indica si este producto se entrega digitalmente" -#: core/models.py:497 +#: core/models.py:485 msgid "is product digital" msgstr "¿Es digital el producto?" -#: core/models.py:503 +#: core/models.py:491 msgid "provide a clear identifying name for the product" msgstr "Proporcionar un nombre que identifique claramente el producto" -#: core/models.py:504 +#: core/models.py:492 msgid "product name" msgstr "Nombre del producto" -#: core/models.py:509 core/models.py:831 +#: core/models.py:497 core/models.py:772 msgid "add a detailed description of the product" msgstr "Añada una descripción detallada del producto" -#: core/models.py:510 +#: core/models.py:498 msgid "product description" msgstr "Descripción del producto" -#: core/models.py:517 +#: core/models.py:505 msgid "part number for this product" msgstr "Número de pieza de este producto" -#: core/models.py:518 +#: core/models.py:506 msgid "part number" msgstr "Número de pieza" -#: core/models.py:537 +#: core/models.py:525 msgid "stock keeping unit for this product" msgstr "Unidad de Mantenimiento de Existencias para este producto" -#: core/models.py:607 +#: core/models.py:599 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 " @@ -1748,291 +1724,399 @@ msgstr "" "enteros, flotantes, booleanos, matrices y objetos. Esto permite una " "estructuración dinámica y flexible de los datos." -#: core/models.py:619 +#: core/models.py:611 msgid "category of this attribute" msgstr "Categoría de este atributo" -#: core/models.py:627 +#: core/models.py:619 msgid "group of this attribute" msgstr "Grupo de este atributo" -#: core/models.py:633 +#: core/models.py:625 msgid "string" msgstr "Cadena" -#: core/models.py:634 +#: core/models.py:626 msgid "integer" msgstr "Entero" -#: core/models.py:635 +#: core/models.py:627 msgid "float" msgstr "Flotador" -#: core/models.py:636 +#: core/models.py:628 msgid "boolean" msgstr "Booleano" -#: core/models.py:637 +#: core/models.py:629 msgid "array" msgstr "Matriz" -#: core/models.py:638 +#: core/models.py:630 msgid "object" msgstr "Objeto" -#: core/models.py:640 +#: core/models.py:632 msgid "type of the attribute's value" msgstr "Tipo del valor del atributo" -#: core/models.py:641 +#: core/models.py:633 msgid "value type" msgstr "Tipo de valor" -#: core/models.py:646 +#: core/models.py:638 msgid "name of this attribute" msgstr "Nombre de este atributo" -#: core/models.py:647 +#: core/models.py:639 msgid "attribute's name" msgstr "Nombre del atributo" -#: core/models.py:653 +#: core/models.py:645 msgid "is filterable" msgstr "es filtrable" -#: core/models.py:654 +#: core/models.py:646 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:665 core/models.py:700 +#: core/models.py:657 core/models.py:675 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Atributo" -#: core/models.py:699 +#: core/models.py:663 +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 "" +"Representa un valor específico para un atributo vinculado a un producto. " +"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:674 msgid "attribute of this value" msgstr "Atributo de este valor" -#: core/models.py:707 +#: core/models.py:682 msgid "the specific product associated with this attribute's value" msgstr "El producto específico asociado al valor de este atributo" -#: core/models.py:713 +#: core/models.py:688 msgid "the specific value for this attribute" msgstr "El valor específico de este atributo" -#: core/models.py:747 +#: core/models.py:701 +msgid "" +"Represents a product image associated with a product in the system. This " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " +"determining their display order. It also includes an accessibility feature " +"with alternative text for the images." +msgstr "" +"Representa una imagen de producto asociada a un producto del sistema. Esta " +"clase está diseñada para gestionar imágenes de productos, incluyendo " +"funcionalidades para subir archivos de imagen, asociarlos a productos " +"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:712 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:748 +#: core/models.py:713 msgid "image alt text" msgstr "Texto alternativo de la imagen" -#: core/models.py:751 +#: core/models.py:716 msgid "upload the image file for this product" msgstr "Cargar el archivo de imagen para este producto" -#: core/models.py:752 core/models.py:777 +#: core/models.py:717 core/models.py:742 msgid "product image" msgstr "Imagen del producto" -#: core/models.py:758 +#: core/models.py:723 msgid "determines the order in which images are displayed" msgstr "Determina el orden de visualización de las imágenes" -#: core/models.py:759 +#: core/models.py:724 msgid "display priority" msgstr "Prioridad de visualización" -#: core/models.py:764 +#: core/models.py:729 msgid "the product that this image represents" msgstr "El producto que representa esta imagen" -#: core/models.py:778 +#: core/models.py:743 msgid "product images" msgstr "Imágenes de productos" -#: core/models.py:819 +#: core/models.py:748 +msgid "" +"Represents a promotional campaign for products with a discount. This class " +"is used to define and manage promotional campaigns that offer a percentage-" +"based discount for products. The class includes attributes for setting the " +"discount rate, providing details about the promotion, and linking it to the " +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." +msgstr "" +"Representa una campaña promocional para productos con descuento. Esta clase " +"se utiliza para definir y gestionar campañas promocionales que ofrecen un " +"descuento porcentual para los productos. La clase incluye atributos para " +"establecer el porcentaje de descuento, proporcionar detalles sobre la " +"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:760 msgid "percentage discount for the selected products" msgstr "Porcentaje de descuento para los productos seleccionados" -#: core/models.py:820 +#: core/models.py:761 msgid "discount percentage" msgstr "Porcentaje de descuento" -#: core/models.py:825 +#: core/models.py:766 msgid "provide a unique name for this promotion" msgstr "Proporcione un nombre único para esta promoción" -#: core/models.py:826 +#: core/models.py:767 msgid "promotion name" msgstr "Nombre de la promoción" -#: core/models.py:832 +#: core/models.py:773 msgid "promotion description" msgstr "Descripción de la promoción" -#: core/models.py:837 +#: core/models.py:778 msgid "select which products are included in this promotion" msgstr "Seleccione los productos incluidos en esta promoción" -#: core/models.py:838 +#: core/models.py:779 msgid "included products" msgstr "Productos incluidos" -#: core/models.py:842 +#: core/models.py:783 msgid "promotion" msgstr "Promoción" -#: core/models.py:867 +#: core/models.py:794 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"class provides functionality to manage a collection of products, supporting " +"operations such as adding and removing products, as well as supporting " +"operations for adding and removing multiple products at once." +msgstr "" +"Representa la lista de deseos de un usuario para almacenar y gestionar los " +"productos deseados. La clase proporciona funcionalidad para gestionar una " +"colección de productos, soportando operaciones como añadir y eliminar " +"productos, así como soportar operaciones para añadir y eliminar múltiples " +"productos a la vez." + +#: core/models.py:806 msgid "products that the user has marked as wanted" msgstr "Productos que el usuario ha marcado como deseados" -#: core/models.py:875 +#: core/models.py:814 msgid "user who owns this wishlist" msgstr "Usuario propietario de esta lista de deseos" -#: core/models.py:876 +#: core/models.py:815 msgid "wishlist owner" msgstr "Propietario de Wishlist" -#: core/models.py:884 +#: core/models.py:823 msgid "wishlist" msgstr "Lista de deseos" -#: core/models.py:951 +#: core/models.py:865 +msgid "" +"Represents a documentary record tied to a product. This class is used to " +"store information about documentaries related to specific products, " +"including file uploads and their metadata. It contains methods and " +"properties to handle the file type and storage path for the documentary " +"files. It extends functionality from specific mixins and provides additional" +" custom features." +msgstr "" +"Representa un registro documental vinculado a un producto. Esta clase se " +"utiliza para almacenar información sobre documentales relacionados con " +"productos específicos, incluidas las cargas de archivos y sus metadatos. " +"Contiene métodos y propiedades para gestionar el tipo de archivo y la ruta " +"de almacenamiento de los archivos documentales. Amplía la funcionalidad de " +"mixins específicos y proporciona características personalizadas adicionales." + +#: core/models.py:878 msgid "documentary" msgstr "Documental" -#: core/models.py:952 +#: core/models.py:879 msgid "documentaries" msgstr "Documentaries" -#: core/models.py:962 +#: core/models.py:889 msgid "unresolved" msgstr "Sin resolver" -#: core/models.py:1008 +#: core/models.py:894 +msgid "" +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." +msgstr "" +"Representa una entidad de dirección que incluye detalles de ubicación y " +"asociaciones con un usuario. Proporciona funcionalidad para el " +"almacenamiento de datos geográficos y de direcciones, así como integración " +"con servicios de geocodificación. Esta clase está diseñada para almacenar " +"información detallada sobre direcciones, incluidos componentes como calle, " +"ciudad, región, país y geolocalización (longitud y latitud). Admite la " +"integración con API de geocodificación, permitiendo el almacenamiento de " +"respuestas API sin procesar para su posterior procesamiento o inspección. La" +" clase también permite asociar una dirección a un usuario, facilitando el " +"manejo personalizado de los datos." + +#: core/models.py:909 msgid "address line for the customer" msgstr "Dirección del cliente" -#: core/models.py:1009 +#: core/models.py:910 msgid "address line" msgstr "Dirección" -#: core/models.py:1011 +#: core/models.py:912 msgid "street" msgstr "Calle" -#: core/models.py:1012 +#: core/models.py:913 msgid "district" msgstr "Distrito" -#: core/models.py:1013 +#: core/models.py:914 msgid "city" msgstr "Ciudad" -#: core/models.py:1014 +#: core/models.py:915 msgid "region" msgstr "Región" -#: core/models.py:1015 +#: core/models.py:916 msgid "postal code" msgstr "Promo code" -#: core/models.py:1016 +#: core/models.py:917 msgid "country" msgstr "País" -#: core/models.py:1023 +#: core/models.py:924 msgid "geolocation point: (longitude, latitude)" msgstr "Geolocalización Punto(Longitud, Latitud)" -#: core/models.py:1026 +#: core/models.py:927 msgid "full JSON response from geocoder for this address" msgstr "Respuesta JSON completa del geocodificador para esta dirección" -#: core/models.py:1031 +#: core/models.py:932 msgid "stored JSON response from the geocoding service" msgstr "Respuesta JSON almacenada del servicio de geocodificación" -#: core/models.py:1039 +#: core/models.py:940 msgid "address" msgstr "Dirección" -#: core/models.py:1040 +#: core/models.py:941 msgid "addresses" msgstr "Direcciones" -#: core/models.py:1085 +#: core/models.py:953 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" +"Representa un código promocional que puede ser utilizado para descuentos, " +"gestionando su validez, tipo de descuento y aplicación. La clase PromoCode " +"almacena detalles sobre un código promocional, incluyendo su identificador " +"único, propiedades de descuento (importe o porcentaje), periodo de validez, " +"usuario asociado (si lo hay) y estado de su uso. Incluye funcionalidades " +"para validar y aplicar el código promocional a un pedido garantizando el " +"cumplimiento de las restricciones." + +#: core/models.py:967 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:1086 +#: core/models.py:968 msgid "promo code identifier" msgstr "Promo code identifier" -#: core/models.py:1093 +#: core/models.py:975 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:1094 +#: core/models.py:976 msgid "fixed discount amount" msgstr "Importe fijo del descuento" -#: core/models.py:1100 +#: core/models.py:982 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:1101 +#: core/models.py:983 msgid "percentage discount" msgstr "Porcentaje de descuento" -#: core/models.py:1106 +#: core/models.py:988 msgid "timestamp when the promocode expires" msgstr "Fecha de caducidad del promocode" -#: core/models.py:1107 +#: core/models.py:989 msgid "end validity time" msgstr "Hora de fin de validez" -#: core/models.py:1112 +#: core/models.py:994 msgid "timestamp from which this promocode is valid" msgstr "Fecha a partir de la cual es válido este promocode" -#: core/models.py:1113 +#: core/models.py:995 msgid "start validity time" msgstr "Hora de inicio de validez" -#: core/models.py:1118 +#: core/models.py:1000 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:1119 +#: core/models.py:1001 msgid "usage timestamp" msgstr "Marca de tiempo de uso" -#: core/models.py:1124 +#: core/models.py:1006 msgid "user assigned to this promocode if applicable" msgstr "Usuario asignado a este promocode si procede" -#: core/models.py:1125 +#: core/models.py:1007 msgid "assigned user" msgstr "Usuario asignado" -#: core/models.py:1132 +#: core/models.py:1014 msgid "promo code" msgstr "Promo code" -#: core/models.py:1133 +#: core/models.py:1015 msgid "promo codes" msgstr "Promo codes" -#: core/models.py:1140 +#: core/models.py:1022 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2040,16 +2124,16 @@ msgstr "" "Sólo debe definirse un tipo de descuento (importe o porcentaje), pero no " "ambos ni ninguno." -#: core/models.py:1155 +#: core/models.py:1037 msgid "promocode already used" msgstr "El código promocional ya ha sido utilizado" -#: core/models.py:1171 +#: core/models.py:1053 #, 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:1180 +#: core/models.py:1062 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 " @@ -2066,137 +2150,137 @@ 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:1197 +#: core/models.py:1079 msgid "the billing address used for this order" msgstr "La dirección de facturación utilizada para este pedido" -#: core/models.py:1205 +#: core/models.py:1087 msgid "optional promo code applied to this order" msgstr "Código promocional opcional aplicado a este pedido" -#: core/models.py:1206 +#: core/models.py:1088 msgid "applied promo code" msgstr "Código promocional aplicado" -#: core/models.py:1214 +#: core/models.py:1096 msgid "the shipping address used for this order" msgstr "La dirección de envío utilizada para este pedido" -#: core/models.py:1215 +#: core/models.py:1097 msgid "shipping address" msgstr "Dirección de envío" -#: core/models.py:1221 +#: core/models.py:1103 msgid "current status of the order in its lifecycle" msgstr "Estado actual del pedido en su ciclo de vida" -#: core/models.py:1222 +#: core/models.py:1104 msgid "order status" msgstr "Estado del pedido" -#: core/models.py:1227 core/models.py:1686 +#: core/models.py:1109 core/models.py:1560 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:1233 +#: core/models.py:1115 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:1239 +#: core/models.py:1121 msgid "the user who placed the order" msgstr "El usuario que realizó el pedido" -#: core/models.py:1240 +#: core/models.py:1122 msgid "user" msgstr "Usuario" -#: core/models.py:1246 +#: core/models.py:1128 msgid "the timestamp when the order was finalized" msgstr "Fecha de finalización de la orden" -#: core/models.py:1247 +#: core/models.py:1129 msgid "buy time" msgstr "Comprar tiempo" -#: core/models.py:1254 +#: core/models.py:1136 msgid "a human-readable identifier for the order" msgstr "Un identificador legible por el ser humano para la orden" -#: core/models.py:1255 +#: core/models.py:1137 msgid "human readable id" msgstr "ID legible por humanos" -#: core/models.py:1261 +#: core/models.py:1143 msgid "order" msgstr "Pida" -#: core/models.py:1282 +#: core/models.py:1168 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:1316 +#: core/models.py:1202 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:1321 +#: core/models.py:1207 msgid "you cannot add inactive products to order" msgstr "No se pueden añadir productos inactivos al pedido" -#: core/models.py:1338 +#: core/models.py:1224 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:1360 core/models.py:1385 core/models.py:1393 +#: core/models.py:1246 core/models.py:1271 core/models.py:1279 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:1381 +#: core/models.py:1267 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} ¡no existe con la consulta <{query}>!" -#: core/models.py:1413 +#: core/models.py:1299 msgid "promocode does not exist" msgstr "Promocode no existe" -#: core/models.py:1419 +#: core/models.py:1305 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:1438 +#: core/models.py:1324 msgid "address does not exist" msgstr "La dirección no existe" -#: core/models.py:1459 core/models.py:1528 +#: core/models.py:1345 core/models.py:1414 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:1462 core/models.py:1524 +#: core/models.py:1348 core/models.py:1410 msgid "invalid force value" msgstr "Valor de fuerza no válido" -#: core/models.py:1468 core/models.py:1531 +#: core/models.py:1354 core/models.py:1417 msgid "you cannot purchase an empty order!" msgstr "No se puede comprar un pedido vacío." -#: core/models.py:1487 +#: core/models.py:1373 msgid "you cannot buy an order without a user" msgstr "No se puede comprar un pedido sin un usuario." -#: core/models.py:1501 +#: core/models.py:1387 msgid "a user without a balance cannot buy with balance" msgstr "¡Un usuario sin saldo no puede comprar con saldo!" -#: core/models.py:1506 +#: core/models.py:1392 msgid "insufficient funds to complete the order" msgstr "Fondos insuficientes para completar el pedido" -#: core/models.py:1540 +#: core/models.py:1426 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2204,152 +2288,208 @@ 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:1549 +#: core/models.py:1435 #, 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:1674 +#: core/models.py:1533 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" +"Representa los productos asociados a los pedidos y sus atributos. El modelo " +"OrderProduct mantiene información sobre un producto que forma parte de un " +"pedido, incluyendo detalles como el precio de compra, la cantidad, los " +"atributos del producto y su estado. Gestiona las notificaciones para el " +"usuario y los administradores y maneja operaciones como la devolución del " +"saldo del producto o la adición de comentarios. Este modelo también " +"proporciona métodos y propiedades que soportan la lógica de negocio, como el" +" cálculo del precio total o la generación de una URL de descarga para " +"productos digitales. El modelo se integra con los modelos Pedido y Producto " +"y almacena una referencia a ellos." + +#: core/models.py:1548 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:1675 +#: core/models.py:1549 msgid "purchase price at order time" msgstr "Precio de compra en el momento del pedido" -#: core/models.py:1680 +#: core/models.py:1554 msgid "internal comments for admins about this ordered product" msgstr "" "Comentarios internos para los administradores sobre este producto solicitado" -#: core/models.py:1681 +#: core/models.py:1555 msgid "internal comments" msgstr "Comentarios internos" -#: core/models.py:1687 +#: core/models.py:1561 msgid "user notifications" msgstr "Notificaciones a los usuarios" -#: core/models.py:1692 +#: core/models.py:1566 msgid "json representation of this item's attributes" msgstr "Representación JSON de los atributos de este elemento" -#: core/models.py:1693 +#: core/models.py:1567 msgid "ordered product attributes" msgstr "Atributos ordenados del producto" -#: core/models.py:1698 +#: core/models.py:1572 msgid "reference to the parent order that contains this product" msgstr "Referencia al pedido principal que contiene este producto" -#: core/models.py:1699 +#: core/models.py:1573 msgid "parent order" msgstr "Orden de los padres" -#: core/models.py:1708 +#: core/models.py:1582 msgid "the specific product associated with this order line" msgstr "El producto específico asociado a esta línea de pedido" -#: core/models.py:1715 +#: core/models.py:1589 msgid "quantity of this specific product in the order" msgstr "Cantidad de este producto específico en el pedido" -#: core/models.py:1716 +#: core/models.py:1590 msgid "product quantity" msgstr "Cantidad de productos" -#: core/models.py:1723 +#: core/models.py:1597 msgid "current status of this product in the order" msgstr "Estado actual de este producto en el pedido" -#: core/models.py:1724 +#: core/models.py:1598 msgid "product line status" msgstr "Estado de la línea de productos" -#: core/models.py:1784 +#: core/models.py:1661 msgid "order product must have an order" msgstr "El pedido-producto debe tener un pedido asociado." -#: core/models.py:1786 +#: core/models.py:1663 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Acción incorrecta especificada para la retroalimentación: ¡{action}!" -#: core/models.py:1800 +#: core/models.py:1677 msgid "you cannot feedback an order which is not received" msgstr "no se puede comentar un pedido no recibido" -#: core/models.py:1806 +#: core/models.py:1683 msgid "name" msgstr "Nombre" -#: core/models.py:1807 +#: core/models.py:1684 msgid "URL of the integration" msgstr "URL de la integración" -#: core/models.py:1808 +#: core/models.py:1685 msgid "authentication credentials" msgstr "Credenciales de autenticación" -#: core/models.py:1822 +#: core/models.py:1699 msgid "you can only have one default CRM provider" msgstr "Sólo puede tener un proveedor de CRM por defecto" -#: core/models.py:1826 +#: core/models.py:1703 msgid "CRM" msgstr "CRM" -#: core/models.py:1827 +#: core/models.py:1704 msgid "CRMs" msgstr "CRMs" -#: core/models.py:1839 +#: core/models.py:1716 msgid "order CRM link" msgstr "Enlace CRM del pedido" -#: core/models.py:1840 +#: core/models.py:1717 msgid "orders CRM links" msgstr "Enlaces CRM de los pedidos" -#: core/models.py:1874 +#: core/models.py:1722 +msgid "" +"Represents the downloading functionality for digital assets associated with " +"orders. The DigitalAssetDownload class provides the ability to manage and " +"access downloads related to order products. It maintains information about " +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." +msgstr "" +"Representa la funcionalidad de descarga de activos digitales asociados a " +"pedidos. La clase DigitalAssetDownload proporciona la capacidad de gestionar" +" y acceder a descargas relacionadas con productos de pedidos. Mantiene " +"información sobre el producto del pedido asociado, el número de descargas y " +"si el activo es visible públicamente. Incluye un método para generar una URL" +" para descargar el activo cuando el pedido asociado está en estado " +"completado." + +#: core/models.py:1736 msgid "download" msgstr "Descargar" -#: core/models.py:1875 +#: core/models.py:1737 msgid "downloads" msgstr "Descargas" -#: core/models.py:1883 +#: core/models.py:1745 msgid "you can not download a digital asset for a non-finished order" msgstr "No puede descargar un activo digital para un pedido no finalizado" -#: core/models.py:1913 +#: core/models.py:1754 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." +msgstr "" +"Gestiona los comentarios de los usuarios sobre los productos. Esta clase " +"está diseñada para capturar y almacenar los comentarios de los usuarios " +"sobre productos específicos que han comprado. Contiene atributos para " +"almacenar los comentarios de los usuarios, una referencia al producto " +"relacionado en el pedido y una calificación asignada por el usuario. La " +"clase utiliza campos de base de datos para modelar y gestionar eficazmente " +"los datos de los comentarios." + +#: core/models.py:1766 msgid "user-provided comments about their experience with the product" msgstr "Comentarios de los usuarios sobre su experiencia con el producto" -#: core/models.py:1914 +#: core/models.py:1767 msgid "feedback comments" msgstr "Comentarios" -#: core/models.py:1921 +#: core/models.py:1774 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:1922 +#: core/models.py:1775 msgid "related order product" msgstr "Producto relacionado con el pedido" -#: core/models.py:1927 +#: core/models.py:1780 msgid "user-assigned rating for the product" msgstr "Valoración del producto asignada por el usuario" -#: core/models.py:1928 +#: core/models.py:1781 msgid "product rating" msgstr "Valoración del producto" @@ -2568,17 +2708,17 @@ msgstr "" msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | contacto iniciado" -#: core/utils/emailing.py:64 +#: core/utils/emailing.py:74 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Confirmación de pedido" -#: core/utils/emailing.py:99 +#: core/utils/emailing.py:109 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Pedido entregado" -#: core/utils/emailing.py:187 +#: core/utils/emailing.py:197 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | promocode granted" @@ -2602,15 +2742,15 @@ msgstr "" msgid "invalid phone number format" msgstr "Formato de número de teléfono no válido" -#: core/views.py:481 +#: core/views.py:489 msgid "you can only download the digital asset once" msgstr "Sólo puede descargar el activo digital una vez" -#: core/views.py:539 +#: core/views.py:547 msgid "favicon not found" msgstr "favicon no encontrado" -#: core/viewsets.py:1319 +#: core/viewsets.py:1357 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Error de geocodificación: {e}" diff --git a/core/locale/fa_IR/LC_MESSAGES/django.po b/core/locale/fa_IR/LC_MESSAGES/django.po index 532b9979..c7b687b4 100644 --- a/core/locale/fa_IR/LC_MESSAGES/django.po +++ b/core/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-09-19 15:52+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -88,11 +88,11 @@ msgid "selected items have been deactivated." msgstr "" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:712 core/models.py:720 +#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 msgid "attribute value" msgstr "" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:721 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 msgid "attribute values" msgstr "" @@ -104,7 +104,7 @@ msgstr "" msgid "images" msgstr "" -#: core/admin.py:155 core/models.py:457 +#: core/admin.py:155 core/models.py:445 msgid "stock" msgstr "" @@ -112,11 +112,11 @@ msgstr "" msgid "stocks" msgstr "" -#: core/admin.py:166 core/models.py:1735 +#: core/admin.py:166 core/models.py:1609 msgid "order product" msgstr "" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1736 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 msgid "order products" msgstr "" @@ -312,7 +312,7 @@ msgstr "" msgid "rewrite some fields of an existing category saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:553 +#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:487 #: core/graphene/object_types.py:117 core/graphene/object_types.py:207 #: core/graphene/object_types.py:509 msgid "SEO Meta snapshot" @@ -548,291 +548,255 @@ msgstr "" msgid "(exact) Product UUID" msgstr "" -#: core/docs/drf/viewsets.py:384 -msgid "(icontains) Product name" -msgstr "" - -#: core/docs/drf/viewsets.py:390 -msgid "(list) Category names, case-insensitive" -msgstr "" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Category UUID" -msgstr "" - -#: core/docs/drf/viewsets.py:402 -msgid "(list) Tag names, case-insensitive" -msgstr "" - -#: core/docs/drf/viewsets.py:408 -msgid "(gte) Minimum stock price" -msgstr "" - -#: core/docs/drf/viewsets.py:414 -msgid "(lte) Maximum stock price" -msgstr "" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Only active products" -msgstr "" - -#: core/docs/drf/viewsets.py:426 -msgid "(iexact) Brand name" -msgstr "" - -#: core/docs/drf/viewsets.py:438 -msgid "(gt) Minimum stock quantity" -msgstr "" - -#: core/docs/drf/viewsets.py:444 -msgid "(exact) Digital vs. physical" -msgstr "" - -#: core/docs/drf/viewsets.py:451 +#: core/docs/drf/viewsets.py:385 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:465 core/docs/drf/viewsets.py:466 +#: core/docs/drf/viewsets.py:399 core/docs/drf/viewsets.py:400 msgid "retrieve a single product (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:495 -#: core/docs/drf/viewsets.py:511 core/docs/drf/viewsets.py:527 -#: core/docs/drf/viewsets.py:543 core/docs/drf/viewsets.py:559 +#: core/docs/drf/viewsets.py:405 core/docs/drf/viewsets.py:429 +#: core/docs/drf/viewsets.py:445 core/docs/drf/viewsets.py:461 +#: core/docs/drf/viewsets.py:477 core/docs/drf/viewsets.py:493 msgid "Product UUID or slug" msgstr "" -#: core/docs/drf/viewsets.py:481 core/docs/drf/viewsets.py:482 +#: core/docs/drf/viewsets.py:415 core/docs/drf/viewsets.py:416 msgid "create a product" msgstr "" -#: core/docs/drf/viewsets.py:489 core/docs/drf/viewsets.py:490 +#: core/docs/drf/viewsets.py:423 core/docs/drf/viewsets.py:424 msgid "rewrite an existing product, preserving non-editable fields" msgstr "" -#: core/docs/drf/viewsets.py:505 core/docs/drf/viewsets.py:506 +#: core/docs/drf/viewsets.py:439 core/docs/drf/viewsets.py:440 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" -#: core/docs/drf/viewsets.py:521 core/docs/drf/viewsets.py:522 +#: core/docs/drf/viewsets.py:455 core/docs/drf/viewsets.py:456 msgid "delete a product" msgstr "" -#: core/docs/drf/viewsets.py:537 core/docs/drf/viewsets.py:538 +#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:472 msgid "lists all permitted feedbacks for a product" msgstr "" -#: core/docs/drf/viewsets.py:554 +#: core/docs/drf/viewsets.py:488 msgid "returns a snapshot of the product's SEO meta data" msgstr "" -#: core/docs/drf/viewsets.py:572 +#: core/docs/drf/viewsets.py:506 msgid "list all addresses" msgstr "" -#: core/docs/drf/viewsets.py:579 +#: core/docs/drf/viewsets.py:513 msgid "retrieve a single address" msgstr "" -#: core/docs/drf/viewsets.py:586 +#: core/docs/drf/viewsets.py:520 msgid "create a new address" msgstr "" -#: core/docs/drf/viewsets.py:594 +#: core/docs/drf/viewsets.py:528 msgid "delete an address" msgstr "" -#: core/docs/drf/viewsets.py:601 +#: core/docs/drf/viewsets.py:535 msgid "update an entire address" msgstr "" -#: core/docs/drf/viewsets.py:609 +#: core/docs/drf/viewsets.py:543 msgid "partially update an address" msgstr "" -#: core/docs/drf/viewsets.py:617 +#: core/docs/drf/viewsets.py:551 msgid "autocomplete address suggestions" msgstr "" -#: core/docs/drf/viewsets.py:622 +#: core/docs/drf/viewsets.py:556 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" -#: core/docs/drf/viewsets.py:628 +#: core/docs/drf/viewsets.py:562 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "" -#: core/docs/drf/viewsets.py:641 +#: core/docs/drf/viewsets.py:575 msgid "list all feedbacks (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:645 +#: core/docs/drf/viewsets.py:579 msgid "retrieve a single feedback (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:649 +#: core/docs/drf/viewsets.py:583 msgid "create a feedback" msgstr "" -#: core/docs/drf/viewsets.py:653 +#: core/docs/drf/viewsets.py:587 msgid "delete a feedback" msgstr "" -#: core/docs/drf/viewsets.py:657 +#: core/docs/drf/viewsets.py:591 msgid "rewrite an existing feedback saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:661 +#: core/docs/drf/viewsets.py:595 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:668 +#: core/docs/drf/viewsets.py:602 msgid "list all order–product relations (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:675 +#: core/docs/drf/viewsets.py:609 msgid "retrieve a single order–product relation (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:682 +#: core/docs/drf/viewsets.py:616 msgid "create a new order–product relation" msgstr "" -#: core/docs/drf/viewsets.py:689 +#: core/docs/drf/viewsets.py:623 msgid "replace an existing order–product relation" msgstr "" -#: core/docs/drf/viewsets.py:696 +#: core/docs/drf/viewsets.py:630 msgid "partially update an existing order–product relation" msgstr "" -#: core/docs/drf/viewsets.py:703 +#: core/docs/drf/viewsets.py:637 msgid "delete an order–product relation" msgstr "" -#: core/docs/drf/viewsets.py:710 +#: core/docs/drf/viewsets.py:644 msgid "add or remove feedback on an order–product relation" msgstr "" -#: core/elasticsearch/__init__.py:105 +#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 msgid "no search term provided." msgstr "" -#: core/filters.py:64 core/filters.py:594 core/filters.py:623 +#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +msgid "Search" +msgstr "" + +#: core/filters.py:66 core/filters.py:554 core/filters.py:583 msgid "UUID" msgstr "" -#: core/filters.py:65 core/filters.py:429 core/filters.py:560 +#: core/filters.py:67 core/filters.py:399 core/filters.py:526 msgid "Name" msgstr "" -#: core/filters.py:66 core/filters.py:562 +#: core/filters.py:68 core/filters.py:528 msgid "Categories" msgstr "" -#: core/filters.py:68 +#: core/filters.py:70 msgid "Categories Slugs" msgstr "" -#: core/filters.py:69 core/filters.py:437 +#: core/filters.py:71 core/filters.py:407 msgid "Tags" msgstr "" -#: core/filters.py:70 +#: core/filters.py:72 msgid "Min Price" msgstr "" -#: core/filters.py:71 +#: core/filters.py:73 msgid "Max Price" msgstr "" -#: core/filters.py:72 +#: core/filters.py:74 msgid "Is Active" msgstr "" -#: core/filters.py:73 +#: core/filters.py:75 msgid "Brand" msgstr "" -#: core/filters.py:74 +#: core/filters.py:76 msgid "Attributes" msgstr "" -#: core/filters.py:75 +#: core/filters.py:77 msgid "Quantity" msgstr "" -#: core/filters.py:76 core/filters.py:431 core/filters.py:561 -#: core/models.py:287 core/models.py:381 core/models.py:534 +#: core/filters.py:78 core/filters.py:401 core/filters.py:527 +#: core/models.py:287 core/models.py:369 core/models.py:522 msgid "Slug" msgstr "" -#: core/filters.py:77 +#: core/filters.py:79 msgid "Is Digital" msgstr "" -#: core/filters.py:78 +#: core/filters.py:80 msgid "Include sub-categories" msgstr "" -#: core/filters.py:81 +#: core/filters.py:83 msgid "Include personal ordered" msgstr "" -#: core/filters.py:83 core/models.py:538 +#: core/filters.py:85 core/models.py:526 msgid "SKU" msgstr "" -#: core/filters.py:166 +#: core/filters.py:161 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" -#: core/filters.py:356 +#: core/filters.py:324 msgid "Search (ID, product name or part number)" msgstr "" -#: core/filters.py:359 +#: core/filters.py:327 msgid "Bought after (inclusive)" msgstr "" -#: core/filters.py:360 +#: core/filters.py:328 msgid "Bought before (inclusive)" msgstr "" -#: core/filters.py:363 core/filters.py:410 core/filters.py:625 +#: core/filters.py:331 core/filters.py:378 core/filters.py:585 msgid "User email" msgstr "" -#: core/filters.py:364 core/filters.py:411 core/filters.py:603 -#: core/filters.py:624 +#: core/filters.py:332 core/filters.py:379 core/filters.py:563 +#: core/filters.py:584 msgid "User UUID" msgstr "" -#: core/filters.py:365 +#: core/filters.py:333 msgid "Status" msgstr "" -#: core/filters.py:369 +#: core/filters.py:337 msgid "Human Readable ID" msgstr "" -#: core/filters.py:430 +#: core/filters.py:400 msgid "Parent" msgstr "" -#: core/filters.py:434 +#: core/filters.py:404 msgid "Whole category(has at least 1 product or not)" msgstr "" -#: core/filters.py:438 +#: core/filters.py:408 msgid "Level" msgstr "" -#: core/filters.py:598 +#: core/filters.py:558 msgid "Product UUID" msgstr "" @@ -887,7 +851,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:821 +#: core/graphene/mutations.py:527 core/viewsets.py:839 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" @@ -948,37 +912,37 @@ msgstr "" msgid "add or delete a feedback for orderproduct" msgstr "" -#: core/graphene/mutations.py:555 +#: core/graphene/mutations.py:556 msgid "action must be either `add` or `remove`" msgstr "" -#: core/graphene/mutations.py:558 +#: core/graphene/mutations.py:559 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "" -#: core/graphene/mutations.py:621 +#: core/graphene/mutations.py:622 msgid "original address string provided by the user" msgstr "" -#: core/graphene/mutations.py:655 core/models.py:896 core/models.py:909 -#: core/models.py:1348 core/models.py:1377 core/models.py:1402 -#: core/viewsets.py:824 +#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 +#: core/models.py:1234 core/models.py:1263 core/models.py:1288 +#: core/viewsets.py:842 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" -#: core/graphene/mutations.py:668 +#: core/graphene/mutations.py:669 msgid "limit must be between 1 and 10" msgstr "" -#: core/graphene/mutations.py:713 +#: core/graphene/mutations.py:714 msgid "elasticsearch - works like a charm" msgstr "" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:666 core/models.py:1234 -#: core/models.py:1809 +#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 +#: core/models.py:1686 msgid "attributes" msgstr "" @@ -991,11 +955,11 @@ msgid "groups of attributes" msgstr "" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:620 +#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:612 msgid "categories" msgstr "" -#: core/graphene/object_types.py:124 core/models.py:395 +#: core/graphene/object_types.py:124 core/models.py:383 msgid "brands" msgstr "" @@ -1049,7 +1013,7 @@ msgid "represents feedback from a user." msgstr "" #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1228 +#: core/models.py:1110 msgid "notifications" msgstr "" @@ -1057,7 +1021,7 @@ msgstr "" msgid "download url for this order product if applicable" msgstr "" -#: core/graphene/object_types.py:400 core/models.py:1938 +#: core/graphene/object_types.py:400 core/models.py:1791 msgid "feedback" msgstr "" @@ -1065,7 +1029,7 @@ msgstr "" msgid "a list of order products in this order" msgstr "" -#: core/graphene/object_types.py:436 core/models.py:1198 +#: core/graphene/object_types.py:436 core/models.py:1080 msgid "billing address" msgstr "" @@ -1091,7 +1055,7 @@ msgstr "" msgid "transactions for this order" msgstr "" -#: core/graphene/object_types.py:465 core/models.py:1262 +#: core/graphene/object_types.py:465 core/models.py:1144 msgid "orders" msgstr "" @@ -1103,15 +1067,15 @@ msgstr "" msgid "product's images" msgstr "" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:477 +#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 msgid "category" msgstr "" -#: core/graphene/object_types.py:502 core/models.py:1939 +#: core/graphene/object_types.py:502 core/models.py:1792 msgid "feedbacks" msgstr "" -#: core/graphene/object_types.py:503 core/models.py:394 core/models.py:486 +#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 msgid "brand" msgstr "" @@ -1143,7 +1107,7 @@ msgstr "" msgid "only available for personal orders" msgstr "" -#: core/graphene/object_types.py:534 core/models.py:548 +#: core/graphene/object_types.py:534 core/models.py:536 msgid "products" msgstr "" @@ -1155,7 +1119,7 @@ msgstr "" msgid "products on sale" msgstr "" -#: core/graphene/object_types.py:651 core/models.py:843 +#: core/graphene/object_types.py:651 core/models.py:784 msgid "promotions" msgstr "" @@ -1163,7 +1127,7 @@ msgstr "" msgid "vendor" msgstr "" -#: core/graphene/object_types.py:656 core/models.py:547 +#: core/graphene/object_types.py:656 core/models.py:535 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1171,11 +1135,11 @@ msgstr "" msgid "product" msgstr "" -#: core/graphene/object_types.py:667 core/models.py:868 +#: core/graphene/object_types.py:667 core/models.py:807 msgid "wishlisted products" msgstr "" -#: core/graphene/object_types.py:673 core/models.py:885 +#: core/graphene/object_types.py:673 core/models.py:824 msgid "wishlists" msgstr "" @@ -1183,7 +1147,7 @@ msgstr "" msgid "tagged products" msgstr "" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:492 +#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 msgid "product tags" msgstr "" @@ -1288,7 +1252,7 @@ msgstr "" msgid "attribute group's name" msgstr "" -#: core/models.py:100 core/models.py:628 +#: core/models.py:100 core/models.py:620 msgid "attribute group" msgstr "" @@ -1424,51 +1388,59 @@ msgstr "" msgid "tags that help describe or group this category" msgstr "" -#: core/models.py:299 core/models.py:387 +#: core/models.py:299 core/models.py:375 msgid "priority" msgstr "" -#: core/models.py:340 +#: core/models.py:318 +msgid "" +"Represents a Brand object in the system. This class handles information and " +"attributes related to a brand, including its name, logos, description, " +"associated categories, a unique slug, and priority order. It allows for the " +"organization and representation of brand-related data within the application." +msgstr "" + +#: core/models.py:328 msgid "name of this brand" msgstr "" -#: core/models.py:341 +#: core/models.py:329 msgid "brand name" msgstr "" -#: core/models.py:348 +#: core/models.py:336 msgid "upload a logo representing this brand" msgstr "" -#: core/models.py:350 +#: core/models.py:338 msgid "brand small image" msgstr "" -#: core/models.py:356 +#: core/models.py:344 msgid "upload a big logo representing this brand" msgstr "" -#: core/models.py:358 +#: core/models.py:346 msgid "brand big image" msgstr "" -#: core/models.py:363 +#: core/models.py:351 msgid "add a detailed description of the brand" msgstr "" -#: core/models.py:364 +#: core/models.py:352 msgid "brand description" msgstr "" -#: core/models.py:369 +#: core/models.py:357 msgid "optional categories that this brand is associated with" msgstr "" -#: core/models.py:370 +#: core/models.py:358 msgid "associated categories" msgstr "" -#: core/models.py:400 +#: core/models.py:388 msgid "" "Represents the stock of a product managed in the system. This class provides " "details about the relationship between vendors, products, and their stock " @@ -1478,67 +1450,67 @@ msgid "" "from various vendors." msgstr "" -#: core/models.py:412 +#: core/models.py:400 msgid "the vendor supplying this product stock" msgstr "" -#: core/models.py:413 +#: core/models.py:401 msgid "associated vendor" msgstr "" -#: core/models.py:417 +#: core/models.py:405 msgid "final price to the customer after markups" msgstr "" -#: core/models.py:418 +#: core/models.py:406 msgid "selling price" msgstr "" -#: core/models.py:423 +#: core/models.py:411 msgid "the product associated with this stock entry" msgstr "" -#: core/models.py:424 core/models.py:708 core/models.py:765 core/models.py:1709 +#: core/models.py:412 core/models.py:683 core/models.py:730 core/models.py:1583 msgid "associated product" msgstr "" -#: core/models.py:431 +#: core/models.py:419 msgid "the price paid to the vendor for this product" msgstr "" -#: core/models.py:432 +#: core/models.py:420 msgid "vendor purchase price" msgstr "" -#: core/models.py:436 +#: core/models.py:424 msgid "available quantity of the product in stock" msgstr "" -#: core/models.py:437 +#: core/models.py:425 msgid "quantity in stock" msgstr "" -#: core/models.py:441 +#: core/models.py:429 msgid "vendor-assigned SKU for identifying the product" msgstr "" -#: core/models.py:442 +#: core/models.py:430 msgid "vendor sku" msgstr "" -#: core/models.py:448 +#: core/models.py:436 msgid "digital file associated with this stock if applicable" msgstr "" -#: core/models.py:449 +#: core/models.py:437 msgid "digital file" msgstr "" -#: core/models.py:458 +#: core/models.py:446 msgid "stock entries" msgstr "" -#: core/models.py:463 +#: core/models.py:451 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1550,55 +1522,55 @@ msgid "" "product data and its associated information within an application." msgstr "" -#: core/models.py:476 +#: core/models.py:464 msgid "category this product belongs to" msgstr "" -#: core/models.py:485 +#: core/models.py:473 msgid "optionally associate this product with a brand" msgstr "" -#: core/models.py:491 +#: core/models.py:479 msgid "tags that help describe or group this product" msgstr "" -#: core/models.py:496 +#: core/models.py:484 msgid "indicates whether this product is digitally delivered" msgstr "" -#: core/models.py:497 +#: core/models.py:485 msgid "is product digital" msgstr "" -#: core/models.py:503 +#: core/models.py:491 msgid "provide a clear identifying name for the product" msgstr "" -#: core/models.py:504 +#: core/models.py:492 msgid "product name" msgstr "" -#: core/models.py:509 core/models.py:831 +#: core/models.py:497 core/models.py:772 msgid "add a detailed description of the product" msgstr "" -#: core/models.py:510 +#: core/models.py:498 msgid "product description" msgstr "" -#: core/models.py:517 +#: core/models.py:505 msgid "part number for this product" msgstr "" -#: core/models.py:518 +#: core/models.py:506 msgid "part number" msgstr "" -#: core/models.py:537 +#: core/models.py:525 msgid "stock keeping unit for this product" msgstr "" -#: core/models.py:607 +#: core/models.py:599 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 " @@ -1608,303 +1580,369 @@ msgid "" "for dynamic and flexible data structuring." msgstr "" -#: core/models.py:619 +#: core/models.py:611 msgid "category of this attribute" msgstr "" -#: core/models.py:627 +#: core/models.py:619 msgid "group of this attribute" msgstr "" -#: core/models.py:633 +#: core/models.py:625 msgid "string" msgstr "" -#: core/models.py:634 +#: core/models.py:626 msgid "integer" msgstr "" -#: core/models.py:635 +#: core/models.py:627 msgid "float" msgstr "" -#: core/models.py:636 +#: core/models.py:628 msgid "boolean" msgstr "" -#: core/models.py:637 +#: core/models.py:629 msgid "array" msgstr "" -#: core/models.py:638 +#: core/models.py:630 msgid "object" msgstr "" -#: core/models.py:640 +#: core/models.py:632 msgid "type of the attribute's value" msgstr "" -#: core/models.py:641 +#: core/models.py:633 msgid "value type" msgstr "" -#: core/models.py:646 +#: core/models.py:638 msgid "name of this attribute" msgstr "" -#: core/models.py:647 +#: core/models.py:639 msgid "attribute's name" msgstr "" -#: core/models.py:653 +#: core/models.py:645 msgid "is filterable" msgstr "" -#: core/models.py:654 +#: core/models.py:646 msgid "designates whether this attribute can be used for filtering or not" msgstr "" -#: core/models.py:665 core/models.py:700 +#: core/models.py:657 core/models.py:675 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "" -#: core/models.py:699 +#: core/models.py:663 +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:674 msgid "attribute of this value" msgstr "" -#: core/models.py:707 +#: core/models.py:682 msgid "the specific product associated with this attribute's value" msgstr "" -#: core/models.py:713 +#: core/models.py:688 msgid "the specific value for this attribute" msgstr "" -#: core/models.py:747 +#: core/models.py:701 +msgid "" +"Represents a product image associated with a product in the system. This " +"class is designed to manage images for products, including functionality for " +"uploading image files, associating them with specific products, and " +"determining their display order. It also includes an accessibility feature " +"with alternative text for the images." +msgstr "" + +#: core/models.py:712 msgid "provide alternative text for the image for accessibility" msgstr "" -#: core/models.py:748 +#: core/models.py:713 msgid "image alt text" msgstr "" -#: core/models.py:751 +#: core/models.py:716 msgid "upload the image file for this product" msgstr "" -#: core/models.py:752 core/models.py:777 +#: core/models.py:717 core/models.py:742 msgid "product image" msgstr "" -#: core/models.py:758 +#: core/models.py:723 msgid "determines the order in which images are displayed" msgstr "" -#: core/models.py:759 +#: core/models.py:724 msgid "display priority" msgstr "" -#: core/models.py:764 +#: core/models.py:729 msgid "the product that this image represents" msgstr "" -#: core/models.py:778 +#: core/models.py:743 msgid "product images" msgstr "" -#: core/models.py:819 +#: core/models.py:748 +msgid "" +"Represents a promotional campaign for products with a discount. This class " +"is used to define and manage promotional campaigns that offer a percentage-" +"based discount for products. The class includes attributes for setting the " +"discount rate, providing details about the promotion, and linking it to the " +"applicable products. It integrates with the product catalog to determine the " +"affected items in the campaign." +msgstr "" + +#: core/models.py:760 msgid "percentage discount for the selected products" msgstr "" -#: core/models.py:820 +#: core/models.py:761 msgid "discount percentage" msgstr "" -#: core/models.py:825 +#: core/models.py:766 msgid "provide a unique name for this promotion" msgstr "" -#: core/models.py:826 +#: core/models.py:767 msgid "promotion name" msgstr "" -#: core/models.py:832 +#: core/models.py:773 msgid "promotion description" msgstr "" -#: core/models.py:837 +#: core/models.py:778 msgid "select which products are included in this promotion" msgstr "" -#: core/models.py:838 +#: core/models.py:779 msgid "included products" msgstr "" -#: core/models.py:842 +#: core/models.py:783 msgid "promotion" msgstr "" -#: core/models.py:867 +#: core/models.py:794 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"class provides functionality to manage a collection of products, supporting " +"operations such as adding and removing products, as well as supporting " +"operations for adding and removing multiple products at once." +msgstr "" + +#: core/models.py:806 msgid "products that the user has marked as wanted" msgstr "" -#: core/models.py:875 +#: core/models.py:814 msgid "user who owns this wishlist" msgstr "" -#: core/models.py:876 +#: core/models.py:815 msgid "wishlist owner" msgstr "" -#: core/models.py:884 +#: core/models.py:823 msgid "wishlist" msgstr "" -#: core/models.py:951 +#: core/models.py:865 +msgid "" +"Represents a documentary record tied to a product. This class is used to " +"store information about documentaries related to specific products, " +"including file uploads and their metadata. It contains methods and " +"properties to handle the file type and storage path for the documentary " +"files. It extends functionality from specific mixins and provides additional " +"custom features." +msgstr "" + +#: core/models.py:878 msgid "documentary" msgstr "" -#: core/models.py:952 +#: core/models.py:879 msgid "documentaries" msgstr "" -#: core/models.py:962 +#: core/models.py:889 msgid "unresolved" msgstr "" -#: core/models.py:1008 +#: core/models.py:894 +msgid "" +"Represents an address entity that includes location details and associations " +"with a user. Provides functionality for geographic and address data storage, " +"as well as integration with geocoding services. This class is designed to " +"store detailed address information including components like street, city, " +"region, country, and geolocation (longitude and latitude). It supports " +"integration with geocoding APIs, enabling the storage of raw API responses " +"for further processing or inspection. The class also allows associating an " +"address with a user, facilitating personalized data handling." +msgstr "" + +#: core/models.py:909 msgid "address line for the customer" msgstr "" -#: core/models.py:1009 +#: core/models.py:910 msgid "address line" msgstr "" -#: core/models.py:1011 +#: core/models.py:912 msgid "street" msgstr "" -#: core/models.py:1012 +#: core/models.py:913 msgid "district" msgstr "" -#: core/models.py:1013 +#: core/models.py:914 msgid "city" msgstr "" -#: core/models.py:1014 +#: core/models.py:915 msgid "region" msgstr "" -#: core/models.py:1015 +#: core/models.py:916 msgid "postal code" msgstr "" -#: core/models.py:1016 +#: core/models.py:917 msgid "country" msgstr "" -#: core/models.py:1023 +#: core/models.py:924 msgid "geolocation point: (longitude, latitude)" msgstr "" -#: core/models.py:1026 +#: core/models.py:927 msgid "full JSON response from geocoder for this address" msgstr "" -#: core/models.py:1031 +#: core/models.py:932 msgid "stored JSON response from the geocoding service" msgstr "" -#: core/models.py:1039 +#: core/models.py:940 msgid "address" msgstr "" -#: core/models.py:1040 +#: core/models.py:941 msgid "addresses" msgstr "" -#: core/models.py:1085 +#: core/models.py:953 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" + +#: core/models.py:967 msgid "unique code used by a user to redeem a discount" msgstr "" -#: core/models.py:1086 +#: core/models.py:968 msgid "promo code identifier" msgstr "" -#: core/models.py:1093 +#: core/models.py:975 msgid "fixed discount amount applied if percent is not used" msgstr "" -#: core/models.py:1094 +#: core/models.py:976 msgid "fixed discount amount" msgstr "" -#: core/models.py:1100 +#: core/models.py:982 msgid "percentage discount applied if fixed amount is not used" msgstr "" -#: core/models.py:1101 +#: core/models.py:983 msgid "percentage discount" msgstr "" -#: core/models.py:1106 +#: core/models.py:988 msgid "timestamp when the promocode expires" msgstr "" -#: core/models.py:1107 +#: core/models.py:989 msgid "end validity time" msgstr "" -#: core/models.py:1112 +#: core/models.py:994 msgid "timestamp from which this promocode is valid" msgstr "" -#: core/models.py:1113 +#: core/models.py:995 msgid "start validity time" msgstr "" -#: core/models.py:1118 +#: core/models.py:1000 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" -#: core/models.py:1119 +#: core/models.py:1001 msgid "usage timestamp" msgstr "" -#: core/models.py:1124 +#: core/models.py:1006 msgid "user assigned to this promocode if applicable" msgstr "" -#: core/models.py:1125 +#: core/models.py:1007 msgid "assigned user" msgstr "" -#: core/models.py:1132 +#: core/models.py:1014 msgid "promo code" msgstr "" -#: core/models.py:1133 +#: core/models.py:1015 msgid "promo codes" msgstr "" -#: core/models.py:1140 +#: core/models.py:1022 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "" -#: core/models.py:1155 +#: core/models.py:1037 msgid "promocode already used" msgstr "" -#: core/models.py:1171 +#: core/models.py:1053 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "" -#: core/models.py:1180 +#: core/models.py:1062 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 " @@ -1914,277 +1952,309 @@ msgid "" "supports managing the products in the order lifecycle." msgstr "" -#: core/models.py:1197 +#: core/models.py:1079 msgid "the billing address used for this order" msgstr "" -#: core/models.py:1205 +#: core/models.py:1087 msgid "optional promo code applied to this order" msgstr "" -#: core/models.py:1206 +#: core/models.py:1088 msgid "applied promo code" msgstr "" -#: core/models.py:1214 +#: core/models.py:1096 msgid "the shipping address used for this order" msgstr "" -#: core/models.py:1215 +#: core/models.py:1097 msgid "shipping address" msgstr "" -#: core/models.py:1221 +#: core/models.py:1103 msgid "current status of the order in its lifecycle" msgstr "" -#: core/models.py:1222 +#: core/models.py:1104 msgid "order status" msgstr "" -#: core/models.py:1227 core/models.py:1686 +#: core/models.py:1109 core/models.py:1560 msgid "json structure of notifications to display to users" msgstr "" -#: core/models.py:1233 +#: core/models.py:1115 msgid "json representation of order attributes for this order" msgstr "" -#: core/models.py:1239 +#: core/models.py:1121 msgid "the user who placed the order" msgstr "" -#: core/models.py:1240 +#: core/models.py:1122 msgid "user" msgstr "" -#: core/models.py:1246 +#: core/models.py:1128 msgid "the timestamp when the order was finalized" msgstr "" -#: core/models.py:1247 +#: core/models.py:1129 msgid "buy time" msgstr "" -#: core/models.py:1254 +#: core/models.py:1136 msgid "a human-readable identifier for the order" msgstr "" -#: core/models.py:1255 +#: core/models.py:1137 msgid "human readable id" msgstr "" -#: core/models.py:1261 +#: core/models.py:1143 msgid "order" msgstr "" -#: core/models.py:1282 +#: core/models.py:1168 msgid "a user must have only one pending order at a time" msgstr "" -#: core/models.py:1316 +#: core/models.py:1202 msgid "you cannot add products to an order that is not a pending one" msgstr "" -#: core/models.py:1321 +#: core/models.py:1207 msgid "you cannot add inactive products to order" msgstr "" -#: core/models.py:1338 +#: core/models.py:1224 msgid "you cannot add more products than available in stock" msgstr "" -#: core/models.py:1360 core/models.py:1385 core/models.py:1393 +#: core/models.py:1246 core/models.py:1271 core/models.py:1279 msgid "you cannot remove products from an order that is not a pending one" msgstr "" -#: core/models.py:1381 +#: core/models.py:1267 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "" -#: core/models.py:1413 +#: core/models.py:1299 msgid "promocode does not exist" msgstr "" -#: core/models.py:1419 +#: core/models.py:1305 msgid "you can only buy physical products with shipping address specified" msgstr "" -#: core/models.py:1438 +#: core/models.py:1324 msgid "address does not exist" msgstr "" -#: core/models.py:1459 core/models.py:1528 +#: core/models.py:1345 core/models.py:1414 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" -#: core/models.py:1462 core/models.py:1524 +#: core/models.py:1348 core/models.py:1410 msgid "invalid force value" msgstr "" -#: core/models.py:1468 core/models.py:1531 +#: core/models.py:1354 core/models.py:1417 msgid "you cannot purchase an empty order!" msgstr "" -#: core/models.py:1487 +#: core/models.py:1373 msgid "you cannot buy an order without a user" msgstr "" -#: core/models.py:1501 +#: core/models.py:1387 msgid "a user without a balance cannot buy with balance" msgstr "" -#: core/models.py:1506 +#: core/models.py:1392 msgid "insufficient funds to complete the order" msgstr "" -#: core/models.py:1540 +#: core/models.py:1426 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "" -#: core/models.py:1549 +#: core/models.py:1435 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" -#: core/models.py:1674 +#: core/models.py:1533 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" + +#: core/models.py:1548 msgid "the price paid by the customer for this product at purchase time" msgstr "" -#: core/models.py:1675 +#: core/models.py:1549 msgid "purchase price at order time" msgstr "" -#: core/models.py:1680 +#: core/models.py:1554 msgid "internal comments for admins about this ordered product" msgstr "" -#: core/models.py:1681 +#: core/models.py:1555 msgid "internal comments" msgstr "" -#: core/models.py:1687 +#: core/models.py:1561 msgid "user notifications" msgstr "" -#: core/models.py:1692 +#: core/models.py:1566 msgid "json representation of this item's attributes" msgstr "" -#: core/models.py:1693 +#: core/models.py:1567 msgid "ordered product attributes" msgstr "" -#: core/models.py:1698 +#: core/models.py:1572 msgid "reference to the parent order that contains this product" msgstr "" -#: core/models.py:1699 +#: core/models.py:1573 msgid "parent order" msgstr "" -#: core/models.py:1708 +#: core/models.py:1582 msgid "the specific product associated with this order line" msgstr "" -#: core/models.py:1715 +#: core/models.py:1589 msgid "quantity of this specific product in the order" msgstr "" -#: core/models.py:1716 +#: core/models.py:1590 msgid "product quantity" msgstr "" -#: core/models.py:1723 +#: core/models.py:1597 msgid "current status of this product in the order" msgstr "" -#: core/models.py:1724 +#: core/models.py:1598 msgid "product line status" msgstr "" -#: core/models.py:1784 +#: core/models.py:1661 msgid "order product must have an order" msgstr "" -#: core/models.py:1786 +#: core/models.py:1663 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "" -#: core/models.py:1800 +#: core/models.py:1677 msgid "you cannot feedback an order which is not received" msgstr "" -#: core/models.py:1806 +#: core/models.py:1683 msgid "name" msgstr "" -#: core/models.py:1807 +#: core/models.py:1684 msgid "URL of the integration" msgstr "" -#: core/models.py:1808 +#: core/models.py:1685 msgid "authentication credentials" msgstr "" -#: core/models.py:1822 +#: core/models.py:1699 msgid "you can only have one default CRM provider" msgstr "" -#: core/models.py:1826 +#: core/models.py:1703 msgid "CRM" msgstr "" -#: core/models.py:1827 +#: core/models.py:1704 msgid "CRMs" msgstr "" -#: core/models.py:1839 +#: core/models.py:1716 msgid "order CRM link" msgstr "" -#: core/models.py:1840 +#: core/models.py:1717 msgid "orders CRM links" msgstr "" -#: core/models.py:1874 +#: core/models.py:1722 +msgid "" +"Represents the downloading functionality for digital assets associated with " +"orders. The DigitalAssetDownload class provides the ability to manage and " +"access downloads related to order products. It maintains information about " +"the associated order product, the number of downloads, and whether the asset " +"is publicly visible. It includes a method to generate a URL for downloading " +"the asset when the associated order is in a completed status." +msgstr "" + +#: core/models.py:1736 msgid "download" msgstr "" -#: core/models.py:1875 +#: core/models.py:1737 msgid "downloads" msgstr "" -#: core/models.py:1883 +#: core/models.py:1745 msgid "you can not download a digital asset for a non-finished order" msgstr "" -#: core/models.py:1913 +#: core/models.py:1754 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." +msgstr "" + +#: core/models.py:1766 msgid "user-provided comments about their experience with the product" msgstr "" -#: core/models.py:1914 +#: core/models.py:1767 msgid "feedback comments" msgstr "" -#: core/models.py:1921 +#: core/models.py:1774 msgid "references the specific product in an order that this feedback is about" msgstr "" -#: core/models.py:1922 +#: core/models.py:1775 msgid "related order product" msgstr "" -#: core/models.py:1927 +#: core/models.py:1780 msgid "user-assigned rating for the product" msgstr "" -#: core/models.py:1928 +#: core/models.py:1781 msgid "product rating" msgstr "" @@ -2386,17 +2456,17 @@ msgstr "" msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "" -#: core/utils/emailing.py:64 +#: core/utils/emailing.py:74 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "" -#: core/utils/emailing.py:99 +#: core/utils/emailing.py:109 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "" -#: core/utils/emailing.py:187 +#: core/utils/emailing.py:197 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "" @@ -2418,15 +2488,15 @@ msgstr "" msgid "invalid phone number format" msgstr "" -#: core/views.py:481 +#: core/views.py:489 msgid "you can only download the digital asset once" msgstr "" -#: core/views.py:539 +#: core/views.py:547 msgid "favicon not found" msgstr "" -#: core/viewsets.py:1319 +#: core/viewsets.py:1357 #, python-brace-format msgid "Geocoding error: {e}" msgstr "" diff --git a/core/locale/fr_FR/LC_MESSAGES/django.mo b/core/locale/fr_FR/LC_MESSAGES/django.mo index bcaeb0405222268f68c0b72cb2bdf4cad87ee3e1..0eac17a4bfebc3b265cb5a15077e52395a393692 100644 GIT binary patch delta 21049 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 EFKL4LApigX delta 12659 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 bkLTFVlmeb6dj|M;<{rB4<(d3x$)5iMMu~my diff --git a/core/locale/fr_FR/LC_MESSAGES/django.po b/core/locale/fr_FR/LC_MESSAGES/django.po index 2c1d6b11..905dab20 100644 --- a/core/locale/fr_FR/LC_MESSAGES/django.po +++ b/core/locale/fr_FR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:52+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -90,11 +90,11 @@ msgid "selected items have been deactivated." msgstr "Les articles sélectionnés ont été désactivés !" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:712 core/models.py:720 +#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 msgid "attribute value" msgstr "Valeur de l'attribut" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:721 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 msgid "attribute values" msgstr "Valeurs des attributs" @@ -106,7 +106,7 @@ msgstr "Image" msgid "images" msgstr "Images" -#: core/admin.py:155 core/models.py:457 +#: core/admin.py:155 core/models.py:445 msgid "stock" msgstr "Stock" @@ -114,11 +114,11 @@ msgstr "Stock" msgid "stocks" msgstr "Stocks" -#: core/admin.py:166 core/models.py:1735 +#: core/admin.py:166 core/models.py:1609 msgid "order product" msgstr "Commander un produit" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1736 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 msgid "order products" msgstr "Commander des produits" @@ -334,7 +334,7 @@ msgstr "" "Réécrire certains champs d'une catégorie existante en sauvegardant les non-" "éditables" -#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:553 +#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:487 #: core/graphene/object_types.py:117 core/graphene/object_types.py:207 #: core/graphene/object_types.py:509 msgid "SEO Meta snapshot" @@ -614,47 +614,7 @@ msgstr "Liste de tous les produits (vue simple)" msgid "(exact) Product UUID" msgstr "UUID (exact) du produit" -#: core/docs/drf/viewsets.py:384 -msgid "(icontains) Product name" -msgstr "(icontains) Nom du produit" - -#: core/docs/drf/viewsets.py:390 -msgid "(list) Category names, case-insensitive" -msgstr "(liste) Noms de catégories, insensibles à la casse" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Category UUID" -msgstr "UUID (exact) de la catégorie" - -#: core/docs/drf/viewsets.py:402 -msgid "(list) Tag names, case-insensitive" -msgstr "(liste) Noms d'étiquettes, insensibles à la casse" - -#: core/docs/drf/viewsets.py:408 -msgid "(gte) Minimum stock price" -msgstr "(gte) Prix minimum de l'action" - -#: core/docs/drf/viewsets.py:414 -msgid "(lte) Maximum stock price" -msgstr "(lte) Prix maximum de l'action" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Only active products" -msgstr "(exact) Uniquement les produits actifs" - -#: core/docs/drf/viewsets.py:426 -msgid "(iexact) Brand name" -msgstr "(iexact) Nom de marque" - -#: core/docs/drf/viewsets.py:438 -msgid "(gt) Minimum stock quantity" -msgstr "(gt) Quantité minimale en stock" - -#: core/docs/drf/viewsets.py:444 -msgid "(exact) Digital vs. physical" -msgstr "(exact) Numérique ou physique" - -#: core/docs/drf/viewsets.py:451 +#: core/docs/drf/viewsets.py:385 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -662,255 +622,259 @@ 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:465 core/docs/drf/viewsets.py:466 +#: core/docs/drf/viewsets.py:399 core/docs/drf/viewsets.py:400 msgid "retrieve a single product (detailed view)" msgstr "Récupérer un seul produit (vue détaillée)" -#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:495 -#: core/docs/drf/viewsets.py:511 core/docs/drf/viewsets.py:527 -#: core/docs/drf/viewsets.py:543 core/docs/drf/viewsets.py:559 +#: core/docs/drf/viewsets.py:405 core/docs/drf/viewsets.py:429 +#: core/docs/drf/viewsets.py:445 core/docs/drf/viewsets.py:461 +#: core/docs/drf/viewsets.py:477 core/docs/drf/viewsets.py:493 msgid "Product UUID or slug" msgstr "UUID ou Slug du produit" -#: core/docs/drf/viewsets.py:481 core/docs/drf/viewsets.py:482 +#: core/docs/drf/viewsets.py:415 core/docs/drf/viewsets.py:416 msgid "create a product" msgstr "Créer un produit" -#: core/docs/drf/viewsets.py:489 core/docs/drf/viewsets.py:490 +#: core/docs/drf/viewsets.py:423 core/docs/drf/viewsets.py:424 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:505 core/docs/drf/viewsets.py:506 +#: core/docs/drf/viewsets.py:439 core/docs/drf/viewsets.py:440 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:521 core/docs/drf/viewsets.py:522 +#: core/docs/drf/viewsets.py:455 core/docs/drf/viewsets.py:456 msgid "delete a product" msgstr "Supprimer un produit" -#: core/docs/drf/viewsets.py:537 core/docs/drf/viewsets.py:538 +#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:472 msgid "lists all permitted feedbacks for a product" msgstr "liste tous les commentaires autorisés pour un produit" -#: core/docs/drf/viewsets.py:554 +#: core/docs/drf/viewsets.py:488 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:572 +#: core/docs/drf/viewsets.py:506 msgid "list all addresses" msgstr "Liste de toutes les adresses" -#: core/docs/drf/viewsets.py:579 +#: core/docs/drf/viewsets.py:513 msgid "retrieve a single address" msgstr "Récupérer une seule adresse" -#: core/docs/drf/viewsets.py:586 +#: core/docs/drf/viewsets.py:520 msgid "create a new address" msgstr "Créer une nouvelle adresse" -#: core/docs/drf/viewsets.py:594 +#: core/docs/drf/viewsets.py:528 msgid "delete an address" msgstr "Supprimer une adresse" -#: core/docs/drf/viewsets.py:601 +#: core/docs/drf/viewsets.py:535 msgid "update an entire address" msgstr "Mise à jour d'une adresse entière" -#: core/docs/drf/viewsets.py:609 +#: core/docs/drf/viewsets.py:543 msgid "partially update an address" msgstr "Mise à jour partielle d'une adresse" -#: core/docs/drf/viewsets.py:617 +#: core/docs/drf/viewsets.py:551 msgid "autocomplete address suggestions" msgstr "Saisie automatique des adresses" -#: core/docs/drf/viewsets.py:622 +#: core/docs/drf/viewsets.py:556 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:628 +#: core/docs/drf/viewsets.py:562 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:641 +#: core/docs/drf/viewsets.py:575 msgid "list all feedbacks (simple view)" msgstr "liste de tous les commentaires (vue simple)" -#: core/docs/drf/viewsets.py:645 +#: core/docs/drf/viewsets.py:579 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:649 +#: core/docs/drf/viewsets.py:583 msgid "create a feedback" msgstr "créer un retour d'information" -#: core/docs/drf/viewsets.py:653 +#: core/docs/drf/viewsets.py:587 msgid "delete a feedback" msgstr "supprimer un feedback" -#: core/docs/drf/viewsets.py:657 +#: core/docs/drf/viewsets.py:591 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:661 +#: core/docs/drf/viewsets.py:595 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:668 +#: core/docs/drf/viewsets.py:602 msgid "list all order–product relations (simple view)" msgstr "lister toutes les relations commande-produit (vue simple)" -#: core/docs/drf/viewsets.py:675 +#: core/docs/drf/viewsets.py:609 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:682 +#: core/docs/drf/viewsets.py:616 msgid "create a new order–product relation" msgstr "créer une nouvelle relation commande-produit" -#: core/docs/drf/viewsets.py:689 +#: core/docs/drf/viewsets.py:623 msgid "replace an existing order–product relation" msgstr "remplacer une relation commande-produit existante" -#: core/docs/drf/viewsets.py:696 +#: core/docs/drf/viewsets.py:630 msgid "partially update an existing order–product relation" msgstr "mettre à jour partiellement une relation commande-produit existante" -#: core/docs/drf/viewsets.py:703 +#: core/docs/drf/viewsets.py:637 msgid "delete an order–product relation" msgstr "supprimer une relation commande-produit" -#: core/docs/drf/viewsets.py:710 +#: core/docs/drf/viewsets.py:644 msgid "add or remove feedback on an order–product relation" msgstr "" "ajouter ou supprimer un retour d'information sur une relation commande-" "produit" -#: core/elasticsearch/__init__.py:105 +#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 msgid "no search term provided." msgstr "Aucun terme de recherche n'est fourni." -#: core/filters.py:64 core/filters.py:594 core/filters.py:623 +#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +msgid "Search" +msgstr "Recherche" + +#: core/filters.py:66 core/filters.py:554 core/filters.py:583 msgid "UUID" msgstr "UUID" -#: core/filters.py:65 core/filters.py:429 core/filters.py:560 +#: core/filters.py:67 core/filters.py:399 core/filters.py:526 msgid "Name" msgstr "Nom" -#: core/filters.py:66 core/filters.py:562 +#: core/filters.py:68 core/filters.py:528 msgid "Categories" msgstr "Catégories" -#: core/filters.py:68 +#: core/filters.py:70 msgid "Categories Slugs" msgstr "Catégories Limaces" -#: core/filters.py:69 core/filters.py:437 +#: core/filters.py:71 core/filters.py:407 msgid "Tags" msgstr "Tags" -#: core/filters.py:70 +#: core/filters.py:72 msgid "Min Price" msgstr "Prix minimum" -#: core/filters.py:71 +#: core/filters.py:73 msgid "Max Price" msgstr "Prix maximum" -#: core/filters.py:72 +#: core/filters.py:74 msgid "Is Active" msgstr "Est actif" -#: core/filters.py:73 +#: core/filters.py:75 msgid "Brand" msgstr "Marque" -#: core/filters.py:74 +#: core/filters.py:76 msgid "Attributes" msgstr "Attributs" -#: core/filters.py:75 +#: core/filters.py:77 msgid "Quantity" msgstr "Quantité" -#: core/filters.py:76 core/filters.py:431 core/filters.py:561 -#: core/models.py:287 core/models.py:381 core/models.py:534 +#: core/filters.py:78 core/filters.py:401 core/filters.py:527 +#: core/models.py:287 core/models.py:369 core/models.py:522 msgid "Slug" msgstr "Limace" -#: core/filters.py:77 +#: core/filters.py:79 msgid "Is Digital" msgstr "Is Digital" -#: core/filters.py:78 +#: core/filters.py:80 msgid "Include sub-categories" msgstr "Inclure des sous-catégories" -#: core/filters.py:81 +#: core/filters.py:83 msgid "Include personal ordered" msgstr "Inclure les produits commandés par les particuliers" -#: core/filters.py:83 core/models.py:538 +#: core/filters.py:85 core/models.py:526 msgid "SKU" msgstr "SKU" -#: core/filters.py:166 +#: core/filters.py:161 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:356 +#: core/filters.py:324 msgid "Search (ID, product name or part number)" msgstr "Recherche (ID, nom du produit ou numéro de pièce)" -#: core/filters.py:359 +#: core/filters.py:327 msgid "Bought after (inclusive)" msgstr "Acheté après (inclus)" -#: core/filters.py:360 +#: core/filters.py:328 msgid "Bought before (inclusive)" msgstr "Acheté avant (inclus)" -#: core/filters.py:363 core/filters.py:410 core/filters.py:625 +#: core/filters.py:331 core/filters.py:378 core/filters.py:585 msgid "User email" msgstr "Courriel de l'utilisateur" -#: core/filters.py:364 core/filters.py:411 core/filters.py:603 -#: core/filters.py:624 +#: core/filters.py:332 core/filters.py:379 core/filters.py:563 +#: core/filters.py:584 msgid "User UUID" msgstr "UUID de l'utilisateur" -#: core/filters.py:365 +#: core/filters.py:333 msgid "Status" msgstr "Statut" -#: core/filters.py:369 +#: core/filters.py:337 msgid "Human Readable ID" msgstr "ID lisible par l'homme" -#: core/filters.py:430 +#: core/filters.py:400 msgid "Parent" msgstr "Parent" -#: core/filters.py:434 +#: core/filters.py:404 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:438 +#: core/filters.py:408 msgid "Level" msgstr "Niveau" -#: core/filters.py:598 +#: core/filters.py:558 msgid "Product UUID" msgstr "UUID du produit" @@ -967,7 +931,7 @@ msgstr "" "mutuellement !" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:821 +#: core/graphene/mutations.py:527 core/viewsets.py:839 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}" @@ -1034,37 +998,37 @@ msgstr "" "ajouter ou supprimer un retour d'information sur une relation commande-" "produit" -#: core/graphene/mutations.py:555 +#: core/graphene/mutations.py:556 msgid "action must be either `add` or `remove`" msgstr "L'action doit être soit `add` soit `remove` !" -#: core/graphene/mutations.py:558 +#: core/graphene/mutations.py:559 #, 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:621 +#: core/graphene/mutations.py:622 msgid "original address string provided by the user" msgstr "Chaîne d'adresse originale fournie par l'utilisateur" -#: core/graphene/mutations.py:655 core/models.py:896 core/models.py:909 -#: core/models.py:1348 core/models.py:1377 core/models.py:1402 -#: core/viewsets.py:824 +#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 +#: core/models.py:1234 core/models.py:1263 core/models.py:1288 +#: core/viewsets.py:842 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} n'existe pas : {uuid} !" -#: core/graphene/mutations.py:668 +#: core/graphene/mutations.py:669 msgid "limit must be between 1 and 10" msgstr "La limite doit être comprise entre 1 et 10" -#: core/graphene/mutations.py:713 +#: core/graphene/mutations.py:714 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - fonctionne comme un charme" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:666 core/models.py:1234 -#: core/models.py:1809 +#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 +#: core/models.py:1686 msgid "attributes" msgstr "Attributs" @@ -1077,11 +1041,11 @@ 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:224 core/models.py:312 core/models.py:620 +#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:612 msgid "categories" msgstr "Catégories" -#: core/graphene/object_types.py:124 core/models.py:395 +#: core/graphene/object_types.py:124 core/models.py:383 msgid "brands" msgstr "Marques" @@ -1140,7 +1104,7 @@ msgid "represents feedback from a user." msgstr "Représente le retour d'information d'un utilisateur." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1228 +#: core/models.py:1110 msgid "notifications" msgstr "Notifications" @@ -1148,7 +1112,7 @@ msgstr "Notifications" 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:400 core/models.py:1938 +#: core/graphene/object_types.py:400 core/models.py:1791 msgid "feedback" msgstr "Retour d'information" @@ -1156,7 +1120,7 @@ msgstr "Retour d'information" msgid "a list of order products in this order" msgstr "Une liste des produits commandés dans cette commande" -#: core/graphene/object_types.py:436 core/models.py:1198 +#: core/graphene/object_types.py:436 core/models.py:1080 msgid "billing address" msgstr "Adresse de facturation" @@ -1184,7 +1148,7 @@ msgstr "Tous les produits de la commande sont-ils numériques ?" msgid "transactions for this order" msgstr "Transactions pour cette commande" -#: core/graphene/object_types.py:465 core/models.py:1262 +#: core/graphene/object_types.py:465 core/models.py:1144 msgid "orders" msgstr "Commandes" @@ -1196,15 +1160,15 @@ msgstr "Image URL" msgid "product's images" msgstr "Images du produit" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:477 +#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 msgid "category" msgstr "Catégorie" -#: core/graphene/object_types.py:502 core/models.py:1939 +#: core/graphene/object_types.py:502 core/models.py:1792 msgid "feedbacks" msgstr "Retour d'information" -#: core/graphene/object_types.py:503 core/models.py:394 core/models.py:486 +#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 msgid "brand" msgstr "Marque" @@ -1236,7 +1200,7 @@ msgstr "Nombre de retours d'information" msgid "only available for personal orders" msgstr "Produits disponibles uniquement pour les commandes personnelles" -#: core/graphene/object_types.py:534 core/models.py:548 +#: core/graphene/object_types.py:534 core/models.py:536 msgid "products" msgstr "Produits" @@ -1248,7 +1212,7 @@ msgstr "Promocodes" msgid "products on sale" msgstr "Produits en vente" -#: core/graphene/object_types.py:651 core/models.py:843 +#: core/graphene/object_types.py:651 core/models.py:784 msgid "promotions" msgstr "Promotions" @@ -1256,7 +1220,7 @@ msgstr "Promotions" msgid "vendor" msgstr "Vendeur" -#: core/graphene/object_types.py:656 core/models.py:547 +#: core/graphene/object_types.py:656 core/models.py:535 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1264,11 +1228,11 @@ msgstr "Vendeur" msgid "product" msgstr "Produit" -#: core/graphene/object_types.py:667 core/models.py:868 +#: core/graphene/object_types.py:667 core/models.py:807 msgid "wishlisted products" msgstr "Produits en liste de souhaits" -#: core/graphene/object_types.py:673 core/models.py:885 +#: core/graphene/object_types.py:673 core/models.py:824 msgid "wishlists" msgstr "Liste de souhaits" @@ -1276,7 +1240,7 @@ msgstr "Liste de souhaits" msgid "tagged products" msgstr "Produits marqués" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:492 +#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 msgid "product tags" msgstr "Étiquettes du produit" @@ -1388,7 +1352,7 @@ msgstr "Groupe d'attributs parent" msgid "attribute group's name" msgstr "Nom du groupe d'attributs" -#: core/models.py:100 core/models.py:628 +#: core/models.py:100 core/models.py:620 msgid "attribute group" msgstr "Groupe d'attributs" @@ -1558,51 +1522,65 @@ msgstr "Description de la catégorie" msgid "tags that help describe or group this category" msgstr "les étiquettes qui aident à décrire ou à regrouper cette catégorie" -#: core/models.py:299 core/models.py:387 +#: core/models.py:299 core/models.py:375 msgid "priority" msgstr "Priorité" -#: core/models.py:340 +#: core/models.py:318 +msgid "" +"Represents a Brand object in the system. This class handles information and " +"attributes related to a brand, including its name, logos, description, " +"associated categories, a unique slug, and priority order. It allows for the " +"organization and representation of brand-related data within the " +"application." +msgstr "" +"Représente un objet Marque dans le système. Cette classe gère les " +"informations et les attributs liés à une marque, y compris son nom, ses " +"logos, sa description, ses catégories associées, un nom unique et un ordre " +"de priorité. Elle permet d'organiser et de représenter les données relatives" +" à la marque dans l'application." + +#: core/models.py:328 msgid "name of this brand" msgstr "Nom de cette marque" -#: core/models.py:341 +#: core/models.py:329 msgid "brand name" msgstr "Nom de marque" -#: core/models.py:348 +#: core/models.py:336 msgid "upload a logo representing this brand" msgstr "Télécharger un logo représentant cette marque" -#: core/models.py:350 +#: core/models.py:338 msgid "brand small image" msgstr "Petite image de marque" -#: core/models.py:356 +#: core/models.py:344 msgid "upload a big logo representing this brand" msgstr "Télécharger un grand logo représentant cette marque" -#: core/models.py:358 +#: core/models.py:346 msgid "brand big image" msgstr "Une grande image de marque" -#: core/models.py:363 +#: core/models.py:351 msgid "add a detailed description of the brand" msgstr "Ajouter une description détaillée de la marque" -#: core/models.py:364 +#: core/models.py:352 msgid "brand description" msgstr "Description de la marque" -#: core/models.py:369 +#: core/models.py:357 msgid "optional categories that this brand is associated with" msgstr "Catégories facultatives auxquelles cette marque est associée" -#: core/models.py:370 +#: core/models.py:358 msgid "associated categories" msgstr "Catégories" -#: core/models.py:400 +#: core/models.py:388 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1618,68 +1596,68 @@ 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:412 +#: core/models.py:400 msgid "the vendor supplying this product stock" msgstr "Le vendeur qui fournit ce stock de produits" -#: core/models.py:413 +#: core/models.py:401 msgid "associated vendor" msgstr "Vendeur associé" -#: core/models.py:417 +#: core/models.py:405 msgid "final price to the customer after markups" msgstr "Prix final pour le client après majoration" -#: core/models.py:418 +#: core/models.py:406 msgid "selling price" msgstr "Prix de vente" -#: core/models.py:423 +#: core/models.py:411 msgid "the product associated with this stock entry" msgstr "Le produit associé à cette entrée de stock" -#: core/models.py:424 core/models.py:708 core/models.py:765 -#: core/models.py:1709 +#: core/models.py:412 core/models.py:683 core/models.py:730 +#: core/models.py:1583 msgid "associated product" msgstr "Produit associé" -#: core/models.py:431 +#: core/models.py:419 msgid "the price paid to the vendor for this product" msgstr "Le prix payé au vendeur pour ce produit" -#: core/models.py:432 +#: core/models.py:420 msgid "vendor purchase price" msgstr "Prix d'achat du vendeur" -#: core/models.py:436 +#: core/models.py:424 msgid "available quantity of the product in stock" msgstr "Quantité disponible du produit en stock" -#: core/models.py:437 +#: core/models.py:425 msgid "quantity in stock" msgstr "Quantité en stock" -#: core/models.py:441 +#: core/models.py:429 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU attribué par le fournisseur pour identifier le produit" -#: core/models.py:442 +#: core/models.py:430 msgid "vendor sku" msgstr "UGS du vendeur" -#: core/models.py:448 +#: core/models.py:436 msgid "digital file associated with this stock if applicable" msgstr "Fichier numérique associé à ce stock, le cas échéant" -#: core/models.py:449 +#: core/models.py:437 msgid "digital file" msgstr "Fichier numérique" -#: core/models.py:458 +#: core/models.py:446 msgid "stock entries" msgstr "Entrées de stock" -#: core/models.py:463 +#: core/models.py:451 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1701,55 +1679,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:476 +#: core/models.py:464 msgid "category this product belongs to" msgstr "Catégorie à laquelle appartient ce produit" -#: core/models.py:485 +#: core/models.py:473 msgid "optionally associate this product with a brand" msgstr "Possibilité d'associer ce produit à une marque" -#: core/models.py:491 +#: core/models.py:479 msgid "tags that help describe or group this product" msgstr "Étiquettes permettant de décrire ou de regrouper ce produit" -#: core/models.py:496 +#: core/models.py:484 msgid "indicates whether this product is digitally delivered" msgstr "Indique si ce produit est livré numériquement" -#: core/models.py:497 +#: core/models.py:485 msgid "is product digital" msgstr "Le produit est-il numérique ?" -#: core/models.py:503 +#: core/models.py:491 msgid "provide a clear identifying name for the product" msgstr "Fournir un nom d'identification clair pour le produit" -#: core/models.py:504 +#: core/models.py:492 msgid "product name" msgstr "Nom du produit" -#: core/models.py:509 core/models.py:831 +#: core/models.py:497 core/models.py:772 msgid "add a detailed description of the product" msgstr "Ajouter une description détaillée du produit" -#: core/models.py:510 +#: core/models.py:498 msgid "product description" msgstr "Description du produit" -#: core/models.py:517 +#: core/models.py:505 msgid "part number for this product" msgstr "Numéro de pièce pour ce produit" -#: core/models.py:518 +#: core/models.py:506 msgid "part number" msgstr "Numéro de pièce" -#: core/models.py:537 +#: core/models.py:525 msgid "stock keeping unit for this product" msgstr "Unité de gestion des stocks pour ce produit" -#: core/models.py:607 +#: core/models.py:599 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 " @@ -1766,295 +1744,410 @@ 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:619 +#: core/models.py:611 msgid "category of this attribute" msgstr "Catégorie de cet attribut" -#: core/models.py:627 +#: core/models.py:619 msgid "group of this attribute" msgstr "Groupe de cet attribut" -#: core/models.py:633 +#: core/models.py:625 msgid "string" msgstr "Chaîne" -#: core/models.py:634 +#: core/models.py:626 msgid "integer" msgstr "Entier" -#: core/models.py:635 +#: core/models.py:627 msgid "float" msgstr "Flotteur" -#: core/models.py:636 +#: core/models.py:628 msgid "boolean" msgstr "Booléen" -#: core/models.py:637 +#: core/models.py:629 msgid "array" msgstr "Tableau" -#: core/models.py:638 +#: core/models.py:630 msgid "object" msgstr "Objet" -#: core/models.py:640 +#: core/models.py:632 msgid "type of the attribute's value" msgstr "Type de la valeur de l'attribut" -#: core/models.py:641 +#: core/models.py:633 msgid "value type" msgstr "Type de valeur" -#: core/models.py:646 +#: core/models.py:638 msgid "name of this attribute" msgstr "Nom de cet attribut" -#: core/models.py:647 +#: core/models.py:639 msgid "attribute's name" msgstr "Nom de l'attribut" -#: core/models.py:653 +#: core/models.py:645 msgid "is filterable" msgstr "est filtrable" -#: core/models.py:654 +#: core/models.py:646 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:665 core/models.py:700 +#: core/models.py:657 core/models.py:675 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attribut" -#: core/models.py:699 +#: core/models.py:663 +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 "" +"Représente une valeur spécifique pour un attribut lié à un produit. Il relie" +" l'\"attribut\" à une \"valeur\" unique, ce qui permet une meilleure " +"organisation et une représentation dynamique des caractéristiques du " +"produit." + +#: core/models.py:674 msgid "attribute of this value" msgstr "Attribut de cette valeur" -#: core/models.py:707 +#: core/models.py:682 msgid "the specific product associated with this attribute's value" msgstr "Le produit spécifique associé à la valeur de cet attribut" -#: core/models.py:713 +#: core/models.py:688 msgid "the specific value for this attribute" msgstr "La valeur spécifique de cet attribut" -#: core/models.py:747 +#: core/models.py:701 +msgid "" +"Represents a product image associated with a product in the system. This " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " +"determining their display order. It also includes an accessibility feature " +"with alternative text for the images." +msgstr "" +"Représente une image de produit associée à un produit dans le système. Cette" +" classe est conçue pour gérer les images des produits, y compris la " +"fonctionnalité de téléchargement des fichiers d'image, leur association à " +"des produits spécifiques et la détermination de leur ordre d'affichage. Elle" +" comprend également une fonction d'accessibilité avec un texte alternatif " +"pour les images." + +#: core/models.py:712 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:748 +#: core/models.py:713 msgid "image alt text" msgstr "Texte alt de l'image" -#: core/models.py:751 +#: core/models.py:716 msgid "upload the image file for this product" msgstr "Télécharger le fichier image pour ce produit" -#: core/models.py:752 core/models.py:777 +#: core/models.py:717 core/models.py:742 msgid "product image" msgstr "Image du produit" -#: core/models.py:758 +#: core/models.py:723 msgid "determines the order in which images are displayed" msgstr "Détermine l'ordre d'affichage des images" -#: core/models.py:759 +#: core/models.py:724 msgid "display priority" msgstr "Priorité à l'affichage" -#: core/models.py:764 +#: core/models.py:729 msgid "the product that this image represents" msgstr "Le produit que cette image représente" -#: core/models.py:778 +#: core/models.py:743 msgid "product images" msgstr "Images du produit" -#: core/models.py:819 +#: core/models.py:748 +msgid "" +"Represents a promotional campaign for products with a discount. This class " +"is used to define and manage promotional campaigns that offer a percentage-" +"based discount for products. The class includes attributes for setting the " +"discount rate, providing details about the promotion, and linking it to the " +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." +msgstr "" +"Représente une campagne promotionnelle pour des produits avec une remise. " +"Cette classe est utilisée pour définir et gérer des campagnes " +"promotionnelles qui offrent une remise en pourcentage sur les produits. La " +"classe comprend des attributs permettant de définir le taux de remise, de " +"fournir des détails sur la promotion et de la lier aux produits concernés. " +"Elle s'intègre au catalogue de produits pour déterminer les articles " +"concernés par la campagne." + +#: core/models.py:760 msgid "percentage discount for the selected products" msgstr "Pourcentage de réduction pour les produits sélectionnés" -#: core/models.py:820 +#: core/models.py:761 msgid "discount percentage" msgstr "Pourcentage de réduction" -#: core/models.py:825 +#: core/models.py:766 msgid "provide a unique name for this promotion" msgstr "Donnez un nom unique à cette promotion" -#: core/models.py:826 +#: core/models.py:767 msgid "promotion name" msgstr "Nom de la promotion" -#: core/models.py:832 +#: core/models.py:773 msgid "promotion description" msgstr "Promotion description" -#: core/models.py:837 +#: core/models.py:778 msgid "select which products are included in this promotion" msgstr "Sélectionnez les produits inclus dans cette promotion" -#: core/models.py:838 +#: core/models.py:779 msgid "included products" msgstr "Produits inclus" -#: core/models.py:842 +#: core/models.py:783 msgid "promotion" msgstr "Promotion" -#: core/models.py:867 +#: core/models.py:794 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"class provides functionality to manage a collection of products, supporting " +"operations such as adding and removing products, as well as supporting " +"operations for adding and removing multiple products at once." +msgstr "" +"Représente la liste de souhaits d'un utilisateur pour le stockage et la " +"gestion des produits souhaités. La classe fournit des fonctionnalités " +"permettant de gérer une collection de produits, en prenant en charge des " +"opérations telles que l'ajout et la suppression de produits, ainsi que des " +"opérations permettant d'ajouter et de supprimer plusieurs produits à la " +"fois." + +#: core/models.py:806 msgid "products that the user has marked as wanted" msgstr "Produits que l'utilisateur a marqués comme souhaités" -#: core/models.py:875 +#: core/models.py:814 msgid "user who owns this wishlist" msgstr "Utilisateur qui possède cette liste de souhaits" -#: core/models.py:876 +#: core/models.py:815 msgid "wishlist owner" msgstr "Propriétaire de la liste de souhaits" -#: core/models.py:884 +#: core/models.py:823 msgid "wishlist" msgstr "Liste de souhaits" -#: core/models.py:951 +#: core/models.py:865 +msgid "" +"Represents a documentary record tied to a product. This class is used to " +"store information about documentaries related to specific products, " +"including file uploads and their metadata. It contains methods and " +"properties to handle the file type and storage path for the documentary " +"files. It extends functionality from specific mixins and provides additional" +" custom features." +msgstr "" +"Représente un enregistrement documentaire lié à un produit. Cette classe est" +" utilisée pour stocker des informations sur les documentaires liés à des " +"produits spécifiques, y compris les téléchargements de fichiers et leurs " +"métadonnées. Elle contient des méthodes et des propriétés permettant de " +"gérer le type de fichier et le chemin de stockage des fichiers " +"documentaires. Elle étend les fonctionnalités de mixins spécifiques et " +"fournit des fonctionnalités personnalisées supplémentaires." + +#: core/models.py:878 msgid "documentary" msgstr "Documentaire" -#: core/models.py:952 +#: core/models.py:879 msgid "documentaries" msgstr "Documentaires" -#: core/models.py:962 +#: core/models.py:889 msgid "unresolved" msgstr "Non résolu" -#: core/models.py:1008 +#: core/models.py:894 +msgid "" +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." +msgstr "" +"Représente une entité d'adresse qui comprend des détails de localisation et " +"des associations avec un utilisateur. Elle fournit des fonctionnalités de " +"stockage de données géographiques et d'adresses, ainsi qu'une intégration " +"avec des services de géocodage. Cette classe est conçue pour stocker des " +"informations détaillées sur les adresses, y compris des éléments tels que la" +" rue, la ville, la région, le pays et la géolocalisation (longitude et " +"latitude). Elle prend en charge l'intégration avec les API de géocodage, ce " +"qui permet de stocker les réponses brutes de l'API en vue d'un traitement ou" +" d'une inspection ultérieurs. La classe permet également d'associer une " +"adresse à un utilisateur, ce qui facilite le traitement personnalisé des " +"données." + +#: core/models.py:909 msgid "address line for the customer" msgstr "Ligne d'adresse du client" -#: core/models.py:1009 +#: core/models.py:910 msgid "address line" msgstr "Ligne d'adresse" -#: core/models.py:1011 +#: core/models.py:912 msgid "street" msgstr "Rue" -#: core/models.py:1012 +#: core/models.py:913 msgid "district" msgstr "District" -#: core/models.py:1013 +#: core/models.py:914 msgid "city" msgstr "Ville" -#: core/models.py:1014 +#: core/models.py:915 msgid "region" msgstr "Région" -#: core/models.py:1015 +#: core/models.py:916 msgid "postal code" msgstr "Code postal" -#: core/models.py:1016 +#: core/models.py:917 msgid "country" msgstr "Pays" -#: core/models.py:1023 +#: core/models.py:924 msgid "geolocation point: (longitude, latitude)" msgstr "Point de géolocalisation (longitude, latitude)" -#: core/models.py:1026 +#: core/models.py:927 msgid "full JSON response from geocoder for this address" msgstr "Réponse JSON complète du géocodeur pour cette adresse" -#: core/models.py:1031 +#: core/models.py:932 msgid "stored JSON response from the geocoding service" msgstr "Réponse JSON stockée du service de géocodage" -#: core/models.py:1039 +#: core/models.py:940 msgid "address" msgstr "Adresse" -#: core/models.py:1040 +#: core/models.py:941 msgid "addresses" msgstr "Adresses" -#: core/models.py:1085 +#: core/models.py:953 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" +"Représente un code promotionnel qui peut être utilisé pour des remises, en " +"gérant sa validité, le type de remise et l'application. La classe PromoCode " +"stocke les détails d'un code promotionnel, notamment son identifiant unique," +" les propriétés de la remise (montant ou pourcentage), la période de " +"validité, l'utilisateur associé (le cas échéant) et l'état de son " +"utilisation. Elle comprend une fonctionnalité permettant de valider et " +"d'appliquer le code promotionnel à une commande tout en veillant à ce que " +"les contraintes soient respectées." + +#: core/models.py:967 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:1086 +#: core/models.py:968 msgid "promo code identifier" msgstr "Identifiant du code promotionnel" -#: core/models.py:1093 +#: core/models.py:975 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:1094 +#: core/models.py:976 msgid "fixed discount amount" msgstr "Montant de l'escompte fixe" -#: core/models.py:1100 +#: core/models.py:982 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:1101 +#: core/models.py:983 msgid "percentage discount" msgstr "Pourcentage de réduction" -#: core/models.py:1106 +#: core/models.py:988 msgid "timestamp when the promocode expires" msgstr "Date d'expiration du code promotionnel" -#: core/models.py:1107 +#: core/models.py:989 msgid "end validity time" msgstr "Heure de fin de validité" -#: core/models.py:1112 +#: core/models.py:994 msgid "timestamp from which this promocode is valid" msgstr "Date à partir de laquelle ce code promotionnel est valable" -#: core/models.py:1113 +#: core/models.py:995 msgid "start validity time" msgstr "Heure de début de validité" -#: core/models.py:1118 +#: core/models.py:1000 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:1119 +#: core/models.py:1001 msgid "usage timestamp" msgstr "Horodatage de l'utilisation" -#: core/models.py:1124 +#: core/models.py:1006 msgid "user assigned to this promocode if applicable" msgstr "Utilisateur assigné à ce code promo, le cas échéant" -#: core/models.py:1125 +#: core/models.py:1007 msgid "assigned user" msgstr "Utilisateur assigné" -#: core/models.py:1132 +#: core/models.py:1014 msgid "promo code" msgstr "Code promo" -#: core/models.py:1133 +#: core/models.py:1015 msgid "promo codes" msgstr "Codes promotionnels" -#: core/models.py:1140 +#: core/models.py:1022 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2062,16 +2155,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:1155 +#: core/models.py:1037 msgid "promocode already used" msgstr "Le code promotionnel a déjà été utilisé" -#: core/models.py:1171 +#: core/models.py:1053 #, 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:1180 +#: core/models.py:1062 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 " @@ -2089,145 +2182,145 @@ 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:1197 +#: core/models.py:1079 msgid "the billing address used for this order" msgstr "L'adresse de facturation utilisée pour cette commande" -#: core/models.py:1205 +#: core/models.py:1087 msgid "optional promo code applied to this order" msgstr "Code promo optionnel appliqué à cette commande" -#: core/models.py:1206 +#: core/models.py:1088 msgid "applied promo code" msgstr "Code promo appliqué" -#: core/models.py:1214 +#: core/models.py:1096 msgid "the shipping address used for this order" msgstr "L'adresse de livraison utilisée pour cette commande" -#: core/models.py:1215 +#: core/models.py:1097 msgid "shipping address" msgstr "Adresse de livraison" -#: core/models.py:1221 +#: core/models.py:1103 msgid "current status of the order in its lifecycle" msgstr "Statut actuel de la commande dans son cycle de vie" -#: core/models.py:1222 +#: core/models.py:1104 msgid "order status" msgstr "Statut de la commande" -#: core/models.py:1227 core/models.py:1686 +#: core/models.py:1109 core/models.py:1560 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:1233 +#: core/models.py:1115 msgid "json representation of order attributes for this order" msgstr "Représentation JSON des attributs de cette commande" -#: core/models.py:1239 +#: core/models.py:1121 msgid "the user who placed the order" msgstr "L'utilisateur qui a passé la commande" -#: core/models.py:1240 +#: core/models.py:1122 msgid "user" msgstr "Utilisateur" -#: core/models.py:1246 +#: core/models.py:1128 msgid "the timestamp when the order was finalized" msgstr "L'heure à laquelle la commande a été finalisée." -#: core/models.py:1247 +#: core/models.py:1129 msgid "buy time" msgstr "Temps d'achat" -#: core/models.py:1254 +#: core/models.py:1136 msgid "a human-readable identifier for the order" msgstr "Un identifiant lisible par l'homme pour la commande" -#: core/models.py:1255 +#: core/models.py:1137 msgid "human readable id" msgstr "ID lisible par l'homme" -#: core/models.py:1261 +#: core/models.py:1143 msgid "order" msgstr "Commande" -#: core/models.py:1282 +#: core/models.py:1168 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:1316 +#: core/models.py:1202 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:1321 +#: core/models.py:1207 msgid "you cannot add inactive products to order" msgstr "Vous ne pouvez pas ajouter des produits inactifs à la commande" -#: core/models.py:1338 +#: core/models.py:1224 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:1360 core/models.py:1385 core/models.py:1393 +#: core/models.py:1246 core/models.py:1271 core/models.py:1279 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:1381 +#: core/models.py:1267 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} n'existe pas avec la requête <{query}> !" -#: core/models.py:1413 +#: core/models.py:1299 msgid "promocode does not exist" msgstr "Le code promotionnel n'existe pas" -#: core/models.py:1419 +#: core/models.py:1305 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:1438 +#: core/models.py:1324 msgid "address does not exist" msgstr "L'adresse n'existe pas" -#: core/models.py:1459 core/models.py:1528 +#: core/models.py:1345 core/models.py:1414 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:1462 core/models.py:1524 +#: core/models.py:1348 core/models.py:1410 msgid "invalid force value" msgstr "Valeur de force non valide" -#: core/models.py:1468 core/models.py:1531 +#: core/models.py:1354 core/models.py:1417 msgid "you cannot purchase an empty order!" msgstr "Vous ne pouvez pas acheter une commande vide !" -#: core/models.py:1487 +#: core/models.py:1373 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:1501 +#: core/models.py:1387 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:1506 +#: core/models.py:1392 msgid "insufficient funds to complete the order" msgstr "Insuffisance de fonds pour compléter la commande" -#: core/models.py:1540 +#: core/models.py:1426 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2236,7 +2329,7 @@ msgstr "" "informations suivantes : nom du client, courriel du client, numéro de " "téléphone du client" -#: core/models.py:1549 +#: core/models.py:1435 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2244,148 +2337,205 @@ msgstr "" "Méthode de paiement non valide : {payment_method} de " "{available_payment_methods} !" -#: core/models.py:1674 +#: core/models.py:1533 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" +"Représente les produits associés aux commandes et leurs attributs. Le modèle" +" OrderProduct conserve les informations relatives à un produit faisant " +"partie d'une commande, y compris des détails tels que le prix d'achat, la " +"quantité, les attributs du produit et le statut. Il gère les notifications " +"destinées à l'utilisateur et aux administrateurs, ainsi que des opérations " +"telles que le renvoi du solde du produit ou l'ajout de commentaires. Ce " +"modèle fournit également des méthodes et des propriétés qui prennent en " +"charge la logique commerciale, comme le calcul du prix total ou la " +"génération d'une URL de téléchargement pour les produits numériques. Le " +"modèle s'intègre aux modèles de commande et de produit et stocke une " +"référence à ces derniers." + +#: core/models.py:1548 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:1675 +#: core/models.py:1549 msgid "purchase price at order time" msgstr "Prix d'achat au moment de la commande" -#: core/models.py:1680 +#: core/models.py:1554 msgid "internal comments for admins about this ordered product" msgstr "" "Commentaires internes pour les administrateurs sur ce produit commandé" -#: core/models.py:1681 +#: core/models.py:1555 msgid "internal comments" msgstr "Commentaires internes" -#: core/models.py:1687 +#: core/models.py:1561 msgid "user notifications" msgstr "Notifications aux utilisateurs" -#: core/models.py:1692 +#: core/models.py:1566 msgid "json representation of this item's attributes" msgstr "Représentation JSON des attributs de cet élément" -#: core/models.py:1693 +#: core/models.py:1567 msgid "ordered product attributes" msgstr "Attributs du produit ordonnés" -#: core/models.py:1698 +#: core/models.py:1572 msgid "reference to the parent order that contains this product" msgstr "Référence à l'ordre parent qui contient ce produit" -#: core/models.py:1699 +#: core/models.py:1573 msgid "parent order" msgstr "Ordonnance parentale" -#: core/models.py:1708 +#: core/models.py:1582 msgid "the specific product associated with this order line" msgstr "Le produit spécifique associé à cette ligne de commande" -#: core/models.py:1715 +#: core/models.py:1589 msgid "quantity of this specific product in the order" msgstr "Quantité de ce produit spécifique dans la commande" -#: core/models.py:1716 +#: core/models.py:1590 msgid "product quantity" msgstr "Quantité de produits" -#: core/models.py:1723 +#: core/models.py:1597 msgid "current status of this product in the order" msgstr "Statut actuel de ce produit dans la commande" -#: core/models.py:1724 +#: core/models.py:1598 msgid "product line status" msgstr "Statut de la ligne de produits" -#: core/models.py:1784 +#: core/models.py:1661 msgid "order product must have an order" msgstr "Le produit doit être associé à une commande !" -#: core/models.py:1786 +#: core/models.py:1663 #, 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:1800 +#: core/models.py:1677 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:1806 +#: core/models.py:1683 msgid "name" msgstr "Nom" -#: core/models.py:1807 +#: core/models.py:1684 msgid "URL of the integration" msgstr "URL de l'intégration" -#: core/models.py:1808 +#: core/models.py:1685 msgid "authentication credentials" msgstr "Références d'authentification" -#: core/models.py:1822 +#: core/models.py:1699 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:1826 +#: core/models.py:1703 msgid "CRM" msgstr "CRM" -#: core/models.py:1827 +#: core/models.py:1704 msgid "CRMs" msgstr "CRM" -#: core/models.py:1839 +#: core/models.py:1716 msgid "order CRM link" msgstr "Lien CRM de la commande" -#: core/models.py:1840 +#: core/models.py:1717 msgid "orders CRM links" msgstr "Liens CRM des commandes" -#: core/models.py:1874 +#: core/models.py:1722 +msgid "" +"Represents the downloading functionality for digital assets associated with " +"orders. The DigitalAssetDownload class provides the ability to manage and " +"access downloads related to order products. It maintains information about " +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." +msgstr "" +"Représente la fonctionnalité de téléchargement des ressources numériques " +"associées aux commandes. La classe DigitalAssetDownload permet de gérer et " +"d'accéder aux téléchargements liés aux produits de la commande. Elle " +"conserve des informations sur le produit de commande associé, le nombre de " +"téléchargements et la visibilité publique de l'actif. Elle comprend une " +"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:1736 msgid "download" msgstr "Télécharger" -#: core/models.py:1875 +#: core/models.py:1737 msgid "downloads" msgstr "Téléchargements" -#: core/models.py:1883 +#: core/models.py:1745 msgid "you can not download a digital asset for a non-finished order" msgstr "" "Vous ne pouvez pas télécharger un bien numérique pour une commande non " "terminée." -#: core/models.py:1913 +#: core/models.py:1754 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." +msgstr "" +"Gère les commentaires des utilisateurs sur les produits. Cette classe est " +"conçue pour capturer et stocker les commentaires des utilisateurs sur des " +"produits spécifiques qu'ils ont achetés. Elle contient des attributs " +"permettant de stocker les commentaires des utilisateurs, une référence au " +"produit concerné dans la commande et une note attribuée par l'utilisateur. " +"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:1766 msgid "user-provided comments about their experience with the product" msgstr "Commentaires des utilisateurs sur leur expérience du produit" -#: core/models.py:1914 +#: core/models.py:1767 msgid "feedback comments" msgstr "Commentaires" -#: core/models.py:1921 +#: core/models.py:1774 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:1922 +#: core/models.py:1775 msgid "related order product" msgstr "Produit de commande apparenté" -#: core/models.py:1927 +#: core/models.py:1780 msgid "user-assigned rating for the product" msgstr "Note attribuée par l'utilisateur au produit" -#: core/models.py:1928 +#: core/models.py:1781 msgid "product rating" msgstr "Evaluation du produit" @@ -2607,17 +2757,17 @@ msgstr "" msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | nous contacter initié" -#: core/utils/emailing.py:64 +#: core/utils/emailing.py:74 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Confirmation de commande" -#: core/utils/emailing.py:99 +#: core/utils/emailing.py:109 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Commande livrée" -#: core/utils/emailing.py:187 +#: core/utils/emailing.py:197 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | promocode accordé" @@ -2641,15 +2791,15 @@ msgstr "" msgid "invalid phone number format" msgstr "Format de numéro de téléphone non valide" -#: core/views.py:481 +#: core/views.py:489 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:539 +#: core/views.py:547 msgid "favicon not found" msgstr "favicon introuvable" -#: core/viewsets.py:1319 +#: core/viewsets.py:1357 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Erreur de géocodage : {e}" diff --git a/core/locale/he_IL/LC_MESSAGES/django.mo b/core/locale/he_IL/LC_MESSAGES/django.mo index f2eecf1f83bae9813c34cc6b13003e40ff0aedd6..dc4ada53dd37eac291c28eb6e7d05dd4ea07431d 100644 GIT binary patch delta 20837 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 delta 12679 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 diff --git a/core/locale/he_IL/LC_MESSAGES/django.po b/core/locale/he_IL/LC_MESSAGES/django.po index de310590..55f7903c 100644 --- a/core/locale/he_IL/LC_MESSAGES/django.po +++ b/core/locale/he_IL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:52+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -86,11 +86,11 @@ msgid "selected items have been deactivated." msgstr "פריטים נבחרים הושבתו!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:712 core/models.py:720 +#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 msgid "attribute value" msgstr "ערך התכונה" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:721 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 msgid "attribute values" msgstr "ערכי תכונות" @@ -102,7 +102,7 @@ msgstr "תמונה" msgid "images" msgstr "תמונות" -#: core/admin.py:155 core/models.py:457 +#: core/admin.py:155 core/models.py:445 msgid "stock" msgstr "מלאי" @@ -110,11 +110,11 @@ msgstr "מלאי" msgid "stocks" msgstr "מניות" -#: core/admin.py:166 core/models.py:1735 +#: core/admin.py:166 core/models.py:1609 msgid "order product" msgstr "הזמן מוצר" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1736 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 msgid "order products" msgstr "הזמנת מוצרים" @@ -317,7 +317,7 @@ msgstr "שכתוב קטגוריה קיימת תוך שמירת פריטים שא msgid "rewrite some fields of an existing category saving non-editables" msgstr "שכתוב שדות מסוימים בקטגוריה קיימת תוך שמירת שדות שאינם ניתנים לעריכה" -#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:553 +#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:487 #: core/graphene/object_types.py:117 core/graphene/object_types.py:207 #: core/graphene/object_types.py:509 msgid "SEO Meta snapshot" @@ -562,47 +562,7 @@ msgstr "הצג את כל המוצרים (תצוגה פשוטה)" msgid "(exact) Product UUID" msgstr "(מדויק) UUID של המוצר" -#: core/docs/drf/viewsets.py:384 -msgid "(icontains) Product name" -msgstr "(icontains) שם המוצר" - -#: core/docs/drf/viewsets.py:390 -msgid "(list) Category names, case-insensitive" -msgstr "(רשימה) שמות קטגוריות, ללא הבחנה בין אותיות גדולות וקטנות" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Category UUID" -msgstr "(מדויק) UUID של קטגוריה" - -#: core/docs/drf/viewsets.py:402 -msgid "(list) Tag names, case-insensitive" -msgstr "(רשימה) שמות תגיות, ללא הבחנה בין אותיות גדולות וקטנות" - -#: core/docs/drf/viewsets.py:408 -msgid "(gte) Minimum stock price" -msgstr "(gte) מחיר מניה מינימלי" - -#: core/docs/drf/viewsets.py:414 -msgid "(lte) Maximum stock price" -msgstr "(lte) מחיר מניה מקסימלי" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Only active products" -msgstr "(מדויק) רק מוצרים פעילים" - -#: core/docs/drf/viewsets.py:426 -msgid "(iexact) Brand name" -msgstr "(iexact) שם המותג" - -#: core/docs/drf/viewsets.py:438 -msgid "(gt) Minimum stock quantity" -msgstr "(gt) כמות מלאי מינימלית" - -#: core/docs/drf/viewsets.py:444 -msgid "(exact) Digital vs. physical" -msgstr "(מדויק) דיגיטלי לעומת פיזי" - -#: core/docs/drf/viewsets.py:451 +#: core/docs/drf/viewsets.py:385 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -610,244 +570,248 @@ msgstr "" "רשימה של שדות למיון, מופרדים בפסיקים. קידומת `-` למיון יורד. **מותר:** uuid," " rating, name, slug, created, modified, price, random" -#: core/docs/drf/viewsets.py:465 core/docs/drf/viewsets.py:466 +#: core/docs/drf/viewsets.py:399 core/docs/drf/viewsets.py:400 msgid "retrieve a single product (detailed view)" msgstr "איתור מוצר בודד (תצוגה מפורטת)" -#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:495 -#: core/docs/drf/viewsets.py:511 core/docs/drf/viewsets.py:527 -#: core/docs/drf/viewsets.py:543 core/docs/drf/viewsets.py:559 +#: core/docs/drf/viewsets.py:405 core/docs/drf/viewsets.py:429 +#: core/docs/drf/viewsets.py:445 core/docs/drf/viewsets.py:461 +#: core/docs/drf/viewsets.py:477 core/docs/drf/viewsets.py:493 msgid "Product UUID or slug" msgstr "UUID או Slug של המוצר" -#: core/docs/drf/viewsets.py:481 core/docs/drf/viewsets.py:482 +#: core/docs/drf/viewsets.py:415 core/docs/drf/viewsets.py:416 msgid "create a product" msgstr "צור מוצר" -#: core/docs/drf/viewsets.py:489 core/docs/drf/viewsets.py:490 +#: core/docs/drf/viewsets.py:423 core/docs/drf/viewsets.py:424 msgid "rewrite an existing product, preserving non-editable fields" msgstr "שכתוב מוצר קיים, תוך שמירה על שדות שאינם ניתנים לעריכה" -#: core/docs/drf/viewsets.py:505 core/docs/drf/viewsets.py:506 +#: core/docs/drf/viewsets.py:439 core/docs/drf/viewsets.py:440 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "עדכן שדות מסוימים של מוצר קיים, תוך שמירה על שדות שאינם ניתנים לעריכה" -#: core/docs/drf/viewsets.py:521 core/docs/drf/viewsets.py:522 +#: core/docs/drf/viewsets.py:455 core/docs/drf/viewsets.py:456 msgid "delete a product" msgstr "מחק מוצר" -#: core/docs/drf/viewsets.py:537 core/docs/drf/viewsets.py:538 +#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:472 msgid "lists all permitted feedbacks for a product" msgstr "מפרט את כל המשובים המותרים עבור מוצר" -#: core/docs/drf/viewsets.py:554 +#: core/docs/drf/viewsets.py:488 msgid "returns a snapshot of the product's SEO meta data" msgstr "מחזיר תמונת מצב של מטא-נתוני SEO של המוצר" -#: core/docs/drf/viewsets.py:572 +#: core/docs/drf/viewsets.py:506 msgid "list all addresses" msgstr "רשימת כל הכתובות" -#: core/docs/drf/viewsets.py:579 +#: core/docs/drf/viewsets.py:513 msgid "retrieve a single address" msgstr "איתור כתובת אחת" -#: core/docs/drf/viewsets.py:586 +#: core/docs/drf/viewsets.py:520 msgid "create a new address" msgstr "צור כתובת חדשה" -#: core/docs/drf/viewsets.py:594 +#: core/docs/drf/viewsets.py:528 msgid "delete an address" msgstr "מחק כתובת" -#: core/docs/drf/viewsets.py:601 +#: core/docs/drf/viewsets.py:535 msgid "update an entire address" msgstr "עדכון כתובת שלמה" -#: core/docs/drf/viewsets.py:609 +#: core/docs/drf/viewsets.py:543 msgid "partially update an address" msgstr "עדכון חלקי של כתובת" -#: core/docs/drf/viewsets.py:617 +#: core/docs/drf/viewsets.py:551 msgid "autocomplete address suggestions" msgstr "השלמת כתובת אוטומטית" -#: core/docs/drf/viewsets.py:622 +#: core/docs/drf/viewsets.py:556 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "מחרוזת שאילתת נתונים גולמיים, אנא הוסף נתונים מנקודת הקצה של geo-IP" -#: core/docs/drf/viewsets.py:628 +#: core/docs/drf/viewsets.py:562 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "מגביל את כמות התוצאות, 1 < limit < 10, ברירת מחדל: 5" -#: core/docs/drf/viewsets.py:641 +#: core/docs/drf/viewsets.py:575 msgid "list all feedbacks (simple view)" msgstr "הצג את כל המשובים (תצוגה פשוטה)" -#: core/docs/drf/viewsets.py:645 +#: core/docs/drf/viewsets.py:579 msgid "retrieve a single feedback (detailed view)" msgstr "איתור משוב בודד (תצוגה מפורטת)" -#: core/docs/drf/viewsets.py:649 +#: core/docs/drf/viewsets.py:583 msgid "create a feedback" msgstr "ליצור משוב" -#: core/docs/drf/viewsets.py:653 +#: core/docs/drf/viewsets.py:587 msgid "delete a feedback" msgstr "מחק משוב" -#: core/docs/drf/viewsets.py:657 +#: core/docs/drf/viewsets.py:591 msgid "rewrite an existing feedback saving non-editables" msgstr "לשכתב משוב קיים תוך שמירת פריטים שאינם ניתנים לעריכה" -#: core/docs/drf/viewsets.py:661 +#: core/docs/drf/viewsets.py:595 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "לשכתב כמה שדות של משוב קיים תוך שמירת שדות שאינם ניתנים לעריכה" -#: core/docs/drf/viewsets.py:668 +#: core/docs/drf/viewsets.py:602 msgid "list all order–product relations (simple view)" msgstr "רשימת כל קשרי ההזמנות-מוצרים (תצוגה פשוטה)" -#: core/docs/drf/viewsets.py:675 +#: core/docs/drf/viewsets.py:609 msgid "retrieve a single order–product relation (detailed view)" msgstr "איתור קשר יחיד בין הזמנה למוצר (תצוגה מפורטת)" -#: core/docs/drf/viewsets.py:682 +#: core/docs/drf/viewsets.py:616 msgid "create a new order–product relation" msgstr "יצירת קשר חדש בין הזמנה למוצר" -#: core/docs/drf/viewsets.py:689 +#: core/docs/drf/viewsets.py:623 msgid "replace an existing order–product relation" msgstr "החלפת קשר בין הזמנה למוצר קיים" -#: core/docs/drf/viewsets.py:696 +#: core/docs/drf/viewsets.py:630 msgid "partially update an existing order–product relation" msgstr "עדכון חלקי של קשר בין הזמנה למוצר קיים" -#: core/docs/drf/viewsets.py:703 +#: core/docs/drf/viewsets.py:637 msgid "delete an order–product relation" msgstr "מחיקת קשר בין הזמנה למוצר" -#: core/docs/drf/viewsets.py:710 +#: core/docs/drf/viewsets.py:644 msgid "add or remove feedback on an order–product relation" msgstr "הוספה או הסרה של משוב על קשר בין הזמנה למוצר" -#: core/elasticsearch/__init__.py:105 +#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 msgid "no search term provided." msgstr "לא צויין מונח חיפוש." -#: core/filters.py:64 core/filters.py:594 core/filters.py:623 +#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +msgid "Search" +msgstr "חיפוש" + +#: core/filters.py:66 core/filters.py:554 core/filters.py:583 msgid "UUID" msgstr "UUID" -#: core/filters.py:65 core/filters.py:429 core/filters.py:560 +#: core/filters.py:67 core/filters.py:399 core/filters.py:526 msgid "Name" msgstr "שם" -#: core/filters.py:66 core/filters.py:562 +#: core/filters.py:68 core/filters.py:528 msgid "Categories" msgstr "קטגוריות" -#: core/filters.py:68 +#: core/filters.py:70 msgid "Categories Slugs" msgstr "קטגוריות שבלולים" -#: core/filters.py:69 core/filters.py:437 +#: core/filters.py:71 core/filters.py:407 msgid "Tags" msgstr "תגיות" -#: core/filters.py:70 +#: core/filters.py:72 msgid "Min Price" msgstr "מחיר מינימום" -#: core/filters.py:71 +#: core/filters.py:73 msgid "Max Price" msgstr "מחיר מקסימלי" -#: core/filters.py:72 +#: core/filters.py:74 msgid "Is Active" msgstr "פעיל" -#: core/filters.py:73 +#: core/filters.py:75 msgid "Brand" msgstr "מותג" -#: core/filters.py:74 +#: core/filters.py:76 msgid "Attributes" msgstr "תכונות" -#: core/filters.py:75 +#: core/filters.py:77 msgid "Quantity" msgstr "כמות" -#: core/filters.py:76 core/filters.py:431 core/filters.py:561 -#: core/models.py:287 core/models.py:381 core/models.py:534 +#: core/filters.py:78 core/filters.py:401 core/filters.py:527 +#: core/models.py:287 core/models.py:369 core/models.py:522 msgid "Slug" msgstr "שבלול" -#: core/filters.py:77 +#: core/filters.py:79 msgid "Is Digital" msgstr "האם דיגיטלי" -#: core/filters.py:78 +#: core/filters.py:80 msgid "Include sub-categories" msgstr "כלול תת-קטגוריות" -#: core/filters.py:81 +#: core/filters.py:83 msgid "Include personal ordered" msgstr "כלול מוצרים שהוזמנו באופן אישי" -#: core/filters.py:83 core/models.py:538 +#: core/filters.py:85 core/models.py:526 msgid "SKU" msgstr "מספר קטלוגי" -#: core/filters.py:166 +#: core/filters.py:161 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "חייב להיות category_uuid כדי להשתמש בדגל include_subcategories" -#: core/filters.py:356 +#: core/filters.py:324 msgid "Search (ID, product name or part number)" msgstr "חיפוש (מזהה, שם מוצר או מספר חלק)" -#: core/filters.py:359 +#: core/filters.py:327 msgid "Bought after (inclusive)" msgstr "נקנה לאחר (כולל)" -#: core/filters.py:360 +#: core/filters.py:328 msgid "Bought before (inclusive)" msgstr "נקנה לפני כן (כולל)" -#: core/filters.py:363 core/filters.py:410 core/filters.py:625 +#: core/filters.py:331 core/filters.py:378 core/filters.py:585 msgid "User email" msgstr "דוא\"ל המשתמש" -#: core/filters.py:364 core/filters.py:411 core/filters.py:603 -#: core/filters.py:624 +#: core/filters.py:332 core/filters.py:379 core/filters.py:563 +#: core/filters.py:584 msgid "User UUID" msgstr "UUID של המשתמש" -#: core/filters.py:365 +#: core/filters.py:333 msgid "Status" msgstr "סטטוס" -#: core/filters.py:369 +#: core/filters.py:337 msgid "Human Readable ID" msgstr "מזהה קריא על ידי בני אדם" -#: core/filters.py:430 +#: core/filters.py:400 msgid "Parent" msgstr "הורה" -#: core/filters.py:434 +#: core/filters.py:404 msgid "Whole category(has at least 1 product or not)" msgstr "קטגוריה שלמה (יש לפחות מוצר אחד או לא)" -#: core/filters.py:438 +#: core/filters.py:408 msgid "Level" msgstr "רמה" -#: core/filters.py:598 +#: core/filters.py:558 msgid "Product UUID" msgstr "UUID של המוצר" @@ -902,7 +866,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "אנא ספק את order_uuid או order_hr_id - אחד מהם בלבד!" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:821 +#: core/graphene/mutations.py:527 core/viewsets.py:839 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "סוג שגוי הגיע משיטת order.buy(): {type(instance)!s}" @@ -963,37 +927,37 @@ msgstr "אנא שלחו את התכונות כמחרוזת מעוצבת כך: at msgid "add or delete a feedback for orderproduct" msgstr "הוספה או מחיקה של משוב עבור המוצר שהוזמן" -#: core/graphene/mutations.py:555 +#: core/graphene/mutations.py:556 msgid "action must be either `add` or `remove`" msgstr "הפעולה חייבת להיות `add` או `remove`!" -#: core/graphene/mutations.py:558 +#: core/graphene/mutations.py:559 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "המוצר {order_product_uuid} לא נמצא!" -#: core/graphene/mutations.py:621 +#: core/graphene/mutations.py:622 msgid "original address string provided by the user" msgstr "מחרוזת הכתובת המקורית שסופקה על ידי המשתמש" -#: core/graphene/mutations.py:655 core/models.py:896 core/models.py:909 -#: core/models.py:1348 core/models.py:1377 core/models.py:1402 -#: core/viewsets.py:824 +#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 +#: core/models.py:1234 core/models.py:1263 core/models.py:1288 +#: core/viewsets.py:842 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} אינו קיים: {uuid}!" -#: core/graphene/mutations.py:668 +#: core/graphene/mutations.py:669 msgid "limit must be between 1 and 10" msgstr "הגבול חייב להיות בין 1 ל-10" -#: core/graphene/mutations.py:713 +#: core/graphene/mutations.py:714 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - עובד כמו קסם" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:666 core/models.py:1234 -#: core/models.py:1809 +#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 +#: core/models.py:1686 msgid "attributes" msgstr "תכונות" @@ -1006,11 +970,11 @@ msgid "groups of attributes" msgstr "קבוצות תכונות" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:620 +#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:612 msgid "categories" msgstr "קטגוריות" -#: core/graphene/object_types.py:124 core/models.py:395 +#: core/graphene/object_types.py:124 core/models.py:383 msgid "brands" msgstr "מותגים" @@ -1065,7 +1029,7 @@ msgid "represents feedback from a user." msgstr "מייצג משוב ממשתמש." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1228 +#: core/models.py:1110 msgid "notifications" msgstr "הודעות" @@ -1073,7 +1037,7 @@ msgstr "הודעות" msgid "download url for this order product if applicable" msgstr "כתובת URL להורדת המוצר שהוזמן, אם רלוונטי" -#: core/graphene/object_types.py:400 core/models.py:1938 +#: core/graphene/object_types.py:400 core/models.py:1791 msgid "feedback" msgstr "משוב" @@ -1081,7 +1045,7 @@ msgstr "משוב" msgid "a list of order products in this order" msgstr "רשימת המוצרים בהזמנה זו" -#: core/graphene/object_types.py:436 core/models.py:1198 +#: core/graphene/object_types.py:436 core/models.py:1080 msgid "billing address" msgstr "כתובת לחיוב" @@ -1108,7 +1072,7 @@ msgstr "האם כל המוצרים בהזמנה הם דיגיטליים?" msgid "transactions for this order" msgstr "עסקאות עבור הזמנה זו" -#: core/graphene/object_types.py:465 core/models.py:1262 +#: core/graphene/object_types.py:465 core/models.py:1144 msgid "orders" msgstr "הזמנות" @@ -1120,15 +1084,15 @@ msgstr "כתובת URL של התמונה" msgid "product's images" msgstr "תמונות המוצר" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:477 +#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 msgid "category" msgstr "קטגוריה" -#: core/graphene/object_types.py:502 core/models.py:1939 +#: core/graphene/object_types.py:502 core/models.py:1792 msgid "feedbacks" msgstr "משובים" -#: core/graphene/object_types.py:503 core/models.py:394 core/models.py:486 +#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 msgid "brand" msgstr "מותג" @@ -1160,7 +1124,7 @@ msgstr "מספר המשובים" msgid "only available for personal orders" msgstr "מוצרים זמינים רק להזמנות אישיות" -#: core/graphene/object_types.py:534 core/models.py:548 +#: core/graphene/object_types.py:534 core/models.py:536 msgid "products" msgstr "מוצרים" @@ -1172,7 +1136,7 @@ msgstr "קודי קידום מכירות" msgid "products on sale" msgstr "מוצרים במבצע" -#: core/graphene/object_types.py:651 core/models.py:843 +#: core/graphene/object_types.py:651 core/models.py:784 msgid "promotions" msgstr "מבצעים" @@ -1180,7 +1144,7 @@ msgstr "מבצעים" msgid "vendor" msgstr "ספק" -#: core/graphene/object_types.py:656 core/models.py:547 +#: core/graphene/object_types.py:656 core/models.py:535 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1188,11 +1152,11 @@ msgstr "ספק" msgid "product" msgstr "מוצר" -#: core/graphene/object_types.py:667 core/models.py:868 +#: core/graphene/object_types.py:667 core/models.py:807 msgid "wishlisted products" msgstr "מוצרים ברשימת המשאלות" -#: core/graphene/object_types.py:673 core/models.py:885 +#: core/graphene/object_types.py:673 core/models.py:824 msgid "wishlists" msgstr "רשימות משאלות" @@ -1200,7 +1164,7 @@ msgstr "רשימות משאלות" msgid "tagged products" msgstr "מוצרים מתויגים" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:492 +#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 msgid "product tags" msgstr "תגיות מוצר" @@ -1308,7 +1272,7 @@ msgstr "קבוצת תכונות הורה" msgid "attribute group's name" msgstr "שם קבוצת התכונות" -#: core/models.py:100 core/models.py:628 +#: core/models.py:100 core/models.py:620 msgid "attribute group" msgstr "קבוצת תכונות" @@ -1462,51 +1426,63 @@ msgstr "תיאור הקטגוריה" msgid "tags that help describe or group this category" msgstr "תגיות המסייעות לתאר או לקבץ קטגוריה זו" -#: core/models.py:299 core/models.py:387 +#: core/models.py:299 core/models.py:375 msgid "priority" msgstr "עדיפות" -#: core/models.py:340 +#: core/models.py:318 +msgid "" +"Represents a Brand object in the system. This class handles information and " +"attributes related to a brand, including its name, logos, description, " +"associated categories, a unique slug, and priority order. It allows for the " +"organization and representation of brand-related data within the " +"application." +msgstr "" +"מייצג אובייקט מותג במערכת. מחלקה זו מטפלת במידע ובתכונות הקשורים למותג, כולל" +" שמו, לוגואים, תיאור, קטגוריות קשורות, סלוגן ייחודי וסדר עדיפות. היא מאפשרת " +"ארגון וייצוג של נתונים הקשורים למותג בתוך היישום." + +#: core/models.py:328 msgid "name of this brand" msgstr "שם המותג" -#: core/models.py:341 +#: core/models.py:329 msgid "brand name" msgstr "שם המותג" -#: core/models.py:348 +#: core/models.py:336 msgid "upload a logo representing this brand" msgstr "העלה לוגו המייצג את המותג הזה" -#: core/models.py:350 +#: core/models.py:338 msgid "brand small image" msgstr "תמונה קטנה של המותג" -#: core/models.py:356 +#: core/models.py:344 msgid "upload a big logo representing this brand" msgstr "העלה לוגו גדול המייצג את המותג הזה" -#: core/models.py:358 +#: core/models.py:346 msgid "brand big image" msgstr "תמונה גדולה של המותג" -#: core/models.py:363 +#: core/models.py:351 msgid "add a detailed description of the brand" msgstr "הוסף תיאור מפורט של המותג" -#: core/models.py:364 +#: core/models.py:352 msgid "brand description" msgstr "תיאור המותג" -#: core/models.py:369 +#: core/models.py:357 msgid "optional categories that this brand is associated with" msgstr "קטגוריות אופציונליות שהמותג הזה קשור אליהן" -#: core/models.py:370 +#: core/models.py:358 msgid "associated categories" msgstr "קטגוריות" -#: core/models.py:400 +#: core/models.py:388 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1520,68 +1496,68 @@ msgstr "" "רכישה, כמות, SKU ונכסים דיגיטליים. היא מהווה חלק ממערכת ניהול המלאי ומאפשרת " "מעקב והערכה של מוצרים הזמינים מספקים שונים." -#: core/models.py:412 +#: core/models.py:400 msgid "the vendor supplying this product stock" msgstr "הספק המספק את מלאי המוצר הזה" -#: core/models.py:413 +#: core/models.py:401 msgid "associated vendor" msgstr "ספק נלווה" -#: core/models.py:417 +#: core/models.py:405 msgid "final price to the customer after markups" msgstr "המחיר הסופי ללקוח לאחר תוספות" -#: core/models.py:418 +#: core/models.py:406 msgid "selling price" msgstr "מחיר המכירה" -#: core/models.py:423 +#: core/models.py:411 msgid "the product associated with this stock entry" msgstr "המוצר הקשור לרישום המלאי הזה" -#: core/models.py:424 core/models.py:708 core/models.py:765 -#: core/models.py:1709 +#: core/models.py:412 core/models.py:683 core/models.py:730 +#: core/models.py:1583 msgid "associated product" msgstr "מוצר נלווה" -#: core/models.py:431 +#: core/models.py:419 msgid "the price paid to the vendor for this product" msgstr "המחיר ששולם למוכר עבור מוצר זה" -#: core/models.py:432 +#: core/models.py:420 msgid "vendor purchase price" msgstr "מחיר הרכישה של הספק" -#: core/models.py:436 +#: core/models.py:424 msgid "available quantity of the product in stock" msgstr "כמות המוצר הזמינה במלאי" -#: core/models.py:437 +#: core/models.py:425 msgid "quantity in stock" msgstr "כמות במלאי" -#: core/models.py:441 +#: core/models.py:429 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU שהוקצה על ידי הספק לזיהוי המוצר" -#: core/models.py:442 +#: core/models.py:430 msgid "vendor sku" msgstr "מק\"ט הספק" -#: core/models.py:448 +#: core/models.py:436 msgid "digital file associated with this stock if applicable" msgstr "קובץ דיגיטלי הקשור למלאי זה, אם רלוונטי" -#: core/models.py:449 +#: core/models.py:437 msgid "digital file" msgstr "קובץ דיגיטלי" -#: core/models.py:458 +#: core/models.py:446 msgid "stock entries" msgstr "רישומים במלאי" -#: core/models.py:463 +#: core/models.py:451 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1599,55 +1575,55 @@ msgstr "" "ומנהלת את המטמון עבור תכונות הנגישות בתדירות גבוהה כדי לשפר את הביצועים. הוא" " משמש להגדרה ולעיבוד נתוני מוצר והמידע הקשור אליו בתוך יישום." -#: core/models.py:476 +#: core/models.py:464 msgid "category this product belongs to" msgstr "הקטגוריה אליה שייך מוצר זה" -#: core/models.py:485 +#: core/models.py:473 msgid "optionally associate this product with a brand" msgstr "באופן אופציונלי, ניתן לשייך מוצר זה למותג" -#: core/models.py:491 +#: core/models.py:479 msgid "tags that help describe or group this product" msgstr "תגיות המסייעות לתאר או לקבץ מוצר זה" -#: core/models.py:496 +#: core/models.py:484 msgid "indicates whether this product is digitally delivered" msgstr "מציין אם מוצר זה נמסר באופן דיגיטלי" -#: core/models.py:497 +#: core/models.py:485 msgid "is product digital" msgstr "האם המוצר הוא דיגיטלי?" -#: core/models.py:503 +#: core/models.py:491 msgid "provide a clear identifying name for the product" msgstr "ספק שם מזהה ברור למוצר" -#: core/models.py:504 +#: core/models.py:492 msgid "product name" msgstr "שם המוצר" -#: core/models.py:509 core/models.py:831 +#: core/models.py:497 core/models.py:772 msgid "add a detailed description of the product" msgstr "הוסף תיאור מפורט של המוצר" -#: core/models.py:510 +#: core/models.py:498 msgid "product description" msgstr "תיאור המוצר" -#: core/models.py:517 +#: core/models.py:505 msgid "part number for this product" msgstr "מספר חלק עבור מוצר זה" -#: core/models.py:518 +#: core/models.py:506 msgid "part number" msgstr "מספר חלק" -#: core/models.py:537 +#: core/models.py:525 msgid "stock keeping unit for this product" msgstr "יחידת אחסון מלאי עבור מוצר זה" -#: core/models.py:607 +#: core/models.py:599 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 " @@ -1662,304 +1638,398 @@ msgstr "" "מספר שלם, מספר צף, בוליאני, מערך ואובייקט. הדבר מאפשר בניית נתונים דינמית " "וגמישה." -#: core/models.py:619 +#: core/models.py:611 msgid "category of this attribute" msgstr "קטגוריה של תכונה זו" -#: core/models.py:627 +#: core/models.py:619 msgid "group of this attribute" msgstr "קבוצה של תכונה זו" -#: core/models.py:633 +#: core/models.py:625 msgid "string" msgstr "מחרוזת" -#: core/models.py:634 +#: core/models.py:626 msgid "integer" msgstr "יושרה" -#: core/models.py:635 +#: core/models.py:627 msgid "float" msgstr "צף" -#: core/models.py:636 +#: core/models.py:628 msgid "boolean" msgstr "בוליאני" -#: core/models.py:637 +#: core/models.py:629 msgid "array" msgstr "מערך" -#: core/models.py:638 +#: core/models.py:630 msgid "object" msgstr "אובייקט" -#: core/models.py:640 +#: core/models.py:632 msgid "type of the attribute's value" msgstr "סוג ערך התכונה" -#: core/models.py:641 +#: core/models.py:633 msgid "value type" msgstr "סוג ערך" -#: core/models.py:646 +#: core/models.py:638 msgid "name of this attribute" msgstr "שם התכונה הזו" -#: core/models.py:647 +#: core/models.py:639 msgid "attribute's name" msgstr "שם התכונה" -#: core/models.py:653 +#: core/models.py:645 msgid "is filterable" msgstr "ניתן לסינון" -#: core/models.py:654 +#: core/models.py:646 msgid "designates whether this attribute can be used for filtering or not" msgstr "מציין אם ניתן להשתמש בתכונה זו לצורך סינון או לא" -#: core/models.py:665 core/models.py:700 +#: core/models.py:657 core/models.py:675 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "תכונה" -#: core/models.py:699 +#: core/models.py:663 +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:674 msgid "attribute of this value" msgstr "תכונה של ערך זה" -#: core/models.py:707 +#: core/models.py:682 msgid "the specific product associated with this attribute's value" msgstr "המוצר הספציפי הקשור לערך של תכונה זו" -#: core/models.py:713 +#: core/models.py:688 msgid "the specific value for this attribute" msgstr "הערך הספציפי עבור תכונה זו" -#: core/models.py:747 +#: core/models.py:701 +msgid "" +"Represents a product image associated with a product in the system. This " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " +"determining their display order. It also includes an accessibility feature " +"with alternative text for the images." +msgstr "" +"מייצג תמונת מוצר הקשורה למוצר במערכת. מחלקה זו נועדה לנהל תמונות של מוצרים, " +"כולל פונקציונליות להעלאת קבצי תמונה, שיוכם למוצרים ספציפיים וקביעת סדר " +"התצוגה שלהם. היא כוללת גם תכונת נגישות עם טקסט חלופי לתמונות." + +#: core/models.py:712 msgid "provide alternative text for the image for accessibility" msgstr "ספק טקסט חלופי לתמונה לצורך נגישות" -#: core/models.py:748 +#: core/models.py:713 msgid "image alt text" msgstr "טקסט חלופי לתמונה" -#: core/models.py:751 +#: core/models.py:716 msgid "upload the image file for this product" msgstr "העלה את קובץ התמונה עבור מוצר זה" -#: core/models.py:752 core/models.py:777 +#: core/models.py:717 core/models.py:742 msgid "product image" msgstr "תמונת מוצר" -#: core/models.py:758 +#: core/models.py:723 msgid "determines the order in which images are displayed" msgstr "קובע את סדר הצגת התמונות" -#: core/models.py:759 +#: core/models.py:724 msgid "display priority" msgstr "עדיפות תצוגה" -#: core/models.py:764 +#: core/models.py:729 msgid "the product that this image represents" msgstr "המוצר שהדימוי הזה מייצג" -#: core/models.py:778 +#: core/models.py:743 msgid "product images" msgstr "תמונות מוצרים" -#: core/models.py:819 +#: core/models.py:748 +msgid "" +"Represents a promotional campaign for products with a discount. This class " +"is used to define and manage promotional campaigns that offer a percentage-" +"based discount for products. The class includes attributes for setting the " +"discount rate, providing details about the promotion, and linking it to the " +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." +msgstr "" +"מייצג קמפיין קידום מכירות למוצרים בהנחה. מחלקה זו משמשת להגדרת וניהול " +"קמפיינים לקידום מכירות המציעים הנחה באחוזים על מוצרים. המחלקה כוללת תכונות " +"להגדרת שיעור ההנחה, מתן פרטים על המבצע וקישורו למוצרים הרלוונטיים. היא " +"משתלבת בקטלוג המוצרים כדי לקבוע את הפריטים המושפעים בקמפיין." + +#: core/models.py:760 msgid "percentage discount for the selected products" msgstr "אחוז ההנחה עבור המוצרים שנבחרו" -#: core/models.py:820 +#: core/models.py:761 msgid "discount percentage" msgstr "אחוז ההנחה" -#: core/models.py:825 +#: core/models.py:766 msgid "provide a unique name for this promotion" msgstr "ציין שם ייחודי לקידום מכירות זה" -#: core/models.py:826 +#: core/models.py:767 msgid "promotion name" msgstr "שם המבצע" -#: core/models.py:832 +#: core/models.py:773 msgid "promotion description" msgstr "תיאור המבצע" -#: core/models.py:837 +#: core/models.py:778 msgid "select which products are included in this promotion" msgstr "בחר אילו מוצרים כלולים במבצע זה" -#: core/models.py:838 +#: core/models.py:779 msgid "included products" msgstr "מוצרים כלולים" -#: core/models.py:842 +#: core/models.py:783 msgid "promotion" msgstr "קידום" -#: core/models.py:867 +#: core/models.py:794 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"class provides functionality to manage a collection of products, supporting " +"operations such as adding and removing products, as well as supporting " +"operations for adding and removing multiple products at once." +msgstr "" +"מייצג את רשימת המשאלות של המשתמש לאחסון וניהול מוצרים רצויים. המחלקה מספקת " +"פונקציונליות לניהול אוסף מוצרים, תומכת בפעולות כגון הוספה והסרה של מוצרים, " +"וכן תומכת בפעולות להוספה והסרה של מספר מוצרים בבת אחת." + +#: core/models.py:806 msgid "products that the user has marked as wanted" msgstr "מוצרים שהמשתמש סימן כנחשקים" -#: core/models.py:875 +#: core/models.py:814 msgid "user who owns this wishlist" msgstr "המשתמש שבבעלותו רשימת המשאלות הזו" -#: core/models.py:876 +#: core/models.py:815 msgid "wishlist owner" msgstr "בעל רשימת המשאלות" -#: core/models.py:884 +#: core/models.py:823 msgid "wishlist" msgstr "רשימת משאלות" -#: core/models.py:951 +#: core/models.py:865 +msgid "" +"Represents a documentary record tied to a product. This class is used to " +"store information about documentaries related to specific products, " +"including file uploads and their metadata. It contains methods and " +"properties to handle the file type and storage path for the documentary " +"files. It extends functionality from specific mixins and provides additional" +" custom features." +msgstr "" +"מייצג תיעוד הקשור למוצר. מחלקה זו משמשת לאחסון מידע על תיעוד הקשור למוצרים " +"ספציפיים, כולל העלאת קבצים ומטא-נתונים שלהם. היא מכילה שיטות ותכונות לטיפול " +"בסוג הקובץ ובנתיב האחסון של קבצי התיעוד. היא מרחיבה את הפונקציונליות של " +"מיקסים ספציפיים ומספקת תכונות מותאמות אישית נוספות." + +#: core/models.py:878 msgid "documentary" msgstr "סרט תיעודי" -#: core/models.py:952 +#: core/models.py:879 msgid "documentaries" msgstr "סרטים תיעודיים" -#: core/models.py:962 +#: core/models.py:889 msgid "unresolved" msgstr "לא פתור" -#: core/models.py:1008 +#: core/models.py:894 +msgid "" +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." +msgstr "" +"מייצג ישות כתובת הכוללת פרטים על מיקום וקשרים עם משתמש. מספק פונקציונליות " +"לאחסון נתונים גיאוגרפיים וכתובות, וכן אינטגרציה עם שירותי קידוד גיאוגרפי. " +"מחלקה זו נועדה לאחסן מידע מפורט על כתובות, כולל רכיבים כגון רחוב, עיר, אזור," +" מדינה ומיקום גיאוגרפי (קו אורך וקו רוחב). היא תומכת באינטגרציה עם ממשקי API" +" לקידוד גיאוגרפי, ומאפשרת אחסון של תגובות API גולמיות לעיבוד או בדיקה " +"נוספים. הסוג גם מאפשר לקשר כתובת למשתמש, מה שמקל על טיפול בנתונים מותאמים " +"אישית." + +#: core/models.py:909 msgid "address line for the customer" msgstr "שורת כתובת עבור הלקוח" -#: core/models.py:1009 +#: core/models.py:910 msgid "address line" msgstr "שורת כתובת" -#: core/models.py:1011 +#: core/models.py:912 msgid "street" msgstr "רחוב" -#: core/models.py:1012 +#: core/models.py:913 msgid "district" msgstr "מחוז" -#: core/models.py:1013 +#: core/models.py:914 msgid "city" msgstr "עיר" -#: core/models.py:1014 +#: core/models.py:915 msgid "region" msgstr "אזור" -#: core/models.py:1015 +#: core/models.py:916 msgid "postal code" msgstr "מיקוד" -#: core/models.py:1016 +#: core/models.py:917 msgid "country" msgstr "מדינה" -#: core/models.py:1023 +#: core/models.py:924 msgid "geolocation point: (longitude, latitude)" msgstr "נקודת מיקום גיאוגרפי (אורך, רוחב)" -#: core/models.py:1026 +#: core/models.py:927 msgid "full JSON response from geocoder for this address" msgstr "תגובה JSON מלאה מ-geocoder עבור כתובת זו" -#: core/models.py:1031 +#: core/models.py:932 msgid "stored JSON response from the geocoding service" msgstr "תגובת JSON שמורה משירות הגיאו-קידוד" -#: core/models.py:1039 +#: core/models.py:940 msgid "address" msgstr "כתובת" -#: core/models.py:1040 +#: core/models.py:941 msgid "addresses" msgstr "כתובות" -#: core/models.py:1085 +#: core/models.py:953 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" +"מייצג קוד קידום מכירות שניתן להשתמש בו לקבלת הנחות, לניהול תוקפו, סוג ההנחה " +"והשימוש בו. מחלקת PromoCode מאחסנת פרטים אודות קוד קידום מכירות, כולל המזהה " +"הייחודי שלו, מאפייני ההנחה (סכום או אחוז), תקופת התוקף, המשתמש המשויך (אם " +"יש) ומצב השימוש בו. היא כוללת פונקציונליות לאימות והחלת קוד הקידום על הזמנה," +" תוך הקפדה על עמידה באילוצים." + +#: core/models.py:967 msgid "unique code used by a user to redeem a discount" msgstr "קוד ייחודי המשמש את המשתמש למימוש הנחה" -#: core/models.py:1086 +#: core/models.py:968 msgid "promo code identifier" msgstr "מזהה קוד קידום מכירות" -#: core/models.py:1093 +#: core/models.py:975 msgid "fixed discount amount applied if percent is not used" msgstr "סכום הנחה קבוע המוחל אם לא נעשה שימוש באחוזים" -#: core/models.py:1094 +#: core/models.py:976 msgid "fixed discount amount" msgstr "סכום הנחה קבוע" -#: core/models.py:1100 +#: core/models.py:982 msgid "percentage discount applied if fixed amount is not used" msgstr "אחוז ההנחה שיחול אם לא ייעשה שימוש בסכום הקבוע" -#: core/models.py:1101 +#: core/models.py:983 msgid "percentage discount" msgstr "אחוז ההנחה" -#: core/models.py:1106 +#: core/models.py:988 msgid "timestamp when the promocode expires" msgstr "חותמת זמן לתוקף הקוד המקדם מכירות" -#: core/models.py:1107 +#: core/models.py:989 msgid "end validity time" msgstr "תוקף הסוף" -#: core/models.py:1112 +#: core/models.py:994 msgid "timestamp from which this promocode is valid" msgstr "תאריך התחילה של תוקף קוד המבצע" -#: core/models.py:1113 +#: core/models.py:995 msgid "start validity time" msgstr "תחילת תוקף" -#: core/models.py:1118 +#: core/models.py:1000 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "חותמת זמן שבה נעשה שימוש בקוד המבצע, ריק אם טרם נעשה בו שימוש" -#: core/models.py:1119 +#: core/models.py:1001 msgid "usage timestamp" msgstr "חותמת זמן שימוש" -#: core/models.py:1124 +#: core/models.py:1006 msgid "user assigned to this promocode if applicable" msgstr "משתמש שהוקצה לקוד קידום מכירות זה, אם רלוונטי" -#: core/models.py:1125 +#: core/models.py:1007 msgid "assigned user" msgstr "משתמש שהוקצה" -#: core/models.py:1132 +#: core/models.py:1014 msgid "promo code" msgstr "קוד קידום מכירות" -#: core/models.py:1133 +#: core/models.py:1015 msgid "promo codes" msgstr "קודי קידום מכירות" -#: core/models.py:1140 +#: core/models.py:1022 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "" "יש להגדיר סוג הנחה אחד בלבד (סכום או אחוז), אך לא את שניהם או אף אחד מהם." -#: core/models.py:1155 +#: core/models.py:1037 msgid "promocode already used" msgstr "קוד המבצע כבר נוצל" -#: core/models.py:1171 +#: core/models.py:1053 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "סוג הנחה לא חוקי עבור קוד קידום מכירות {self.uuid}!" -#: core/models.py:1180 +#: core/models.py:1062 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 " @@ -1974,134 +2044,134 @@ msgstr "" "כתובות ולעדכן פרטי משלוח או חיוב. כמו כן, הפונקציונליות תומכת בניהול המוצרים" " במחזור החיים של ההזמנה." -#: core/models.py:1197 +#: core/models.py:1079 msgid "the billing address used for this order" msgstr "כתובת החיוב המשמשת להזמנה זו" -#: core/models.py:1205 +#: core/models.py:1087 msgid "optional promo code applied to this order" msgstr "קוד קידום מכירות אופציונלי שהוחל על הזמנה זו" -#: core/models.py:1206 +#: core/models.py:1088 msgid "applied promo code" msgstr "קוד קידום מכירות שהוחל" -#: core/models.py:1214 +#: core/models.py:1096 msgid "the shipping address used for this order" msgstr "כתובת המשלוח המשמשת להזמנה זו" -#: core/models.py:1215 +#: core/models.py:1097 msgid "shipping address" msgstr "כתובת למשלוח" -#: core/models.py:1221 +#: core/models.py:1103 msgid "current status of the order in its lifecycle" msgstr "הסטטוס הנוכחי של ההזמנה במחזור החיים שלה" -#: core/models.py:1222 +#: core/models.py:1104 msgid "order status" msgstr "סטטוס ההזמנה" -#: core/models.py:1227 core/models.py:1686 +#: core/models.py:1109 core/models.py:1560 msgid "json structure of notifications to display to users" msgstr "" "מבנה JSON של הודעות שיוצגו למשתמשים, בממשק המשתמש המנהלי נעשה שימוש בתצוגת " "טבלה." -#: core/models.py:1233 +#: core/models.py:1115 msgid "json representation of order attributes for this order" msgstr "ייצוג JSON של תכונות ההזמנה עבור הזמנה זו" -#: core/models.py:1239 +#: core/models.py:1121 msgid "the user who placed the order" msgstr "המשתמש שהזמין את ההזמנה" -#: core/models.py:1240 +#: core/models.py:1122 msgid "user" msgstr "משתמש" -#: core/models.py:1246 +#: core/models.py:1128 msgid "the timestamp when the order was finalized" msgstr "החותמת הזמן שבה הושלמה ההזמנה" -#: core/models.py:1247 +#: core/models.py:1129 msgid "buy time" msgstr "לקנות זמן" -#: core/models.py:1254 +#: core/models.py:1136 msgid "a human-readable identifier for the order" msgstr "מזהה קריא לאדם עבור ההזמנה" -#: core/models.py:1255 +#: core/models.py:1137 msgid "human readable id" msgstr "מזהה קריא על ידי בני אדם" -#: core/models.py:1261 +#: core/models.py:1143 msgid "order" msgstr "הזמנה" -#: core/models.py:1282 +#: core/models.py:1168 msgid "a user must have only one pending order at a time" msgstr "למשתמש יכול להיות רק הזמנה אחת בהמתנה בכל פעם!" -#: core/models.py:1316 +#: core/models.py:1202 msgid "you cannot add products to an order that is not a pending one" msgstr "לא ניתן להוסיף מוצרים להזמנה שאינה בהמתנה." -#: core/models.py:1321 +#: core/models.py:1207 msgid "you cannot add inactive products to order" msgstr "לא ניתן להוסיף מוצרים לא פעילים להזמנה" -#: core/models.py:1338 +#: core/models.py:1224 msgid "you cannot add more products than available in stock" msgstr "לא ניתן להוסיף מוצרים מעבר למלאי הזמין" -#: core/models.py:1360 core/models.py:1385 core/models.py:1393 +#: core/models.py:1246 core/models.py:1271 core/models.py:1279 msgid "you cannot remove products from an order that is not a pending one" msgstr "לא ניתן להסיר מוצרים מהזמנה שאינה בהמתנה." -#: core/models.py:1381 +#: core/models.py:1267 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} אינו קיים בשאילתה <{query}>!" -#: core/models.py:1413 +#: core/models.py:1299 msgid "promocode does not exist" msgstr "קוד קידום מכירות אינו קיים" -#: core/models.py:1419 +#: core/models.py:1305 msgid "you can only buy physical products with shipping address specified" msgstr "ניתן לרכוש מוצרים פיזיים רק עם ציון כתובת משלוח!" -#: core/models.py:1438 +#: core/models.py:1324 msgid "address does not exist" msgstr "הכתובת אינה קיימת" -#: core/models.py:1459 core/models.py:1528 +#: core/models.py:1345 core/models.py:1414 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "לא ניתן לבצע רכישה כרגע, אנא נסה שוב בעוד מספר דקות." -#: core/models.py:1462 core/models.py:1524 +#: core/models.py:1348 core/models.py:1410 msgid "invalid force value" msgstr "ערך כוח לא חוקי" -#: core/models.py:1468 core/models.py:1531 +#: core/models.py:1354 core/models.py:1417 msgid "you cannot purchase an empty order!" msgstr "אי אפשר לרכוש הזמנה ריקה!" -#: core/models.py:1487 +#: core/models.py:1373 msgid "you cannot buy an order without a user" msgstr "אי אפשר לקנות הזמנה בלי משתמש!" -#: core/models.py:1501 +#: core/models.py:1387 msgid "a user without a balance cannot buy with balance" msgstr "משתמש ללא יתרה לא יכול לקנות עם יתרה!" -#: core/models.py:1506 +#: core/models.py:1392 msgid "insufficient funds to complete the order" msgstr "אין מספיק כסף כדי להשלים את ההזמנה" -#: core/models.py:1540 +#: core/models.py:1426 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2109,147 +2179,194 @@ msgstr "" "אינך יכול לרכוש ללא רישום, אנא ספק את הפרטים הבאים: שם הלקוח, דוא\"ל הלקוח, " "מספר הטלפון של הלקוח" -#: core/models.py:1549 +#: core/models.py:1435 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "אמצעי תשלום לא חוקי: {payment_method} מ-{available_payment_methods}!" -#: core/models.py:1674 +#: core/models.py:1533 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" +"מייצג מוצרים הקשורים להזמנות ותכונותיהם. מודל OrderProduct שומר מידע על מוצר" +" שהוא חלק מהזמנה, כולל פרטים כגון מחיר הרכישה, כמות, תכונות המוצר ומצב. הוא " +"מנהל התראות למשתמש ולמנהלים ומטפל בפעולות כגון החזרת יתרת המוצר או הוספת " +"משוב. מודל זה מספק גם שיטות ותכונות התומכות בלוגיקה עסקית, כגון חישוב המחיר " +"הכולל או יצירת כתובת URL להורדה עבור מוצרים דיגיטליים. המודל משתלב עם מודלי " +"Order ו-Product ומאחסן הפניה אליהם." + +#: core/models.py:1548 msgid "the price paid by the customer for this product at purchase time" msgstr "המחיר ששילם הלקוח עבור מוצר זה בעת הרכישה" -#: core/models.py:1675 +#: core/models.py:1549 msgid "purchase price at order time" msgstr "מחיר הרכישה בעת ההזמנה" -#: core/models.py:1680 +#: core/models.py:1554 msgid "internal comments for admins about this ordered product" msgstr "הערות פנימיות למנהלים אודות מוצר זה שהוזמן" -#: core/models.py:1681 +#: core/models.py:1555 msgid "internal comments" msgstr "הערות פנימיות" -#: core/models.py:1687 +#: core/models.py:1561 msgid "user notifications" msgstr "הודעות למשתמשים" -#: core/models.py:1692 +#: core/models.py:1566 msgid "json representation of this item's attributes" msgstr "ייצוג JSON של תכונות פריט זה" -#: core/models.py:1693 +#: core/models.py:1567 msgid "ordered product attributes" msgstr "תכונות המוצר שהוזמן" -#: core/models.py:1698 +#: core/models.py:1572 msgid "reference to the parent order that contains this product" msgstr "הפניה להזמנה הראשית המכילה מוצר זה" -#: core/models.py:1699 +#: core/models.py:1573 msgid "parent order" msgstr "הזמנת הורים" -#: core/models.py:1708 +#: core/models.py:1582 msgid "the specific product associated with this order line" msgstr "המוצר הספציפי הקשור לשורת הזמנה זו" -#: core/models.py:1715 +#: core/models.py:1589 msgid "quantity of this specific product in the order" msgstr "כמות המוצר הספציפי הזה בהזמנה" -#: core/models.py:1716 +#: core/models.py:1590 msgid "product quantity" msgstr "כמות המוצר" -#: core/models.py:1723 +#: core/models.py:1597 msgid "current status of this product in the order" msgstr "הסטטוס הנוכחי של מוצר זה בהזמנה" -#: core/models.py:1724 +#: core/models.py:1598 msgid "product line status" msgstr "סטטוס קו המוצרים" -#: core/models.py:1784 +#: core/models.py:1661 msgid "order product must have an order" msgstr "המוצר בהזמנה חייב להיות קשור להזמנה!" -#: core/models.py:1786 +#: core/models.py:1663 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "פעולה שגויה שצוינה עבור משוב: {action}!" -#: core/models.py:1800 +#: core/models.py:1677 msgid "you cannot feedback an order which is not received" msgstr "אינך יכול להחזיר הזמנה שלא התקבלה" -#: core/models.py:1806 +#: core/models.py:1683 msgid "name" msgstr "שם" -#: core/models.py:1807 +#: core/models.py:1684 msgid "URL of the integration" msgstr "כתובת ה-URL של האינטגרציה" -#: core/models.py:1808 +#: core/models.py:1685 msgid "authentication credentials" msgstr "אישורי אימות" -#: core/models.py:1822 +#: core/models.py:1699 msgid "you can only have one default CRM provider" msgstr "ניתן להגדיר ספק CRM ברירת מחדל אחד בלבד" -#: core/models.py:1826 +#: core/models.py:1703 msgid "CRM" msgstr "CRM" -#: core/models.py:1827 +#: core/models.py:1704 msgid "CRMs" msgstr "CRM" -#: core/models.py:1839 +#: core/models.py:1716 msgid "order CRM link" msgstr "קישור CRM של ההזמנה" -#: core/models.py:1840 +#: core/models.py:1717 msgid "orders CRM links" msgstr "קישורי CRM של הזמנות" -#: core/models.py:1874 +#: core/models.py:1722 +msgid "" +"Represents the downloading functionality for digital assets associated with " +"orders. The DigitalAssetDownload class provides the ability to manage and " +"access downloads related to order products. It maintains information about " +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." +msgstr "" +"מייצג את פונקציונליות ההורדה של נכסים דיגיטליים הקשורים להזמנות. מחלקת " +"DigitalAssetDownload מספקת את היכולת לנהל ולהיכנס להורדות הקשורות למוצרים " +"שהוזמנו. היא שומרת מידע על המוצר שהוזמן, מספר ההורדות והאם הנכס גלוי לציבור." +" היא כוללת שיטה ליצירת כתובת URL להורדת הנכס כאשר ההזמנה הקשורה נמצאת במצב " +"'הושלמה'." + +#: core/models.py:1736 msgid "download" msgstr "הורדה" -#: core/models.py:1875 +#: core/models.py:1737 msgid "downloads" msgstr "הורדות" -#: core/models.py:1883 +#: core/models.py:1745 msgid "you can not download a digital asset for a non-finished order" msgstr "לא ניתן להוריד נכס דיגיטלי עבור הזמנה שלא הושלמה." -#: core/models.py:1913 +#: core/models.py:1754 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." +msgstr "" +"מנהל משוב משתמשים על מוצרים. מחלקה זו נועדה לאסוף ולאחסן משוב משתמשים על " +"מוצרים ספציפיים שרכשו. היא מכילה תכונות לאחסון הערות משתמשים, הפניה למוצר " +"הקשור בהזמנה ודירוג שהוקצה על ידי המשתמש. המחלקה משתמשת בשדות מסד נתונים כדי" +" למדל ולנהל ביעילות נתוני משוב." + +#: core/models.py:1766 msgid "user-provided comments about their experience with the product" msgstr "הערות שסיפקו המשתמשים על חווייתם עם המוצר" -#: core/models.py:1914 +#: core/models.py:1767 msgid "feedback comments" msgstr "הערות משוב" -#: core/models.py:1921 +#: core/models.py:1774 msgid "" "references the specific product in an order that this feedback is about" msgstr "מתייחס למוצר הספציפי בהזמנה שעליה מתייחס משוב זה." -#: core/models.py:1922 +#: core/models.py:1775 msgid "related order product" msgstr "מוצר בהזמנה קשורה" -#: core/models.py:1927 +#: core/models.py:1780 msgid "user-assigned rating for the product" msgstr "דירוג שהוקצה על ידי המשתמש למוצר" -#: core/models.py:1928 +#: core/models.py:1781 msgid "product rating" msgstr "דירוג מוצר" @@ -2452,17 +2569,17 @@ msgstr "ערך זמן המתנה לא חוקי, הוא חייב להיות בי msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | צור קשר יוזם" -#: core/utils/emailing.py:64 +#: core/utils/emailing.py:74 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | אישור הזמנה" -#: core/utils/emailing.py:99 +#: core/utils/emailing.py:109 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | הזמנה נמסרה" -#: core/utils/emailing.py:187 +#: core/utils/emailing.py:197 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | קוד קידום מכירות מוענק" @@ -2484,15 +2601,15 @@ msgstr "מידות התמונה לא יעלו על w{max_width} x h{max_height} msgid "invalid phone number format" msgstr "פורמט מספר טלפון לא חוקי" -#: core/views.py:481 +#: core/views.py:489 msgid "you can only download the digital asset once" msgstr "ניתן להוריד את הנכס הדיגיטלי פעם אחת בלבד" -#: core/views.py:539 +#: core/views.py:547 msgid "favicon not found" msgstr "לא נמצא סמל מועדף" -#: core/viewsets.py:1319 +#: core/viewsets.py:1357 #, python-brace-format msgid "Geocoding error: {e}" msgstr "שגיאת קידוד גיאוגרפי: {e}" diff --git a/core/locale/hi_IN/LC_MESSAGES/django.po b/core/locale/hi_IN/LC_MESSAGES/django.po index a03396bf..6c0be631 100644 --- a/core/locale/hi_IN/LC_MESSAGES/django.po +++ b/core/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" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:52+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -88,11 +88,11 @@ msgid "selected items have been deactivated." msgstr "" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:712 core/models.py:720 +#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 msgid "attribute value" msgstr "" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:721 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 msgid "attribute values" msgstr "" @@ -104,7 +104,7 @@ msgstr "" msgid "images" msgstr "" -#: core/admin.py:155 core/models.py:457 +#: core/admin.py:155 core/models.py:445 msgid "stock" msgstr "" @@ -112,11 +112,11 @@ msgstr "" msgid "stocks" msgstr "" -#: core/admin.py:166 core/models.py:1735 +#: core/admin.py:166 core/models.py:1609 msgid "order product" msgstr "" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1736 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 msgid "order products" msgstr "" @@ -312,7 +312,7 @@ msgstr "" msgid "rewrite some fields of an existing category saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:553 +#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:487 #: core/graphene/object_types.py:117 core/graphene/object_types.py:207 #: core/graphene/object_types.py:509 msgid "SEO Meta snapshot" @@ -548,291 +548,255 @@ msgstr "" msgid "(exact) Product UUID" msgstr "" -#: core/docs/drf/viewsets.py:384 -msgid "(icontains) Product name" -msgstr "" - -#: core/docs/drf/viewsets.py:390 -msgid "(list) Category names, case-insensitive" -msgstr "" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Category UUID" -msgstr "" - -#: core/docs/drf/viewsets.py:402 -msgid "(list) Tag names, case-insensitive" -msgstr "" - -#: core/docs/drf/viewsets.py:408 -msgid "(gte) Minimum stock price" -msgstr "" - -#: core/docs/drf/viewsets.py:414 -msgid "(lte) Maximum stock price" -msgstr "" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Only active products" -msgstr "" - -#: core/docs/drf/viewsets.py:426 -msgid "(iexact) Brand name" -msgstr "" - -#: core/docs/drf/viewsets.py:438 -msgid "(gt) Minimum stock quantity" -msgstr "" - -#: core/docs/drf/viewsets.py:444 -msgid "(exact) Digital vs. physical" -msgstr "" - -#: core/docs/drf/viewsets.py:451 +#: core/docs/drf/viewsets.py:385 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:465 core/docs/drf/viewsets.py:466 +#: core/docs/drf/viewsets.py:399 core/docs/drf/viewsets.py:400 msgid "retrieve a single product (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:495 -#: core/docs/drf/viewsets.py:511 core/docs/drf/viewsets.py:527 -#: core/docs/drf/viewsets.py:543 core/docs/drf/viewsets.py:559 +#: core/docs/drf/viewsets.py:405 core/docs/drf/viewsets.py:429 +#: core/docs/drf/viewsets.py:445 core/docs/drf/viewsets.py:461 +#: core/docs/drf/viewsets.py:477 core/docs/drf/viewsets.py:493 msgid "Product UUID or slug" msgstr "" -#: core/docs/drf/viewsets.py:481 core/docs/drf/viewsets.py:482 +#: core/docs/drf/viewsets.py:415 core/docs/drf/viewsets.py:416 msgid "create a product" msgstr "" -#: core/docs/drf/viewsets.py:489 core/docs/drf/viewsets.py:490 +#: core/docs/drf/viewsets.py:423 core/docs/drf/viewsets.py:424 msgid "rewrite an existing product, preserving non-editable fields" msgstr "" -#: core/docs/drf/viewsets.py:505 core/docs/drf/viewsets.py:506 +#: core/docs/drf/viewsets.py:439 core/docs/drf/viewsets.py:440 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" -#: core/docs/drf/viewsets.py:521 core/docs/drf/viewsets.py:522 +#: core/docs/drf/viewsets.py:455 core/docs/drf/viewsets.py:456 msgid "delete a product" msgstr "" -#: core/docs/drf/viewsets.py:537 core/docs/drf/viewsets.py:538 +#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:472 msgid "lists all permitted feedbacks for a product" msgstr "" -#: core/docs/drf/viewsets.py:554 +#: core/docs/drf/viewsets.py:488 msgid "returns a snapshot of the product's SEO meta data" msgstr "" -#: core/docs/drf/viewsets.py:572 +#: core/docs/drf/viewsets.py:506 msgid "list all addresses" msgstr "" -#: core/docs/drf/viewsets.py:579 +#: core/docs/drf/viewsets.py:513 msgid "retrieve a single address" msgstr "" -#: core/docs/drf/viewsets.py:586 +#: core/docs/drf/viewsets.py:520 msgid "create a new address" msgstr "" -#: core/docs/drf/viewsets.py:594 +#: core/docs/drf/viewsets.py:528 msgid "delete an address" msgstr "" -#: core/docs/drf/viewsets.py:601 +#: core/docs/drf/viewsets.py:535 msgid "update an entire address" msgstr "" -#: core/docs/drf/viewsets.py:609 +#: core/docs/drf/viewsets.py:543 msgid "partially update an address" msgstr "" -#: core/docs/drf/viewsets.py:617 +#: core/docs/drf/viewsets.py:551 msgid "autocomplete address suggestions" msgstr "" -#: core/docs/drf/viewsets.py:622 +#: core/docs/drf/viewsets.py:556 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" -#: core/docs/drf/viewsets.py:628 +#: core/docs/drf/viewsets.py:562 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "" -#: core/docs/drf/viewsets.py:641 +#: core/docs/drf/viewsets.py:575 msgid "list all feedbacks (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:645 +#: core/docs/drf/viewsets.py:579 msgid "retrieve a single feedback (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:649 +#: core/docs/drf/viewsets.py:583 msgid "create a feedback" msgstr "" -#: core/docs/drf/viewsets.py:653 +#: core/docs/drf/viewsets.py:587 msgid "delete a feedback" msgstr "" -#: core/docs/drf/viewsets.py:657 +#: core/docs/drf/viewsets.py:591 msgid "rewrite an existing feedback saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:661 +#: core/docs/drf/viewsets.py:595 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:668 +#: core/docs/drf/viewsets.py:602 msgid "list all order–product relations (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:675 +#: core/docs/drf/viewsets.py:609 msgid "retrieve a single order–product relation (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:682 +#: core/docs/drf/viewsets.py:616 msgid "create a new order–product relation" msgstr "" -#: core/docs/drf/viewsets.py:689 +#: core/docs/drf/viewsets.py:623 msgid "replace an existing order–product relation" msgstr "" -#: core/docs/drf/viewsets.py:696 +#: core/docs/drf/viewsets.py:630 msgid "partially update an existing order–product relation" msgstr "" -#: core/docs/drf/viewsets.py:703 +#: core/docs/drf/viewsets.py:637 msgid "delete an order–product relation" msgstr "" -#: core/docs/drf/viewsets.py:710 +#: core/docs/drf/viewsets.py:644 msgid "add or remove feedback on an order–product relation" msgstr "" -#: core/elasticsearch/__init__.py:105 +#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 msgid "no search term provided." msgstr "" -#: core/filters.py:64 core/filters.py:594 core/filters.py:623 +#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +msgid "Search" +msgstr "" + +#: core/filters.py:66 core/filters.py:554 core/filters.py:583 msgid "UUID" msgstr "" -#: core/filters.py:65 core/filters.py:429 core/filters.py:560 +#: core/filters.py:67 core/filters.py:399 core/filters.py:526 msgid "Name" msgstr "" -#: core/filters.py:66 core/filters.py:562 +#: core/filters.py:68 core/filters.py:528 msgid "Categories" msgstr "" -#: core/filters.py:68 +#: core/filters.py:70 msgid "Categories Slugs" msgstr "" -#: core/filters.py:69 core/filters.py:437 +#: core/filters.py:71 core/filters.py:407 msgid "Tags" msgstr "" -#: core/filters.py:70 +#: core/filters.py:72 msgid "Min Price" msgstr "" -#: core/filters.py:71 +#: core/filters.py:73 msgid "Max Price" msgstr "" -#: core/filters.py:72 +#: core/filters.py:74 msgid "Is Active" msgstr "" -#: core/filters.py:73 +#: core/filters.py:75 msgid "Brand" msgstr "" -#: core/filters.py:74 +#: core/filters.py:76 msgid "Attributes" msgstr "" -#: core/filters.py:75 +#: core/filters.py:77 msgid "Quantity" msgstr "" -#: core/filters.py:76 core/filters.py:431 core/filters.py:561 -#: core/models.py:287 core/models.py:381 core/models.py:534 +#: core/filters.py:78 core/filters.py:401 core/filters.py:527 +#: core/models.py:287 core/models.py:369 core/models.py:522 msgid "Slug" msgstr "" -#: core/filters.py:77 +#: core/filters.py:79 msgid "Is Digital" msgstr "" -#: core/filters.py:78 +#: core/filters.py:80 msgid "Include sub-categories" msgstr "" -#: core/filters.py:81 +#: core/filters.py:83 msgid "Include personal ordered" msgstr "" -#: core/filters.py:83 core/models.py:538 +#: core/filters.py:85 core/models.py:526 msgid "SKU" msgstr "" -#: core/filters.py:166 +#: core/filters.py:161 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" -#: core/filters.py:356 +#: core/filters.py:324 msgid "Search (ID, product name or part number)" msgstr "" -#: core/filters.py:359 +#: core/filters.py:327 msgid "Bought after (inclusive)" msgstr "" -#: core/filters.py:360 +#: core/filters.py:328 msgid "Bought before (inclusive)" msgstr "" -#: core/filters.py:363 core/filters.py:410 core/filters.py:625 +#: core/filters.py:331 core/filters.py:378 core/filters.py:585 msgid "User email" msgstr "" -#: core/filters.py:364 core/filters.py:411 core/filters.py:603 -#: core/filters.py:624 +#: core/filters.py:332 core/filters.py:379 core/filters.py:563 +#: core/filters.py:584 msgid "User UUID" msgstr "" -#: core/filters.py:365 +#: core/filters.py:333 msgid "Status" msgstr "" -#: core/filters.py:369 +#: core/filters.py:337 msgid "Human Readable ID" msgstr "" -#: core/filters.py:430 +#: core/filters.py:400 msgid "Parent" msgstr "" -#: core/filters.py:434 +#: core/filters.py:404 msgid "Whole category(has at least 1 product or not)" msgstr "" -#: core/filters.py:438 +#: core/filters.py:408 msgid "Level" msgstr "" -#: core/filters.py:598 +#: core/filters.py:558 msgid "Product UUID" msgstr "" @@ -887,7 +851,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:821 +#: core/graphene/mutations.py:527 core/viewsets.py:839 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" @@ -948,37 +912,37 @@ msgstr "" msgid "add or delete a feedback for orderproduct" msgstr "" -#: core/graphene/mutations.py:555 +#: core/graphene/mutations.py:556 msgid "action must be either `add` or `remove`" msgstr "" -#: core/graphene/mutations.py:558 +#: core/graphene/mutations.py:559 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "" -#: core/graphene/mutations.py:621 +#: core/graphene/mutations.py:622 msgid "original address string provided by the user" msgstr "" -#: core/graphene/mutations.py:655 core/models.py:896 core/models.py:909 -#: core/models.py:1348 core/models.py:1377 core/models.py:1402 -#: core/viewsets.py:824 +#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 +#: core/models.py:1234 core/models.py:1263 core/models.py:1288 +#: core/viewsets.py:842 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" -#: core/graphene/mutations.py:668 +#: core/graphene/mutations.py:669 msgid "limit must be between 1 and 10" msgstr "" -#: core/graphene/mutations.py:713 +#: core/graphene/mutations.py:714 msgid "elasticsearch - works like a charm" msgstr "" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:666 core/models.py:1234 -#: core/models.py:1809 +#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 +#: core/models.py:1686 msgid "attributes" msgstr "" @@ -991,11 +955,11 @@ msgid "groups of attributes" msgstr "" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:620 +#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:612 msgid "categories" msgstr "" -#: core/graphene/object_types.py:124 core/models.py:395 +#: core/graphene/object_types.py:124 core/models.py:383 msgid "brands" msgstr "" @@ -1049,7 +1013,7 @@ msgid "represents feedback from a user." msgstr "" #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1228 +#: core/models.py:1110 msgid "notifications" msgstr "" @@ -1057,7 +1021,7 @@ msgstr "" msgid "download url for this order product if applicable" msgstr "" -#: core/graphene/object_types.py:400 core/models.py:1938 +#: core/graphene/object_types.py:400 core/models.py:1791 msgid "feedback" msgstr "" @@ -1065,7 +1029,7 @@ msgstr "" msgid "a list of order products in this order" msgstr "" -#: core/graphene/object_types.py:436 core/models.py:1198 +#: core/graphene/object_types.py:436 core/models.py:1080 msgid "billing address" msgstr "" @@ -1091,7 +1055,7 @@ msgstr "" msgid "transactions for this order" msgstr "" -#: core/graphene/object_types.py:465 core/models.py:1262 +#: core/graphene/object_types.py:465 core/models.py:1144 msgid "orders" msgstr "" @@ -1103,15 +1067,15 @@ msgstr "" msgid "product's images" msgstr "" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:477 +#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 msgid "category" msgstr "" -#: core/graphene/object_types.py:502 core/models.py:1939 +#: core/graphene/object_types.py:502 core/models.py:1792 msgid "feedbacks" msgstr "" -#: core/graphene/object_types.py:503 core/models.py:394 core/models.py:486 +#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 msgid "brand" msgstr "" @@ -1143,7 +1107,7 @@ msgstr "" msgid "only available for personal orders" msgstr "" -#: core/graphene/object_types.py:534 core/models.py:548 +#: core/graphene/object_types.py:534 core/models.py:536 msgid "products" msgstr "" @@ -1155,7 +1119,7 @@ msgstr "" msgid "products on sale" msgstr "" -#: core/graphene/object_types.py:651 core/models.py:843 +#: core/graphene/object_types.py:651 core/models.py:784 msgid "promotions" msgstr "" @@ -1163,7 +1127,7 @@ msgstr "" msgid "vendor" msgstr "" -#: core/graphene/object_types.py:656 core/models.py:547 +#: core/graphene/object_types.py:656 core/models.py:535 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1171,11 +1135,11 @@ msgstr "" msgid "product" msgstr "" -#: core/graphene/object_types.py:667 core/models.py:868 +#: core/graphene/object_types.py:667 core/models.py:807 msgid "wishlisted products" msgstr "" -#: core/graphene/object_types.py:673 core/models.py:885 +#: core/graphene/object_types.py:673 core/models.py:824 msgid "wishlists" msgstr "" @@ -1183,7 +1147,7 @@ msgstr "" msgid "tagged products" msgstr "" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:492 +#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 msgid "product tags" msgstr "" @@ -1288,7 +1252,7 @@ msgstr "" msgid "attribute group's name" msgstr "" -#: core/models.py:100 core/models.py:628 +#: core/models.py:100 core/models.py:620 msgid "attribute group" msgstr "" @@ -1424,51 +1388,59 @@ msgstr "" msgid "tags that help describe or group this category" msgstr "" -#: core/models.py:299 core/models.py:387 +#: core/models.py:299 core/models.py:375 msgid "priority" msgstr "" -#: core/models.py:340 +#: core/models.py:318 +msgid "" +"Represents a Brand object in the system. This class handles information and " +"attributes related to a brand, including its name, logos, description, " +"associated categories, a unique slug, and priority order. It allows for the " +"organization and representation of brand-related data within the application." +msgstr "" + +#: core/models.py:328 msgid "name of this brand" msgstr "" -#: core/models.py:341 +#: core/models.py:329 msgid "brand name" msgstr "" -#: core/models.py:348 +#: core/models.py:336 msgid "upload a logo representing this brand" msgstr "" -#: core/models.py:350 +#: core/models.py:338 msgid "brand small image" msgstr "" -#: core/models.py:356 +#: core/models.py:344 msgid "upload a big logo representing this brand" msgstr "" -#: core/models.py:358 +#: core/models.py:346 msgid "brand big image" msgstr "" -#: core/models.py:363 +#: core/models.py:351 msgid "add a detailed description of the brand" msgstr "" -#: core/models.py:364 +#: core/models.py:352 msgid "brand description" msgstr "" -#: core/models.py:369 +#: core/models.py:357 msgid "optional categories that this brand is associated with" msgstr "" -#: core/models.py:370 +#: core/models.py:358 msgid "associated categories" msgstr "" -#: core/models.py:400 +#: core/models.py:388 msgid "" "Represents the stock of a product managed in the system. This class provides " "details about the relationship between vendors, products, and their stock " @@ -1478,67 +1450,67 @@ msgid "" "from various vendors." msgstr "" -#: core/models.py:412 +#: core/models.py:400 msgid "the vendor supplying this product stock" msgstr "" -#: core/models.py:413 +#: core/models.py:401 msgid "associated vendor" msgstr "" -#: core/models.py:417 +#: core/models.py:405 msgid "final price to the customer after markups" msgstr "" -#: core/models.py:418 +#: core/models.py:406 msgid "selling price" msgstr "" -#: core/models.py:423 +#: core/models.py:411 msgid "the product associated with this stock entry" msgstr "" -#: core/models.py:424 core/models.py:708 core/models.py:765 core/models.py:1709 +#: core/models.py:412 core/models.py:683 core/models.py:730 core/models.py:1583 msgid "associated product" msgstr "" -#: core/models.py:431 +#: core/models.py:419 msgid "the price paid to the vendor for this product" msgstr "" -#: core/models.py:432 +#: core/models.py:420 msgid "vendor purchase price" msgstr "" -#: core/models.py:436 +#: core/models.py:424 msgid "available quantity of the product in stock" msgstr "" -#: core/models.py:437 +#: core/models.py:425 msgid "quantity in stock" msgstr "" -#: core/models.py:441 +#: core/models.py:429 msgid "vendor-assigned SKU for identifying the product" msgstr "" -#: core/models.py:442 +#: core/models.py:430 msgid "vendor sku" msgstr "" -#: core/models.py:448 +#: core/models.py:436 msgid "digital file associated with this stock if applicable" msgstr "" -#: core/models.py:449 +#: core/models.py:437 msgid "digital file" msgstr "" -#: core/models.py:458 +#: core/models.py:446 msgid "stock entries" msgstr "" -#: core/models.py:463 +#: core/models.py:451 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1550,55 +1522,55 @@ msgid "" "product data and its associated information within an application." msgstr "" -#: core/models.py:476 +#: core/models.py:464 msgid "category this product belongs to" msgstr "" -#: core/models.py:485 +#: core/models.py:473 msgid "optionally associate this product with a brand" msgstr "" -#: core/models.py:491 +#: core/models.py:479 msgid "tags that help describe or group this product" msgstr "" -#: core/models.py:496 +#: core/models.py:484 msgid "indicates whether this product is digitally delivered" msgstr "" -#: core/models.py:497 +#: core/models.py:485 msgid "is product digital" msgstr "" -#: core/models.py:503 +#: core/models.py:491 msgid "provide a clear identifying name for the product" msgstr "" -#: core/models.py:504 +#: core/models.py:492 msgid "product name" msgstr "" -#: core/models.py:509 core/models.py:831 +#: core/models.py:497 core/models.py:772 msgid "add a detailed description of the product" msgstr "" -#: core/models.py:510 +#: core/models.py:498 msgid "product description" msgstr "" -#: core/models.py:517 +#: core/models.py:505 msgid "part number for this product" msgstr "" -#: core/models.py:518 +#: core/models.py:506 msgid "part number" msgstr "" -#: core/models.py:537 +#: core/models.py:525 msgid "stock keeping unit for this product" msgstr "" -#: core/models.py:607 +#: core/models.py:599 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 " @@ -1608,303 +1580,369 @@ msgid "" "for dynamic and flexible data structuring." msgstr "" -#: core/models.py:619 +#: core/models.py:611 msgid "category of this attribute" msgstr "" -#: core/models.py:627 +#: core/models.py:619 msgid "group of this attribute" msgstr "" -#: core/models.py:633 +#: core/models.py:625 msgid "string" msgstr "" -#: core/models.py:634 +#: core/models.py:626 msgid "integer" msgstr "" -#: core/models.py:635 +#: core/models.py:627 msgid "float" msgstr "" -#: core/models.py:636 +#: core/models.py:628 msgid "boolean" msgstr "" -#: core/models.py:637 +#: core/models.py:629 msgid "array" msgstr "" -#: core/models.py:638 +#: core/models.py:630 msgid "object" msgstr "" -#: core/models.py:640 +#: core/models.py:632 msgid "type of the attribute's value" msgstr "" -#: core/models.py:641 +#: core/models.py:633 msgid "value type" msgstr "" -#: core/models.py:646 +#: core/models.py:638 msgid "name of this attribute" msgstr "" -#: core/models.py:647 +#: core/models.py:639 msgid "attribute's name" msgstr "" -#: core/models.py:653 +#: core/models.py:645 msgid "is filterable" msgstr "" -#: core/models.py:654 +#: core/models.py:646 msgid "designates whether this attribute can be used for filtering or not" msgstr "" -#: core/models.py:665 core/models.py:700 +#: core/models.py:657 core/models.py:675 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "" -#: core/models.py:699 +#: core/models.py:663 +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:674 msgid "attribute of this value" msgstr "" -#: core/models.py:707 +#: core/models.py:682 msgid "the specific product associated with this attribute's value" msgstr "" -#: core/models.py:713 +#: core/models.py:688 msgid "the specific value for this attribute" msgstr "" -#: core/models.py:747 +#: core/models.py:701 +msgid "" +"Represents a product image associated with a product in the system. This " +"class is designed to manage images for products, including functionality for " +"uploading image files, associating them with specific products, and " +"determining their display order. It also includes an accessibility feature " +"with alternative text for the images." +msgstr "" + +#: core/models.py:712 msgid "provide alternative text for the image for accessibility" msgstr "" -#: core/models.py:748 +#: core/models.py:713 msgid "image alt text" msgstr "" -#: core/models.py:751 +#: core/models.py:716 msgid "upload the image file for this product" msgstr "" -#: core/models.py:752 core/models.py:777 +#: core/models.py:717 core/models.py:742 msgid "product image" msgstr "" -#: core/models.py:758 +#: core/models.py:723 msgid "determines the order in which images are displayed" msgstr "" -#: core/models.py:759 +#: core/models.py:724 msgid "display priority" msgstr "" -#: core/models.py:764 +#: core/models.py:729 msgid "the product that this image represents" msgstr "" -#: core/models.py:778 +#: core/models.py:743 msgid "product images" msgstr "" -#: core/models.py:819 +#: core/models.py:748 +msgid "" +"Represents a promotional campaign for products with a discount. This class " +"is used to define and manage promotional campaigns that offer a percentage-" +"based discount for products. The class includes attributes for setting the " +"discount rate, providing details about the promotion, and linking it to the " +"applicable products. It integrates with the product catalog to determine the " +"affected items in the campaign." +msgstr "" + +#: core/models.py:760 msgid "percentage discount for the selected products" msgstr "" -#: core/models.py:820 +#: core/models.py:761 msgid "discount percentage" msgstr "" -#: core/models.py:825 +#: core/models.py:766 msgid "provide a unique name for this promotion" msgstr "" -#: core/models.py:826 +#: core/models.py:767 msgid "promotion name" msgstr "" -#: core/models.py:832 +#: core/models.py:773 msgid "promotion description" msgstr "" -#: core/models.py:837 +#: core/models.py:778 msgid "select which products are included in this promotion" msgstr "" -#: core/models.py:838 +#: core/models.py:779 msgid "included products" msgstr "" -#: core/models.py:842 +#: core/models.py:783 msgid "promotion" msgstr "" -#: core/models.py:867 +#: core/models.py:794 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"class provides functionality to manage a collection of products, supporting " +"operations such as adding and removing products, as well as supporting " +"operations for adding and removing multiple products at once." +msgstr "" + +#: core/models.py:806 msgid "products that the user has marked as wanted" msgstr "" -#: core/models.py:875 +#: core/models.py:814 msgid "user who owns this wishlist" msgstr "" -#: core/models.py:876 +#: core/models.py:815 msgid "wishlist owner" msgstr "" -#: core/models.py:884 +#: core/models.py:823 msgid "wishlist" msgstr "" -#: core/models.py:951 +#: core/models.py:865 +msgid "" +"Represents a documentary record tied to a product. This class is used to " +"store information about documentaries related to specific products, " +"including file uploads and their metadata. It contains methods and " +"properties to handle the file type and storage path for the documentary " +"files. It extends functionality from specific mixins and provides additional " +"custom features." +msgstr "" + +#: core/models.py:878 msgid "documentary" msgstr "" -#: core/models.py:952 +#: core/models.py:879 msgid "documentaries" msgstr "" -#: core/models.py:962 +#: core/models.py:889 msgid "unresolved" msgstr "" -#: core/models.py:1008 +#: core/models.py:894 +msgid "" +"Represents an address entity that includes location details and associations " +"with a user. Provides functionality for geographic and address data storage, " +"as well as integration with geocoding services. This class is designed to " +"store detailed address information including components like street, city, " +"region, country, and geolocation (longitude and latitude). It supports " +"integration with geocoding APIs, enabling the storage of raw API responses " +"for further processing or inspection. The class also allows associating an " +"address with a user, facilitating personalized data handling." +msgstr "" + +#: core/models.py:909 msgid "address line for the customer" msgstr "" -#: core/models.py:1009 +#: core/models.py:910 msgid "address line" msgstr "" -#: core/models.py:1011 +#: core/models.py:912 msgid "street" msgstr "" -#: core/models.py:1012 +#: core/models.py:913 msgid "district" msgstr "" -#: core/models.py:1013 +#: core/models.py:914 msgid "city" msgstr "" -#: core/models.py:1014 +#: core/models.py:915 msgid "region" msgstr "" -#: core/models.py:1015 +#: core/models.py:916 msgid "postal code" msgstr "" -#: core/models.py:1016 +#: core/models.py:917 msgid "country" msgstr "" -#: core/models.py:1023 +#: core/models.py:924 msgid "geolocation point: (longitude, latitude)" msgstr "" -#: core/models.py:1026 +#: core/models.py:927 msgid "full JSON response from geocoder for this address" msgstr "" -#: core/models.py:1031 +#: core/models.py:932 msgid "stored JSON response from the geocoding service" msgstr "" -#: core/models.py:1039 +#: core/models.py:940 msgid "address" msgstr "" -#: core/models.py:1040 +#: core/models.py:941 msgid "addresses" msgstr "" -#: core/models.py:1085 +#: core/models.py:953 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" + +#: core/models.py:967 msgid "unique code used by a user to redeem a discount" msgstr "" -#: core/models.py:1086 +#: core/models.py:968 msgid "promo code identifier" msgstr "" -#: core/models.py:1093 +#: core/models.py:975 msgid "fixed discount amount applied if percent is not used" msgstr "" -#: core/models.py:1094 +#: core/models.py:976 msgid "fixed discount amount" msgstr "" -#: core/models.py:1100 +#: core/models.py:982 msgid "percentage discount applied if fixed amount is not used" msgstr "" -#: core/models.py:1101 +#: core/models.py:983 msgid "percentage discount" msgstr "" -#: core/models.py:1106 +#: core/models.py:988 msgid "timestamp when the promocode expires" msgstr "" -#: core/models.py:1107 +#: core/models.py:989 msgid "end validity time" msgstr "" -#: core/models.py:1112 +#: core/models.py:994 msgid "timestamp from which this promocode is valid" msgstr "" -#: core/models.py:1113 +#: core/models.py:995 msgid "start validity time" msgstr "" -#: core/models.py:1118 +#: core/models.py:1000 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" -#: core/models.py:1119 +#: core/models.py:1001 msgid "usage timestamp" msgstr "" -#: core/models.py:1124 +#: core/models.py:1006 msgid "user assigned to this promocode if applicable" msgstr "" -#: core/models.py:1125 +#: core/models.py:1007 msgid "assigned user" msgstr "" -#: core/models.py:1132 +#: core/models.py:1014 msgid "promo code" msgstr "" -#: core/models.py:1133 +#: core/models.py:1015 msgid "promo codes" msgstr "" -#: core/models.py:1140 +#: core/models.py:1022 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "" -#: core/models.py:1155 +#: core/models.py:1037 msgid "promocode already used" msgstr "" -#: core/models.py:1171 +#: core/models.py:1053 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "" -#: core/models.py:1180 +#: core/models.py:1062 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 " @@ -1914,277 +1952,309 @@ msgid "" "supports managing the products in the order lifecycle." msgstr "" -#: core/models.py:1197 +#: core/models.py:1079 msgid "the billing address used for this order" msgstr "" -#: core/models.py:1205 +#: core/models.py:1087 msgid "optional promo code applied to this order" msgstr "" -#: core/models.py:1206 +#: core/models.py:1088 msgid "applied promo code" msgstr "" -#: core/models.py:1214 +#: core/models.py:1096 msgid "the shipping address used for this order" msgstr "" -#: core/models.py:1215 +#: core/models.py:1097 msgid "shipping address" msgstr "" -#: core/models.py:1221 +#: core/models.py:1103 msgid "current status of the order in its lifecycle" msgstr "" -#: core/models.py:1222 +#: core/models.py:1104 msgid "order status" msgstr "" -#: core/models.py:1227 core/models.py:1686 +#: core/models.py:1109 core/models.py:1560 msgid "json structure of notifications to display to users" msgstr "" -#: core/models.py:1233 +#: core/models.py:1115 msgid "json representation of order attributes for this order" msgstr "" -#: core/models.py:1239 +#: core/models.py:1121 msgid "the user who placed the order" msgstr "" -#: core/models.py:1240 +#: core/models.py:1122 msgid "user" msgstr "" -#: core/models.py:1246 +#: core/models.py:1128 msgid "the timestamp when the order was finalized" msgstr "" -#: core/models.py:1247 +#: core/models.py:1129 msgid "buy time" msgstr "" -#: core/models.py:1254 +#: core/models.py:1136 msgid "a human-readable identifier for the order" msgstr "" -#: core/models.py:1255 +#: core/models.py:1137 msgid "human readable id" msgstr "" -#: core/models.py:1261 +#: core/models.py:1143 msgid "order" msgstr "" -#: core/models.py:1282 +#: core/models.py:1168 msgid "a user must have only one pending order at a time" msgstr "" -#: core/models.py:1316 +#: core/models.py:1202 msgid "you cannot add products to an order that is not a pending one" msgstr "" -#: core/models.py:1321 +#: core/models.py:1207 msgid "you cannot add inactive products to order" msgstr "" -#: core/models.py:1338 +#: core/models.py:1224 msgid "you cannot add more products than available in stock" msgstr "" -#: core/models.py:1360 core/models.py:1385 core/models.py:1393 +#: core/models.py:1246 core/models.py:1271 core/models.py:1279 msgid "you cannot remove products from an order that is not a pending one" msgstr "" -#: core/models.py:1381 +#: core/models.py:1267 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "" -#: core/models.py:1413 +#: core/models.py:1299 msgid "promocode does not exist" msgstr "" -#: core/models.py:1419 +#: core/models.py:1305 msgid "you can only buy physical products with shipping address specified" msgstr "" -#: core/models.py:1438 +#: core/models.py:1324 msgid "address does not exist" msgstr "" -#: core/models.py:1459 core/models.py:1528 +#: core/models.py:1345 core/models.py:1414 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" -#: core/models.py:1462 core/models.py:1524 +#: core/models.py:1348 core/models.py:1410 msgid "invalid force value" msgstr "" -#: core/models.py:1468 core/models.py:1531 +#: core/models.py:1354 core/models.py:1417 msgid "you cannot purchase an empty order!" msgstr "" -#: core/models.py:1487 +#: core/models.py:1373 msgid "you cannot buy an order without a user" msgstr "" -#: core/models.py:1501 +#: core/models.py:1387 msgid "a user without a balance cannot buy with balance" msgstr "" -#: core/models.py:1506 +#: core/models.py:1392 msgid "insufficient funds to complete the order" msgstr "" -#: core/models.py:1540 +#: core/models.py:1426 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "" -#: core/models.py:1549 +#: core/models.py:1435 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" -#: core/models.py:1674 +#: core/models.py:1533 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" + +#: core/models.py:1548 msgid "the price paid by the customer for this product at purchase time" msgstr "" -#: core/models.py:1675 +#: core/models.py:1549 msgid "purchase price at order time" msgstr "" -#: core/models.py:1680 +#: core/models.py:1554 msgid "internal comments for admins about this ordered product" msgstr "" -#: core/models.py:1681 +#: core/models.py:1555 msgid "internal comments" msgstr "" -#: core/models.py:1687 +#: core/models.py:1561 msgid "user notifications" msgstr "" -#: core/models.py:1692 +#: core/models.py:1566 msgid "json representation of this item's attributes" msgstr "" -#: core/models.py:1693 +#: core/models.py:1567 msgid "ordered product attributes" msgstr "" -#: core/models.py:1698 +#: core/models.py:1572 msgid "reference to the parent order that contains this product" msgstr "" -#: core/models.py:1699 +#: core/models.py:1573 msgid "parent order" msgstr "" -#: core/models.py:1708 +#: core/models.py:1582 msgid "the specific product associated with this order line" msgstr "" -#: core/models.py:1715 +#: core/models.py:1589 msgid "quantity of this specific product in the order" msgstr "" -#: core/models.py:1716 +#: core/models.py:1590 msgid "product quantity" msgstr "" -#: core/models.py:1723 +#: core/models.py:1597 msgid "current status of this product in the order" msgstr "" -#: core/models.py:1724 +#: core/models.py:1598 msgid "product line status" msgstr "" -#: core/models.py:1784 +#: core/models.py:1661 msgid "order product must have an order" msgstr "" -#: core/models.py:1786 +#: core/models.py:1663 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "" -#: core/models.py:1800 +#: core/models.py:1677 msgid "you cannot feedback an order which is not received" msgstr "" -#: core/models.py:1806 +#: core/models.py:1683 msgid "name" msgstr "" -#: core/models.py:1807 +#: core/models.py:1684 msgid "URL of the integration" msgstr "" -#: core/models.py:1808 +#: core/models.py:1685 msgid "authentication credentials" msgstr "" -#: core/models.py:1822 +#: core/models.py:1699 msgid "you can only have one default CRM provider" msgstr "" -#: core/models.py:1826 +#: core/models.py:1703 msgid "CRM" msgstr "" -#: core/models.py:1827 +#: core/models.py:1704 msgid "CRMs" msgstr "" -#: core/models.py:1839 +#: core/models.py:1716 msgid "order CRM link" msgstr "" -#: core/models.py:1840 +#: core/models.py:1717 msgid "orders CRM links" msgstr "" -#: core/models.py:1874 +#: core/models.py:1722 +msgid "" +"Represents the downloading functionality for digital assets associated with " +"orders. The DigitalAssetDownload class provides the ability to manage and " +"access downloads related to order products. It maintains information about " +"the associated order product, the number of downloads, and whether the asset " +"is publicly visible. It includes a method to generate a URL for downloading " +"the asset when the associated order is in a completed status." +msgstr "" + +#: core/models.py:1736 msgid "download" msgstr "" -#: core/models.py:1875 +#: core/models.py:1737 msgid "downloads" msgstr "" -#: core/models.py:1883 +#: core/models.py:1745 msgid "you can not download a digital asset for a non-finished order" msgstr "" -#: core/models.py:1913 +#: core/models.py:1754 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." +msgstr "" + +#: core/models.py:1766 msgid "user-provided comments about their experience with the product" msgstr "" -#: core/models.py:1914 +#: core/models.py:1767 msgid "feedback comments" msgstr "" -#: core/models.py:1921 +#: core/models.py:1774 msgid "references the specific product in an order that this feedback is about" msgstr "" -#: core/models.py:1922 +#: core/models.py:1775 msgid "related order product" msgstr "" -#: core/models.py:1927 +#: core/models.py:1780 msgid "user-assigned rating for the product" msgstr "" -#: core/models.py:1928 +#: core/models.py:1781 msgid "product rating" msgstr "" @@ -2386,17 +2456,17 @@ msgstr "" msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "" -#: core/utils/emailing.py:64 +#: core/utils/emailing.py:74 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "" -#: core/utils/emailing.py:99 +#: core/utils/emailing.py:109 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "" -#: core/utils/emailing.py:187 +#: core/utils/emailing.py:197 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "" @@ -2418,15 +2488,15 @@ msgstr "" msgid "invalid phone number format" msgstr "" -#: core/views.py:481 +#: core/views.py:489 msgid "you can only download the digital asset once" msgstr "" -#: core/views.py:539 +#: core/views.py:547 msgid "favicon not found" msgstr "" -#: core/viewsets.py:1319 +#: core/viewsets.py:1357 #, python-brace-format msgid "Geocoding error: {e}" msgstr "" diff --git a/core/locale/hr_HR/LC_MESSAGES/django.po b/core/locale/hr_HR/LC_MESSAGES/django.po index 532b9979..c7b687b4 100644 --- a/core/locale/hr_HR/LC_MESSAGES/django.po +++ b/core/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-09-19 15:52+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -88,11 +88,11 @@ msgid "selected items have been deactivated." msgstr "" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:712 core/models.py:720 +#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 msgid "attribute value" msgstr "" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:721 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 msgid "attribute values" msgstr "" @@ -104,7 +104,7 @@ msgstr "" msgid "images" msgstr "" -#: core/admin.py:155 core/models.py:457 +#: core/admin.py:155 core/models.py:445 msgid "stock" msgstr "" @@ -112,11 +112,11 @@ msgstr "" msgid "stocks" msgstr "" -#: core/admin.py:166 core/models.py:1735 +#: core/admin.py:166 core/models.py:1609 msgid "order product" msgstr "" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1736 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 msgid "order products" msgstr "" @@ -312,7 +312,7 @@ msgstr "" msgid "rewrite some fields of an existing category saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:553 +#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:487 #: core/graphene/object_types.py:117 core/graphene/object_types.py:207 #: core/graphene/object_types.py:509 msgid "SEO Meta snapshot" @@ -548,291 +548,255 @@ msgstr "" msgid "(exact) Product UUID" msgstr "" -#: core/docs/drf/viewsets.py:384 -msgid "(icontains) Product name" -msgstr "" - -#: core/docs/drf/viewsets.py:390 -msgid "(list) Category names, case-insensitive" -msgstr "" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Category UUID" -msgstr "" - -#: core/docs/drf/viewsets.py:402 -msgid "(list) Tag names, case-insensitive" -msgstr "" - -#: core/docs/drf/viewsets.py:408 -msgid "(gte) Minimum stock price" -msgstr "" - -#: core/docs/drf/viewsets.py:414 -msgid "(lte) Maximum stock price" -msgstr "" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Only active products" -msgstr "" - -#: core/docs/drf/viewsets.py:426 -msgid "(iexact) Brand name" -msgstr "" - -#: core/docs/drf/viewsets.py:438 -msgid "(gt) Minimum stock quantity" -msgstr "" - -#: core/docs/drf/viewsets.py:444 -msgid "(exact) Digital vs. physical" -msgstr "" - -#: core/docs/drf/viewsets.py:451 +#: core/docs/drf/viewsets.py:385 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:465 core/docs/drf/viewsets.py:466 +#: core/docs/drf/viewsets.py:399 core/docs/drf/viewsets.py:400 msgid "retrieve a single product (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:495 -#: core/docs/drf/viewsets.py:511 core/docs/drf/viewsets.py:527 -#: core/docs/drf/viewsets.py:543 core/docs/drf/viewsets.py:559 +#: core/docs/drf/viewsets.py:405 core/docs/drf/viewsets.py:429 +#: core/docs/drf/viewsets.py:445 core/docs/drf/viewsets.py:461 +#: core/docs/drf/viewsets.py:477 core/docs/drf/viewsets.py:493 msgid "Product UUID or slug" msgstr "" -#: core/docs/drf/viewsets.py:481 core/docs/drf/viewsets.py:482 +#: core/docs/drf/viewsets.py:415 core/docs/drf/viewsets.py:416 msgid "create a product" msgstr "" -#: core/docs/drf/viewsets.py:489 core/docs/drf/viewsets.py:490 +#: core/docs/drf/viewsets.py:423 core/docs/drf/viewsets.py:424 msgid "rewrite an existing product, preserving non-editable fields" msgstr "" -#: core/docs/drf/viewsets.py:505 core/docs/drf/viewsets.py:506 +#: core/docs/drf/viewsets.py:439 core/docs/drf/viewsets.py:440 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" -#: core/docs/drf/viewsets.py:521 core/docs/drf/viewsets.py:522 +#: core/docs/drf/viewsets.py:455 core/docs/drf/viewsets.py:456 msgid "delete a product" msgstr "" -#: core/docs/drf/viewsets.py:537 core/docs/drf/viewsets.py:538 +#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:472 msgid "lists all permitted feedbacks for a product" msgstr "" -#: core/docs/drf/viewsets.py:554 +#: core/docs/drf/viewsets.py:488 msgid "returns a snapshot of the product's SEO meta data" msgstr "" -#: core/docs/drf/viewsets.py:572 +#: core/docs/drf/viewsets.py:506 msgid "list all addresses" msgstr "" -#: core/docs/drf/viewsets.py:579 +#: core/docs/drf/viewsets.py:513 msgid "retrieve a single address" msgstr "" -#: core/docs/drf/viewsets.py:586 +#: core/docs/drf/viewsets.py:520 msgid "create a new address" msgstr "" -#: core/docs/drf/viewsets.py:594 +#: core/docs/drf/viewsets.py:528 msgid "delete an address" msgstr "" -#: core/docs/drf/viewsets.py:601 +#: core/docs/drf/viewsets.py:535 msgid "update an entire address" msgstr "" -#: core/docs/drf/viewsets.py:609 +#: core/docs/drf/viewsets.py:543 msgid "partially update an address" msgstr "" -#: core/docs/drf/viewsets.py:617 +#: core/docs/drf/viewsets.py:551 msgid "autocomplete address suggestions" msgstr "" -#: core/docs/drf/viewsets.py:622 +#: core/docs/drf/viewsets.py:556 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" -#: core/docs/drf/viewsets.py:628 +#: core/docs/drf/viewsets.py:562 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "" -#: core/docs/drf/viewsets.py:641 +#: core/docs/drf/viewsets.py:575 msgid "list all feedbacks (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:645 +#: core/docs/drf/viewsets.py:579 msgid "retrieve a single feedback (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:649 +#: core/docs/drf/viewsets.py:583 msgid "create a feedback" msgstr "" -#: core/docs/drf/viewsets.py:653 +#: core/docs/drf/viewsets.py:587 msgid "delete a feedback" msgstr "" -#: core/docs/drf/viewsets.py:657 +#: core/docs/drf/viewsets.py:591 msgid "rewrite an existing feedback saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:661 +#: core/docs/drf/viewsets.py:595 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:668 +#: core/docs/drf/viewsets.py:602 msgid "list all order–product relations (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:675 +#: core/docs/drf/viewsets.py:609 msgid "retrieve a single order–product relation (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:682 +#: core/docs/drf/viewsets.py:616 msgid "create a new order–product relation" msgstr "" -#: core/docs/drf/viewsets.py:689 +#: core/docs/drf/viewsets.py:623 msgid "replace an existing order–product relation" msgstr "" -#: core/docs/drf/viewsets.py:696 +#: core/docs/drf/viewsets.py:630 msgid "partially update an existing order–product relation" msgstr "" -#: core/docs/drf/viewsets.py:703 +#: core/docs/drf/viewsets.py:637 msgid "delete an order–product relation" msgstr "" -#: core/docs/drf/viewsets.py:710 +#: core/docs/drf/viewsets.py:644 msgid "add or remove feedback on an order–product relation" msgstr "" -#: core/elasticsearch/__init__.py:105 +#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 msgid "no search term provided." msgstr "" -#: core/filters.py:64 core/filters.py:594 core/filters.py:623 +#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +msgid "Search" +msgstr "" + +#: core/filters.py:66 core/filters.py:554 core/filters.py:583 msgid "UUID" msgstr "" -#: core/filters.py:65 core/filters.py:429 core/filters.py:560 +#: core/filters.py:67 core/filters.py:399 core/filters.py:526 msgid "Name" msgstr "" -#: core/filters.py:66 core/filters.py:562 +#: core/filters.py:68 core/filters.py:528 msgid "Categories" msgstr "" -#: core/filters.py:68 +#: core/filters.py:70 msgid "Categories Slugs" msgstr "" -#: core/filters.py:69 core/filters.py:437 +#: core/filters.py:71 core/filters.py:407 msgid "Tags" msgstr "" -#: core/filters.py:70 +#: core/filters.py:72 msgid "Min Price" msgstr "" -#: core/filters.py:71 +#: core/filters.py:73 msgid "Max Price" msgstr "" -#: core/filters.py:72 +#: core/filters.py:74 msgid "Is Active" msgstr "" -#: core/filters.py:73 +#: core/filters.py:75 msgid "Brand" msgstr "" -#: core/filters.py:74 +#: core/filters.py:76 msgid "Attributes" msgstr "" -#: core/filters.py:75 +#: core/filters.py:77 msgid "Quantity" msgstr "" -#: core/filters.py:76 core/filters.py:431 core/filters.py:561 -#: core/models.py:287 core/models.py:381 core/models.py:534 +#: core/filters.py:78 core/filters.py:401 core/filters.py:527 +#: core/models.py:287 core/models.py:369 core/models.py:522 msgid "Slug" msgstr "" -#: core/filters.py:77 +#: core/filters.py:79 msgid "Is Digital" msgstr "" -#: core/filters.py:78 +#: core/filters.py:80 msgid "Include sub-categories" msgstr "" -#: core/filters.py:81 +#: core/filters.py:83 msgid "Include personal ordered" msgstr "" -#: core/filters.py:83 core/models.py:538 +#: core/filters.py:85 core/models.py:526 msgid "SKU" msgstr "" -#: core/filters.py:166 +#: core/filters.py:161 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" -#: core/filters.py:356 +#: core/filters.py:324 msgid "Search (ID, product name or part number)" msgstr "" -#: core/filters.py:359 +#: core/filters.py:327 msgid "Bought after (inclusive)" msgstr "" -#: core/filters.py:360 +#: core/filters.py:328 msgid "Bought before (inclusive)" msgstr "" -#: core/filters.py:363 core/filters.py:410 core/filters.py:625 +#: core/filters.py:331 core/filters.py:378 core/filters.py:585 msgid "User email" msgstr "" -#: core/filters.py:364 core/filters.py:411 core/filters.py:603 -#: core/filters.py:624 +#: core/filters.py:332 core/filters.py:379 core/filters.py:563 +#: core/filters.py:584 msgid "User UUID" msgstr "" -#: core/filters.py:365 +#: core/filters.py:333 msgid "Status" msgstr "" -#: core/filters.py:369 +#: core/filters.py:337 msgid "Human Readable ID" msgstr "" -#: core/filters.py:430 +#: core/filters.py:400 msgid "Parent" msgstr "" -#: core/filters.py:434 +#: core/filters.py:404 msgid "Whole category(has at least 1 product or not)" msgstr "" -#: core/filters.py:438 +#: core/filters.py:408 msgid "Level" msgstr "" -#: core/filters.py:598 +#: core/filters.py:558 msgid "Product UUID" msgstr "" @@ -887,7 +851,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:821 +#: core/graphene/mutations.py:527 core/viewsets.py:839 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" @@ -948,37 +912,37 @@ msgstr "" msgid "add or delete a feedback for orderproduct" msgstr "" -#: core/graphene/mutations.py:555 +#: core/graphene/mutations.py:556 msgid "action must be either `add` or `remove`" msgstr "" -#: core/graphene/mutations.py:558 +#: core/graphene/mutations.py:559 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "" -#: core/graphene/mutations.py:621 +#: core/graphene/mutations.py:622 msgid "original address string provided by the user" msgstr "" -#: core/graphene/mutations.py:655 core/models.py:896 core/models.py:909 -#: core/models.py:1348 core/models.py:1377 core/models.py:1402 -#: core/viewsets.py:824 +#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 +#: core/models.py:1234 core/models.py:1263 core/models.py:1288 +#: core/viewsets.py:842 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" -#: core/graphene/mutations.py:668 +#: core/graphene/mutations.py:669 msgid "limit must be between 1 and 10" msgstr "" -#: core/graphene/mutations.py:713 +#: core/graphene/mutations.py:714 msgid "elasticsearch - works like a charm" msgstr "" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:666 core/models.py:1234 -#: core/models.py:1809 +#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 +#: core/models.py:1686 msgid "attributes" msgstr "" @@ -991,11 +955,11 @@ msgid "groups of attributes" msgstr "" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:620 +#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:612 msgid "categories" msgstr "" -#: core/graphene/object_types.py:124 core/models.py:395 +#: core/graphene/object_types.py:124 core/models.py:383 msgid "brands" msgstr "" @@ -1049,7 +1013,7 @@ msgid "represents feedback from a user." msgstr "" #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1228 +#: core/models.py:1110 msgid "notifications" msgstr "" @@ -1057,7 +1021,7 @@ msgstr "" msgid "download url for this order product if applicable" msgstr "" -#: core/graphene/object_types.py:400 core/models.py:1938 +#: core/graphene/object_types.py:400 core/models.py:1791 msgid "feedback" msgstr "" @@ -1065,7 +1029,7 @@ msgstr "" msgid "a list of order products in this order" msgstr "" -#: core/graphene/object_types.py:436 core/models.py:1198 +#: core/graphene/object_types.py:436 core/models.py:1080 msgid "billing address" msgstr "" @@ -1091,7 +1055,7 @@ msgstr "" msgid "transactions for this order" msgstr "" -#: core/graphene/object_types.py:465 core/models.py:1262 +#: core/graphene/object_types.py:465 core/models.py:1144 msgid "orders" msgstr "" @@ -1103,15 +1067,15 @@ msgstr "" msgid "product's images" msgstr "" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:477 +#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 msgid "category" msgstr "" -#: core/graphene/object_types.py:502 core/models.py:1939 +#: core/graphene/object_types.py:502 core/models.py:1792 msgid "feedbacks" msgstr "" -#: core/graphene/object_types.py:503 core/models.py:394 core/models.py:486 +#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 msgid "brand" msgstr "" @@ -1143,7 +1107,7 @@ msgstr "" msgid "only available for personal orders" msgstr "" -#: core/graphene/object_types.py:534 core/models.py:548 +#: core/graphene/object_types.py:534 core/models.py:536 msgid "products" msgstr "" @@ -1155,7 +1119,7 @@ msgstr "" msgid "products on sale" msgstr "" -#: core/graphene/object_types.py:651 core/models.py:843 +#: core/graphene/object_types.py:651 core/models.py:784 msgid "promotions" msgstr "" @@ -1163,7 +1127,7 @@ msgstr "" msgid "vendor" msgstr "" -#: core/graphene/object_types.py:656 core/models.py:547 +#: core/graphene/object_types.py:656 core/models.py:535 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1171,11 +1135,11 @@ msgstr "" msgid "product" msgstr "" -#: core/graphene/object_types.py:667 core/models.py:868 +#: core/graphene/object_types.py:667 core/models.py:807 msgid "wishlisted products" msgstr "" -#: core/graphene/object_types.py:673 core/models.py:885 +#: core/graphene/object_types.py:673 core/models.py:824 msgid "wishlists" msgstr "" @@ -1183,7 +1147,7 @@ msgstr "" msgid "tagged products" msgstr "" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:492 +#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 msgid "product tags" msgstr "" @@ -1288,7 +1252,7 @@ msgstr "" msgid "attribute group's name" msgstr "" -#: core/models.py:100 core/models.py:628 +#: core/models.py:100 core/models.py:620 msgid "attribute group" msgstr "" @@ -1424,51 +1388,59 @@ msgstr "" msgid "tags that help describe or group this category" msgstr "" -#: core/models.py:299 core/models.py:387 +#: core/models.py:299 core/models.py:375 msgid "priority" msgstr "" -#: core/models.py:340 +#: core/models.py:318 +msgid "" +"Represents a Brand object in the system. This class handles information and " +"attributes related to a brand, including its name, logos, description, " +"associated categories, a unique slug, and priority order. It allows for the " +"organization and representation of brand-related data within the application." +msgstr "" + +#: core/models.py:328 msgid "name of this brand" msgstr "" -#: core/models.py:341 +#: core/models.py:329 msgid "brand name" msgstr "" -#: core/models.py:348 +#: core/models.py:336 msgid "upload a logo representing this brand" msgstr "" -#: core/models.py:350 +#: core/models.py:338 msgid "brand small image" msgstr "" -#: core/models.py:356 +#: core/models.py:344 msgid "upload a big logo representing this brand" msgstr "" -#: core/models.py:358 +#: core/models.py:346 msgid "brand big image" msgstr "" -#: core/models.py:363 +#: core/models.py:351 msgid "add a detailed description of the brand" msgstr "" -#: core/models.py:364 +#: core/models.py:352 msgid "brand description" msgstr "" -#: core/models.py:369 +#: core/models.py:357 msgid "optional categories that this brand is associated with" msgstr "" -#: core/models.py:370 +#: core/models.py:358 msgid "associated categories" msgstr "" -#: core/models.py:400 +#: core/models.py:388 msgid "" "Represents the stock of a product managed in the system. This class provides " "details about the relationship between vendors, products, and their stock " @@ -1478,67 +1450,67 @@ msgid "" "from various vendors." msgstr "" -#: core/models.py:412 +#: core/models.py:400 msgid "the vendor supplying this product stock" msgstr "" -#: core/models.py:413 +#: core/models.py:401 msgid "associated vendor" msgstr "" -#: core/models.py:417 +#: core/models.py:405 msgid "final price to the customer after markups" msgstr "" -#: core/models.py:418 +#: core/models.py:406 msgid "selling price" msgstr "" -#: core/models.py:423 +#: core/models.py:411 msgid "the product associated with this stock entry" msgstr "" -#: core/models.py:424 core/models.py:708 core/models.py:765 core/models.py:1709 +#: core/models.py:412 core/models.py:683 core/models.py:730 core/models.py:1583 msgid "associated product" msgstr "" -#: core/models.py:431 +#: core/models.py:419 msgid "the price paid to the vendor for this product" msgstr "" -#: core/models.py:432 +#: core/models.py:420 msgid "vendor purchase price" msgstr "" -#: core/models.py:436 +#: core/models.py:424 msgid "available quantity of the product in stock" msgstr "" -#: core/models.py:437 +#: core/models.py:425 msgid "quantity in stock" msgstr "" -#: core/models.py:441 +#: core/models.py:429 msgid "vendor-assigned SKU for identifying the product" msgstr "" -#: core/models.py:442 +#: core/models.py:430 msgid "vendor sku" msgstr "" -#: core/models.py:448 +#: core/models.py:436 msgid "digital file associated with this stock if applicable" msgstr "" -#: core/models.py:449 +#: core/models.py:437 msgid "digital file" msgstr "" -#: core/models.py:458 +#: core/models.py:446 msgid "stock entries" msgstr "" -#: core/models.py:463 +#: core/models.py:451 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1550,55 +1522,55 @@ msgid "" "product data and its associated information within an application." msgstr "" -#: core/models.py:476 +#: core/models.py:464 msgid "category this product belongs to" msgstr "" -#: core/models.py:485 +#: core/models.py:473 msgid "optionally associate this product with a brand" msgstr "" -#: core/models.py:491 +#: core/models.py:479 msgid "tags that help describe or group this product" msgstr "" -#: core/models.py:496 +#: core/models.py:484 msgid "indicates whether this product is digitally delivered" msgstr "" -#: core/models.py:497 +#: core/models.py:485 msgid "is product digital" msgstr "" -#: core/models.py:503 +#: core/models.py:491 msgid "provide a clear identifying name for the product" msgstr "" -#: core/models.py:504 +#: core/models.py:492 msgid "product name" msgstr "" -#: core/models.py:509 core/models.py:831 +#: core/models.py:497 core/models.py:772 msgid "add a detailed description of the product" msgstr "" -#: core/models.py:510 +#: core/models.py:498 msgid "product description" msgstr "" -#: core/models.py:517 +#: core/models.py:505 msgid "part number for this product" msgstr "" -#: core/models.py:518 +#: core/models.py:506 msgid "part number" msgstr "" -#: core/models.py:537 +#: core/models.py:525 msgid "stock keeping unit for this product" msgstr "" -#: core/models.py:607 +#: core/models.py:599 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 " @@ -1608,303 +1580,369 @@ msgid "" "for dynamic and flexible data structuring." msgstr "" -#: core/models.py:619 +#: core/models.py:611 msgid "category of this attribute" msgstr "" -#: core/models.py:627 +#: core/models.py:619 msgid "group of this attribute" msgstr "" -#: core/models.py:633 +#: core/models.py:625 msgid "string" msgstr "" -#: core/models.py:634 +#: core/models.py:626 msgid "integer" msgstr "" -#: core/models.py:635 +#: core/models.py:627 msgid "float" msgstr "" -#: core/models.py:636 +#: core/models.py:628 msgid "boolean" msgstr "" -#: core/models.py:637 +#: core/models.py:629 msgid "array" msgstr "" -#: core/models.py:638 +#: core/models.py:630 msgid "object" msgstr "" -#: core/models.py:640 +#: core/models.py:632 msgid "type of the attribute's value" msgstr "" -#: core/models.py:641 +#: core/models.py:633 msgid "value type" msgstr "" -#: core/models.py:646 +#: core/models.py:638 msgid "name of this attribute" msgstr "" -#: core/models.py:647 +#: core/models.py:639 msgid "attribute's name" msgstr "" -#: core/models.py:653 +#: core/models.py:645 msgid "is filterable" msgstr "" -#: core/models.py:654 +#: core/models.py:646 msgid "designates whether this attribute can be used for filtering or not" msgstr "" -#: core/models.py:665 core/models.py:700 +#: core/models.py:657 core/models.py:675 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "" -#: core/models.py:699 +#: core/models.py:663 +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:674 msgid "attribute of this value" msgstr "" -#: core/models.py:707 +#: core/models.py:682 msgid "the specific product associated with this attribute's value" msgstr "" -#: core/models.py:713 +#: core/models.py:688 msgid "the specific value for this attribute" msgstr "" -#: core/models.py:747 +#: core/models.py:701 +msgid "" +"Represents a product image associated with a product in the system. This " +"class is designed to manage images for products, including functionality for " +"uploading image files, associating them with specific products, and " +"determining their display order. It also includes an accessibility feature " +"with alternative text for the images." +msgstr "" + +#: core/models.py:712 msgid "provide alternative text for the image for accessibility" msgstr "" -#: core/models.py:748 +#: core/models.py:713 msgid "image alt text" msgstr "" -#: core/models.py:751 +#: core/models.py:716 msgid "upload the image file for this product" msgstr "" -#: core/models.py:752 core/models.py:777 +#: core/models.py:717 core/models.py:742 msgid "product image" msgstr "" -#: core/models.py:758 +#: core/models.py:723 msgid "determines the order in which images are displayed" msgstr "" -#: core/models.py:759 +#: core/models.py:724 msgid "display priority" msgstr "" -#: core/models.py:764 +#: core/models.py:729 msgid "the product that this image represents" msgstr "" -#: core/models.py:778 +#: core/models.py:743 msgid "product images" msgstr "" -#: core/models.py:819 +#: core/models.py:748 +msgid "" +"Represents a promotional campaign for products with a discount. This class " +"is used to define and manage promotional campaigns that offer a percentage-" +"based discount for products. The class includes attributes for setting the " +"discount rate, providing details about the promotion, and linking it to the " +"applicable products. It integrates with the product catalog to determine the " +"affected items in the campaign." +msgstr "" + +#: core/models.py:760 msgid "percentage discount for the selected products" msgstr "" -#: core/models.py:820 +#: core/models.py:761 msgid "discount percentage" msgstr "" -#: core/models.py:825 +#: core/models.py:766 msgid "provide a unique name for this promotion" msgstr "" -#: core/models.py:826 +#: core/models.py:767 msgid "promotion name" msgstr "" -#: core/models.py:832 +#: core/models.py:773 msgid "promotion description" msgstr "" -#: core/models.py:837 +#: core/models.py:778 msgid "select which products are included in this promotion" msgstr "" -#: core/models.py:838 +#: core/models.py:779 msgid "included products" msgstr "" -#: core/models.py:842 +#: core/models.py:783 msgid "promotion" msgstr "" -#: core/models.py:867 +#: core/models.py:794 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"class provides functionality to manage a collection of products, supporting " +"operations such as adding and removing products, as well as supporting " +"operations for adding and removing multiple products at once." +msgstr "" + +#: core/models.py:806 msgid "products that the user has marked as wanted" msgstr "" -#: core/models.py:875 +#: core/models.py:814 msgid "user who owns this wishlist" msgstr "" -#: core/models.py:876 +#: core/models.py:815 msgid "wishlist owner" msgstr "" -#: core/models.py:884 +#: core/models.py:823 msgid "wishlist" msgstr "" -#: core/models.py:951 +#: core/models.py:865 +msgid "" +"Represents a documentary record tied to a product. This class is used to " +"store information about documentaries related to specific products, " +"including file uploads and their metadata. It contains methods and " +"properties to handle the file type and storage path for the documentary " +"files. It extends functionality from specific mixins and provides additional " +"custom features." +msgstr "" + +#: core/models.py:878 msgid "documentary" msgstr "" -#: core/models.py:952 +#: core/models.py:879 msgid "documentaries" msgstr "" -#: core/models.py:962 +#: core/models.py:889 msgid "unresolved" msgstr "" -#: core/models.py:1008 +#: core/models.py:894 +msgid "" +"Represents an address entity that includes location details and associations " +"with a user. Provides functionality for geographic and address data storage, " +"as well as integration with geocoding services. This class is designed to " +"store detailed address information including components like street, city, " +"region, country, and geolocation (longitude and latitude). It supports " +"integration with geocoding APIs, enabling the storage of raw API responses " +"for further processing or inspection. The class also allows associating an " +"address with a user, facilitating personalized data handling." +msgstr "" + +#: core/models.py:909 msgid "address line for the customer" msgstr "" -#: core/models.py:1009 +#: core/models.py:910 msgid "address line" msgstr "" -#: core/models.py:1011 +#: core/models.py:912 msgid "street" msgstr "" -#: core/models.py:1012 +#: core/models.py:913 msgid "district" msgstr "" -#: core/models.py:1013 +#: core/models.py:914 msgid "city" msgstr "" -#: core/models.py:1014 +#: core/models.py:915 msgid "region" msgstr "" -#: core/models.py:1015 +#: core/models.py:916 msgid "postal code" msgstr "" -#: core/models.py:1016 +#: core/models.py:917 msgid "country" msgstr "" -#: core/models.py:1023 +#: core/models.py:924 msgid "geolocation point: (longitude, latitude)" msgstr "" -#: core/models.py:1026 +#: core/models.py:927 msgid "full JSON response from geocoder for this address" msgstr "" -#: core/models.py:1031 +#: core/models.py:932 msgid "stored JSON response from the geocoding service" msgstr "" -#: core/models.py:1039 +#: core/models.py:940 msgid "address" msgstr "" -#: core/models.py:1040 +#: core/models.py:941 msgid "addresses" msgstr "" -#: core/models.py:1085 +#: core/models.py:953 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" + +#: core/models.py:967 msgid "unique code used by a user to redeem a discount" msgstr "" -#: core/models.py:1086 +#: core/models.py:968 msgid "promo code identifier" msgstr "" -#: core/models.py:1093 +#: core/models.py:975 msgid "fixed discount amount applied if percent is not used" msgstr "" -#: core/models.py:1094 +#: core/models.py:976 msgid "fixed discount amount" msgstr "" -#: core/models.py:1100 +#: core/models.py:982 msgid "percentage discount applied if fixed amount is not used" msgstr "" -#: core/models.py:1101 +#: core/models.py:983 msgid "percentage discount" msgstr "" -#: core/models.py:1106 +#: core/models.py:988 msgid "timestamp when the promocode expires" msgstr "" -#: core/models.py:1107 +#: core/models.py:989 msgid "end validity time" msgstr "" -#: core/models.py:1112 +#: core/models.py:994 msgid "timestamp from which this promocode is valid" msgstr "" -#: core/models.py:1113 +#: core/models.py:995 msgid "start validity time" msgstr "" -#: core/models.py:1118 +#: core/models.py:1000 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" -#: core/models.py:1119 +#: core/models.py:1001 msgid "usage timestamp" msgstr "" -#: core/models.py:1124 +#: core/models.py:1006 msgid "user assigned to this promocode if applicable" msgstr "" -#: core/models.py:1125 +#: core/models.py:1007 msgid "assigned user" msgstr "" -#: core/models.py:1132 +#: core/models.py:1014 msgid "promo code" msgstr "" -#: core/models.py:1133 +#: core/models.py:1015 msgid "promo codes" msgstr "" -#: core/models.py:1140 +#: core/models.py:1022 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "" -#: core/models.py:1155 +#: core/models.py:1037 msgid "promocode already used" msgstr "" -#: core/models.py:1171 +#: core/models.py:1053 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "" -#: core/models.py:1180 +#: core/models.py:1062 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 " @@ -1914,277 +1952,309 @@ msgid "" "supports managing the products in the order lifecycle." msgstr "" -#: core/models.py:1197 +#: core/models.py:1079 msgid "the billing address used for this order" msgstr "" -#: core/models.py:1205 +#: core/models.py:1087 msgid "optional promo code applied to this order" msgstr "" -#: core/models.py:1206 +#: core/models.py:1088 msgid "applied promo code" msgstr "" -#: core/models.py:1214 +#: core/models.py:1096 msgid "the shipping address used for this order" msgstr "" -#: core/models.py:1215 +#: core/models.py:1097 msgid "shipping address" msgstr "" -#: core/models.py:1221 +#: core/models.py:1103 msgid "current status of the order in its lifecycle" msgstr "" -#: core/models.py:1222 +#: core/models.py:1104 msgid "order status" msgstr "" -#: core/models.py:1227 core/models.py:1686 +#: core/models.py:1109 core/models.py:1560 msgid "json structure of notifications to display to users" msgstr "" -#: core/models.py:1233 +#: core/models.py:1115 msgid "json representation of order attributes for this order" msgstr "" -#: core/models.py:1239 +#: core/models.py:1121 msgid "the user who placed the order" msgstr "" -#: core/models.py:1240 +#: core/models.py:1122 msgid "user" msgstr "" -#: core/models.py:1246 +#: core/models.py:1128 msgid "the timestamp when the order was finalized" msgstr "" -#: core/models.py:1247 +#: core/models.py:1129 msgid "buy time" msgstr "" -#: core/models.py:1254 +#: core/models.py:1136 msgid "a human-readable identifier for the order" msgstr "" -#: core/models.py:1255 +#: core/models.py:1137 msgid "human readable id" msgstr "" -#: core/models.py:1261 +#: core/models.py:1143 msgid "order" msgstr "" -#: core/models.py:1282 +#: core/models.py:1168 msgid "a user must have only one pending order at a time" msgstr "" -#: core/models.py:1316 +#: core/models.py:1202 msgid "you cannot add products to an order that is not a pending one" msgstr "" -#: core/models.py:1321 +#: core/models.py:1207 msgid "you cannot add inactive products to order" msgstr "" -#: core/models.py:1338 +#: core/models.py:1224 msgid "you cannot add more products than available in stock" msgstr "" -#: core/models.py:1360 core/models.py:1385 core/models.py:1393 +#: core/models.py:1246 core/models.py:1271 core/models.py:1279 msgid "you cannot remove products from an order that is not a pending one" msgstr "" -#: core/models.py:1381 +#: core/models.py:1267 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "" -#: core/models.py:1413 +#: core/models.py:1299 msgid "promocode does not exist" msgstr "" -#: core/models.py:1419 +#: core/models.py:1305 msgid "you can only buy physical products with shipping address specified" msgstr "" -#: core/models.py:1438 +#: core/models.py:1324 msgid "address does not exist" msgstr "" -#: core/models.py:1459 core/models.py:1528 +#: core/models.py:1345 core/models.py:1414 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" -#: core/models.py:1462 core/models.py:1524 +#: core/models.py:1348 core/models.py:1410 msgid "invalid force value" msgstr "" -#: core/models.py:1468 core/models.py:1531 +#: core/models.py:1354 core/models.py:1417 msgid "you cannot purchase an empty order!" msgstr "" -#: core/models.py:1487 +#: core/models.py:1373 msgid "you cannot buy an order without a user" msgstr "" -#: core/models.py:1501 +#: core/models.py:1387 msgid "a user without a balance cannot buy with balance" msgstr "" -#: core/models.py:1506 +#: core/models.py:1392 msgid "insufficient funds to complete the order" msgstr "" -#: core/models.py:1540 +#: core/models.py:1426 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "" -#: core/models.py:1549 +#: core/models.py:1435 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" -#: core/models.py:1674 +#: core/models.py:1533 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" + +#: core/models.py:1548 msgid "the price paid by the customer for this product at purchase time" msgstr "" -#: core/models.py:1675 +#: core/models.py:1549 msgid "purchase price at order time" msgstr "" -#: core/models.py:1680 +#: core/models.py:1554 msgid "internal comments for admins about this ordered product" msgstr "" -#: core/models.py:1681 +#: core/models.py:1555 msgid "internal comments" msgstr "" -#: core/models.py:1687 +#: core/models.py:1561 msgid "user notifications" msgstr "" -#: core/models.py:1692 +#: core/models.py:1566 msgid "json representation of this item's attributes" msgstr "" -#: core/models.py:1693 +#: core/models.py:1567 msgid "ordered product attributes" msgstr "" -#: core/models.py:1698 +#: core/models.py:1572 msgid "reference to the parent order that contains this product" msgstr "" -#: core/models.py:1699 +#: core/models.py:1573 msgid "parent order" msgstr "" -#: core/models.py:1708 +#: core/models.py:1582 msgid "the specific product associated with this order line" msgstr "" -#: core/models.py:1715 +#: core/models.py:1589 msgid "quantity of this specific product in the order" msgstr "" -#: core/models.py:1716 +#: core/models.py:1590 msgid "product quantity" msgstr "" -#: core/models.py:1723 +#: core/models.py:1597 msgid "current status of this product in the order" msgstr "" -#: core/models.py:1724 +#: core/models.py:1598 msgid "product line status" msgstr "" -#: core/models.py:1784 +#: core/models.py:1661 msgid "order product must have an order" msgstr "" -#: core/models.py:1786 +#: core/models.py:1663 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "" -#: core/models.py:1800 +#: core/models.py:1677 msgid "you cannot feedback an order which is not received" msgstr "" -#: core/models.py:1806 +#: core/models.py:1683 msgid "name" msgstr "" -#: core/models.py:1807 +#: core/models.py:1684 msgid "URL of the integration" msgstr "" -#: core/models.py:1808 +#: core/models.py:1685 msgid "authentication credentials" msgstr "" -#: core/models.py:1822 +#: core/models.py:1699 msgid "you can only have one default CRM provider" msgstr "" -#: core/models.py:1826 +#: core/models.py:1703 msgid "CRM" msgstr "" -#: core/models.py:1827 +#: core/models.py:1704 msgid "CRMs" msgstr "" -#: core/models.py:1839 +#: core/models.py:1716 msgid "order CRM link" msgstr "" -#: core/models.py:1840 +#: core/models.py:1717 msgid "orders CRM links" msgstr "" -#: core/models.py:1874 +#: core/models.py:1722 +msgid "" +"Represents the downloading functionality for digital assets associated with " +"orders. The DigitalAssetDownload class provides the ability to manage and " +"access downloads related to order products. It maintains information about " +"the associated order product, the number of downloads, and whether the asset " +"is publicly visible. It includes a method to generate a URL for downloading " +"the asset when the associated order is in a completed status." +msgstr "" + +#: core/models.py:1736 msgid "download" msgstr "" -#: core/models.py:1875 +#: core/models.py:1737 msgid "downloads" msgstr "" -#: core/models.py:1883 +#: core/models.py:1745 msgid "you can not download a digital asset for a non-finished order" msgstr "" -#: core/models.py:1913 +#: core/models.py:1754 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." +msgstr "" + +#: core/models.py:1766 msgid "user-provided comments about their experience with the product" msgstr "" -#: core/models.py:1914 +#: core/models.py:1767 msgid "feedback comments" msgstr "" -#: core/models.py:1921 +#: core/models.py:1774 msgid "references the specific product in an order that this feedback is about" msgstr "" -#: core/models.py:1922 +#: core/models.py:1775 msgid "related order product" msgstr "" -#: core/models.py:1927 +#: core/models.py:1780 msgid "user-assigned rating for the product" msgstr "" -#: core/models.py:1928 +#: core/models.py:1781 msgid "product rating" msgstr "" @@ -2386,17 +2456,17 @@ msgstr "" msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "" -#: core/utils/emailing.py:64 +#: core/utils/emailing.py:74 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "" -#: core/utils/emailing.py:99 +#: core/utils/emailing.py:109 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "" -#: core/utils/emailing.py:187 +#: core/utils/emailing.py:197 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "" @@ -2418,15 +2488,15 @@ msgstr "" msgid "invalid phone number format" msgstr "" -#: core/views.py:481 +#: core/views.py:489 msgid "you can only download the digital asset once" msgstr "" -#: core/views.py:539 +#: core/views.py:547 msgid "favicon not found" msgstr "" -#: core/viewsets.py:1319 +#: core/viewsets.py:1357 #, python-brace-format msgid "Geocoding error: {e}" msgstr "" diff --git a/core/locale/id_ID/LC_MESSAGES/django.mo b/core/locale/id_ID/LC_MESSAGES/django.mo index d8847803e9119e2d2ac2e44bc9c3d14b68ce29b6..cfede42c35a9be8a0953facf3600f4648b301194 100644 GIT binary patch delta 20298 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 Ju3vHR{{gtg)ZzdD delta 12586 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 diff --git a/core/locale/id_ID/LC_MESSAGES/django.po b/core/locale/id_ID/LC_MESSAGES/django.po index 276a0ddc..3bcd9e93 100644 --- a/core/locale/id_ID/LC_MESSAGES/django.po +++ b/core/locale/id_ID/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:52+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -89,11 +89,11 @@ msgid "selected items have been deactivated." msgstr "Item yang dipilih telah dinonaktifkan!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:712 core/models.py:720 +#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 msgid "attribute value" msgstr "Nilai Atribut" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:721 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 msgid "attribute values" msgstr "Nilai Atribut" @@ -105,7 +105,7 @@ msgstr "Gambar" msgid "images" msgstr "Gambar" -#: core/admin.py:155 core/models.py:457 +#: core/admin.py:155 core/models.py:445 msgid "stock" msgstr "Stok" @@ -113,11 +113,11 @@ msgstr "Stok" msgid "stocks" msgstr "Saham" -#: core/admin.py:166 core/models.py:1735 +#: core/admin.py:166 core/models.py:1609 msgid "order product" msgstr "Pesan Produk" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1736 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 msgid "order products" msgstr "Pesan Produk" @@ -336,7 +336,7 @@ msgstr "" "Menulis ulang beberapa bidang dari kategori yang sudah ada sehingga tidak " "dapat diedit" -#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:553 +#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:487 #: core/graphene/object_types.py:117 core/graphene/object_types.py:207 #: core/graphene/object_types.py:509 msgid "SEO Meta snapshot" @@ -614,47 +614,7 @@ msgstr "Daftar semua produk (tampilan sederhana)" msgid "(exact) Product UUID" msgstr "UUID Produk (persis)" -#: core/docs/drf/viewsets.py:384 -msgid "(icontains) Product name" -msgstr "(berisi) Nama produk" - -#: core/docs/drf/viewsets.py:390 -msgid "(list) Category names, case-insensitive" -msgstr "(daftar) Nama kategori, tidak peka huruf besar-kecil" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Category UUID" -msgstr "(persis) Kategori UUID" - -#: core/docs/drf/viewsets.py:402 -msgid "(list) Tag names, case-insensitive" -msgstr "(daftar) Nama tag, tidak peka huruf besar-kecil" - -#: core/docs/drf/viewsets.py:408 -msgid "(gte) Minimum stock price" -msgstr "(gte) Harga saham minimum" - -#: core/docs/drf/viewsets.py:414 -msgid "(lte) Maximum stock price" -msgstr "(lte) Harga saham maksimum" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Only active products" -msgstr "(persis) Hanya produk yang aktif" - -#: core/docs/drf/viewsets.py:426 -msgid "(iexact) Brand name" -msgstr "(iexact) Nama merek" - -#: core/docs/drf/viewsets.py:438 -msgid "(gt) Minimum stock quantity" -msgstr "(gt) Jumlah stok minimum" - -#: core/docs/drf/viewsets.py:444 -msgid "(exact) Digital vs. physical" -msgstr "(persis) Digital vs. fisik" - -#: core/docs/drf/viewsets.py:451 +#: core/docs/drf/viewsets.py:385 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -662,252 +622,256 @@ 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:465 core/docs/drf/viewsets.py:466 +#: core/docs/drf/viewsets.py:399 core/docs/drf/viewsets.py:400 msgid "retrieve a single product (detailed view)" msgstr "Mengambil satu produk (tampilan detail)" -#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:495 -#: core/docs/drf/viewsets.py:511 core/docs/drf/viewsets.py:527 -#: core/docs/drf/viewsets.py:543 core/docs/drf/viewsets.py:559 +#: core/docs/drf/viewsets.py:405 core/docs/drf/viewsets.py:429 +#: core/docs/drf/viewsets.py:445 core/docs/drf/viewsets.py:461 +#: core/docs/drf/viewsets.py:477 core/docs/drf/viewsets.py:493 msgid "Product UUID or slug" msgstr "UUID Produk atau Siput" -#: core/docs/drf/viewsets.py:481 core/docs/drf/viewsets.py:482 +#: core/docs/drf/viewsets.py:415 core/docs/drf/viewsets.py:416 msgid "create a product" msgstr "Membuat produk" -#: core/docs/drf/viewsets.py:489 core/docs/drf/viewsets.py:490 +#: core/docs/drf/viewsets.py:423 core/docs/drf/viewsets.py:424 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:505 core/docs/drf/viewsets.py:506 +#: core/docs/drf/viewsets.py:439 core/docs/drf/viewsets.py:440 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:521 core/docs/drf/viewsets.py:522 +#: core/docs/drf/viewsets.py:455 core/docs/drf/viewsets.py:456 msgid "delete a product" msgstr "Menghapus produk" -#: core/docs/drf/viewsets.py:537 core/docs/drf/viewsets.py:538 +#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:472 msgid "lists all permitted feedbacks for a product" msgstr "mencantumkan semua umpan balik yang diizinkan untuk suatu produk" -#: core/docs/drf/viewsets.py:554 +#: core/docs/drf/viewsets.py:488 msgid "returns a snapshot of the product's SEO meta data" msgstr "Mengembalikan cuplikan data meta SEO produk" -#: core/docs/drf/viewsets.py:572 +#: core/docs/drf/viewsets.py:506 msgid "list all addresses" msgstr "Daftar semua alamat" -#: core/docs/drf/viewsets.py:579 +#: core/docs/drf/viewsets.py:513 msgid "retrieve a single address" msgstr "Mengambil satu alamat" -#: core/docs/drf/viewsets.py:586 +#: core/docs/drf/viewsets.py:520 msgid "create a new address" msgstr "Membuat alamat baru" -#: core/docs/drf/viewsets.py:594 +#: core/docs/drf/viewsets.py:528 msgid "delete an address" msgstr "Menghapus alamat" -#: core/docs/drf/viewsets.py:601 +#: core/docs/drf/viewsets.py:535 msgid "update an entire address" msgstr "Memperbarui seluruh alamat" -#: core/docs/drf/viewsets.py:609 +#: core/docs/drf/viewsets.py:543 msgid "partially update an address" msgstr "Memperbarui sebagian alamat" -#: core/docs/drf/viewsets.py:617 +#: core/docs/drf/viewsets.py:551 msgid "autocomplete address suggestions" msgstr "Masukan alamat pelengkapan otomatis" -#: core/docs/drf/viewsets.py:622 +#: core/docs/drf/viewsets.py:556 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:628 +#: core/docs/drf/viewsets.py:562 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:1413 +#: core/models.py:1299 msgid "promocode does not exist" msgstr "Kode promosi tidak ada" -#: core/models.py:1419 +#: core/models.py:1305 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:1438 +#: core/models.py:1324 msgid "address does not exist" msgstr "Alamat tidak ada" -#: core/models.py:1459 core/models.py:1528 +#: core/models.py:1345 core/models.py:1414 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:1462 core/models.py:1524 +#: core/models.py:1348 core/models.py:1410 msgid "invalid force value" msgstr "Nilai gaya tidak valid" -#: core/models.py:1468 core/models.py:1531 +#: core/models.py:1354 core/models.py:1417 msgid "you cannot purchase an empty order!" msgstr "Anda tidak dapat membeli pesanan kosong!" -#: core/models.py:1487 +#: core/models.py:1373 msgid "you cannot buy an order without a user" msgstr "Anda tidak dapat membeli pesanan tanpa pengguna!" -#: core/models.py:1501 +#: core/models.py:1387 msgid "a user without a balance cannot buy with balance" msgstr "Pengguna tanpa saldo tidak dapat membeli dengan saldo!" -#: core/models.py:1506 +#: core/models.py:1392 msgid "insufficient funds to complete the order" msgstr "Dana tidak mencukupi untuk menyelesaikan pesanan" -#: core/models.py:1540 +#: core/models.py:1426 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2211,7 +2294,7 @@ msgstr "" "Anda tidak dapat membeli tanpa registrasi, berikan informasi berikut: nama " "pelanggan, email pelanggan, nomor telepon pelanggan" -#: core/models.py:1549 +#: core/models.py:1435 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2219,145 +2302,199 @@ msgstr "" "Metode pembayaran tidak valid: {payment_method} dari " "{available_payment_methods}!" -#: core/models.py:1674 +#: core/models.py:1533 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" +"Mewakili produk yang terkait dengan pesanan dan atributnya. Model " +"OrderProduct menyimpan informasi tentang produk yang merupakan bagian dari " +"pesanan, termasuk rincian seperti harga pembelian, kuantitas, atribut " +"produk, dan status. Model ini mengelola notifikasi untuk pengguna dan " +"administrator dan menangani operasi seperti mengembalikan saldo produk atau " +"menambahkan umpan balik. Model ini juga menyediakan metode dan properti yang" +" mendukung logika bisnis, seperti menghitung harga total atau menghasilkan " +"URL unduhan untuk produk digital. Model ini terintegrasi dengan model " +"Pesanan dan Produk dan menyimpan referensi ke keduanya." + +#: core/models.py:1548 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:1675 +#: core/models.py:1549 msgid "purchase price at order time" msgstr "Harga pembelian pada saat pemesanan" -#: core/models.py:1680 +#: core/models.py:1554 msgid "internal comments for admins about this ordered product" msgstr "Komentar internal untuk admin tentang produk yang dipesan ini" -#: core/models.py:1681 +#: core/models.py:1555 msgid "internal comments" msgstr "Komentar internal" -#: core/models.py:1687 +#: core/models.py:1561 msgid "user notifications" msgstr "Pemberitahuan pengguna" -#: core/models.py:1692 +#: core/models.py:1566 msgid "json representation of this item's attributes" msgstr "Representasi JSON dari atribut item ini" -#: core/models.py:1693 +#: core/models.py:1567 msgid "ordered product attributes" msgstr "Atribut produk yang dipesan" -#: core/models.py:1698 +#: core/models.py:1572 msgid "reference to the parent order that contains this product" msgstr "Referensi ke pesanan induk yang berisi produk ini" -#: core/models.py:1699 +#: core/models.py:1573 msgid "parent order" msgstr "Urutan induk" -#: core/models.py:1708 +#: core/models.py:1582 msgid "the specific product associated with this order line" msgstr "Produk spesifik yang terkait dengan baris pesanan ini" -#: core/models.py:1715 +#: core/models.py:1589 msgid "quantity of this specific product in the order" msgstr "Jumlah produk spesifik ini dalam pesanan" -#: core/models.py:1716 +#: core/models.py:1590 msgid "product quantity" msgstr "Kuantitas produk" -#: core/models.py:1723 +#: core/models.py:1597 msgid "current status of this product in the order" msgstr "Status saat ini dari produk ini dalam pesanan" -#: core/models.py:1724 +#: core/models.py:1598 msgid "product line status" msgstr "Status lini produk" -#: core/models.py:1784 +#: core/models.py:1661 msgid "order product must have an order" msgstr "Pesananproduk harus memiliki pesanan terkait!" -#: core/models.py:1786 +#: core/models.py:1663 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Tindakan yang salah ditentukan untuk umpan balik: {action}!" -#: core/models.py:1800 +#: core/models.py:1677 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:1806 +#: core/models.py:1683 msgid "name" msgstr "Nama" -#: core/models.py:1807 +#: core/models.py:1684 msgid "URL of the integration" msgstr "URL integrasi" -#: core/models.py:1808 +#: core/models.py:1685 msgid "authentication credentials" msgstr "Kredensial otentikasi" -#: core/models.py:1822 +#: core/models.py:1699 msgid "you can only have one default CRM provider" msgstr "Anda hanya dapat memiliki satu penyedia CRM default" -#: core/models.py:1826 +#: core/models.py:1703 msgid "CRM" msgstr "CRM" -#: core/models.py:1827 +#: core/models.py:1704 msgid "CRMs" msgstr "CRM" -#: core/models.py:1839 +#: core/models.py:1716 msgid "order CRM link" msgstr "Tautan CRM pesanan" -#: core/models.py:1840 +#: core/models.py:1717 msgid "orders CRM links" msgstr "Tautan CRM Pesanan" -#: core/models.py:1874 +#: core/models.py:1722 +msgid "" +"Represents the downloading functionality for digital assets associated with " +"orders. The DigitalAssetDownload class provides the ability to manage and " +"access downloads related to order products. It maintains information about " +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." +msgstr "" +"Mewakili fungsionalitas pengunduhan untuk aset digital yang terkait dengan " +"pesanan. Kelas DigitalAssetDownload menyediakan kemampuan untuk mengelola " +"dan mengakses unduhan yang terkait dengan produk pesanan. Kelas ini " +"menyimpan informasi tentang produk pesanan terkait, jumlah unduhan, dan " +"apakah aset tersebut dapat dilihat oleh publik. Kelas ini mencakup metode " +"untuk menghasilkan URL untuk mengunduh aset ketika pesanan terkait dalam " +"status selesai." + +#: core/models.py:1736 msgid "download" msgstr "Unduh" -#: core/models.py:1875 +#: core/models.py:1737 msgid "downloads" msgstr "Unduhan" -#: core/models.py:1883 +#: core/models.py:1745 msgid "you can not download a digital asset for a non-finished order" msgstr "" "Anda tidak dapat mengunduh aset digital untuk pesanan yang belum selesai" -#: core/models.py:1913 +#: core/models.py:1754 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." +msgstr "" +"Mengelola umpan balik pengguna untuk produk. Kelas ini dirancang untuk " +"menangkap dan menyimpan umpan balik pengguna untuk produk tertentu yang " +"telah mereka beli. Kelas ini berisi atribut untuk menyimpan komentar " +"pengguna, referensi ke produk terkait dalam pesanan, dan peringkat yang " +"ditetapkan pengguna. Kelas ini menggunakan bidang basis data untuk " +"memodelkan dan mengelola data umpan balik secara efektif." + +#: core/models.py:1766 msgid "user-provided comments about their experience with the product" msgstr "" "Komentar yang diberikan pengguna tentang pengalaman mereka dengan produk" -#: core/models.py:1914 +#: core/models.py:1767 msgid "feedback comments" msgstr "Komentar umpan balik" -#: core/models.py:1921 +#: core/models.py:1774 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:1922 +#: core/models.py:1775 msgid "related order product" msgstr "Produk pesanan terkait" -#: core/models.py:1927 +#: core/models.py:1780 msgid "user-assigned rating for the product" msgstr "Peringkat yang ditetapkan pengguna untuk produk" -#: core/models.py:1928 +#: core/models.py:1781 msgid "product rating" msgstr "Peringkat produk" @@ -2576,17 +2713,17 @@ msgstr "Nilai batas waktu tidak valid, harus antara 0 dan 216000 detik" msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | hubungi kami dimulai" -#: core/utils/emailing.py:64 +#: core/utils/emailing.py:74 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Konfirmasi Pesanan" -#: core/utils/emailing.py:99 +#: core/utils/emailing.py:109 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Pesanan Dikirim" -#: core/utils/emailing.py:187 +#: core/utils/emailing.py:197 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | kode promo diberikan" @@ -2609,15 +2746,15 @@ msgstr "" msgid "invalid phone number format" msgstr "Format nomor telepon tidak valid" -#: core/views.py:481 +#: core/views.py:489 msgid "you can only download the digital asset once" msgstr "Anda hanya dapat mengunduh aset digital sekali saja" -#: core/views.py:539 +#: core/views.py:547 msgid "favicon not found" msgstr "favicon tidak ditemukan" -#: core/viewsets.py:1319 +#: core/viewsets.py:1357 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Kesalahan pengodean geografis: {e}" diff --git a/core/locale/it_IT/LC_MESSAGES/django.mo b/core/locale/it_IT/LC_MESSAGES/django.mo index 0af9877affb1a5f63b09b9cd4a37905e7753b54d..ea7b660ada3d6c9715e78812a7dc844fea8e7eab 100644 GIT binary patch delta 20690 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 L`Wvsmb=Lm@BZxgS delta 12604 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -90,11 +90,11 @@ msgid "selected items have been deactivated." msgstr "Gli articoli selezionati sono stati disattivati!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:712 core/models.py:720 +#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 msgid "attribute value" msgstr "Valore dell'attributo" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:721 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 msgid "attribute values" msgstr "Valori degli attributi" @@ -106,7 +106,7 @@ msgstr "Immagine" msgid "images" msgstr "Immagini" -#: core/admin.py:155 core/models.py:457 +#: core/admin.py:155 core/models.py:445 msgid "stock" msgstr "Stock" @@ -114,11 +114,11 @@ msgstr "Stock" msgid "stocks" msgstr "Le scorte" -#: core/admin.py:166 core/models.py:1735 +#: core/admin.py:166 core/models.py:1609 msgid "order product" msgstr "Ordina il prodotto" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1736 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 msgid "order products" msgstr "Ordinare i prodotti" @@ -334,7 +334,7 @@ msgstr "" "Riscrivere alcuni campi di una categoria esistente salvando gli elementi non" " modificabili" -#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:553 +#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:487 #: core/graphene/object_types.py:117 core/graphene/object_types.py:207 #: core/graphene/object_types.py:509 msgid "SEO Meta snapshot" @@ -614,48 +614,7 @@ msgstr "Elenco di tutti i prodotti (visualizzazione semplice)" msgid "(exact) Product UUID" msgstr "(esatto) UUID del prodotto" -#: core/docs/drf/viewsets.py:384 -msgid "(icontains) Product name" -msgstr "(icontains) Nome del prodotto" - -#: core/docs/drf/viewsets.py:390 -msgid "(list) Category names, case-insensitive" -msgstr "" -"(elenco) Nomi di categoria, senza distinzione tra maiuscole e minuscole" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Category UUID" -msgstr "(esatto) UUID della categoria" - -#: core/docs/drf/viewsets.py:402 -msgid "(list) Tag names, case-insensitive" -msgstr "(elenco) Nomi di tag, senza distinzione tra maiuscole e minuscole" - -#: core/docs/drf/viewsets.py:408 -msgid "(gte) Minimum stock price" -msgstr "(gte) Prezzo minimo delle azioni" - -#: core/docs/drf/viewsets.py:414 -msgid "(lte) Maximum stock price" -msgstr "(lte) Prezzo massimo del titolo" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Only active products" -msgstr "(esatto) Solo prodotti attivi" - -#: core/docs/drf/viewsets.py:426 -msgid "(iexact) Brand name" -msgstr "(iexact) Nome del marchio" - -#: core/docs/drf/viewsets.py:438 -msgid "(gt) Minimum stock quantity" -msgstr "(gt) Quantità minima di scorte" - -#: core/docs/drf/viewsets.py:444 -msgid "(exact) Digital vs. physical" -msgstr "(esatto) Digitale e fisico" - -#: core/docs/drf/viewsets.py:451 +#: core/docs/drf/viewsets.py:385 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -663,252 +622,256 @@ 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:465 core/docs/drf/viewsets.py:466 +#: core/docs/drf/viewsets.py:399 core/docs/drf/viewsets.py:400 msgid "retrieve a single product (detailed view)" msgstr "Recuperare un singolo prodotto (vista dettagliata)" -#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:495 -#: core/docs/drf/viewsets.py:511 core/docs/drf/viewsets.py:527 -#: core/docs/drf/viewsets.py:543 core/docs/drf/viewsets.py:559 +#: core/docs/drf/viewsets.py:405 core/docs/drf/viewsets.py:429 +#: core/docs/drf/viewsets.py:445 core/docs/drf/viewsets.py:461 +#: core/docs/drf/viewsets.py:477 core/docs/drf/viewsets.py:493 msgid "Product UUID or slug" msgstr "UUID o Slug del prodotto" -#: core/docs/drf/viewsets.py:481 core/docs/drf/viewsets.py:482 +#: core/docs/drf/viewsets.py:415 core/docs/drf/viewsets.py:416 msgid "create a product" msgstr "Creare un prodotto" -#: core/docs/drf/viewsets.py:489 core/docs/drf/viewsets.py:490 +#: core/docs/drf/viewsets.py:423 core/docs/drf/viewsets.py:424 msgid "rewrite an existing product, preserving non-editable fields" msgstr "" "Riscrivere un prodotto esistente, preservando i campi non modificabili" -#: core/docs/drf/viewsets.py:505 core/docs/drf/viewsets.py:506 +#: core/docs/drf/viewsets.py:439 core/docs/drf/viewsets.py:440 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:521 core/docs/drf/viewsets.py:522 +#: core/docs/drf/viewsets.py:455 core/docs/drf/viewsets.py:456 msgid "delete a product" msgstr "Eliminare un prodotto" -#: core/docs/drf/viewsets.py:537 core/docs/drf/viewsets.py:538 +#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:472 msgid "lists all permitted feedbacks for a product" msgstr "elenca tutti i feedback consentiti per un prodotto" -#: core/docs/drf/viewsets.py:554 +#: core/docs/drf/viewsets.py:488 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:572 +#: core/docs/drf/viewsets.py:506 msgid "list all addresses" msgstr "Elenco di tutti gli indirizzi" -#: core/docs/drf/viewsets.py:579 +#: core/docs/drf/viewsets.py:513 msgid "retrieve a single address" msgstr "Recuperare un singolo indirizzo" -#: core/docs/drf/viewsets.py:586 +#: core/docs/drf/viewsets.py:520 msgid "create a new address" msgstr "Creare un nuovo indirizzo" -#: core/docs/drf/viewsets.py:594 +#: core/docs/drf/viewsets.py:528 msgid "delete an address" msgstr "Cancellare un indirizzo" -#: core/docs/drf/viewsets.py:601 +#: core/docs/drf/viewsets.py:535 msgid "update an entire address" msgstr "Aggiornare un intero indirizzo" -#: core/docs/drf/viewsets.py:609 +#: core/docs/drf/viewsets.py:543 msgid "partially update an address" msgstr "Aggiornare parzialmente un indirizzo" -#: core/docs/drf/viewsets.py:617 +#: core/docs/drf/viewsets.py:551 msgid "autocomplete address suggestions" msgstr "Inserimento automatico dell'indirizzo" -#: core/docs/drf/viewsets.py:622 +#: core/docs/drf/viewsets.py:556 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:628 +#: core/docs/drf/viewsets.py:562 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:641 +#: core/docs/drf/viewsets.py:575 msgid "list all feedbacks (simple view)" msgstr "elencare tutti i feedback (vista semplice)" -#: core/docs/drf/viewsets.py:645 +#: core/docs/drf/viewsets.py:579 msgid "retrieve a single feedback (detailed view)" msgstr "recuperare un singolo feedback (vista dettagliata)" -#: core/docs/drf/viewsets.py:649 +#: core/docs/drf/viewsets.py:583 msgid "create a feedback" msgstr "creare un feedback" -#: core/docs/drf/viewsets.py:653 +#: core/docs/drf/viewsets.py:587 msgid "delete a feedback" msgstr "eliminare un feedback" -#: core/docs/drf/viewsets.py:657 +#: core/docs/drf/viewsets.py:591 msgid "rewrite an existing feedback saving non-editables" msgstr "" "Riscrivere una categoria esistente salvando gli elementi non modificabili" -#: core/docs/drf/viewsets.py:661 +#: core/docs/drf/viewsets.py:595 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:668 +#: core/docs/drf/viewsets.py:602 msgid "list all order–product relations (simple view)" msgstr "elencare tutte le relazioni ordine-prodotto (vista semplice)" -#: core/docs/drf/viewsets.py:675 +#: core/docs/drf/viewsets.py:609 msgid "retrieve a single order–product relation (detailed view)" msgstr "recuperare una singola relazione ordine-prodotto (vista dettagliata)" -#: core/docs/drf/viewsets.py:682 +#: core/docs/drf/viewsets.py:616 msgid "create a new order–product relation" msgstr "creare una nuova relazione ordine-prodotto" -#: core/docs/drf/viewsets.py:689 +#: core/docs/drf/viewsets.py:623 msgid "replace an existing order–product relation" msgstr "sostituire una relazione ordine-prodotto esistente" -#: core/docs/drf/viewsets.py:696 +#: core/docs/drf/viewsets.py:630 msgid "partially update an existing order–product relation" msgstr "aggiornare parzialmente una relazione ordine-prodotto esistente" -#: core/docs/drf/viewsets.py:703 +#: core/docs/drf/viewsets.py:637 msgid "delete an order–product relation" msgstr "eliminare una relazione ordine-prodotto" -#: core/docs/drf/viewsets.py:710 +#: core/docs/drf/viewsets.py:644 msgid "add or remove feedback on an order–product relation" msgstr "aggiungere o rimuovere un feedback su una relazione ordine-prodotto" -#: core/elasticsearch/__init__.py:105 +#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 msgid "no search term provided." msgstr "Non è stato fornito alcun termine di ricerca." -#: core/filters.py:64 core/filters.py:594 core/filters.py:623 +#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +msgid "Search" +msgstr "Ricerca" + +#: core/filters.py:66 core/filters.py:554 core/filters.py:583 msgid "UUID" msgstr "UUID" -#: core/filters.py:65 core/filters.py:429 core/filters.py:560 +#: core/filters.py:67 core/filters.py:399 core/filters.py:526 msgid "Name" msgstr "Nome" -#: core/filters.py:66 core/filters.py:562 +#: core/filters.py:68 core/filters.py:528 msgid "Categories" msgstr "Categorie" -#: core/filters.py:68 +#: core/filters.py:70 msgid "Categories Slugs" msgstr "Categorie Lumache" -#: core/filters.py:69 core/filters.py:437 +#: core/filters.py:71 core/filters.py:407 msgid "Tags" msgstr "Tag" -#: core/filters.py:70 +#: core/filters.py:72 msgid "Min Price" msgstr "Prezzo minimo" -#: core/filters.py:71 +#: core/filters.py:73 msgid "Max Price" msgstr "Max Price" -#: core/filters.py:72 +#: core/filters.py:74 msgid "Is Active" msgstr "È attivo" -#: core/filters.py:73 +#: core/filters.py:75 msgid "Brand" msgstr "Marchio" -#: core/filters.py:74 +#: core/filters.py:76 msgid "Attributes" msgstr "Attributi" -#: core/filters.py:75 +#: core/filters.py:77 msgid "Quantity" msgstr "Quantità" -#: core/filters.py:76 core/filters.py:431 core/filters.py:561 -#: core/models.py:287 core/models.py:381 core/models.py:534 +#: core/filters.py:78 core/filters.py:401 core/filters.py:527 +#: core/models.py:287 core/models.py:369 core/models.py:522 msgid "Slug" msgstr "Lumaca" -#: core/filters.py:77 +#: core/filters.py:79 msgid "Is Digital" msgstr "È digitale" -#: core/filters.py:78 +#: core/filters.py:80 msgid "Include sub-categories" msgstr "Includere le sottocategorie" -#: core/filters.py:81 +#: core/filters.py:83 msgid "Include personal ordered" msgstr "Includere prodotti ordinati personalmente" -#: core/filters.py:83 core/models.py:538 +#: core/filters.py:85 core/models.py:526 msgid "SKU" msgstr "SKU" -#: core/filters.py:166 +#: core/filters.py:161 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:356 +#: core/filters.py:324 msgid "Search (ID, product name or part number)" msgstr "Ricerca (ID, nome del prodotto o numero di parte)" -#: core/filters.py:359 +#: core/filters.py:327 msgid "Bought after (inclusive)" msgstr "Acquistato dopo (incluso)" -#: core/filters.py:360 +#: core/filters.py:328 msgid "Bought before (inclusive)" msgstr "Acquistato prima (compreso)" -#: core/filters.py:363 core/filters.py:410 core/filters.py:625 +#: core/filters.py:331 core/filters.py:378 core/filters.py:585 msgid "User email" msgstr "Email dell'utente" -#: core/filters.py:364 core/filters.py:411 core/filters.py:603 -#: core/filters.py:624 +#: core/filters.py:332 core/filters.py:379 core/filters.py:563 +#: core/filters.py:584 msgid "User UUID" msgstr "UUID utente" -#: core/filters.py:365 +#: core/filters.py:333 msgid "Status" msgstr "Stato" -#: core/filters.py:369 +#: core/filters.py:337 msgid "Human Readable ID" msgstr "ID leggibile dall'uomo" -#: core/filters.py:430 +#: core/filters.py:400 msgid "Parent" msgstr "Genitore" -#: core/filters.py:434 +#: core/filters.py:404 msgid "Whole category(has at least 1 product or not)" msgstr "Intera categoria (con o senza almeno 1 prodotto)" -#: core/filters.py:438 +#: core/filters.py:408 msgid "Level" msgstr "Livello" -#: core/filters.py:598 +#: core/filters.py:558 msgid "Product UUID" msgstr "UUID del prodotto" @@ -964,7 +927,7 @@ msgstr "" "Si prega di fornire order_uuid o order_hr_id, che si escludono a vicenda!" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:821 +#: core/graphene/mutations.py:527 core/viewsets.py:839 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" "Il metodo order.buy() ha fornito un tipo sbagliato: {type(instance)!s}" @@ -1028,37 +991,37 @@ msgstr "" msgid "add or delete a feedback for orderproduct" msgstr "Aggiungere o eliminare un feedback per l'ordine-prodotto" -#: core/graphene/mutations.py:555 +#: core/graphene/mutations.py:556 msgid "action must be either `add` or `remove`" msgstr "L'azione deve essere `add` o `remove`!" -#: core/graphene/mutations.py:558 +#: core/graphene/mutations.py:559 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Prodotto dell'ordine {order_product_uuid} non trovato!" -#: core/graphene/mutations.py:621 +#: core/graphene/mutations.py:622 msgid "original address string provided by the user" msgstr "Stringa di indirizzo originale fornita dall'utente" -#: core/graphene/mutations.py:655 core/models.py:896 core/models.py:909 -#: core/models.py:1348 core/models.py:1377 core/models.py:1402 -#: core/viewsets.py:824 +#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 +#: core/models.py:1234 core/models.py:1263 core/models.py:1288 +#: core/viewsets.py:842 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} non esiste: {uuid}!" -#: core/graphene/mutations.py:668 +#: core/graphene/mutations.py:669 msgid "limit must be between 1 and 10" msgstr "Il limite deve essere compreso tra 1 e 10" -#: core/graphene/mutations.py:713 +#: core/graphene/mutations.py:714 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch: funziona a meraviglia" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:666 core/models.py:1234 -#: core/models.py:1809 +#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 +#: core/models.py:1686 msgid "attributes" msgstr "Attributi" @@ -1071,11 +1034,11 @@ 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:224 core/models.py:312 core/models.py:620 +#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:612 msgid "categories" msgstr "Categorie" -#: core/graphene/object_types.py:124 core/models.py:395 +#: core/graphene/object_types.py:124 core/models.py:383 msgid "brands" msgstr "Marche" @@ -1133,7 +1096,7 @@ msgid "represents feedback from a user." msgstr "Rappresenta il feedback di un utente." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1228 +#: core/models.py:1110 msgid "notifications" msgstr "Notifiche" @@ -1141,7 +1104,7 @@ msgstr "Notifiche" 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:400 core/models.py:1938 +#: core/graphene/object_types.py:400 core/models.py:1791 msgid "feedback" msgstr "Feedback" @@ -1149,7 +1112,7 @@ msgstr "Feedback" msgid "a list of order products in this order" msgstr "Un elenco di prodotti ordinati in questo ordine" -#: core/graphene/object_types.py:436 core/models.py:1198 +#: core/graphene/object_types.py:436 core/models.py:1080 msgid "billing address" msgstr "Indirizzo di fatturazione" @@ -1177,7 +1140,7 @@ msgstr "Tutti i prodotti sono presenti nell'ordine digitale" msgid "transactions for this order" msgstr "Transazioni per questo ordine" -#: core/graphene/object_types.py:465 core/models.py:1262 +#: core/graphene/object_types.py:465 core/models.py:1144 msgid "orders" msgstr "Ordini" @@ -1189,15 +1152,15 @@ msgstr "URL immagine" msgid "product's images" msgstr "Immagini del prodotto" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:477 +#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 msgid "category" msgstr "Categoria" -#: core/graphene/object_types.py:502 core/models.py:1939 +#: core/graphene/object_types.py:502 core/models.py:1792 msgid "feedbacks" msgstr "Feedback" -#: core/graphene/object_types.py:503 core/models.py:394 core/models.py:486 +#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 msgid "brand" msgstr "Marchio" @@ -1229,7 +1192,7 @@ msgstr "Numero di feedback" msgid "only available for personal orders" msgstr "Prodotti disponibili solo per ordini personali" -#: core/graphene/object_types.py:534 core/models.py:548 +#: core/graphene/object_types.py:534 core/models.py:536 msgid "products" msgstr "Prodotti" @@ -1241,7 +1204,7 @@ msgstr "Codici promozionali" msgid "products on sale" msgstr "Prodotti in vendita" -#: core/graphene/object_types.py:651 core/models.py:843 +#: core/graphene/object_types.py:651 core/models.py:784 msgid "promotions" msgstr "Promozioni" @@ -1249,7 +1212,7 @@ msgstr "Promozioni" msgid "vendor" msgstr "Venditore" -#: core/graphene/object_types.py:656 core/models.py:547 +#: core/graphene/object_types.py:656 core/models.py:535 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1257,11 +1220,11 @@ msgstr "Venditore" msgid "product" msgstr "Prodotto" -#: core/graphene/object_types.py:667 core/models.py:868 +#: core/graphene/object_types.py:667 core/models.py:807 msgid "wishlisted products" msgstr "Prodotti desiderati" -#: core/graphene/object_types.py:673 core/models.py:885 +#: core/graphene/object_types.py:673 core/models.py:824 msgid "wishlists" msgstr "Liste dei desideri" @@ -1269,7 +1232,7 @@ msgstr "Liste dei desideri" msgid "tagged products" msgstr "Prodotti contrassegnati" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:492 +#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 msgid "product tags" msgstr "Tag del prodotto" @@ -1380,7 +1343,7 @@ msgstr "Gruppo di attributi padre" msgid "attribute group's name" msgstr "Nome del gruppo di attributi" -#: core/models.py:100 core/models.py:628 +#: core/models.py:100 core/models.py:620 msgid "attribute group" msgstr "Gruppo di attributi" @@ -1547,51 +1510,65 @@ msgstr "Descrizione della categoria" msgid "tags that help describe or group this category" msgstr "tag che aiutano a descrivere o raggruppare questa categoria" -#: core/models.py:299 core/models.py:387 +#: core/models.py:299 core/models.py:375 msgid "priority" msgstr "Priorità" -#: core/models.py:340 +#: core/models.py:318 +msgid "" +"Represents a Brand object in the system. This class handles information and " +"attributes related to a brand, including its name, logos, description, " +"associated categories, a unique slug, and priority order. It allows for the " +"organization and representation of brand-related data within the " +"application." +msgstr "" +"Rappresenta un oggetto Marchio nel sistema. Questa classe gestisce le " +"informazioni e gli attributi relativi a un marchio, tra cui il nome, il " +"logo, la descrizione, le categorie associate, uno slug unico e l'ordine di " +"priorità. Permette di organizzare e rappresentare i dati relativi al marchio" +" all'interno dell'applicazione." + +#: core/models.py:328 msgid "name of this brand" msgstr "Nome del marchio" -#: core/models.py:341 +#: core/models.py:329 msgid "brand name" msgstr "Nome del marchio" -#: core/models.py:348 +#: core/models.py:336 msgid "upload a logo representing this brand" msgstr "Caricare un logo che rappresenti questo marchio" -#: core/models.py:350 +#: core/models.py:338 msgid "brand small image" msgstr "Immagine piccola del marchio" -#: core/models.py:356 +#: core/models.py:344 msgid "upload a big logo representing this brand" msgstr "Caricare un grande logo che rappresenti questo marchio" -#: core/models.py:358 +#: core/models.py:346 msgid "brand big image" msgstr "Grande immagine del marchio" -#: core/models.py:363 +#: core/models.py:351 msgid "add a detailed description of the brand" msgstr "Aggiungere una descrizione dettagliata del marchio" -#: core/models.py:364 +#: core/models.py:352 msgid "brand description" msgstr "Descrizione del marchio" -#: core/models.py:369 +#: core/models.py:357 msgid "optional categories that this brand is associated with" msgstr "Categorie opzionali a cui questo marchio è associato" -#: core/models.py:370 +#: core/models.py:358 msgid "associated categories" msgstr "Categorie" -#: core/models.py:400 +#: core/models.py:388 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1607,68 +1584,68 @@ msgstr "" "dell'inventario per consentire il monitoraggio e la valutazione dei prodotti" " disponibili presso i vari fornitori." -#: core/models.py:412 +#: core/models.py:400 msgid "the vendor supplying this product stock" msgstr "Il venditore che fornisce questo stock di prodotti" -#: core/models.py:413 +#: core/models.py:401 msgid "associated vendor" msgstr "Venditore associato" -#: core/models.py:417 +#: core/models.py:405 msgid "final price to the customer after markups" msgstr "Prezzo finale al cliente dopo i ricarichi" -#: core/models.py:418 +#: core/models.py:406 msgid "selling price" msgstr "Prezzo di vendita" -#: core/models.py:423 +#: core/models.py:411 msgid "the product associated with this stock entry" msgstr "Il prodotto associato a questa voce di magazzino" -#: core/models.py:424 core/models.py:708 core/models.py:765 -#: core/models.py:1709 +#: core/models.py:412 core/models.py:683 core/models.py:730 +#: core/models.py:1583 msgid "associated product" msgstr "Prodotto associato" -#: core/models.py:431 +#: core/models.py:419 msgid "the price paid to the vendor for this product" msgstr "Il prezzo pagato al venditore per questo prodotto" -#: core/models.py:432 +#: core/models.py:420 msgid "vendor purchase price" msgstr "Prezzo di acquisto del fornitore" -#: core/models.py:436 +#: core/models.py:424 msgid "available quantity of the product in stock" msgstr "Quantità disponibile del prodotto in magazzino" -#: core/models.py:437 +#: core/models.py:425 msgid "quantity in stock" msgstr "Quantità in magazzino" -#: core/models.py:441 +#: core/models.py:429 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU assegnato dal fornitore per identificare il prodotto" -#: core/models.py:442 +#: core/models.py:430 msgid "vendor sku" msgstr "SKU del venditore" -#: core/models.py:448 +#: core/models.py:436 msgid "digital file associated with this stock if applicable" msgstr "File digitale associato a questo stock, se applicabile" -#: core/models.py:449 +#: core/models.py:437 msgid "digital file" msgstr "File digitale" -#: core/models.py:458 +#: core/models.py:446 msgid "stock entries" msgstr "Voci di magazzino" -#: core/models.py:463 +#: core/models.py:451 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1690,55 +1667,55 @@ msgstr "" " dei prodotti e le informazioni ad essi associate all'interno di " "un'applicazione." -#: core/models.py:476 +#: core/models.py:464 msgid "category this product belongs to" msgstr "Categoria a cui appartiene questo prodotto" -#: core/models.py:485 +#: core/models.py:473 msgid "optionally associate this product with a brand" msgstr "Associare facoltativamente questo prodotto a un marchio" -#: core/models.py:491 +#: core/models.py:479 msgid "tags that help describe or group this product" msgstr "Tag che aiutano a descrivere o raggruppare questo prodotto" -#: core/models.py:496 +#: core/models.py:484 msgid "indicates whether this product is digitally delivered" msgstr "Indica se il prodotto è consegnato in formato digitale" -#: core/models.py:497 +#: core/models.py:485 msgid "is product digital" msgstr "Il prodotto è digitale" -#: core/models.py:503 +#: core/models.py:491 msgid "provide a clear identifying name for the product" msgstr "Fornire un nome identificativo chiaro per il prodotto" -#: core/models.py:504 +#: core/models.py:492 msgid "product name" msgstr "Nome del prodotto" -#: core/models.py:509 core/models.py:831 +#: core/models.py:497 core/models.py:772 msgid "add a detailed description of the product" msgstr "Aggiungere una descrizione dettagliata del prodotto" -#: core/models.py:510 +#: core/models.py:498 msgid "product description" msgstr "Descrizione del prodotto" -#: core/models.py:517 +#: core/models.py:505 msgid "part number for this product" msgstr "Numero di parte per questo prodotto" -#: core/models.py:518 +#: core/models.py:506 msgid "part number" msgstr "Numero di parte" -#: core/models.py:537 +#: core/models.py:525 msgid "stock keeping unit for this product" msgstr "Unità di mantenimento delle scorte per questo prodotto" -#: core/models.py:607 +#: core/models.py:599 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 " @@ -1754,294 +1731,403 @@ msgstr "" " tra cui stringa, intero, float, booleano, array e oggetto. Ciò consente una" " strutturazione dinamica e flessibile dei dati." -#: core/models.py:619 +#: core/models.py:611 msgid "category of this attribute" msgstr "Categoria di questo attributo" -#: core/models.py:627 +#: core/models.py:619 msgid "group of this attribute" msgstr "Gruppo di questo attributo" -#: core/models.py:633 +#: core/models.py:625 msgid "string" msgstr "Stringa" -#: core/models.py:634 +#: core/models.py:626 msgid "integer" msgstr "Intero" -#: core/models.py:635 +#: core/models.py:627 msgid "float" msgstr "Galleggiante" -#: core/models.py:636 +#: core/models.py:628 msgid "boolean" msgstr "Booleano" -#: core/models.py:637 +#: core/models.py:629 msgid "array" msgstr "Array" -#: core/models.py:638 +#: core/models.py:630 msgid "object" msgstr "Oggetto" -#: core/models.py:640 +#: core/models.py:632 msgid "type of the attribute's value" msgstr "Tipo di valore dell'attributo" -#: core/models.py:641 +#: core/models.py:633 msgid "value type" msgstr "Tipo di valore" -#: core/models.py:646 +#: core/models.py:638 msgid "name of this attribute" msgstr "Nome dell'attributo" -#: core/models.py:647 +#: core/models.py:639 msgid "attribute's name" msgstr "Nome dell'attributo" -#: core/models.py:653 +#: core/models.py:645 msgid "is filterable" msgstr "è filtrabile" -#: core/models.py:654 +#: core/models.py:646 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:665 core/models.py:700 +#: core/models.py:657 core/models.py:675 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attributo" -#: core/models.py:699 +#: core/models.py:663 +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 "" +"Rappresenta un valore specifico per un attributo collegato a un prodotto. " +"Collega l'\"attributo\" a un \"valore\" unico, consentendo una migliore " +"organizzazione e rappresentazione dinamica delle caratteristiche del " +"prodotto." + +#: core/models.py:674 msgid "attribute of this value" msgstr "Attributo di questo valore" -#: core/models.py:707 +#: core/models.py:682 msgid "the specific product associated with this attribute's value" msgstr "Il prodotto specifico associato al valore di questo attributo" -#: core/models.py:713 +#: core/models.py:688 msgid "the specific value for this attribute" msgstr "Il valore specifico per questo attributo" -#: core/models.py:747 +#: core/models.py:701 +msgid "" +"Represents a product image associated with a product in the system. This " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " +"determining their display order. It also includes an accessibility feature " +"with alternative text for the images." +msgstr "" +"Rappresenta l'immagine di un prodotto associata a un prodotto del sistema. " +"Questa classe è progettata per gestire le immagini dei prodotti, comprese le" +" funzionalità di caricamento dei file immagine, di associazione a prodotti " +"specifici e di determinazione dell'ordine di visualizzazione. Include anche " +"una funzione di accessibilità con testo alternativo per le immagini." + +#: core/models.py:712 msgid "provide alternative text for the image for accessibility" msgstr "" "Fornire un testo alternativo per l'immagine ai fini dell'accessibilità." -#: core/models.py:748 +#: core/models.py:713 msgid "image alt text" msgstr "Testo alt dell'immagine" -#: core/models.py:751 +#: core/models.py:716 msgid "upload the image file for this product" msgstr "Caricare il file immagine per questo prodotto" -#: core/models.py:752 core/models.py:777 +#: core/models.py:717 core/models.py:742 msgid "product image" msgstr "Immagine del prodotto" -#: core/models.py:758 +#: core/models.py:723 msgid "determines the order in which images are displayed" msgstr "Determina l'ordine di visualizzazione delle immagini" -#: core/models.py:759 +#: core/models.py:724 msgid "display priority" msgstr "Priorità del display" -#: core/models.py:764 +#: core/models.py:729 msgid "the product that this image represents" msgstr "Il prodotto che questa immagine rappresenta" -#: core/models.py:778 +#: core/models.py:743 msgid "product images" msgstr "Immagini del prodotto" -#: core/models.py:819 +#: core/models.py:748 +msgid "" +"Represents a promotional campaign for products with a discount. This class " +"is used to define and manage promotional campaigns that offer a percentage-" +"based discount for products. The class includes attributes for setting the " +"discount rate, providing details about the promotion, and linking it to the " +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." +msgstr "" +"Rappresenta una campagna promozionale per prodotti con sconto. Questa classe" +" viene utilizzata per definire e gestire campagne promozionali che offrono " +"uno sconto in percentuale sui prodotti. La classe include attributi per " +"impostare la percentuale di sconto, fornire dettagli sulla promozione e " +"collegarla ai prodotti applicabili. Si integra con il catalogo dei prodotti " +"per determinare gli articoli interessati dalla campagna." + +#: core/models.py:760 msgid "percentage discount for the selected products" msgstr "Percentuale di sconto per i prodotti selezionati" -#: core/models.py:820 +#: core/models.py:761 msgid "discount percentage" msgstr "Percentuale di sconto" -#: core/models.py:825 +#: core/models.py:766 msgid "provide a unique name for this promotion" msgstr "Fornite un nome unico per questa promozione" -#: core/models.py:826 +#: core/models.py:767 msgid "promotion name" msgstr "Nome della promozione" -#: core/models.py:832 +#: core/models.py:773 msgid "promotion description" msgstr "Descrizione della promozione" -#: core/models.py:837 +#: core/models.py:778 msgid "select which products are included in this promotion" msgstr "Selezionare i prodotti inclusi in questa promozione" -#: core/models.py:838 +#: core/models.py:779 msgid "included products" msgstr "Prodotti inclusi" -#: core/models.py:842 +#: core/models.py:783 msgid "promotion" msgstr "Promozione" -#: core/models.py:867 +#: core/models.py:794 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"class provides functionality to manage a collection of products, supporting " +"operations such as adding and removing products, as well as supporting " +"operations for adding and removing multiple products at once." +msgstr "" +"Rappresenta la lista dei desideri di un utente per memorizzare e gestire i " +"prodotti desiderati. La classe fornisce funzionalità per la gestione di una " +"collezione di prodotti, supportando operazioni quali l'aggiunta e la " +"rimozione di prodotti, nonché operazioni per l'aggiunta e la rimozione di " +"più prodotti contemporaneamente." + +#: core/models.py:806 msgid "products that the user has marked as wanted" msgstr "Prodotti che l'utente ha contrassegnato come desiderati" -#: core/models.py:875 +#: core/models.py:814 msgid "user who owns this wishlist" msgstr "Utente che possiede questa wishlist" -#: core/models.py:876 +#: core/models.py:815 msgid "wishlist owner" msgstr "Proprietario della lista dei desideri" -#: core/models.py:884 +#: core/models.py:823 msgid "wishlist" msgstr "Lista dei desideri" -#: core/models.py:951 +#: core/models.py:865 +msgid "" +"Represents a documentary record tied to a product. This class is used to " +"store information about documentaries related to specific products, " +"including file uploads and their metadata. It contains methods and " +"properties to handle the file type and storage path for the documentary " +"files. It extends functionality from specific mixins and provides additional" +" custom features." +msgstr "" +"Rappresenta un record documentario legato a un prodotto. Questa classe viene" +" utilizzata per memorizzare informazioni sui documentari relativi a prodotti" +" specifici, compresi i file caricati e i relativi metadati. Contiene metodi " +"e proprietà per gestire il tipo di file e il percorso di archiviazione dei " +"file documentari. Estende le funzionalità di mixin specifici e fornisce " +"ulteriori caratteristiche personalizzate." + +#: core/models.py:878 msgid "documentary" msgstr "Documentario" -#: core/models.py:952 +#: core/models.py:879 msgid "documentaries" msgstr "Documentari" -#: core/models.py:962 +#: core/models.py:889 msgid "unresolved" msgstr "Non risolto" -#: core/models.py:1008 +#: core/models.py:894 +msgid "" +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." +msgstr "" +"Rappresenta un'entità indirizzo che include dettagli sulla posizione e " +"associazioni con un utente. Fornisce funzionalità per la memorizzazione di " +"dati geografici e di indirizzi e per l'integrazione con servizi di " +"geocodifica. Questa classe è progettata per memorizzare informazioni " +"dettagliate sull'indirizzo, compresi componenti come via, città, regione, " +"paese e geolocalizzazione (longitudine e latitudine). Supporta " +"l'integrazione con le API di geocodifica, consentendo la memorizzazione " +"delle risposte API grezze per un'ulteriore elaborazione o ispezione. La " +"classe consente inoltre di associare un indirizzo a un utente, facilitando " +"la gestione personalizzata dei dati." + +#: core/models.py:909 msgid "address line for the customer" msgstr "Indirizzo del cliente" -#: core/models.py:1009 +#: core/models.py:910 msgid "address line" msgstr "Linea di indirizzo" -#: core/models.py:1011 +#: core/models.py:912 msgid "street" msgstr "Via" -#: core/models.py:1012 +#: core/models.py:913 msgid "district" msgstr "Distretto" -#: core/models.py:1013 +#: core/models.py:914 msgid "city" msgstr "Città" -#: core/models.py:1014 +#: core/models.py:915 msgid "region" msgstr "Regione" -#: core/models.py:1015 +#: core/models.py:916 msgid "postal code" msgstr "Codice postale" -#: core/models.py:1016 +#: core/models.py:917 msgid "country" msgstr "Paese" -#: core/models.py:1023 +#: core/models.py:924 msgid "geolocation point: (longitude, latitude)" msgstr "Punto di geolocalizzazione(Longitudine, Latitudine)" -#: core/models.py:1026 +#: core/models.py:927 msgid "full JSON response from geocoder for this address" msgstr "Risposta JSON completa di geocoder per questo indirizzo" -#: core/models.py:1031 +#: core/models.py:932 msgid "stored JSON response from the geocoding service" msgstr "Risposta JSON memorizzata dal servizio di geocodifica" -#: core/models.py:1039 +#: core/models.py:940 msgid "address" msgstr "Indirizzo" -#: core/models.py:1040 +#: core/models.py:941 msgid "addresses" msgstr "Indirizzi" -#: core/models.py:1085 +#: core/models.py:953 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" +"Rappresenta un codice promozionale che può essere utilizzato per gli sconti," +" gestendone la validità, il tipo di sconto e l'applicazione. La classe " +"PromoCode memorizza i dettagli di un codice promozionale, tra cui il suo " +"identificatore univoco, le proprietà dello sconto (importo o percentuale), " +"il periodo di validità, l'utente associato (se presente) e lo stato di " +"utilizzo. Include funzionalità per convalidare e applicare il codice " +"promozionale a un ordine, assicurando il rispetto dei vincoli." + +#: core/models.py:967 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:1086 +#: core/models.py:968 msgid "promo code identifier" msgstr "Identificatore del codice promozionale" -#: core/models.py:1093 +#: core/models.py:975 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:1094 +#: core/models.py:976 msgid "fixed discount amount" msgstr "Importo fisso dello sconto" -#: core/models.py:1100 +#: core/models.py:982 msgid "percentage discount applied if fixed amount is not used" msgstr "Sconto percentuale applicato se l'importo fisso non viene utilizzato" -#: core/models.py:1101 +#: core/models.py:983 msgid "percentage discount" msgstr "Sconto percentuale" -#: core/models.py:1106 +#: core/models.py:988 msgid "timestamp when the promocode expires" msgstr "Data di scadenza del codice promozionale" -#: core/models.py:1107 +#: core/models.py:989 msgid "end validity time" msgstr "Tempo di validità finale" -#: core/models.py:1112 +#: core/models.py:994 msgid "timestamp from which this promocode is valid" msgstr "Data a partire dalla quale il codice promozionale è valido" -#: core/models.py:1113 +#: core/models.py:995 msgid "start validity time" msgstr "Ora di inizio validità" -#: core/models.py:1118 +#: core/models.py:1000 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:1119 +#: core/models.py:1001 msgid "usage timestamp" msgstr "Timestamp d'uso" -#: core/models.py:1124 +#: core/models.py:1006 msgid "user assigned to this promocode if applicable" msgstr "Utente assegnato a questo codice promozionale, se applicabile" -#: core/models.py:1125 +#: core/models.py:1007 msgid "assigned user" msgstr "Utente assegnato" -#: core/models.py:1132 +#: core/models.py:1014 msgid "promo code" msgstr "Codice promozionale" -#: core/models.py:1133 +#: core/models.py:1015 msgid "promo codes" msgstr "Codici promozionali" -#: core/models.py:1140 +#: core/models.py:1022 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2049,16 +2135,16 @@ msgstr "" "È necessario definire un solo tipo di sconto (importo o percentuale), ma non" " entrambi o nessuno." -#: core/models.py:1155 +#: core/models.py:1037 msgid "promocode already used" msgstr "Il codice promozionale è già stato utilizzato" -#: core/models.py:1171 +#: core/models.py:1053 #, 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:1180 +#: core/models.py:1062 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 " @@ -2076,139 +2162,139 @@ msgstr "" "funzionalità supporta la gestione dei prodotti nel ciclo di vita " "dell'ordine." -#: core/models.py:1197 +#: core/models.py:1079 msgid "the billing address used for this order" msgstr "L'indirizzo di fatturazione utilizzato per questo ordine" -#: core/models.py:1205 +#: core/models.py:1087 msgid "optional promo code applied to this order" msgstr "Codice promozionale opzionale applicato a questo ordine" -#: core/models.py:1206 +#: core/models.py:1088 msgid "applied promo code" msgstr "Codice promozionale applicato" -#: core/models.py:1214 +#: core/models.py:1096 msgid "the shipping address used for this order" msgstr "L'indirizzo di spedizione utilizzato per questo ordine" -#: core/models.py:1215 +#: core/models.py:1097 msgid "shipping address" msgstr "Indirizzo di spedizione" -#: core/models.py:1221 +#: core/models.py:1103 msgid "current status of the order in its lifecycle" msgstr "Stato attuale dell'ordine nel suo ciclo di vita" -#: core/models.py:1222 +#: core/models.py:1104 msgid "order status" msgstr "Stato dell'ordine" -#: core/models.py:1227 core/models.py:1686 +#: core/models.py:1109 core/models.py:1560 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:1233 +#: core/models.py:1115 msgid "json representation of order attributes for this order" msgstr "Rappresentazione JSON degli attributi dell'ordine per questo ordine" -#: core/models.py:1239 +#: core/models.py:1121 msgid "the user who placed the order" msgstr "L'utente che ha effettuato l'ordine" -#: core/models.py:1240 +#: core/models.py:1122 msgid "user" msgstr "Utente" -#: core/models.py:1246 +#: core/models.py:1128 msgid "the timestamp when the order was finalized" msgstr "Il timestamp del momento in cui l'ordine è stato finalizzato" -#: core/models.py:1247 +#: core/models.py:1129 msgid "buy time" msgstr "Acquista tempo" -#: core/models.py:1254 +#: core/models.py:1136 msgid "a human-readable identifier for the order" msgstr "Un identificatore leggibile dall'uomo per l'ordine" -#: core/models.py:1255 +#: core/models.py:1137 msgid "human readable id" msgstr "ID leggibile dall'uomo" -#: core/models.py:1261 +#: core/models.py:1143 msgid "order" msgstr "Ordine" -#: core/models.py:1282 +#: core/models.py:1168 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:1316 +#: core/models.py:1202 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:1321 +#: core/models.py:1207 msgid "you cannot add inactive products to order" msgstr "Non è possibile aggiungere all'ordine prodotti inattivi" -#: core/models.py:1338 +#: core/models.py:1224 msgid "you cannot add more products than available in stock" msgstr "" "Non è possibile aggiungere più prodotti di quelli disponibili in magazzino" -#: core/models.py:1360 core/models.py:1385 core/models.py:1393 +#: core/models.py:1246 core/models.py:1271 core/models.py:1279 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:1381 +#: core/models.py:1267 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} non esiste con la query <{query}>!" -#: core/models.py:1413 +#: core/models.py:1299 msgid "promocode does not exist" msgstr "Il codice promozionale non esiste" -#: core/models.py:1419 +#: core/models.py:1305 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:1438 +#: core/models.py:1324 msgid "address does not exist" msgstr "L'indirizzo non esiste" -#: core/models.py:1459 core/models.py:1528 +#: core/models.py:1345 core/models.py:1414 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:1462 core/models.py:1524 +#: core/models.py:1348 core/models.py:1410 msgid "invalid force value" msgstr "Valore di forza non valido" -#: core/models.py:1468 core/models.py:1531 +#: core/models.py:1354 core/models.py:1417 msgid "you cannot purchase an empty order!" msgstr "Non è possibile acquistare un ordine vuoto!" -#: core/models.py:1487 +#: core/models.py:1373 msgid "you cannot buy an order without a user" msgstr "Non è possibile acquistare un ordine senza un utente!" -#: core/models.py:1501 +#: core/models.py:1387 msgid "a user without a balance cannot buy with balance" msgstr "Un utente senza saldo non può acquistare con il saldo!" -#: core/models.py:1506 +#: core/models.py:1392 msgid "insufficient funds to complete the order" msgstr "Fondi insufficienti per completare l'ordine" -#: core/models.py:1540 +#: core/models.py:1426 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2217,7 +2303,7 @@ msgstr "" "seguenti informazioni: nome del cliente, e-mail del cliente, numero di " "telefono del cliente" -#: core/models.py:1549 +#: core/models.py:1435 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2225,143 +2311,198 @@ msgstr "" "Metodo di pagamento non valido: {payment_method} da " "{available_payment_methods}!" -#: core/models.py:1674 +#: core/models.py:1533 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" +"Rappresenta i prodotti associati agli ordini e i loro attributi. Il modello " +"OrderProduct mantiene le informazioni su un prodotto che fa parte di un " +"ordine, compresi i dettagli come il prezzo di acquisto, la quantità, gli " +"attributi del prodotto e lo stato. Gestisce le notifiche per l'utente e gli " +"amministratori e gestisce operazioni come la restituzione del saldo del " +"prodotto o l'aggiunta di feedback. Questo modello fornisce anche metodi e " +"proprietà che supportano la logica aziendale, come il calcolo del prezzo " +"totale o la generazione di un URL di download per i prodotti digitali. Il " +"modello si integra con i modelli Ordine e Prodotto e memorizza un " +"riferimento ad essi." + +#: core/models.py:1548 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:1675 +#: core/models.py:1549 msgid "purchase price at order time" msgstr "Prezzo di acquisto al momento dell'ordine" -#: core/models.py:1680 +#: core/models.py:1554 msgid "internal comments for admins about this ordered product" msgstr "Commenti interni per gli amministratori su questo prodotto ordinato" -#: core/models.py:1681 +#: core/models.py:1555 msgid "internal comments" msgstr "Commenti interni" -#: core/models.py:1687 +#: core/models.py:1561 msgid "user notifications" msgstr "Notifiche degli utenti" -#: core/models.py:1692 +#: core/models.py:1566 msgid "json representation of this item's attributes" msgstr "Rappresentazione JSON degli attributi di questo elemento" -#: core/models.py:1693 +#: core/models.py:1567 msgid "ordered product attributes" msgstr "Attributi del prodotto ordinati" -#: core/models.py:1698 +#: core/models.py:1572 msgid "reference to the parent order that contains this product" msgstr "Riferimento all'ordine padre che contiene questo prodotto" -#: core/models.py:1699 +#: core/models.py:1573 msgid "parent order" msgstr "Ordine dei genitori" -#: core/models.py:1708 +#: core/models.py:1582 msgid "the specific product associated with this order line" msgstr "Il prodotto specifico associato a questa riga d'ordine" -#: core/models.py:1715 +#: core/models.py:1589 msgid "quantity of this specific product in the order" msgstr "Quantità di questo prodotto specifico nell'ordine" -#: core/models.py:1716 +#: core/models.py:1590 msgid "product quantity" msgstr "Quantità di prodotto" -#: core/models.py:1723 +#: core/models.py:1597 msgid "current status of this product in the order" msgstr "Stato attuale di questo prodotto nell'ordine" -#: core/models.py:1724 +#: core/models.py:1598 msgid "product line status" msgstr "Stato della linea di prodotti" -#: core/models.py:1784 +#: core/models.py:1661 msgid "order product must have an order" msgstr "L'ordine-prodotto deve avere un ordine associato!" -#: core/models.py:1786 +#: core/models.py:1663 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Azione errata specificata per il feedback: {action}!" -#: core/models.py:1800 +#: core/models.py:1677 msgid "you cannot feedback an order which is not received" msgstr "non è possibile dare un riscontro a un ordine non ricevuto" -#: core/models.py:1806 +#: core/models.py:1683 msgid "name" msgstr "Nome" -#: core/models.py:1807 +#: core/models.py:1684 msgid "URL of the integration" msgstr "URL dell'integrazione" -#: core/models.py:1808 +#: core/models.py:1685 msgid "authentication credentials" msgstr "Credenziali di autenticazione" -#: core/models.py:1822 +#: core/models.py:1699 msgid "you can only have one default CRM provider" msgstr "È possibile avere un solo provider CRM predefinito" -#: core/models.py:1826 +#: core/models.py:1703 msgid "CRM" msgstr "CRM" -#: core/models.py:1827 +#: core/models.py:1704 msgid "CRMs" msgstr "CRM" -#: core/models.py:1839 +#: core/models.py:1716 msgid "order CRM link" msgstr "Link al CRM dell'ordine" -#: core/models.py:1840 +#: core/models.py:1717 msgid "orders CRM links" msgstr "Link al CRM degli ordini" -#: core/models.py:1874 +#: core/models.py:1722 +msgid "" +"Represents the downloading functionality for digital assets associated with " +"orders. The DigitalAssetDownload class provides the ability to manage and " +"access downloads related to order products. It maintains information about " +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." +msgstr "" +"Rappresenta la funzionalità di download degli asset digitali associati agli " +"ordini. La classe DigitalAssetDownload offre la possibilità di gestire e " +"accedere ai download relativi ai prodotti dell'ordine. Mantiene le " +"informazioni sul prodotto dell'ordine associato, il numero di download e se " +"l'asset è visibile pubblicamente. Include un metodo per generare un URL per " +"il download della risorsa quando l'ordine associato è in uno stato " +"completato." + +#: core/models.py:1736 msgid "download" msgstr "Scaricare" -#: core/models.py:1875 +#: core/models.py:1737 msgid "downloads" msgstr "Scaricamento" -#: core/models.py:1883 +#: core/models.py:1745 msgid "you can not download a digital asset for a non-finished order" msgstr "Non è possibile scaricare un bene digitale per un ordine non finito." -#: core/models.py:1913 +#: core/models.py:1754 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." +msgstr "" +"Gestisce i feedback degli utenti per i prodotti. Questa classe è progettata " +"per catturare e memorizzare i commenti degli utenti su prodotti specifici " +"che hanno acquistato. Contiene attributi per memorizzare i commenti degli " +"utenti, un riferimento al prodotto correlato nell'ordine e una valutazione " +"assegnata dall'utente. La classe utilizza campi del database per modellare e" +" gestire efficacemente i dati di feedback." + +#: core/models.py:1766 msgid "user-provided comments about their experience with the product" msgstr "Commenti degli utenti sulla loro esperienza con il prodotto" -#: core/models.py:1914 +#: core/models.py:1767 msgid "feedback comments" msgstr "Commenti di feedback" -#: core/models.py:1921 +#: core/models.py:1774 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:1922 +#: core/models.py:1775 msgid "related order product" msgstr "Prodotto correlato all'ordine" -#: core/models.py:1927 +#: core/models.py:1780 msgid "user-assigned rating for the product" msgstr "Valutazione del prodotto assegnata dall'utente" -#: core/models.py:1928 +#: core/models.py:1781 msgid "product rating" msgstr "Valutazione del prodotto" @@ -2581,17 +2722,17 @@ msgstr "" msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | contattaci iniziato" -#: core/utils/emailing.py:64 +#: core/utils/emailing.py:74 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Conferma d'ordine" -#: core/utils/emailing.py:99 +#: core/utils/emailing.py:109 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Ordine consegnato" -#: core/utils/emailing.py:187 +#: core/utils/emailing.py:197 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | promocode granted" @@ -2615,15 +2756,15 @@ msgstr "" msgid "invalid phone number format" msgstr "Formato del numero di telefono non valido" -#: core/views.py:481 +#: core/views.py:489 msgid "you can only download the digital asset once" msgstr "È possibile scaricare l'asset digitale una sola volta" -#: core/views.py:539 +#: core/views.py:547 msgid "favicon not found" msgstr "favicon non trovata" -#: core/viewsets.py:1319 +#: core/viewsets.py:1357 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Errore di geocodifica: {e}" diff --git a/core/locale/ja_JP/LC_MESSAGES/django.mo b/core/locale/ja_JP/LC_MESSAGES/django.mo index 64cf8bba99df27930c50539e9e1aaf3b6768e410..fe3dee4edc01f64a4557d412bbe49e3ca1c04f96 100644 GIT binary patch delta 20522 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 bn-rO^d42c9GMBe4{e1PiDWxTA_l^30*dCB6 delta 12676 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 lT-NlEJ;SmjKRl5){j-CiS(Eo1%$xq(i3>jI7f\n" "Language-Team: BRITISH ENGLISH \n" @@ -86,11 +86,11 @@ msgid "selected items have been deactivated." msgstr "選択されたアイテムは無効化されました!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:712 core/models.py:720 +#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 msgid "attribute value" msgstr "属性値" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:721 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 msgid "attribute values" msgstr "属性値" @@ -102,7 +102,7 @@ msgstr "画像" msgid "images" msgstr "画像" -#: core/admin.py:155 core/models.py:457 +#: core/admin.py:155 core/models.py:445 msgid "stock" msgstr "在庫" @@ -110,11 +110,11 @@ msgstr "在庫" msgid "stocks" msgstr "株式" -#: core/admin.py:166 core/models.py:1735 +#: core/admin.py:166 core/models.py:1609 msgid "order product" msgstr "商品のご注文" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1736 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 msgid "order products" msgstr "商品のご注文" @@ -314,7 +314,7 @@ msgstr "既存のカテゴリーを書き換え、編集不可能なものを保 msgid "rewrite some fields of an existing category saving non-editables" msgstr "編集不可を保存している既存のカテゴリのいくつかのフィールドを書き換える" -#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:553 +#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:487 #: core/graphene/object_types.py:117 core/graphene/object_types.py:207 #: core/graphene/object_types.py:509 msgid "SEO Meta snapshot" @@ -557,47 +557,7 @@ msgstr "全商品を一覧表示(シンプル表示)" msgid "(exact) Product UUID" msgstr "(正確には)製品UUID" -#: core/docs/drf/viewsets.py:384 -msgid "(icontains) Product name" -msgstr "(アイコン) 製品名" - -#: core/docs/drf/viewsets.py:390 -msgid "(list) Category names, case-insensitive" -msgstr "(リスト)カテゴリー名、大文字と小文字は区別しない" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Category UUID" -msgstr "(正確には)カテゴリーUUID" - -#: core/docs/drf/viewsets.py:402 -msgid "(list) Tag names, case-insensitive" -msgstr "(リスト) タグ名、大文字と小文字は区別されない" - -#: core/docs/drf/viewsets.py:408 -msgid "(gte) Minimum stock price" -msgstr "(最低株価" - -#: core/docs/drf/viewsets.py:414 -msgid "(lte) Maximum stock price" -msgstr "(最大株価" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Only active products" -msgstr "(正確には)アクティブ製品のみ" - -#: core/docs/drf/viewsets.py:426 -msgid "(iexact) Brand name" -msgstr "(商品名" - -#: core/docs/drf/viewsets.py:438 -msgid "(gt) Minimum stock quantity" -msgstr "(最低在庫量" - -#: core/docs/drf/viewsets.py:444 -msgid "(exact) Digital vs. physical" -msgstr "(正確には)デジタルとフィジカル" - -#: core/docs/drf/viewsets.py:451 +#: core/docs/drf/viewsets.py:385 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -605,70 +565,70 @@ msgstr "" "カンマ区切りの並べ替えフィールドのリスト。降順の場合は `-` をプレフィックスとしてつける。 \n" "**許可:** uuid, rating, name, slug, created, modified, price, random" -#: core/docs/drf/viewsets.py:465 core/docs/drf/viewsets.py:466 +#: core/docs/drf/viewsets.py:399 core/docs/drf/viewsets.py:400 msgid "retrieve a single product (detailed view)" msgstr "単一の製品を取得する(詳細表示)" -#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:495 -#: core/docs/drf/viewsets.py:511 core/docs/drf/viewsets.py:527 -#: core/docs/drf/viewsets.py:543 core/docs/drf/viewsets.py:559 +#: core/docs/drf/viewsets.py:405 core/docs/drf/viewsets.py:429 +#: core/docs/drf/viewsets.py:445 core/docs/drf/viewsets.py:461 +#: core/docs/drf/viewsets.py:477 core/docs/drf/viewsets.py:493 msgid "Product UUID or slug" msgstr "製品UUIDまたはスラグ" -#: core/docs/drf/viewsets.py:481 core/docs/drf/viewsets.py:482 +#: core/docs/drf/viewsets.py:415 core/docs/drf/viewsets.py:416 msgid "create a product" msgstr "製品を作る" -#: core/docs/drf/viewsets.py:489 core/docs/drf/viewsets.py:490 +#: core/docs/drf/viewsets.py:423 core/docs/drf/viewsets.py:424 msgid "rewrite an existing product, preserving non-editable fields" msgstr "編集不可能なフィールドを保持したまま、既存の製品を書き換える。" -#: core/docs/drf/viewsets.py:505 core/docs/drf/viewsets.py:506 +#: core/docs/drf/viewsets.py:439 core/docs/drf/viewsets.py:440 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "編集不可能なフィールドを保持したまま、既存の製品の一部のフィールドを更新する。" -#: core/docs/drf/viewsets.py:521 core/docs/drf/viewsets.py:522 +#: core/docs/drf/viewsets.py:455 core/docs/drf/viewsets.py:456 msgid "delete a product" msgstr "製品を削除する" -#: core/docs/drf/viewsets.py:537 core/docs/drf/viewsets.py:538 +#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:472 msgid "lists all permitted feedbacks for a product" msgstr "製品に対して許可されたすべてのフィードバックを一覧表示します。" -#: core/docs/drf/viewsets.py:554 +#: core/docs/drf/viewsets.py:488 msgid "returns a snapshot of the product's SEO meta data" msgstr "商品のSEOメタデータのスナップショットを返します。" -#: core/docs/drf/viewsets.py:572 +#: core/docs/drf/viewsets.py:506 msgid "list all addresses" msgstr "全住所のリスト" -#: core/docs/drf/viewsets.py:579 +#: core/docs/drf/viewsets.py:513 msgid "retrieve a single address" msgstr "単一アドレスの取得" -#: core/docs/drf/viewsets.py:586 +#: core/docs/drf/viewsets.py:520 msgid "create a new address" msgstr "新しいアドレスを作成する" -#: core/docs/drf/viewsets.py:594 +#: core/docs/drf/viewsets.py:528 msgid "delete an address" msgstr "アドレスの削除" -#: core/docs/drf/viewsets.py:601 +#: core/docs/drf/viewsets.py:535 msgid "update an entire address" msgstr "アドレス全体の更新" -#: core/docs/drf/viewsets.py:609 +#: core/docs/drf/viewsets.py:543 msgid "partially update an address" msgstr "アドレスの一部更新" -#: core/docs/drf/viewsets.py:617 +#: core/docs/drf/viewsets.py:551 msgid "autocomplete address suggestions" msgstr "オートコンプリート住所入力" -#: core/docs/drf/viewsets.py:622 +#: core/docs/drf/viewsets.py:556 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" @@ -676,177 +636,181 @@ msgstr "" "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" -#: core/docs/drf/viewsets.py:628 +#: core/docs/drf/viewsets.py:562 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "結果を制限する, 1 < limit < 10, デフォルト: 5" -#: core/docs/drf/viewsets.py:641 +#: core/docs/drf/viewsets.py:575 msgid "list all feedbacks (simple view)" msgstr "すべてのフィードバックを表示する(シンプルな表示)" -#: core/docs/drf/viewsets.py:645 +#: core/docs/drf/viewsets.py:579 msgid "retrieve a single feedback (detailed view)" msgstr "単一のフィードバックを取得する(詳細表示)" -#: core/docs/drf/viewsets.py:649 +#: core/docs/drf/viewsets.py:583 msgid "create a feedback" msgstr "フィードバックを作成する" -#: core/docs/drf/viewsets.py:653 +#: core/docs/drf/viewsets.py:587 msgid "delete a feedback" msgstr "フィードバックを削除する" -#: core/docs/drf/viewsets.py:657 +#: core/docs/drf/viewsets.py:591 msgid "rewrite an existing feedback saving non-editables" msgstr "既存のフィードバックを書き換える。" -#: core/docs/drf/viewsets.py:661 +#: core/docs/drf/viewsets.py:595 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "既存のフィードバックのいくつかのフィールドを書き換えて、編集不可能なものを保存する。" -#: core/docs/drf/viewsets.py:668 +#: core/docs/drf/viewsets.py:602 msgid "list all order–product relations (simple view)" msgstr "すべての注文と商品の関係をリストアップする(シンプルビュー)" -#: core/docs/drf/viewsets.py:675 +#: core/docs/drf/viewsets.py:609 msgid "retrieve a single order–product relation (detailed view)" msgstr "単一の注文と商品の関係を取得する(詳細表示)" -#: core/docs/drf/viewsets.py:682 +#: core/docs/drf/viewsets.py:616 msgid "create a new order–product relation" msgstr "新しい注文と商品の関係を作る" -#: core/docs/drf/viewsets.py:689 +#: core/docs/drf/viewsets.py:623 msgid "replace an existing order–product relation" msgstr "既存の注文と商品の関係を置き換える" -#: core/docs/drf/viewsets.py:696 +#: core/docs/drf/viewsets.py:630 msgid "partially update an existing order–product relation" msgstr "既存の注文と商品の関係を部分的に更新する" -#: core/docs/drf/viewsets.py:703 +#: core/docs/drf/viewsets.py:637 msgid "delete an order–product relation" msgstr "注文と商品の関係を削除する" -#: core/docs/drf/viewsets.py:710 +#: core/docs/drf/viewsets.py:644 msgid "add or remove feedback on an order–product relation" msgstr "注文と商品の関係に関するフィードバックを追加または削除する。" -#: core/elasticsearch/__init__.py:105 +#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 msgid "no search term provided." msgstr "検索語はありません。" -#: core/filters.py:64 core/filters.py:594 core/filters.py:623 +#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +msgid "Search" +msgstr "検索" + +#: core/filters.py:66 core/filters.py:554 core/filters.py:583 msgid "UUID" msgstr "ユーユーアイディー" -#: core/filters.py:65 core/filters.py:429 core/filters.py:560 +#: core/filters.py:67 core/filters.py:399 core/filters.py:526 msgid "Name" msgstr "名称" -#: core/filters.py:66 core/filters.py:562 +#: core/filters.py:68 core/filters.py:528 msgid "Categories" msgstr "カテゴリー" -#: core/filters.py:68 +#: core/filters.py:70 msgid "Categories Slugs" msgstr "カテゴリー ナメクジ" -#: core/filters.py:69 core/filters.py:437 +#: core/filters.py:71 core/filters.py:407 msgid "Tags" msgstr "タグ" -#: core/filters.py:70 +#: core/filters.py:72 msgid "Min Price" msgstr "最低価格" -#: core/filters.py:71 +#: core/filters.py:73 msgid "Max Price" msgstr "最高価格" -#: core/filters.py:72 +#: core/filters.py:74 msgid "Is Active" msgstr "アクティブ" -#: core/filters.py:73 +#: core/filters.py:75 msgid "Brand" msgstr "ブランド" -#: core/filters.py:74 +#: core/filters.py:76 msgid "Attributes" msgstr "属性" -#: core/filters.py:75 +#: core/filters.py:77 msgid "Quantity" msgstr "数量" -#: core/filters.py:76 core/filters.py:431 core/filters.py:561 -#: core/models.py:287 core/models.py:381 core/models.py:534 +#: core/filters.py:78 core/filters.py:401 core/filters.py:527 +#: core/models.py:287 core/models.py:369 core/models.py:522 msgid "Slug" msgstr "スラッグ" -#: core/filters.py:77 +#: core/filters.py:79 msgid "Is Digital" msgstr "デジタル" -#: core/filters.py:78 +#: core/filters.py:80 msgid "Include sub-categories" msgstr "サブカテゴリーを含む" -#: core/filters.py:81 +#: core/filters.py:83 msgid "Include personal ordered" msgstr "個人注文商品を含む" -#: core/filters.py:83 core/models.py:538 +#: core/filters.py:85 core/models.py:526 msgid "SKU" msgstr "SKU" -#: core/filters.py:166 +#: core/filters.py:161 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "include_subcategoriesフラグを使うには、category_uuidがなければならない。" -#: core/filters.py:356 +#: core/filters.py:324 msgid "Search (ID, product name or part number)" msgstr "検索(ID、製品名または部品番号)" -#: core/filters.py:359 +#: core/filters.py:327 msgid "Bought after (inclusive)" msgstr "購入時期" -#: core/filters.py:360 +#: core/filters.py:328 msgid "Bought before (inclusive)" msgstr "以前に購入したもの(含む)" -#: core/filters.py:363 core/filters.py:410 core/filters.py:625 +#: core/filters.py:331 core/filters.py:378 core/filters.py:585 msgid "User email" msgstr "ユーザーEメール" -#: core/filters.py:364 core/filters.py:411 core/filters.py:603 -#: core/filters.py:624 +#: core/filters.py:332 core/filters.py:379 core/filters.py:563 +#: core/filters.py:584 msgid "User UUID" msgstr "ユーザーUUID" -#: core/filters.py:365 +#: core/filters.py:333 msgid "Status" msgstr "ステータス" -#: core/filters.py:369 +#: core/filters.py:337 msgid "Human Readable ID" msgstr "人間が読めるID" -#: core/filters.py:430 +#: core/filters.py:400 msgid "Parent" msgstr "親" -#: core/filters.py:434 +#: core/filters.py:404 msgid "Whole category(has at least 1 product or not)" msgstr "カテゴリー全体(少なくとも1つの製品があるかどうか)" -#: core/filters.py:438 +#: core/filters.py:408 msgid "Level" msgstr "レベル" -#: core/filters.py:598 +#: core/filters.py:558 msgid "Product UUID" msgstr "製品UUID" @@ -901,7 +865,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "order_uuidまたはorder_hr_idを入力してください!" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:821 +#: core/graphene/mutations.py:527 core/viewsets.py:839 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "order.buy()メソッドから間違った型が来た:{type(instance)!s}。" @@ -962,37 +926,37 @@ msgstr "属性は、attr1=value1,attr2=value2のような形式の文字列と msgid "add or delete a feedback for orderproduct" msgstr "orderproductに対するフィードバックを追加または削除する。" -#: core/graphene/mutations.py:555 +#: core/graphene/mutations.py:556 msgid "action must be either `add` or `remove`" msgstr "アクションは `add` または `remove` のいずれかでなければならない!" -#: core/graphene/mutations.py:558 +#: core/graphene/mutations.py:559 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderproduct {order_product_uuid} が見つかりません!" -#: core/graphene/mutations.py:621 +#: core/graphene/mutations.py:622 msgid "original address string provided by the user" msgstr "ユーザーが提供したオリジナルのアドレス文字列" -#: core/graphene/mutations.py:655 core/models.py:896 core/models.py:909 -#: core/models.py:1348 core/models.py:1377 core/models.py:1402 -#: core/viewsets.py:824 +#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 +#: core/models.py:1234 core/models.py:1263 core/models.py:1288 +#: core/viewsets.py:842 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name}は存在しません:{uuid}が存在しません!" -#: core/graphene/mutations.py:668 +#: core/graphene/mutations.py:669 msgid "limit must be between 1 and 10" msgstr "上限は1から10の間でなければならない" -#: core/graphene/mutations.py:713 +#: core/graphene/mutations.py:714 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - 魅力のように動作" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:666 core/models.py:1234 -#: core/models.py:1809 +#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 +#: core/models.py:1686 msgid "attributes" msgstr "属性" @@ -1005,11 +969,11 @@ msgid "groups of attributes" msgstr "属性のグループ" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:620 +#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:612 msgid "categories" msgstr "カテゴリー" -#: core/graphene/object_types.py:124 core/models.py:395 +#: core/graphene/object_types.py:124 core/models.py:383 msgid "brands" msgstr "ブランド" @@ -1064,7 +1028,7 @@ msgid "represents feedback from a user." msgstr "ユーザーからのフィードバックを表す。" #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1228 +#: core/models.py:1110 msgid "notifications" msgstr "お知らせ" @@ -1072,7 +1036,7 @@ msgstr "お知らせ" msgid "download url for this order product if applicable" msgstr "該当する場合は、この注文商品のダウンロードURLを入力してください。" -#: core/graphene/object_types.py:400 core/models.py:1938 +#: core/graphene/object_types.py:400 core/models.py:1791 msgid "feedback" msgstr "フィードバック" @@ -1080,7 +1044,7 @@ msgstr "フィードバック" msgid "a list of order products in this order" msgstr "注文商品のリスト" -#: core/graphene/object_types.py:436 core/models.py:1198 +#: core/graphene/object_types.py:436 core/models.py:1080 msgid "billing address" msgstr "請求先住所" @@ -1106,7 +1070,7 @@ msgstr "ご注文の商品はすべてデジタルですか?" msgid "transactions for this order" msgstr "この注文の取引" -#: core/graphene/object_types.py:465 core/models.py:1262 +#: core/graphene/object_types.py:465 core/models.py:1144 msgid "orders" msgstr "受注状況" @@ -1118,15 +1082,15 @@ msgstr "画像URL" msgid "product's images" msgstr "製品画像" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:477 +#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 msgid "category" msgstr "カテゴリー" -#: core/graphene/object_types.py:502 core/models.py:1939 +#: core/graphene/object_types.py:502 core/models.py:1792 msgid "feedbacks" msgstr "フィードバック" -#: core/graphene/object_types.py:503 core/models.py:394 core/models.py:486 +#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 msgid "brand" msgstr "ブランド" @@ -1158,7 +1122,7 @@ msgstr "フィードバック数" msgid "only available for personal orders" msgstr "個人注文のみの商品" -#: core/graphene/object_types.py:534 core/models.py:548 +#: core/graphene/object_types.py:534 core/models.py:536 msgid "products" msgstr "製品紹介" @@ -1170,7 +1134,7 @@ msgstr "プロモコード" msgid "products on sale" msgstr "販売商品" -#: core/graphene/object_types.py:651 core/models.py:843 +#: core/graphene/object_types.py:651 core/models.py:784 msgid "promotions" msgstr "プロモーション" @@ -1178,7 +1142,7 @@ msgstr "プロモーション" msgid "vendor" msgstr "ベンダー" -#: core/graphene/object_types.py:656 core/models.py:547 +#: core/graphene/object_types.py:656 core/models.py:535 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1186,11 +1150,11 @@ msgstr "ベンダー" msgid "product" msgstr "製品" -#: core/graphene/object_types.py:667 core/models.py:868 +#: core/graphene/object_types.py:667 core/models.py:807 msgid "wishlisted products" msgstr "ウィッシュリスト掲載商品" -#: core/graphene/object_types.py:673 core/models.py:885 +#: core/graphene/object_types.py:673 core/models.py:824 msgid "wishlists" msgstr "ウィッシュリスト" @@ -1198,7 +1162,7 @@ msgstr "ウィッシュリスト" msgid "tagged products" msgstr "タグ別アーカイブ" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:492 +#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 msgid "product tags" msgstr "商品タグ" @@ -1304,7 +1268,7 @@ msgstr "親属性グループ" msgid "attribute group's name" msgstr "属性グループ名" -#: core/models.py:100 core/models.py:628 +#: core/models.py:100 core/models.py:620 msgid "attribute group" msgstr "属性グループ" @@ -1446,51 +1410,61 @@ msgstr "カテゴリー説明" msgid "tags that help describe or group this category" msgstr "このカテゴリーを説明またはグループ化するのに役立つタグ" -#: core/models.py:299 core/models.py:387 +#: core/models.py:299 core/models.py:375 msgid "priority" msgstr "優先順位" -#: core/models.py:340 +#: core/models.py:318 +msgid "" +"Represents a Brand object in the system. This class handles information and " +"attributes related to a brand, including its name, logos, description, " +"associated categories, a unique slug, and priority order. It allows for the " +"organization and representation of brand-related data within the " +"application." +msgstr "" +"システム内のブランド・オブジェクトを表します。このクラスは、名前、ロゴ、説明、関連カテゴリ、一意のスラッグ、および優先順位など、ブランドに関連する情報と属性を処理します。このクラスによって、アプリケーション内でブランド関連データを整理し、表現することができます。" + +#: core/models.py:328 msgid "name of this brand" msgstr "ブランド名" -#: core/models.py:341 +#: core/models.py:329 msgid "brand name" msgstr "ブランド名" -#: core/models.py:348 +#: core/models.py:336 msgid "upload a logo representing this brand" msgstr "このブランドを代表するロゴをアップロードする" -#: core/models.py:350 +#: core/models.py:338 msgid "brand small image" msgstr "小さなブランドイメージ" -#: core/models.py:356 +#: core/models.py:344 msgid "upload a big logo representing this brand" msgstr "このブランドを象徴する大きなロゴをアップロードする" -#: core/models.py:358 +#: core/models.py:346 msgid "brand big image" msgstr "大きなブランドイメージ" -#: core/models.py:363 +#: core/models.py:351 msgid "add a detailed description of the brand" msgstr "ブランドの詳細な説明を加える" -#: core/models.py:364 +#: core/models.py:352 msgid "brand description" msgstr "ブランド説明" -#: core/models.py:369 +#: core/models.py:357 msgid "optional categories that this brand is associated with" msgstr "このブランドが関連するオプション・カテゴリー" -#: core/models.py:370 +#: core/models.py:358 msgid "associated categories" msgstr "カテゴリー" -#: core/models.py:400 +#: core/models.py:388 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1501,68 +1475,68 @@ msgid "" msgstr "" "システムで管理されている商品の在庫を表します。このクラスは、ベンダー、商品、およびそれらの在庫情報間の関係の詳細や、価格、購入価格、数量、SKU、デジタル資産などの在庫関連プロパティを提供します。これは在庫管理システムの一部で、さまざまなベンダーから入手可能な製品の追跡と評価を可能にします。" -#: core/models.py:412 +#: core/models.py:400 msgid "the vendor supplying this product stock" msgstr "この製品の在庫を供給しているベンダー" -#: core/models.py:413 +#: core/models.py:401 msgid "associated vendor" msgstr "関連ベンダー" -#: core/models.py:417 +#: core/models.py:405 msgid "final price to the customer after markups" msgstr "マークアップ後の顧客への最終価格" -#: core/models.py:418 +#: core/models.py:406 msgid "selling price" msgstr "販売価格" -#: core/models.py:423 +#: core/models.py:411 msgid "the product associated with this stock entry" msgstr "このストックエントリーに関連する製品" -#: core/models.py:424 core/models.py:708 core/models.py:765 -#: core/models.py:1709 +#: core/models.py:412 core/models.py:683 core/models.py:730 +#: core/models.py:1583 msgid "associated product" msgstr "関連製品" -#: core/models.py:431 +#: core/models.py:419 msgid "the price paid to the vendor for this product" msgstr "この製品に対してベンダーに支払われた価格" -#: core/models.py:432 +#: core/models.py:420 msgid "vendor purchase price" msgstr "ベンダーの購入価格" -#: core/models.py:436 +#: core/models.py:424 msgid "available quantity of the product in stock" msgstr "在庫数" -#: core/models.py:437 +#: core/models.py:425 msgid "quantity in stock" msgstr "在庫数" -#: core/models.py:441 +#: core/models.py:429 msgid "vendor-assigned SKU for identifying the product" msgstr "製品を識別するためにベンダーが割り当てたSKU" -#: core/models.py:442 +#: core/models.py:430 msgid "vendor sku" msgstr "ベンダーのSKU" -#: core/models.py:448 +#: core/models.py:436 msgid "digital file associated with this stock if applicable" msgstr "この銘柄に関連するデジタルファイル(該当する場合" -#: core/models.py:449 +#: core/models.py:437 msgid "digital file" msgstr "デジタルファイル" -#: core/models.py:458 +#: core/models.py:446 msgid "stock entries" msgstr "ストックエントリー" -#: core/models.py:463 +#: core/models.py:451 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1577,55 +1551,55 @@ msgstr "" " (Category、Brand、ProductTag など) " "と相互作用し、パフォーマンスを向上させるために、頻繁にアクセスされるプロパティのキャッシュを管理します。アプリケーション内で商品データとその関連情報を定義し、操作するために使用されます。" -#: core/models.py:476 +#: core/models.py:464 msgid "category this product belongs to" msgstr "この製品が属するカテゴリ" -#: core/models.py:485 +#: core/models.py:473 msgid "optionally associate this product with a brand" msgstr "オプションでこの製品をブランドと関連付ける" -#: core/models.py:491 +#: core/models.py:479 msgid "tags that help describe or group this product" msgstr "この商品の説明やグループ分けに役立つタグ" -#: core/models.py:496 +#: core/models.py:484 msgid "indicates whether this product is digitally delivered" msgstr "この製品がデジタル配信されるかどうかを示す" -#: core/models.py:497 +#: core/models.py:485 msgid "is product digital" msgstr "製品はデジタルか" -#: core/models.py:503 +#: core/models.py:491 msgid "provide a clear identifying name for the product" msgstr "製品の明確な識別名を提供する" -#: core/models.py:504 +#: core/models.py:492 msgid "product name" msgstr "商品名" -#: core/models.py:509 core/models.py:831 +#: core/models.py:497 core/models.py:772 msgid "add a detailed description of the product" msgstr "商品の詳細説明を追加する" -#: core/models.py:510 +#: core/models.py:498 msgid "product description" msgstr "商品説明" -#: core/models.py:517 +#: core/models.py:505 msgid "part number for this product" msgstr "この製品の品番" -#: core/models.py:518 +#: core/models.py:506 msgid "part number" msgstr "品番" -#: core/models.py:537 +#: core/models.py:525 msgid "stock keeping unit for this product" msgstr "この製品の在庫管理単位" -#: core/models.py:607 +#: core/models.py:599 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 " @@ -1637,303 +1611,382 @@ msgstr "" "システム内の属性を表します。このクラスは、属性を定義および管理するために使用されます。属性は、他のエンティティに関連付けることができる、カスタマイズ可能なデータの部分です。属性には、関連するカテゴリ、グループ、値型、および名前があります。このモデルは、string、integer、float、boolean、array、object" " などの複数の型の値をサポートしています。これにより、動的で柔軟なデータ構造化が可能になります。" -#: core/models.py:619 +#: core/models.py:611 msgid "category of this attribute" msgstr "この属性のカテゴリー" -#: core/models.py:627 +#: core/models.py:619 msgid "group of this attribute" msgstr "この属性のグループ" -#: core/models.py:633 +#: core/models.py:625 msgid "string" msgstr "ストリング" -#: core/models.py:634 +#: core/models.py:626 msgid "integer" msgstr "整数" -#: core/models.py:635 +#: core/models.py:627 msgid "float" msgstr "フロート" -#: core/models.py:636 +#: core/models.py:628 msgid "boolean" msgstr "ブーリアン" -#: core/models.py:637 +#: core/models.py:629 msgid "array" msgstr "配列" -#: core/models.py:638 +#: core/models.py:630 msgid "object" msgstr "対象" -#: core/models.py:640 +#: core/models.py:632 msgid "type of the attribute's value" msgstr "属性値のタイプ" -#: core/models.py:641 +#: core/models.py:633 msgid "value type" msgstr "値の種類" -#: core/models.py:646 +#: core/models.py:638 msgid "name of this attribute" msgstr "この属性の名前" -#: core/models.py:647 +#: core/models.py:639 msgid "attribute's name" msgstr "属性名" -#: core/models.py:653 +#: core/models.py:645 msgid "is filterable" msgstr "フィルタリング可能" -#: core/models.py:654 +#: core/models.py:646 msgid "designates whether this attribute can be used for filtering or not" msgstr "この属性がフィルタリングに使用できるかどうかを指定する。" -#: core/models.py:665 core/models.py:700 +#: core/models.py:657 core/models.py:675 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "属性" -#: core/models.py:699 +#: core/models.py:663 +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:674 msgid "attribute of this value" msgstr "この値の属性" -#: core/models.py:707 +#: core/models.py:682 msgid "the specific product associated with this attribute's value" msgstr "この属性の値に関連する特定の製品" -#: core/models.py:713 +#: core/models.py:688 msgid "the specific value for this attribute" msgstr "この属性の具体的な値" -#: core/models.py:747 +#: core/models.py:701 +msgid "" +"Represents a product image associated with a product in the system. This " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " +"determining their display order. It also includes an accessibility feature " +"with alternative text for the images." +msgstr "" +"システム内の商品に関連付けられた商品画像を表します。このクラスは商品の画像を管理するために設計されており、画像ファイルのアップロード、特定の商品との関連付け、表示順の決定などの機能を提供します。また、画像の代替テキストによるアクセシビリティ機能も備えています。" + +#: core/models.py:712 msgid "provide alternative text for the image for accessibility" msgstr "アクセシビリティのために、画像に代替テキストを提供する。" -#: core/models.py:748 +#: core/models.py:713 msgid "image alt text" msgstr "画像のaltテキスト" -#: core/models.py:751 +#: core/models.py:716 msgid "upload the image file for this product" msgstr "この商品の画像ファイルをアップロードする" -#: core/models.py:752 core/models.py:777 +#: core/models.py:717 core/models.py:742 msgid "product image" msgstr "商品画像" -#: core/models.py:758 +#: core/models.py:723 msgid "determines the order in which images are displayed" msgstr "画像の表示順を決める" -#: core/models.py:759 +#: core/models.py:724 msgid "display priority" msgstr "表示優先度" -#: core/models.py:764 +#: core/models.py:729 msgid "the product that this image represents" msgstr "この画像が表す製品" -#: core/models.py:778 +#: core/models.py:743 msgid "product images" msgstr "商品画像" -#: core/models.py:819 +#: core/models.py:748 +msgid "" +"Represents a promotional campaign for products with a discount. This class " +"is used to define and manage promotional campaigns that offer a percentage-" +"based discount for products. The class includes attributes for setting the " +"discount rate, providing details about the promotion, and linking it to the " +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." +msgstr "" +"割引を伴う商品の販促キャンペーンを表します。このクラスは、商品に対してパーセンテージベースの割引を提供する販促キャンペーンを定義および管理するために使用します。このクラスには、割引率を設定し、プロモーションの詳細を提供し、該当する商品にリンクするための属性が含まれます。商品カタログと統合して、キャンペーンの対象商品を決定します。" + +#: core/models.py:760 msgid "percentage discount for the selected products" msgstr "選択した商品の割引率" -#: core/models.py:820 +#: core/models.py:761 msgid "discount percentage" msgstr "割引率" -#: core/models.py:825 +#: core/models.py:766 msgid "provide a unique name for this promotion" msgstr "このプロモーションのユニークな名前を入力してください。" -#: core/models.py:826 +#: core/models.py:767 msgid "promotion name" msgstr "プロモーション名" -#: core/models.py:832 +#: core/models.py:773 msgid "promotion description" msgstr "プロモーション内容" -#: core/models.py:837 +#: core/models.py:778 msgid "select which products are included in this promotion" msgstr "キャンペーン対象商品をお選びください。" -#: core/models.py:838 +#: core/models.py:779 msgid "included products" msgstr "含まれる製品" -#: core/models.py:842 +#: core/models.py:783 msgid "promotion" msgstr "プロモーション" -#: core/models.py:867 +#: core/models.py:794 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"class provides functionality to manage a collection of products, supporting " +"operations such as adding and removing products, as well as supporting " +"operations for adding and removing multiple products at once." +msgstr "" +"希望する商品を保存・管理するためのユーザーのウィッシュリストを表します。このクラスは、商品のコレクションを管理する機能を提供し、商品の追加や削除などの操作をサポートし、複数の商品を一度に追加したり削除したりする操作をサポートします。" + +#: core/models.py:806 msgid "products that the user has marked as wanted" msgstr "ユーザーが欲しいとマークした商品" -#: core/models.py:875 +#: core/models.py:814 msgid "user who owns this wishlist" msgstr "このウィッシュリストを所有しているユーザー" -#: core/models.py:876 +#: core/models.py:815 msgid "wishlist owner" msgstr "ウィッシュリストのオーナー" -#: core/models.py:884 +#: core/models.py:823 msgid "wishlist" msgstr "ウィッシュリスト" -#: core/models.py:951 +#: core/models.py:865 +msgid "" +"Represents a documentary record tied to a product. This class is used to " +"store information about documentaries related to specific products, " +"including file uploads and their metadata. It contains methods and " +"properties to handle the file type and storage path for the documentary " +"files. It extends functionality from specific mixins and provides additional" +" custom features." +msgstr "" +"商品に関連付けられたドキュメンタリーのレコードを表します。このクラスは、ファイルのアップロードとそのメタデータを含む、特定の商品に関連するドキュメンタリーに関する情報を格納するために使用されます。ドキュメントファイルのファイルタイプと保存パスを処理するメソッドとプロパティが含まれています。特定のミックスインから機能を拡張し、追加のカスタム機能を提供します。" + +#: core/models.py:878 msgid "documentary" msgstr "ドキュメンタリー" -#: core/models.py:952 +#: core/models.py:879 msgid "documentaries" msgstr "ドキュメンタリー" -#: core/models.py:962 +#: core/models.py:889 msgid "unresolved" msgstr "未解決" -#: core/models.py:1008 +#: core/models.py:894 +msgid "" +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." +msgstr "" +"場所の詳細とユーザーとの関連付けを含む住所エンティティを表します。地理データおよび住所データを保存する機能と、ジオコーディングサービスとの統合機能を提供します。このクラスは、street、city、region、country、geolocation" +" (longitude and latitude) のようなコンポーネントを含む詳細な住所情報を格納するように設計されています。ジオコーディング API" +" との統合をサポートしており、 生の API " +"レスポンスを保存してさらなる処理や検査を行うことができます。また、このクラスは住所とユーザを関連付けることができ、 " +"パーソナライズされたデータの取り扱いを容易にします。" + +#: core/models.py:909 msgid "address line for the customer" msgstr "お客様の住所" -#: core/models.py:1009 +#: core/models.py:910 msgid "address line" msgstr "住所" -#: core/models.py:1011 +#: core/models.py:912 msgid "street" msgstr "ストリート" -#: core/models.py:1012 +#: core/models.py:913 msgid "district" msgstr "地区" -#: core/models.py:1013 +#: core/models.py:914 msgid "city" msgstr "都市" -#: core/models.py:1014 +#: core/models.py:915 msgid "region" msgstr "地域" -#: core/models.py:1015 +#: core/models.py:916 msgid "postal code" msgstr "郵便番号" -#: core/models.py:1016 +#: core/models.py:917 msgid "country" msgstr "国名" -#: core/models.py:1023 +#: core/models.py:924 msgid "geolocation point: (longitude, latitude)" msgstr "ジオロケーションポイント(経度、緯度)" -#: core/models.py:1026 +#: core/models.py:927 msgid "full JSON response from geocoder for this address" msgstr "この住所に対するジオコーダーからの完全なJSON応答" -#: core/models.py:1031 +#: core/models.py:932 msgid "stored JSON response from the geocoding service" msgstr "ジオコーディング・サービスからの保存されたJSONレスポンス" -#: core/models.py:1039 +#: core/models.py:940 msgid "address" msgstr "住所" -#: core/models.py:1040 +#: core/models.py:941 msgid "addresses" msgstr "住所" -#: core/models.py:1085 +#: core/models.py:953 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" +"割引に使用できるプロモーションコードを表し、その有効期間、割引の種類、適用を管理します。PromoCode クラスは、一意の識別子、割引のプロパティ " +"(金額またはパーセンテージ)、有効期間、関連するユーザ " +"(もしあれば)、および使用状況など、プロモーションコードに関する詳細を格納します。これは、制約が満たされていることを保証しながら、プロモコードを検証し、注文に適用する機能を含んでいます。" + +#: core/models.py:967 msgid "unique code used by a user to redeem a discount" msgstr "ユーザーが割引を利用する際に使用する固有のコード" -#: core/models.py:1086 +#: core/models.py:968 msgid "promo code identifier" msgstr "プロモコード識別子" -#: core/models.py:1093 +#: core/models.py:975 msgid "fixed discount amount applied if percent is not used" msgstr "パーセントを使用しない場合に適用される固定割引額" -#: core/models.py:1094 +#: core/models.py:976 msgid "fixed discount amount" msgstr "固定割引額" -#: core/models.py:1100 +#: core/models.py:982 msgid "percentage discount applied if fixed amount is not used" msgstr "定額を使用しない場合に適用される割引率" -#: core/models.py:1101 +#: core/models.py:983 msgid "percentage discount" msgstr "割引率" -#: core/models.py:1106 +#: core/models.py:988 msgid "timestamp when the promocode expires" msgstr "プロモコードの有効期限が切れるタイムスタンプ" -#: core/models.py:1107 +#: core/models.py:989 msgid "end validity time" msgstr "終了有効時間" -#: core/models.py:1112 +#: core/models.py:994 msgid "timestamp from which this promocode is valid" msgstr "このプロモコードが有効なタイムスタンプ" -#: core/models.py:1113 +#: core/models.py:995 msgid "start validity time" msgstr "開始有効時間" -#: core/models.py:1118 +#: core/models.py:1000 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "プロモコードが使用されたタイムスタンプ、未使用の場合は空白" -#: core/models.py:1119 +#: core/models.py:1001 msgid "usage timestamp" msgstr "使用タイムスタンプ" -#: core/models.py:1124 +#: core/models.py:1006 msgid "user assigned to this promocode if applicable" msgstr "該当する場合、このプロモコードに割り当てられたユーザー" -#: core/models.py:1125 +#: core/models.py:1007 msgid "assigned user" msgstr "担当ユーザー" -#: core/models.py:1132 +#: core/models.py:1014 msgid "promo code" msgstr "プロモコード" -#: core/models.py:1133 +#: core/models.py:1015 msgid "promo codes" msgstr "プロモコード" -#: core/models.py:1140 +#: core/models.py:1022 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "割引の種類は1つだけ(金額またはパーセント)定義されるべきで、両方またはどちらも定義してはならない。" -#: core/models.py:1155 +#: core/models.py:1037 msgid "promocode already used" msgstr "プロモコードはすでに使用されています" -#: core/models.py:1171 +#: core/models.py:1053 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "プロモコード {self.uuid} の割引タイプが無効です!" -#: core/models.py:1180 +#: core/models.py:1062 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 " @@ -1944,278 +1997,314 @@ msgid "" msgstr "" "ユーザーによる注文を表します。このクラスは、請求や配送情報、ステータス、関連するユーザ、通知、関連する操作などのさまざまな属性を含む、アプリケーション内の注文をモデル化します。注文は関連する商品を持つことができ、プロモーションを適用し、住所を設定し、配送または請求の詳細を更新することができます。同様に、注文のライフサイクルにおける商品の管理もサポートします。" -#: core/models.py:1197 +#: core/models.py:1079 msgid "the billing address used for this order" msgstr "この注文に使用される請求先住所" -#: core/models.py:1205 +#: core/models.py:1087 msgid "optional promo code applied to this order" msgstr "この注文に適用されるプロモコード" -#: core/models.py:1206 +#: core/models.py:1088 msgid "applied promo code" msgstr "プロモーションコード適用" -#: core/models.py:1214 +#: core/models.py:1096 msgid "the shipping address used for this order" msgstr "この注文に使用された配送先住所" -#: core/models.py:1215 +#: core/models.py:1097 msgid "shipping address" msgstr "配送先住所" -#: core/models.py:1221 +#: core/models.py:1103 msgid "current status of the order in its lifecycle" msgstr "ライフサイクルにおける現在の注文状況" -#: core/models.py:1222 +#: core/models.py:1104 msgid "order status" msgstr "注文状況" -#: core/models.py:1227 core/models.py:1686 +#: core/models.py:1109 core/models.py:1560 msgid "json structure of notifications to display to users" msgstr "ユーザーに表示する通知のJSON構造、管理UIではテーブルビューが使用されます。" -#: core/models.py:1233 +#: core/models.py:1115 msgid "json representation of order attributes for this order" msgstr "この注文の注文属性のJSON表現" -#: core/models.py:1239 +#: core/models.py:1121 msgid "the user who placed the order" msgstr "注文を行ったユーザー" -#: core/models.py:1240 +#: core/models.py:1122 msgid "user" msgstr "ユーザー" -#: core/models.py:1246 +#: core/models.py:1128 msgid "the timestamp when the order was finalized" msgstr "注文が確定したタイムスタンプ" -#: core/models.py:1247 +#: core/models.py:1129 msgid "buy time" msgstr "時間を買う" -#: core/models.py:1254 +#: core/models.py:1136 msgid "a human-readable identifier for the order" msgstr "オーダーの人間が読み取り可能な識別子。" -#: core/models.py:1255 +#: core/models.py:1137 msgid "human readable id" msgstr "人間が読めるID" -#: core/models.py:1261 +#: core/models.py:1143 msgid "order" msgstr "オーダー" -#: core/models.py:1282 +#: core/models.py:1168 msgid "a user must have only one pending order at a time" msgstr "ユーザーは一度に1つの未決注文しか持つことができません!" -#: core/models.py:1316 +#: core/models.py:1202 msgid "you cannot add products to an order that is not a pending one" msgstr "保留中の注文以外の注文に商品を追加することはできません。" -#: core/models.py:1321 +#: core/models.py:1207 msgid "you cannot add inactive products to order" msgstr "アクティブでない商品を注文に追加することはできません。" -#: core/models.py:1338 +#: core/models.py:1224 msgid "you cannot add more products than available in stock" msgstr "在庫以上の商品を追加することはできません。" -#: core/models.py:1360 core/models.py:1385 core/models.py:1393 +#: core/models.py:1246 core/models.py:1271 core/models.py:1279 msgid "you cannot remove products from an order that is not a pending one" msgstr "保留中の注文以外の注文から商品を削除することはできません。" -#: core/models.py:1381 +#: core/models.py:1267 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name}はクエリ<{query}と一緒に存在しません!" -#: core/models.py:1413 +#: core/models.py:1299 msgid "promocode does not exist" msgstr "プロモコードが存在しない" -#: core/models.py:1419 +#: core/models.py:1305 msgid "you can only buy physical products with shipping address specified" msgstr "配送先住所が指定された現物商品のみ購入可能!" -#: core/models.py:1438 +#: core/models.py:1324 msgid "address does not exist" msgstr "アドレスが存在しない" -#: core/models.py:1459 core/models.py:1528 +#: core/models.py:1345 core/models.py:1414 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "現在ご購入いただけません。数分後にもう一度お試しください。" -#: core/models.py:1462 core/models.py:1524 +#: core/models.py:1348 core/models.py:1410 msgid "invalid force value" msgstr "無効なフォース値" -#: core/models.py:1468 core/models.py:1531 +#: core/models.py:1354 core/models.py:1417 msgid "you cannot purchase an empty order!" msgstr "空注文はできません!" -#: core/models.py:1487 +#: core/models.py:1373 msgid "you cannot buy an order without a user" msgstr "ユーザーがいない注文は購入できない!" -#: core/models.py:1501 +#: core/models.py:1387 msgid "a user without a balance cannot buy with balance" msgstr "残高のないユーザーは、残高で購入することはできない!" -#: core/models.py:1506 +#: core/models.py:1392 msgid "insufficient funds to complete the order" msgstr "注文を完了するための資金不足" -#: core/models.py:1540 +#: core/models.py:1426 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "ご登録がない場合はご購入いただけませんので、以下の情報をお知らせください:お客様のお名前、お客様のEメール、お客様の電話番号" -#: core/models.py:1549 +#: core/models.py:1435 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "支払方法が無効です:{available_payment_methods}からの{payment_method}が無効です!" -#: core/models.py:1674 +#: core/models.py:1533 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" +"注文に関連する商品とその属性を表す。OrderProductモデルは、購入価格、数量、商品属性、ステータスなどの詳細を含む、注文の一部である商品に関する情報を保持します。ユーザーや管理者への通知を管理し、商品残高の返却やフィードバックの追加などの操作を処理します。このモデルはまた、合計価格の計算やデジタル商品のダウンロードURLの生成など、ビジネスロジックをサポートするメソッドやプロパティも提供します。このモデルはOrderモデルとProductモデルと統合され、それらへの参照を保存します。" + +#: core/models.py:1548 msgid "the price paid by the customer for this product at purchase time" msgstr "この商品の購入時に顧客が支払った価格" -#: core/models.py:1675 +#: core/models.py:1549 msgid "purchase price at order time" msgstr "注文時の購入価格" -#: core/models.py:1680 +#: core/models.py:1554 msgid "internal comments for admins about this ordered product" msgstr "この注文商品に関する管理者への内部コメント" -#: core/models.py:1681 +#: core/models.py:1555 msgid "internal comments" msgstr "社内コメント" -#: core/models.py:1687 +#: core/models.py:1561 msgid "user notifications" msgstr "ユーザー通知" -#: core/models.py:1692 +#: core/models.py:1566 msgid "json representation of this item's attributes" msgstr "このアイテムの属性のJSON表現" -#: core/models.py:1693 +#: core/models.py:1567 msgid "ordered product attributes" msgstr "製品属性の順序" -#: core/models.py:1698 +#: core/models.py:1572 msgid "reference to the parent order that contains this product" msgstr "この商品を含む親注文への参照" -#: core/models.py:1699 +#: core/models.py:1573 msgid "parent order" msgstr "親注文" -#: core/models.py:1708 +#: core/models.py:1582 msgid "the specific product associated with this order line" msgstr "この注文ラインに関連する特定の製品" -#: core/models.py:1715 +#: core/models.py:1589 msgid "quantity of this specific product in the order" msgstr "注文に含まれる特定の商品の数量" -#: core/models.py:1716 +#: core/models.py:1590 msgid "product quantity" msgstr "製品数量" -#: core/models.py:1723 +#: core/models.py:1597 msgid "current status of this product in the order" msgstr "この商品の現在のご注文状況" -#: core/models.py:1724 +#: core/models.py:1598 msgid "product line status" msgstr "製品ラインの状況" -#: core/models.py:1784 +#: core/models.py:1661 msgid "order product must have an order" msgstr "Orderproductには関連する注文がなければならない!" -#: core/models.py:1786 +#: core/models.py:1663 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "フィードバックに指定されたアクションが間違っています:{action}です!" -#: core/models.py:1800 +#: core/models.py:1677 msgid "you cannot feedback an order which is not received" msgstr "受信していない注文をフィードバックすることはできません。" -#: core/models.py:1806 +#: core/models.py:1683 msgid "name" msgstr "名称" -#: core/models.py:1807 +#: core/models.py:1684 msgid "URL of the integration" msgstr "統合のURL" -#: core/models.py:1808 +#: core/models.py:1685 msgid "authentication credentials" msgstr "認証情報" -#: core/models.py:1822 +#: core/models.py:1699 msgid "you can only have one default CRM provider" msgstr "デフォルトのCRMプロバイダーは1つだけです。" -#: core/models.py:1826 +#: core/models.py:1703 msgid "CRM" msgstr "CRM" -#: core/models.py:1827 +#: core/models.py:1704 msgid "CRMs" msgstr "CRM" -#: core/models.py:1839 +#: core/models.py:1716 msgid "order CRM link" msgstr "注文のCRMリンク" -#: core/models.py:1840 +#: core/models.py:1717 msgid "orders CRM links" msgstr "オーダーのCRMリンク" -#: core/models.py:1874 +#: core/models.py:1722 +msgid "" +"Represents the downloading functionality for digital assets associated with " +"orders. The DigitalAssetDownload class provides the ability to manage and " +"access downloads related to order products. It maintains information about " +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." +msgstr "" +"注文に関連するデジタル資産のダウンロード機能を表します。DigitalAssetDownloadクラスは、注文商品に関連するダウンロードを管理し、アクセスする機能を提供します。このクラスは、関連する注文商品、ダウンロード数、およびアセットが公開されているかどうかの情報を保持します。関連する注文が完了したステータスのときに、アセットをダウンロードするための" +" URL を生成するメソッドも含まれています。" + +#: core/models.py:1736 msgid "download" msgstr "ダウンロード" -#: core/models.py:1875 +#: core/models.py:1737 msgid "downloads" msgstr "ダウンロード" -#: core/models.py:1883 +#: core/models.py:1745 msgid "you can not download a digital asset for a non-finished order" msgstr "未完成の注文のデジタル資産をダウンロードすることはできません。" -#: core/models.py:1913 +#: core/models.py:1754 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." +msgstr "" +"製品に対するユーザのフィードバックを管理します。このクラスは、購入した特定の商品に対するユーザのフィードバックを取得し、保存するために設計されています。ユーザのコメント、注文の関連商品への参照、そしてユーザが割り当てた評価を保存する属性を含みます。このクラスは、フィードバックデータを効果的にモデル化し、管理するためにデータベースフィールドを使用します。" + +#: core/models.py:1766 msgid "user-provided comments about their experience with the product" msgstr "ユーザーから寄せられた製品使用体験に関するコメント" -#: core/models.py:1914 +#: core/models.py:1767 msgid "feedback comments" msgstr "フィードバック・コメント" -#: core/models.py:1921 +#: core/models.py:1774 msgid "" "references the specific product in an order that this feedback is about" msgstr "このフィードバックが対象としている注文の特定の製品を参照する。" -#: core/models.py:1922 +#: core/models.py:1775 msgid "related order product" msgstr "関連注文商品" -#: core/models.py:1927 +#: core/models.py:1780 msgid "user-assigned rating for the product" msgstr "ユーザーによる製品の評価" -#: core/models.py:1928 +#: core/models.py:1781 msgid "product rating" msgstr "製品評価" @@ -2421,17 +2510,17 @@ msgstr "無効なタイムアウト値です。" msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME}|コンタクト開始| お問い合わせはこちらから" -#: core/utils/emailing.py:64 +#: core/utils/emailing.py:74 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME}|注文確認| ご注文の確認" -#: core/utils/emailing.py:99 +#: core/utils/emailing.py:109 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME}|ご注文は配送されますか?" -#: core/utils/emailing.py:187 +#: core/utils/emailing.py:197 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME}|プロモコード付与" @@ -2453,15 +2542,15 @@ msgstr "画像のサイズは w{max_width} x h{max_height} ピクセルを超え msgid "invalid phone number format" msgstr "無効な電話番号形式" -#: core/views.py:481 +#: core/views.py:489 msgid "you can only download the digital asset once" msgstr "デジタルアセットのダウンロードは1回限りです。" -#: core/views.py:539 +#: core/views.py:547 msgid "favicon not found" msgstr "ファビコンが見つかりません" -#: core/viewsets.py:1319 +#: core/viewsets.py:1357 #, python-brace-format msgid "Geocoding error: {e}" msgstr "ジオコーディングエラー:{e}" diff --git a/core/locale/kk_KZ/LC_MESSAGES/django.po b/core/locale/kk_KZ/LC_MESSAGES/django.po index a03396bf..6c0be631 100644 --- a/core/locale/kk_KZ/LC_MESSAGES/django.po +++ b/core/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" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:52+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -88,11 +88,11 @@ msgid "selected items have been deactivated." msgstr "" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:712 core/models.py:720 +#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 msgid "attribute value" msgstr "" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:721 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 msgid "attribute values" msgstr "" @@ -104,7 +104,7 @@ msgstr "" msgid "images" msgstr "" -#: core/admin.py:155 core/models.py:457 +#: core/admin.py:155 core/models.py:445 msgid "stock" msgstr "" @@ -112,11 +112,11 @@ msgstr "" msgid "stocks" msgstr "" -#: core/admin.py:166 core/models.py:1735 +#: core/admin.py:166 core/models.py:1609 msgid "order product" msgstr "" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1736 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 msgid "order products" msgstr "" @@ -312,7 +312,7 @@ msgstr "" msgid "rewrite some fields of an existing category saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:553 +#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:487 #: core/graphene/object_types.py:117 core/graphene/object_types.py:207 #: core/graphene/object_types.py:509 msgid "SEO Meta snapshot" @@ -548,291 +548,255 @@ msgstr "" msgid "(exact) Product UUID" msgstr "" -#: core/docs/drf/viewsets.py:384 -msgid "(icontains) Product name" -msgstr "" - -#: core/docs/drf/viewsets.py:390 -msgid "(list) Category names, case-insensitive" -msgstr "" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Category UUID" -msgstr "" - -#: core/docs/drf/viewsets.py:402 -msgid "(list) Tag names, case-insensitive" -msgstr "" - -#: core/docs/drf/viewsets.py:408 -msgid "(gte) Minimum stock price" -msgstr "" - -#: core/docs/drf/viewsets.py:414 -msgid "(lte) Maximum stock price" -msgstr "" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Only active products" -msgstr "" - -#: core/docs/drf/viewsets.py:426 -msgid "(iexact) Brand name" -msgstr "" - -#: core/docs/drf/viewsets.py:438 -msgid "(gt) Minimum stock quantity" -msgstr "" - -#: core/docs/drf/viewsets.py:444 -msgid "(exact) Digital vs. physical" -msgstr "" - -#: core/docs/drf/viewsets.py:451 +#: core/docs/drf/viewsets.py:385 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:465 core/docs/drf/viewsets.py:466 +#: core/docs/drf/viewsets.py:399 core/docs/drf/viewsets.py:400 msgid "retrieve a single product (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:495 -#: core/docs/drf/viewsets.py:511 core/docs/drf/viewsets.py:527 -#: core/docs/drf/viewsets.py:543 core/docs/drf/viewsets.py:559 +#: core/docs/drf/viewsets.py:405 core/docs/drf/viewsets.py:429 +#: core/docs/drf/viewsets.py:445 core/docs/drf/viewsets.py:461 +#: core/docs/drf/viewsets.py:477 core/docs/drf/viewsets.py:493 msgid "Product UUID or slug" msgstr "" -#: core/docs/drf/viewsets.py:481 core/docs/drf/viewsets.py:482 +#: core/docs/drf/viewsets.py:415 core/docs/drf/viewsets.py:416 msgid "create a product" msgstr "" -#: core/docs/drf/viewsets.py:489 core/docs/drf/viewsets.py:490 +#: core/docs/drf/viewsets.py:423 core/docs/drf/viewsets.py:424 msgid "rewrite an existing product, preserving non-editable fields" msgstr "" -#: core/docs/drf/viewsets.py:505 core/docs/drf/viewsets.py:506 +#: core/docs/drf/viewsets.py:439 core/docs/drf/viewsets.py:440 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" -#: core/docs/drf/viewsets.py:521 core/docs/drf/viewsets.py:522 +#: core/docs/drf/viewsets.py:455 core/docs/drf/viewsets.py:456 msgid "delete a product" msgstr "" -#: core/docs/drf/viewsets.py:537 core/docs/drf/viewsets.py:538 +#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:472 msgid "lists all permitted feedbacks for a product" msgstr "" -#: core/docs/drf/viewsets.py:554 +#: core/docs/drf/viewsets.py:488 msgid "returns a snapshot of the product's SEO meta data" msgstr "" -#: core/docs/drf/viewsets.py:572 +#: core/docs/drf/viewsets.py:506 msgid "list all addresses" msgstr "" -#: core/docs/drf/viewsets.py:579 +#: core/docs/drf/viewsets.py:513 msgid "retrieve a single address" msgstr "" -#: core/docs/drf/viewsets.py:586 +#: core/docs/drf/viewsets.py:520 msgid "create a new address" msgstr "" -#: core/docs/drf/viewsets.py:594 +#: core/docs/drf/viewsets.py:528 msgid "delete an address" msgstr "" -#: core/docs/drf/viewsets.py:601 +#: core/docs/drf/viewsets.py:535 msgid "update an entire address" msgstr "" -#: core/docs/drf/viewsets.py:609 +#: core/docs/drf/viewsets.py:543 msgid "partially update an address" msgstr "" -#: core/docs/drf/viewsets.py:617 +#: core/docs/drf/viewsets.py:551 msgid "autocomplete address suggestions" msgstr "" -#: core/docs/drf/viewsets.py:622 +#: core/docs/drf/viewsets.py:556 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" -#: core/docs/drf/viewsets.py:628 +#: core/docs/drf/viewsets.py:562 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "" -#: core/docs/drf/viewsets.py:641 +#: core/docs/drf/viewsets.py:575 msgid "list all feedbacks (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:645 +#: core/docs/drf/viewsets.py:579 msgid "retrieve a single feedback (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:649 +#: core/docs/drf/viewsets.py:583 msgid "create a feedback" msgstr "" -#: core/docs/drf/viewsets.py:653 +#: core/docs/drf/viewsets.py:587 msgid "delete a feedback" msgstr "" -#: core/docs/drf/viewsets.py:657 +#: core/docs/drf/viewsets.py:591 msgid "rewrite an existing feedback saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:661 +#: core/docs/drf/viewsets.py:595 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:668 +#: core/docs/drf/viewsets.py:602 msgid "list all order–product relations (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:675 +#: core/docs/drf/viewsets.py:609 msgid "retrieve a single order–product relation (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:682 +#: core/docs/drf/viewsets.py:616 msgid "create a new order–product relation" msgstr "" -#: core/docs/drf/viewsets.py:689 +#: core/docs/drf/viewsets.py:623 msgid "replace an existing order–product relation" msgstr "" -#: core/docs/drf/viewsets.py:696 +#: core/docs/drf/viewsets.py:630 msgid "partially update an existing order–product relation" msgstr "" -#: core/docs/drf/viewsets.py:703 +#: core/docs/drf/viewsets.py:637 msgid "delete an order–product relation" msgstr "" -#: core/docs/drf/viewsets.py:710 +#: core/docs/drf/viewsets.py:644 msgid "add or remove feedback on an order–product relation" msgstr "" -#: core/elasticsearch/__init__.py:105 +#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 msgid "no search term provided." msgstr "" -#: core/filters.py:64 core/filters.py:594 core/filters.py:623 +#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +msgid "Search" +msgstr "" + +#: core/filters.py:66 core/filters.py:554 core/filters.py:583 msgid "UUID" msgstr "" -#: core/filters.py:65 core/filters.py:429 core/filters.py:560 +#: core/filters.py:67 core/filters.py:399 core/filters.py:526 msgid "Name" msgstr "" -#: core/filters.py:66 core/filters.py:562 +#: core/filters.py:68 core/filters.py:528 msgid "Categories" msgstr "" -#: core/filters.py:68 +#: core/filters.py:70 msgid "Categories Slugs" msgstr "" -#: core/filters.py:69 core/filters.py:437 +#: core/filters.py:71 core/filters.py:407 msgid "Tags" msgstr "" -#: core/filters.py:70 +#: core/filters.py:72 msgid "Min Price" msgstr "" -#: core/filters.py:71 +#: core/filters.py:73 msgid "Max Price" msgstr "" -#: core/filters.py:72 +#: core/filters.py:74 msgid "Is Active" msgstr "" -#: core/filters.py:73 +#: core/filters.py:75 msgid "Brand" msgstr "" -#: core/filters.py:74 +#: core/filters.py:76 msgid "Attributes" msgstr "" -#: core/filters.py:75 +#: core/filters.py:77 msgid "Quantity" msgstr "" -#: core/filters.py:76 core/filters.py:431 core/filters.py:561 -#: core/models.py:287 core/models.py:381 core/models.py:534 +#: core/filters.py:78 core/filters.py:401 core/filters.py:527 +#: core/models.py:287 core/models.py:369 core/models.py:522 msgid "Slug" msgstr "" -#: core/filters.py:77 +#: core/filters.py:79 msgid "Is Digital" msgstr "" -#: core/filters.py:78 +#: core/filters.py:80 msgid "Include sub-categories" msgstr "" -#: core/filters.py:81 +#: core/filters.py:83 msgid "Include personal ordered" msgstr "" -#: core/filters.py:83 core/models.py:538 +#: core/filters.py:85 core/models.py:526 msgid "SKU" msgstr "" -#: core/filters.py:166 +#: core/filters.py:161 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" -#: core/filters.py:356 +#: core/filters.py:324 msgid "Search (ID, product name or part number)" msgstr "" -#: core/filters.py:359 +#: core/filters.py:327 msgid "Bought after (inclusive)" msgstr "" -#: core/filters.py:360 +#: core/filters.py:328 msgid "Bought before (inclusive)" msgstr "" -#: core/filters.py:363 core/filters.py:410 core/filters.py:625 +#: core/filters.py:331 core/filters.py:378 core/filters.py:585 msgid "User email" msgstr "" -#: core/filters.py:364 core/filters.py:411 core/filters.py:603 -#: core/filters.py:624 +#: core/filters.py:332 core/filters.py:379 core/filters.py:563 +#: core/filters.py:584 msgid "User UUID" msgstr "" -#: core/filters.py:365 +#: core/filters.py:333 msgid "Status" msgstr "" -#: core/filters.py:369 +#: core/filters.py:337 msgid "Human Readable ID" msgstr "" -#: core/filters.py:430 +#: core/filters.py:400 msgid "Parent" msgstr "" -#: core/filters.py:434 +#: core/filters.py:404 msgid "Whole category(has at least 1 product or not)" msgstr "" -#: core/filters.py:438 +#: core/filters.py:408 msgid "Level" msgstr "" -#: core/filters.py:598 +#: core/filters.py:558 msgid "Product UUID" msgstr "" @@ -887,7 +851,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:821 +#: core/graphene/mutations.py:527 core/viewsets.py:839 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" @@ -948,37 +912,37 @@ msgstr "" msgid "add or delete a feedback for orderproduct" msgstr "" -#: core/graphene/mutations.py:555 +#: core/graphene/mutations.py:556 msgid "action must be either `add` or `remove`" msgstr "" -#: core/graphene/mutations.py:558 +#: core/graphene/mutations.py:559 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "" -#: core/graphene/mutations.py:621 +#: core/graphene/mutations.py:622 msgid "original address string provided by the user" msgstr "" -#: core/graphene/mutations.py:655 core/models.py:896 core/models.py:909 -#: core/models.py:1348 core/models.py:1377 core/models.py:1402 -#: core/viewsets.py:824 +#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 +#: core/models.py:1234 core/models.py:1263 core/models.py:1288 +#: core/viewsets.py:842 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" -#: core/graphene/mutations.py:668 +#: core/graphene/mutations.py:669 msgid "limit must be between 1 and 10" msgstr "" -#: core/graphene/mutations.py:713 +#: core/graphene/mutations.py:714 msgid "elasticsearch - works like a charm" msgstr "" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:666 core/models.py:1234 -#: core/models.py:1809 +#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 +#: core/models.py:1686 msgid "attributes" msgstr "" @@ -991,11 +955,11 @@ msgid "groups of attributes" msgstr "" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:620 +#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:612 msgid "categories" msgstr "" -#: core/graphene/object_types.py:124 core/models.py:395 +#: core/graphene/object_types.py:124 core/models.py:383 msgid "brands" msgstr "" @@ -1049,7 +1013,7 @@ msgid "represents feedback from a user." msgstr "" #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1228 +#: core/models.py:1110 msgid "notifications" msgstr "" @@ -1057,7 +1021,7 @@ msgstr "" msgid "download url for this order product if applicable" msgstr "" -#: core/graphene/object_types.py:400 core/models.py:1938 +#: core/graphene/object_types.py:400 core/models.py:1791 msgid "feedback" msgstr "" @@ -1065,7 +1029,7 @@ msgstr "" msgid "a list of order products in this order" msgstr "" -#: core/graphene/object_types.py:436 core/models.py:1198 +#: core/graphene/object_types.py:436 core/models.py:1080 msgid "billing address" msgstr "" @@ -1091,7 +1055,7 @@ msgstr "" msgid "transactions for this order" msgstr "" -#: core/graphene/object_types.py:465 core/models.py:1262 +#: core/graphene/object_types.py:465 core/models.py:1144 msgid "orders" msgstr "" @@ -1103,15 +1067,15 @@ msgstr "" msgid "product's images" msgstr "" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:477 +#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 msgid "category" msgstr "" -#: core/graphene/object_types.py:502 core/models.py:1939 +#: core/graphene/object_types.py:502 core/models.py:1792 msgid "feedbacks" msgstr "" -#: core/graphene/object_types.py:503 core/models.py:394 core/models.py:486 +#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 msgid "brand" msgstr "" @@ -1143,7 +1107,7 @@ msgstr "" msgid "only available for personal orders" msgstr "" -#: core/graphene/object_types.py:534 core/models.py:548 +#: core/graphene/object_types.py:534 core/models.py:536 msgid "products" msgstr "" @@ -1155,7 +1119,7 @@ msgstr "" msgid "products on sale" msgstr "" -#: core/graphene/object_types.py:651 core/models.py:843 +#: core/graphene/object_types.py:651 core/models.py:784 msgid "promotions" msgstr "" @@ -1163,7 +1127,7 @@ msgstr "" msgid "vendor" msgstr "" -#: core/graphene/object_types.py:656 core/models.py:547 +#: core/graphene/object_types.py:656 core/models.py:535 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1171,11 +1135,11 @@ msgstr "" msgid "product" msgstr "" -#: core/graphene/object_types.py:667 core/models.py:868 +#: core/graphene/object_types.py:667 core/models.py:807 msgid "wishlisted products" msgstr "" -#: core/graphene/object_types.py:673 core/models.py:885 +#: core/graphene/object_types.py:673 core/models.py:824 msgid "wishlists" msgstr "" @@ -1183,7 +1147,7 @@ msgstr "" msgid "tagged products" msgstr "" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:492 +#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 msgid "product tags" msgstr "" @@ -1288,7 +1252,7 @@ msgstr "" msgid "attribute group's name" msgstr "" -#: core/models.py:100 core/models.py:628 +#: core/models.py:100 core/models.py:620 msgid "attribute group" msgstr "" @@ -1424,51 +1388,59 @@ msgstr "" msgid "tags that help describe or group this category" msgstr "" -#: core/models.py:299 core/models.py:387 +#: core/models.py:299 core/models.py:375 msgid "priority" msgstr "" -#: core/models.py:340 +#: core/models.py:318 +msgid "" +"Represents a Brand object in the system. This class handles information and " +"attributes related to a brand, including its name, logos, description, " +"associated categories, a unique slug, and priority order. It allows for the " +"organization and representation of brand-related data within the application." +msgstr "" + +#: core/models.py:328 msgid "name of this brand" msgstr "" -#: core/models.py:341 +#: core/models.py:329 msgid "brand name" msgstr "" -#: core/models.py:348 +#: core/models.py:336 msgid "upload a logo representing this brand" msgstr "" -#: core/models.py:350 +#: core/models.py:338 msgid "brand small image" msgstr "" -#: core/models.py:356 +#: core/models.py:344 msgid "upload a big logo representing this brand" msgstr "" -#: core/models.py:358 +#: core/models.py:346 msgid "brand big image" msgstr "" -#: core/models.py:363 +#: core/models.py:351 msgid "add a detailed description of the brand" msgstr "" -#: core/models.py:364 +#: core/models.py:352 msgid "brand description" msgstr "" -#: core/models.py:369 +#: core/models.py:357 msgid "optional categories that this brand is associated with" msgstr "" -#: core/models.py:370 +#: core/models.py:358 msgid "associated categories" msgstr "" -#: core/models.py:400 +#: core/models.py:388 msgid "" "Represents the stock of a product managed in the system. This class provides " "details about the relationship between vendors, products, and their stock " @@ -1478,67 +1450,67 @@ msgid "" "from various vendors." msgstr "" -#: core/models.py:412 +#: core/models.py:400 msgid "the vendor supplying this product stock" msgstr "" -#: core/models.py:413 +#: core/models.py:401 msgid "associated vendor" msgstr "" -#: core/models.py:417 +#: core/models.py:405 msgid "final price to the customer after markups" msgstr "" -#: core/models.py:418 +#: core/models.py:406 msgid "selling price" msgstr "" -#: core/models.py:423 +#: core/models.py:411 msgid "the product associated with this stock entry" msgstr "" -#: core/models.py:424 core/models.py:708 core/models.py:765 core/models.py:1709 +#: core/models.py:412 core/models.py:683 core/models.py:730 core/models.py:1583 msgid "associated product" msgstr "" -#: core/models.py:431 +#: core/models.py:419 msgid "the price paid to the vendor for this product" msgstr "" -#: core/models.py:432 +#: core/models.py:420 msgid "vendor purchase price" msgstr "" -#: core/models.py:436 +#: core/models.py:424 msgid "available quantity of the product in stock" msgstr "" -#: core/models.py:437 +#: core/models.py:425 msgid "quantity in stock" msgstr "" -#: core/models.py:441 +#: core/models.py:429 msgid "vendor-assigned SKU for identifying the product" msgstr "" -#: core/models.py:442 +#: core/models.py:430 msgid "vendor sku" msgstr "" -#: core/models.py:448 +#: core/models.py:436 msgid "digital file associated with this stock if applicable" msgstr "" -#: core/models.py:449 +#: core/models.py:437 msgid "digital file" msgstr "" -#: core/models.py:458 +#: core/models.py:446 msgid "stock entries" msgstr "" -#: core/models.py:463 +#: core/models.py:451 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1550,55 +1522,55 @@ msgid "" "product data and its associated information within an application." msgstr "" -#: core/models.py:476 +#: core/models.py:464 msgid "category this product belongs to" msgstr "" -#: core/models.py:485 +#: core/models.py:473 msgid "optionally associate this product with a brand" msgstr "" -#: core/models.py:491 +#: core/models.py:479 msgid "tags that help describe or group this product" msgstr "" -#: core/models.py:496 +#: core/models.py:484 msgid "indicates whether this product is digitally delivered" msgstr "" -#: core/models.py:497 +#: core/models.py:485 msgid "is product digital" msgstr "" -#: core/models.py:503 +#: core/models.py:491 msgid "provide a clear identifying name for the product" msgstr "" -#: core/models.py:504 +#: core/models.py:492 msgid "product name" msgstr "" -#: core/models.py:509 core/models.py:831 +#: core/models.py:497 core/models.py:772 msgid "add a detailed description of the product" msgstr "" -#: core/models.py:510 +#: core/models.py:498 msgid "product description" msgstr "" -#: core/models.py:517 +#: core/models.py:505 msgid "part number for this product" msgstr "" -#: core/models.py:518 +#: core/models.py:506 msgid "part number" msgstr "" -#: core/models.py:537 +#: core/models.py:525 msgid "stock keeping unit for this product" msgstr "" -#: core/models.py:607 +#: core/models.py:599 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 " @@ -1608,303 +1580,369 @@ msgid "" "for dynamic and flexible data structuring." msgstr "" -#: core/models.py:619 +#: core/models.py:611 msgid "category of this attribute" msgstr "" -#: core/models.py:627 +#: core/models.py:619 msgid "group of this attribute" msgstr "" -#: core/models.py:633 +#: core/models.py:625 msgid "string" msgstr "" -#: core/models.py:634 +#: core/models.py:626 msgid "integer" msgstr "" -#: core/models.py:635 +#: core/models.py:627 msgid "float" msgstr "" -#: core/models.py:636 +#: core/models.py:628 msgid "boolean" msgstr "" -#: core/models.py:637 +#: core/models.py:629 msgid "array" msgstr "" -#: core/models.py:638 +#: core/models.py:630 msgid "object" msgstr "" -#: core/models.py:640 +#: core/models.py:632 msgid "type of the attribute's value" msgstr "" -#: core/models.py:641 +#: core/models.py:633 msgid "value type" msgstr "" -#: core/models.py:646 +#: core/models.py:638 msgid "name of this attribute" msgstr "" -#: core/models.py:647 +#: core/models.py:639 msgid "attribute's name" msgstr "" -#: core/models.py:653 +#: core/models.py:645 msgid "is filterable" msgstr "" -#: core/models.py:654 +#: core/models.py:646 msgid "designates whether this attribute can be used for filtering or not" msgstr "" -#: core/models.py:665 core/models.py:700 +#: core/models.py:657 core/models.py:675 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "" -#: core/models.py:699 +#: core/models.py:663 +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:674 msgid "attribute of this value" msgstr "" -#: core/models.py:707 +#: core/models.py:682 msgid "the specific product associated with this attribute's value" msgstr "" -#: core/models.py:713 +#: core/models.py:688 msgid "the specific value for this attribute" msgstr "" -#: core/models.py:747 +#: core/models.py:701 +msgid "" +"Represents a product image associated with a product in the system. This " +"class is designed to manage images for products, including functionality for " +"uploading image files, associating them with specific products, and " +"determining their display order. It also includes an accessibility feature " +"with alternative text for the images." +msgstr "" + +#: core/models.py:712 msgid "provide alternative text for the image for accessibility" msgstr "" -#: core/models.py:748 +#: core/models.py:713 msgid "image alt text" msgstr "" -#: core/models.py:751 +#: core/models.py:716 msgid "upload the image file for this product" msgstr "" -#: core/models.py:752 core/models.py:777 +#: core/models.py:717 core/models.py:742 msgid "product image" msgstr "" -#: core/models.py:758 +#: core/models.py:723 msgid "determines the order in which images are displayed" msgstr "" -#: core/models.py:759 +#: core/models.py:724 msgid "display priority" msgstr "" -#: core/models.py:764 +#: core/models.py:729 msgid "the product that this image represents" msgstr "" -#: core/models.py:778 +#: core/models.py:743 msgid "product images" msgstr "" -#: core/models.py:819 +#: core/models.py:748 +msgid "" +"Represents a promotional campaign for products with a discount. This class " +"is used to define and manage promotional campaigns that offer a percentage-" +"based discount for products. The class includes attributes for setting the " +"discount rate, providing details about the promotion, and linking it to the " +"applicable products. It integrates with the product catalog to determine the " +"affected items in the campaign." +msgstr "" + +#: core/models.py:760 msgid "percentage discount for the selected products" msgstr "" -#: core/models.py:820 +#: core/models.py:761 msgid "discount percentage" msgstr "" -#: core/models.py:825 +#: core/models.py:766 msgid "provide a unique name for this promotion" msgstr "" -#: core/models.py:826 +#: core/models.py:767 msgid "promotion name" msgstr "" -#: core/models.py:832 +#: core/models.py:773 msgid "promotion description" msgstr "" -#: core/models.py:837 +#: core/models.py:778 msgid "select which products are included in this promotion" msgstr "" -#: core/models.py:838 +#: core/models.py:779 msgid "included products" msgstr "" -#: core/models.py:842 +#: core/models.py:783 msgid "promotion" msgstr "" -#: core/models.py:867 +#: core/models.py:794 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"class provides functionality to manage a collection of products, supporting " +"operations such as adding and removing products, as well as supporting " +"operations for adding and removing multiple products at once." +msgstr "" + +#: core/models.py:806 msgid "products that the user has marked as wanted" msgstr "" -#: core/models.py:875 +#: core/models.py:814 msgid "user who owns this wishlist" msgstr "" -#: core/models.py:876 +#: core/models.py:815 msgid "wishlist owner" msgstr "" -#: core/models.py:884 +#: core/models.py:823 msgid "wishlist" msgstr "" -#: core/models.py:951 +#: core/models.py:865 +msgid "" +"Represents a documentary record tied to a product. This class is used to " +"store information about documentaries related to specific products, " +"including file uploads and their metadata. It contains methods and " +"properties to handle the file type and storage path for the documentary " +"files. It extends functionality from specific mixins and provides additional " +"custom features." +msgstr "" + +#: core/models.py:878 msgid "documentary" msgstr "" -#: core/models.py:952 +#: core/models.py:879 msgid "documentaries" msgstr "" -#: core/models.py:962 +#: core/models.py:889 msgid "unresolved" msgstr "" -#: core/models.py:1008 +#: core/models.py:894 +msgid "" +"Represents an address entity that includes location details and associations " +"with a user. Provides functionality for geographic and address data storage, " +"as well as integration with geocoding services. This class is designed to " +"store detailed address information including components like street, city, " +"region, country, and geolocation (longitude and latitude). It supports " +"integration with geocoding APIs, enabling the storage of raw API responses " +"for further processing or inspection. The class also allows associating an " +"address with a user, facilitating personalized data handling." +msgstr "" + +#: core/models.py:909 msgid "address line for the customer" msgstr "" -#: core/models.py:1009 +#: core/models.py:910 msgid "address line" msgstr "" -#: core/models.py:1011 +#: core/models.py:912 msgid "street" msgstr "" -#: core/models.py:1012 +#: core/models.py:913 msgid "district" msgstr "" -#: core/models.py:1013 +#: core/models.py:914 msgid "city" msgstr "" -#: core/models.py:1014 +#: core/models.py:915 msgid "region" msgstr "" -#: core/models.py:1015 +#: core/models.py:916 msgid "postal code" msgstr "" -#: core/models.py:1016 +#: core/models.py:917 msgid "country" msgstr "" -#: core/models.py:1023 +#: core/models.py:924 msgid "geolocation point: (longitude, latitude)" msgstr "" -#: core/models.py:1026 +#: core/models.py:927 msgid "full JSON response from geocoder for this address" msgstr "" -#: core/models.py:1031 +#: core/models.py:932 msgid "stored JSON response from the geocoding service" msgstr "" -#: core/models.py:1039 +#: core/models.py:940 msgid "address" msgstr "" -#: core/models.py:1040 +#: core/models.py:941 msgid "addresses" msgstr "" -#: core/models.py:1085 +#: core/models.py:953 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" + +#: core/models.py:967 msgid "unique code used by a user to redeem a discount" msgstr "" -#: core/models.py:1086 +#: core/models.py:968 msgid "promo code identifier" msgstr "" -#: core/models.py:1093 +#: core/models.py:975 msgid "fixed discount amount applied if percent is not used" msgstr "" -#: core/models.py:1094 +#: core/models.py:976 msgid "fixed discount amount" msgstr "" -#: core/models.py:1100 +#: core/models.py:982 msgid "percentage discount applied if fixed amount is not used" msgstr "" -#: core/models.py:1101 +#: core/models.py:983 msgid "percentage discount" msgstr "" -#: core/models.py:1106 +#: core/models.py:988 msgid "timestamp when the promocode expires" msgstr "" -#: core/models.py:1107 +#: core/models.py:989 msgid "end validity time" msgstr "" -#: core/models.py:1112 +#: core/models.py:994 msgid "timestamp from which this promocode is valid" msgstr "" -#: core/models.py:1113 +#: core/models.py:995 msgid "start validity time" msgstr "" -#: core/models.py:1118 +#: core/models.py:1000 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" -#: core/models.py:1119 +#: core/models.py:1001 msgid "usage timestamp" msgstr "" -#: core/models.py:1124 +#: core/models.py:1006 msgid "user assigned to this promocode if applicable" msgstr "" -#: core/models.py:1125 +#: core/models.py:1007 msgid "assigned user" msgstr "" -#: core/models.py:1132 +#: core/models.py:1014 msgid "promo code" msgstr "" -#: core/models.py:1133 +#: core/models.py:1015 msgid "promo codes" msgstr "" -#: core/models.py:1140 +#: core/models.py:1022 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "" -#: core/models.py:1155 +#: core/models.py:1037 msgid "promocode already used" msgstr "" -#: core/models.py:1171 +#: core/models.py:1053 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "" -#: core/models.py:1180 +#: core/models.py:1062 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 " @@ -1914,277 +1952,309 @@ msgid "" "supports managing the products in the order lifecycle." msgstr "" -#: core/models.py:1197 +#: core/models.py:1079 msgid "the billing address used for this order" msgstr "" -#: core/models.py:1205 +#: core/models.py:1087 msgid "optional promo code applied to this order" msgstr "" -#: core/models.py:1206 +#: core/models.py:1088 msgid "applied promo code" msgstr "" -#: core/models.py:1214 +#: core/models.py:1096 msgid "the shipping address used for this order" msgstr "" -#: core/models.py:1215 +#: core/models.py:1097 msgid "shipping address" msgstr "" -#: core/models.py:1221 +#: core/models.py:1103 msgid "current status of the order in its lifecycle" msgstr "" -#: core/models.py:1222 +#: core/models.py:1104 msgid "order status" msgstr "" -#: core/models.py:1227 core/models.py:1686 +#: core/models.py:1109 core/models.py:1560 msgid "json structure of notifications to display to users" msgstr "" -#: core/models.py:1233 +#: core/models.py:1115 msgid "json representation of order attributes for this order" msgstr "" -#: core/models.py:1239 +#: core/models.py:1121 msgid "the user who placed the order" msgstr "" -#: core/models.py:1240 +#: core/models.py:1122 msgid "user" msgstr "" -#: core/models.py:1246 +#: core/models.py:1128 msgid "the timestamp when the order was finalized" msgstr "" -#: core/models.py:1247 +#: core/models.py:1129 msgid "buy time" msgstr "" -#: core/models.py:1254 +#: core/models.py:1136 msgid "a human-readable identifier for the order" msgstr "" -#: core/models.py:1255 +#: core/models.py:1137 msgid "human readable id" msgstr "" -#: core/models.py:1261 +#: core/models.py:1143 msgid "order" msgstr "" -#: core/models.py:1282 +#: core/models.py:1168 msgid "a user must have only one pending order at a time" msgstr "" -#: core/models.py:1316 +#: core/models.py:1202 msgid "you cannot add products to an order that is not a pending one" msgstr "" -#: core/models.py:1321 +#: core/models.py:1207 msgid "you cannot add inactive products to order" msgstr "" -#: core/models.py:1338 +#: core/models.py:1224 msgid "you cannot add more products than available in stock" msgstr "" -#: core/models.py:1360 core/models.py:1385 core/models.py:1393 +#: core/models.py:1246 core/models.py:1271 core/models.py:1279 msgid "you cannot remove products from an order that is not a pending one" msgstr "" -#: core/models.py:1381 +#: core/models.py:1267 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "" -#: core/models.py:1413 +#: core/models.py:1299 msgid "promocode does not exist" msgstr "" -#: core/models.py:1419 +#: core/models.py:1305 msgid "you can only buy physical products with shipping address specified" msgstr "" -#: core/models.py:1438 +#: core/models.py:1324 msgid "address does not exist" msgstr "" -#: core/models.py:1459 core/models.py:1528 +#: core/models.py:1345 core/models.py:1414 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" -#: core/models.py:1462 core/models.py:1524 +#: core/models.py:1348 core/models.py:1410 msgid "invalid force value" msgstr "" -#: core/models.py:1468 core/models.py:1531 +#: core/models.py:1354 core/models.py:1417 msgid "you cannot purchase an empty order!" msgstr "" -#: core/models.py:1487 +#: core/models.py:1373 msgid "you cannot buy an order without a user" msgstr "" -#: core/models.py:1501 +#: core/models.py:1387 msgid "a user without a balance cannot buy with balance" msgstr "" -#: core/models.py:1506 +#: core/models.py:1392 msgid "insufficient funds to complete the order" msgstr "" -#: core/models.py:1540 +#: core/models.py:1426 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "" -#: core/models.py:1549 +#: core/models.py:1435 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" -#: core/models.py:1674 +#: core/models.py:1533 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" + +#: core/models.py:1548 msgid "the price paid by the customer for this product at purchase time" msgstr "" -#: core/models.py:1675 +#: core/models.py:1549 msgid "purchase price at order time" msgstr "" -#: core/models.py:1680 +#: core/models.py:1554 msgid "internal comments for admins about this ordered product" msgstr "" -#: core/models.py:1681 +#: core/models.py:1555 msgid "internal comments" msgstr "" -#: core/models.py:1687 +#: core/models.py:1561 msgid "user notifications" msgstr "" -#: core/models.py:1692 +#: core/models.py:1566 msgid "json representation of this item's attributes" msgstr "" -#: core/models.py:1693 +#: core/models.py:1567 msgid "ordered product attributes" msgstr "" -#: core/models.py:1698 +#: core/models.py:1572 msgid "reference to the parent order that contains this product" msgstr "" -#: core/models.py:1699 +#: core/models.py:1573 msgid "parent order" msgstr "" -#: core/models.py:1708 +#: core/models.py:1582 msgid "the specific product associated with this order line" msgstr "" -#: core/models.py:1715 +#: core/models.py:1589 msgid "quantity of this specific product in the order" msgstr "" -#: core/models.py:1716 +#: core/models.py:1590 msgid "product quantity" msgstr "" -#: core/models.py:1723 +#: core/models.py:1597 msgid "current status of this product in the order" msgstr "" -#: core/models.py:1724 +#: core/models.py:1598 msgid "product line status" msgstr "" -#: core/models.py:1784 +#: core/models.py:1661 msgid "order product must have an order" msgstr "" -#: core/models.py:1786 +#: core/models.py:1663 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "" -#: core/models.py:1800 +#: core/models.py:1677 msgid "you cannot feedback an order which is not received" msgstr "" -#: core/models.py:1806 +#: core/models.py:1683 msgid "name" msgstr "" -#: core/models.py:1807 +#: core/models.py:1684 msgid "URL of the integration" msgstr "" -#: core/models.py:1808 +#: core/models.py:1685 msgid "authentication credentials" msgstr "" -#: core/models.py:1822 +#: core/models.py:1699 msgid "you can only have one default CRM provider" msgstr "" -#: core/models.py:1826 +#: core/models.py:1703 msgid "CRM" msgstr "" -#: core/models.py:1827 +#: core/models.py:1704 msgid "CRMs" msgstr "" -#: core/models.py:1839 +#: core/models.py:1716 msgid "order CRM link" msgstr "" -#: core/models.py:1840 +#: core/models.py:1717 msgid "orders CRM links" msgstr "" -#: core/models.py:1874 +#: core/models.py:1722 +msgid "" +"Represents the downloading functionality for digital assets associated with " +"orders. The DigitalAssetDownload class provides the ability to manage and " +"access downloads related to order products. It maintains information about " +"the associated order product, the number of downloads, and whether the asset " +"is publicly visible. It includes a method to generate a URL for downloading " +"the asset when the associated order is in a completed status." +msgstr "" + +#: core/models.py:1736 msgid "download" msgstr "" -#: core/models.py:1875 +#: core/models.py:1737 msgid "downloads" msgstr "" -#: core/models.py:1883 +#: core/models.py:1745 msgid "you can not download a digital asset for a non-finished order" msgstr "" -#: core/models.py:1913 +#: core/models.py:1754 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." +msgstr "" + +#: core/models.py:1766 msgid "user-provided comments about their experience with the product" msgstr "" -#: core/models.py:1914 +#: core/models.py:1767 msgid "feedback comments" msgstr "" -#: core/models.py:1921 +#: core/models.py:1774 msgid "references the specific product in an order that this feedback is about" msgstr "" -#: core/models.py:1922 +#: core/models.py:1775 msgid "related order product" msgstr "" -#: core/models.py:1927 +#: core/models.py:1780 msgid "user-assigned rating for the product" msgstr "" -#: core/models.py:1928 +#: core/models.py:1781 msgid "product rating" msgstr "" @@ -2386,17 +2456,17 @@ msgstr "" msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "" -#: core/utils/emailing.py:64 +#: core/utils/emailing.py:74 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "" -#: core/utils/emailing.py:99 +#: core/utils/emailing.py:109 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "" -#: core/utils/emailing.py:187 +#: core/utils/emailing.py:197 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "" @@ -2418,15 +2488,15 @@ msgstr "" msgid "invalid phone number format" msgstr "" -#: core/views.py:481 +#: core/views.py:489 msgid "you can only download the digital asset once" msgstr "" -#: core/views.py:539 +#: core/views.py:547 msgid "favicon not found" msgstr "" -#: core/viewsets.py:1319 +#: core/viewsets.py:1357 #, python-brace-format msgid "Geocoding error: {e}" msgstr "" diff --git a/core/locale/ko_KR/LC_MESSAGES/django.mo b/core/locale/ko_KR/LC_MESSAGES/django.mo index f67c6c5a7b0114e206f8638d8dca1dcce688281a..3a239c262f6923fbe1d2d23b683f8109b481b296 100644 GIT binary patch delta 20474 zcma)?2bfev_P6g4B}$Hh7f_NzlBA#nMHCZ)7*VmAX@=HGPWOPAnlLC5Bs9o~!#GG* zTn1)9P;_+-t6;(`x{A8$I^84d8rEG`_j`X;)f3SDKi_?x;;mD+Zq=!CPMxYAedGPQ zkF2j3{kT=VH6BmjI-YkD%xvj-pHn~3U9FyXL4VI{11G=};0>@b%zzzW9_$F0!1{1A ztP3B7_25o;7c7VRZtwulYXL{Www@RDCQ?~VLl8EA|Ay+AGSE)g6m~;y3wy!guoIjH z_n_!)@J!@^gUx{6O>ijkT*tkR38;m1A7T|74qGz6cNP_`S-;xcoxTTSLS8i#=~U9DJ$g<TK8#&Vha4 zR@f6BhJ)Zw5O;fhudZ`GT7b-hx z5MOm2<8UZ)+iR?AE`sfmZ-f}jyA?Ks&%t)^5NrxRgBs@;)WVuwON_ww5TklI5HER8 zL%ibs8l}>T%DGcL?=*NNRB+6P&Efq}?>EES;XZgO9CDov#%p0Syo!}TK1*bwE=D@yi1w0)-3FWG9 zT)TgRo%kXsi%o^yVH#vNMZLRShow*&7eP(<2Pf}`3bI2`D}57cfTK_*uRG1gLJO#s zc7#n}4=BY3xcApWjhhB#iEPszWuH^g_PYnl>d=zTJr=eE<3e<#Ox%Tg&k6h7Y1DBt}I z<%*^On}U7E5l|CPfm%p9)VQ-@DvUzK+71|1Fud;?j=?jKJ5RSMbqbUs_c@k8O}yL5 z&p|2h4(tfOcC4Fb73c!H)7}qCk;|Z5lm_LBtTg<84wYMJI2}F-WtwlGw%^ZC6AU7I zXyWsrGUS!em=em@S+EWtx)PT>zKJXA64u61~VZRx+|65Q#{|F9&|A6&juMBJ9esCo6j3^ap`Y>z= z--b%1A3?3C{!FV_FQ|zwh1#xnLz%P~DmHdOAHE0`tY1Mbpiap1E`e>}EI1uz!4IGm zik^RyjrvRAcp9#Qjo?Pu06qpaP&t%KUWC2jf1ngT^=A9NAC!Wl;c0L-8~`^$x$rGG z0e%HL!$Fzc0kr=wp`r9cqi1rOPstF zc17L;<$|}N#%+{s&y14{@&7m~GIgfoeb7fPgZ@2Yq-sOob6B zg*U*auoRvIpMqNX5h#UzfGyyEpuTGswhJ2pHU6Y9{#U{Y(4Z(@2Q}bM*aRMc8u%qB z-+loVgeegle8U|_!`8H)4;6${VLupyL*TQn{YN+sxqrU3P&gm^Pom*|8Z_bGU>o>7 zlw}&RXXL{Zp`yJ5)I>g%Wrjdm;vCmL32FgBsFmlr_Y0uLU*+BxyZ4Vqsc3=&P$~2U z_u><%eg1c-AUk2U9e4$g%?8&JRP=!*-$aE5VnNHQ2k4xcG;6q-@O2(c=SWp zp#l!1;Roo$p10cVbv~4fa-jy?4z&xOgk)3iL)aINnPXjbGt`0>LG@n=6>J;fF!&}s z7dE=hjLZI~qHS?ERM5NzrQthJ8poj~`~fPe+um+@20Rscs*~rzj>wy!eEu|4?0g4h zffjer7j}l1!`W~g@#h_)GC>{gv{8C3^pWp@iiK@Z13v}jiud3kSobc=p->jca9jm@ zsXrV6zku3yK69zxh46H!*c(Lgw(-vy@Q8cSdajknLroNQ+y!OI&*4beYMy<6DU=20 z!m;orCpVsNPrJ#EF?crb-*$4V1&l3IT~4J3Tm)s(9Z=EzChQK6LPc}k0?r561}b=N zf!Ymop?1q^sPERn9&j6!OJ9Kl;9KwpVHhfy3ZQ~% z8C2qU2rAllLRsWRsQvx}JP3Q-?Rn_zeFNo+ynC!A)_$M*H

qwEQ1r^E3gl2x703R4D5?M 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

Rr-CW{xq5ydX{2Naa*@y$=@8c5U526jxm{?7H z4&oG{f{}5do#*)2_4l4_fCF1BhFHJiO5BHHclhNzn!$l*gkov|BLc2%uM7aIQ0A+!BOKQB1ea~8byqb8aRAZoU2Qh7LEU@Z5%x? zdUV84*Vx#Kt`URcVxuD?hW^voE@o()i<6_rM!80e8s2|Qs~kESL(OkR(T6_M+??*Zu;e1)TXYP@*nq0O-V>ymY6y(@t?-j4eL`s zU&=ZEJd2x$F{hT-$QeayQcBvgPh1aoCZ+D0;!0Z-pSCo?3C=k4(T9l-cc=WnPHEk_ zN&1s%Lek9eA1z5p`+yt9Cp_Gm=%mHZOiS*%a9@_>SIftHB!9W`v1jso>xOzHciLFZ gD>-gw_e{y-zDn|(_h7wm@~J~>Jd!6Isnqg+0FEHL3;+NC diff --git a/core/locale/ko_KR/LC_MESSAGES/django.po b/core/locale/ko_KR/LC_MESSAGES/django.po index f079c79f..4b12b143 100644 --- a/core/locale/ko_KR/LC_MESSAGES/django.po +++ b/core/locale/ko_KR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:52+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -86,11 +86,11 @@ msgid "selected items have been deactivated." msgstr "선택한 아이템이 비활성화되었습니다!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:712 core/models.py:720 +#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 msgid "attribute value" msgstr "속성 값" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:721 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 msgid "attribute values" msgstr "속성 값" @@ -102,7 +102,7 @@ msgstr "이미지" msgid "images" msgstr "이미지" -#: core/admin.py:155 core/models.py:457 +#: core/admin.py:155 core/models.py:445 msgid "stock" msgstr "재고" @@ -110,11 +110,11 @@ msgstr "재고" msgid "stocks" msgstr "주식" -#: core/admin.py:166 core/models.py:1735 +#: core/admin.py:166 core/models.py:1609 msgid "order product" msgstr "제품 주문" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1736 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 msgid "order products" msgstr "제품 주문" @@ -314,7 +314,7 @@ msgstr "편집할 수 없는 항목을 저장하는 기존 카테고리 다시 msgid "rewrite some fields of an existing category saving non-editables" msgstr "편집할 수 없는 항목을 저장하는 기존 카테고리의 일부 필드 다시 작성하기" -#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:553 +#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:487 #: core/graphene/object_types.py:117 core/graphene/object_types.py:207 #: core/graphene/object_types.py:509 msgid "SEO Meta snapshot" @@ -558,47 +558,7 @@ msgstr "모든 제품 나열(간편 보기)" msgid "(exact) Product UUID" msgstr "(정확한) 제품 UUID" -#: core/docs/drf/viewsets.py:384 -msgid "(icontains) Product name" -msgstr "(아이콘 포함) 제품 이름" - -#: core/docs/drf/viewsets.py:390 -msgid "(list) Category names, case-insensitive" -msgstr "(목록) 카테고리 이름, 대소문자 구분 없음" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Category UUID" -msgstr "(정확한) 카테고리 UUID" - -#: core/docs/drf/viewsets.py:402 -msgid "(list) Tag names, case-insensitive" -msgstr "(목록) 태그 이름, 대소문자 구분 없음" - -#: core/docs/drf/viewsets.py:408 -msgid "(gte) Minimum stock price" -msgstr "(gte) 최소 주가" - -#: core/docs/drf/viewsets.py:414 -msgid "(lte) Maximum stock price" -msgstr "(LTE) 최대 주가" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Only active products" -msgstr "(정확한) 활성 제품만" - -#: core/docs/drf/viewsets.py:426 -msgid "(iexact) Brand name" -msgstr "(정확한) 브랜드 이름" - -#: core/docs/drf/viewsets.py:438 -msgid "(gt) Minimum stock quantity" -msgstr "(gt) 최소 재고 수량" - -#: core/docs/drf/viewsets.py:444 -msgid "(exact) Digital vs. physical" -msgstr "(정확한) 디지털 대 물리적" - -#: core/docs/drf/viewsets.py:451 +#: core/docs/drf/viewsets.py:385 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -606,244 +566,248 @@ msgstr "" "정렬할 필드의 쉼표로 구분된 목록입니다. 접두사 앞에 `-`를 붙여 내림차순으로 정렬합니다. \n" "**허용됨:** uuid, 등급, 이름, 슬러그, 생성, 수정, 가격, 랜덤" -#: core/docs/drf/viewsets.py:465 core/docs/drf/viewsets.py:466 +#: core/docs/drf/viewsets.py:399 core/docs/drf/viewsets.py:400 msgid "retrieve a single product (detailed view)" msgstr "단일 제품 검색(상세 보기)" -#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:495 -#: core/docs/drf/viewsets.py:511 core/docs/drf/viewsets.py:527 -#: core/docs/drf/viewsets.py:543 core/docs/drf/viewsets.py:559 +#: core/docs/drf/viewsets.py:405 core/docs/drf/viewsets.py:429 +#: core/docs/drf/viewsets.py:445 core/docs/drf/viewsets.py:461 +#: core/docs/drf/viewsets.py:477 core/docs/drf/viewsets.py:493 msgid "Product UUID or slug" msgstr "제품 UUID 또는 슬러그" -#: core/docs/drf/viewsets.py:481 core/docs/drf/viewsets.py:482 +#: core/docs/drf/viewsets.py:415 core/docs/drf/viewsets.py:416 msgid "create a product" msgstr "제품 만들기" -#: core/docs/drf/viewsets.py:489 core/docs/drf/viewsets.py:490 +#: core/docs/drf/viewsets.py:423 core/docs/drf/viewsets.py:424 msgid "rewrite an existing product, preserving non-editable fields" msgstr "편집할 수 없는 필드를 유지하면서 기존 제품을 다시 작성합니다." -#: core/docs/drf/viewsets.py:505 core/docs/drf/viewsets.py:506 +#: core/docs/drf/viewsets.py:439 core/docs/drf/viewsets.py:440 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "기존 제품의 일부 필드를 업데이트하여 편집할 수 없는 필드는 유지합니다." -#: core/docs/drf/viewsets.py:521 core/docs/drf/viewsets.py:522 +#: core/docs/drf/viewsets.py:455 core/docs/drf/viewsets.py:456 msgid "delete a product" msgstr "제품 삭제" -#: core/docs/drf/viewsets.py:537 core/docs/drf/viewsets.py:538 +#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:472 msgid "lists all permitted feedbacks for a product" msgstr "제품에 대해 허용된 모든 피드백을 나열합니다." -#: core/docs/drf/viewsets.py:554 +#: core/docs/drf/viewsets.py:488 msgid "returns a snapshot of the product's SEO meta data" msgstr "제품의 SEO 메타 데이터 스냅샷을 반환합니다." -#: core/docs/drf/viewsets.py:572 +#: core/docs/drf/viewsets.py:506 msgid "list all addresses" msgstr "모든 주소 나열" -#: core/docs/drf/viewsets.py:579 +#: core/docs/drf/viewsets.py:513 msgid "retrieve a single address" msgstr "단일 주소 검색" -#: core/docs/drf/viewsets.py:586 +#: core/docs/drf/viewsets.py:520 msgid "create a new address" msgstr "새 주소 만들기" -#: core/docs/drf/viewsets.py:594 +#: core/docs/drf/viewsets.py:528 msgid "delete an address" msgstr "주소 삭제" -#: core/docs/drf/viewsets.py:601 +#: core/docs/drf/viewsets.py:535 msgid "update an entire address" msgstr "전체 주소 업데이트" -#: core/docs/drf/viewsets.py:609 +#: core/docs/drf/viewsets.py:543 msgid "partially update an address" msgstr "주소 부분 업데이트" -#: core/docs/drf/viewsets.py:617 +#: core/docs/drf/viewsets.py:551 msgid "autocomplete address suggestions" msgstr "주소 자동 완성 입력" -#: core/docs/drf/viewsets.py:622 +#: core/docs/drf/viewsets.py:556 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "원시 데이터 쿼리 문자열, 지오-IP 엔드포인트의 데이터를 추가하세요." -#: core/docs/drf/viewsets.py:628 +#: core/docs/drf/viewsets.py:562 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "결과 금액을 제한합니다(1 < 제한 < 10, 기본값: 5)." -#: core/docs/drf/viewsets.py:641 +#: core/docs/drf/viewsets.py:575 msgid "list all feedbacks (simple view)" msgstr "모든 피드백 나열(간편 보기)" -#: core/docs/drf/viewsets.py:645 +#: core/docs/drf/viewsets.py:579 msgid "retrieve a single feedback (detailed view)" msgstr "단일 피드백 검색(상세 보기)" -#: core/docs/drf/viewsets.py:649 +#: core/docs/drf/viewsets.py:583 msgid "create a feedback" msgstr "피드백 만들기" -#: core/docs/drf/viewsets.py:653 +#: core/docs/drf/viewsets.py:587 msgid "delete a feedback" msgstr "피드백 삭제" -#: core/docs/drf/viewsets.py:657 +#: core/docs/drf/viewsets.py:591 msgid "rewrite an existing feedback saving non-editables" msgstr "편집할 수 없는 기존 피드백을 다시 작성합니다." -#: core/docs/drf/viewsets.py:661 +#: core/docs/drf/viewsets.py:595 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "기존 피드백의 일부 필드를 다시 작성하여 편집할 수 없는 항목을 저장합니다." -#: core/docs/drf/viewsets.py:668 +#: core/docs/drf/viewsets.py:602 msgid "list all order–product relations (simple view)" msgstr "모든 주문-제품 관계 나열(단순 보기)" -#: core/docs/drf/viewsets.py:675 +#: core/docs/drf/viewsets.py:609 msgid "retrieve a single order–product relation (detailed view)" msgstr "단일 주문-제품 관계 검색(상세 보기)" -#: core/docs/drf/viewsets.py:682 +#: core/docs/drf/viewsets.py:616 msgid "create a new order–product relation" msgstr "새 주문-제품 관계 생성" -#: core/docs/drf/viewsets.py:689 +#: core/docs/drf/viewsets.py:623 msgid "replace an existing order–product relation" msgstr "기존 주문-제품 관계 교체" -#: core/docs/drf/viewsets.py:696 +#: core/docs/drf/viewsets.py:630 msgid "partially update an existing order–product relation" msgstr "기존 주문-제품 관계를 부분적으로 업데이트합니다." -#: core/docs/drf/viewsets.py:703 +#: core/docs/drf/viewsets.py:637 msgid "delete an order–product relation" msgstr "주문-제품 관계 삭제" -#: core/docs/drf/viewsets.py:710 +#: core/docs/drf/viewsets.py:644 msgid "add or remove feedback on an order–product relation" msgstr "주문-제품 관계에 대한 피드백 추가 또는 제거" -#: core/elasticsearch/__init__.py:105 +#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 msgid "no search term provided." msgstr "검색어가 입력되지 않았습니다." -#: core/filters.py:64 core/filters.py:594 core/filters.py:623 +#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +msgid "Search" +msgstr "검색" + +#: core/filters.py:66 core/filters.py:554 core/filters.py:583 msgid "UUID" msgstr "UUID" -#: core/filters.py:65 core/filters.py:429 core/filters.py:560 +#: core/filters.py:67 core/filters.py:399 core/filters.py:526 msgid "Name" msgstr "이름" -#: core/filters.py:66 core/filters.py:562 +#: core/filters.py:68 core/filters.py:528 msgid "Categories" msgstr "카테고리" -#: core/filters.py:68 +#: core/filters.py:70 msgid "Categories Slugs" msgstr "카테고리 슬러그" -#: core/filters.py:69 core/filters.py:437 +#: core/filters.py:71 core/filters.py:407 msgid "Tags" msgstr "태그" -#: core/filters.py:70 +#: core/filters.py:72 msgid "Min Price" msgstr "최소 가격" -#: core/filters.py:71 +#: core/filters.py:73 msgid "Max Price" msgstr "최대 가격" -#: core/filters.py:72 +#: core/filters.py:74 msgid "Is Active" msgstr "활성 상태" -#: core/filters.py:73 +#: core/filters.py:75 msgid "Brand" msgstr "브랜드" -#: core/filters.py:74 +#: core/filters.py:76 msgid "Attributes" msgstr "속성" -#: core/filters.py:75 +#: core/filters.py:77 msgid "Quantity" msgstr "수량" -#: core/filters.py:76 core/filters.py:431 core/filters.py:561 -#: core/models.py:287 core/models.py:381 core/models.py:534 +#: core/filters.py:78 core/filters.py:401 core/filters.py:527 +#: core/models.py:287 core/models.py:369 core/models.py:522 msgid "Slug" msgstr "슬러그" -#: core/filters.py:77 +#: core/filters.py:79 msgid "Is Digital" msgstr "디지털" -#: core/filters.py:78 +#: core/filters.py:80 msgid "Include sub-categories" msgstr "하위 카테고리 포함" -#: core/filters.py:81 +#: core/filters.py:83 msgid "Include personal ordered" msgstr "개인 주문 제품 포함" -#: core/filters.py:83 core/models.py:538 +#: core/filters.py:85 core/models.py:526 msgid "SKU" msgstr "SKU" -#: core/filters.py:166 +#: core/filters.py:161 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "include_subcategories 플래그를 사용하려면 category_uuid가 있어야 합니다." -#: core/filters.py:356 +#: core/filters.py:324 msgid "Search (ID, product name or part number)" msgstr "검색(ID, 제품명 또는 부품 번호)" -#: core/filters.py:359 +#: core/filters.py:327 msgid "Bought after (inclusive)" msgstr "구매 후(포함)" -#: core/filters.py:360 +#: core/filters.py:328 msgid "Bought before (inclusive)" msgstr "이전 구매(포함)" -#: core/filters.py:363 core/filters.py:410 core/filters.py:625 +#: core/filters.py:331 core/filters.py:378 core/filters.py:585 msgid "User email" msgstr "사용자 이메일" -#: core/filters.py:364 core/filters.py:411 core/filters.py:603 -#: core/filters.py:624 +#: core/filters.py:332 core/filters.py:379 core/filters.py:563 +#: core/filters.py:584 msgid "User UUID" msgstr "사용자 UUID" -#: core/filters.py:365 +#: core/filters.py:333 msgid "Status" msgstr "상태" -#: core/filters.py:369 +#: core/filters.py:337 msgid "Human Readable ID" msgstr "사람이 읽을 수 있는 ID" -#: core/filters.py:430 +#: core/filters.py:400 msgid "Parent" msgstr "부모" -#: core/filters.py:434 +#: core/filters.py:404 msgid "Whole category(has at least 1 product or not)" msgstr "전체 카테고리(1개 이상의 제품 보유 여부)" -#: core/filters.py:438 +#: core/filters.py:408 msgid "Level" msgstr "레벨" -#: core/filters.py:598 +#: core/filters.py:558 msgid "Product UUID" msgstr "제품 UUID" @@ -898,7 +862,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "주문_uuid 또는 주문_hr_id 중 하나를 입력하세요 - 상호 배타적입니다!" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:821 +#: core/graphene/mutations.py:527 core/viewsets.py:839 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "order.buy() 메서드에서 잘못된 유형이 발생했습니다: {type(instance)!s}" @@ -959,37 +923,37 @@ msgstr "속성을 attr1=value1,attr2=value2와 같은 형식의 문자열로 보 msgid "add or delete a feedback for orderproduct" msgstr "주문 제품에 대한 피드백 추가 또는 삭제" -#: core/graphene/mutations.py:555 +#: core/graphene/mutations.py:556 msgid "action must be either `add` or `remove`" msgstr "작업은 '추가' 또는 '제거' 중 하나여야 합니다!" -#: core/graphene/mutations.py:558 +#: core/graphene/mutations.py:559 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "주문 제품 {order_product_uuid}을 찾을 수 없습니다!" -#: core/graphene/mutations.py:621 +#: core/graphene/mutations.py:622 msgid "original address string provided by the user" msgstr "사용자가 제공한 원본 주소 문자열" -#: core/graphene/mutations.py:655 core/models.py:896 core/models.py:909 -#: core/models.py:1348 core/models.py:1377 core/models.py:1402 -#: core/viewsets.py:824 +#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 +#: core/models.py:1234 core/models.py:1263 core/models.py:1288 +#: core/viewsets.py:842 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name}가 존재하지 않습니다: {uuid}!" -#: core/graphene/mutations.py:668 +#: core/graphene/mutations.py:669 msgid "limit must be between 1 and 10" msgstr "한도는 1에서 10 사이여야 합니다." -#: core/graphene/mutations.py:713 +#: core/graphene/mutations.py:714 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - 마법처럼 작동" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:666 core/models.py:1234 -#: core/models.py:1809 +#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 +#: core/models.py:1686 msgid "attributes" msgstr "속성" @@ -1002,11 +966,11 @@ msgid "groups of attributes" msgstr "속성 그룹" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:620 +#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:612 msgid "categories" msgstr "카테고리" -#: core/graphene/object_types.py:124 core/models.py:395 +#: core/graphene/object_types.py:124 core/models.py:383 msgid "brands" msgstr "브랜드" @@ -1061,7 +1025,7 @@ msgid "represents feedback from a user." msgstr "사용자의 피드백을 나타냅니다." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1228 +#: core/models.py:1110 msgid "notifications" msgstr "알림" @@ -1069,7 +1033,7 @@ msgstr "알림" msgid "download url for this order product if applicable" msgstr "해당되는 경우 이 주문 제품의 URL 다운로드" -#: core/graphene/object_types.py:400 core/models.py:1938 +#: core/graphene/object_types.py:400 core/models.py:1791 msgid "feedback" msgstr "피드백" @@ -1077,7 +1041,7 @@ msgstr "피드백" msgid "a list of order products in this order" msgstr "주문 제품 목록은 다음 순서로 표시됩니다." -#: core/graphene/object_types.py:436 core/models.py:1198 +#: core/graphene/object_types.py:436 core/models.py:1080 msgid "billing address" msgstr "청구서 수신 주소" @@ -1103,7 +1067,7 @@ msgstr "주문에 포함된 모든 제품이 디지털 제품인가요?" msgid "transactions for this order" msgstr "이 주문에 대한 거래" -#: core/graphene/object_types.py:465 core/models.py:1262 +#: core/graphene/object_types.py:465 core/models.py:1144 msgid "orders" msgstr "주문" @@ -1115,15 +1079,15 @@ msgstr "이미지 URL" msgid "product's images" msgstr "제품 이미지" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:477 +#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 msgid "category" msgstr "카테고리" -#: core/graphene/object_types.py:502 core/models.py:1939 +#: core/graphene/object_types.py:502 core/models.py:1792 msgid "feedbacks" msgstr "피드백" -#: core/graphene/object_types.py:503 core/models.py:394 core/models.py:486 +#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 msgid "brand" msgstr "브랜드" @@ -1155,7 +1119,7 @@ msgstr "피드백 수" msgid "only available for personal orders" msgstr "개인 주문만 가능한 제품" -#: core/graphene/object_types.py:534 core/models.py:548 +#: core/graphene/object_types.py:534 core/models.py:536 msgid "products" msgstr "제품" @@ -1167,7 +1131,7 @@ msgstr "프로모션 코드" msgid "products on sale" msgstr "판매 중인 제품" -#: core/graphene/object_types.py:651 core/models.py:843 +#: core/graphene/object_types.py:651 core/models.py:784 msgid "promotions" msgstr "프로모션" @@ -1175,7 +1139,7 @@ msgstr "프로모션" msgid "vendor" msgstr "공급업체" -#: core/graphene/object_types.py:656 core/models.py:547 +#: core/graphene/object_types.py:656 core/models.py:535 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1183,11 +1147,11 @@ msgstr "공급업체" msgid "product" msgstr "제품" -#: core/graphene/object_types.py:667 core/models.py:868 +#: core/graphene/object_types.py:667 core/models.py:807 msgid "wishlisted products" msgstr "위시리스트 제품" -#: core/graphene/object_types.py:673 core/models.py:885 +#: core/graphene/object_types.py:673 core/models.py:824 msgid "wishlists" msgstr "위시리스트" @@ -1195,7 +1159,7 @@ msgstr "위시리스트" msgid "tagged products" msgstr "태그가 지정된 제품" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:492 +#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 msgid "product tags" msgstr "제품 태그" @@ -1302,7 +1266,7 @@ msgstr "상위 속성 그룹" msgid "attribute group's name" msgstr "속성 그룹의 이름" -#: core/models.py:100 core/models.py:628 +#: core/models.py:100 core/models.py:620 msgid "attribute group" msgstr "속성 그룹" @@ -1451,51 +1415,62 @@ msgstr "카테고리 설명" msgid "tags that help describe or group this category" msgstr "이 카테고리를 설명하거나 그룹화하는 데 도움이 되는 태그" -#: core/models.py:299 core/models.py:387 +#: core/models.py:299 core/models.py:375 msgid "priority" msgstr "우선순위" -#: core/models.py:340 +#: core/models.py:318 +msgid "" +"Represents a Brand object in the system. This class handles information and " +"attributes related to a brand, including its name, logos, description, " +"associated categories, a unique slug, and priority order. It allows for the " +"organization and representation of brand-related data within the " +"application." +msgstr "" +"시스템에서 브랜드 객체를 나타냅니다. 이 클래스는 이름, 로고, 설명, 관련 카테고리, 고유 슬러그, 우선순위 등 브랜드와 관련된 정보 " +"및 속성을 처리합니다. 이를 통해 애플리케이션 내에서 브랜드 관련 데이터를 구성하고 표현할 수 있습니다." + +#: core/models.py:328 msgid "name of this brand" msgstr "이 브랜드 이름" -#: core/models.py:341 +#: core/models.py:329 msgid "brand name" msgstr "브랜드 이름" -#: core/models.py:348 +#: core/models.py:336 msgid "upload a logo representing this brand" msgstr "이 브랜드를 대표하는 로고 업로드" -#: core/models.py:350 +#: core/models.py:338 msgid "brand small image" msgstr "브랜드 작은 이미지" -#: core/models.py:356 +#: core/models.py:344 msgid "upload a big logo representing this brand" msgstr "이 브랜드를 대표하는 큰 로고 업로드" -#: core/models.py:358 +#: core/models.py:346 msgid "brand big image" msgstr "브랜드 빅 이미지" -#: core/models.py:363 +#: core/models.py:351 msgid "add a detailed description of the brand" msgstr "브랜드에 대한 자세한 설명 추가" -#: core/models.py:364 +#: core/models.py:352 msgid "brand description" msgstr "브랜드 설명" -#: core/models.py:369 +#: core/models.py:357 msgid "optional categories that this brand is associated with" msgstr "이 브랜드와 연관된 선택적 카테고리" -#: core/models.py:370 +#: core/models.py:358 msgid "associated categories" msgstr "카테고리" -#: core/models.py:400 +#: core/models.py:388 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1508,68 +1483,68 @@ msgstr "" " 디지털 자산과 같은 재고 관련 속성에 대한 세부 정보를 제공합니다. 다양한 공급업체에서 제공하는 제품을 추적하고 평가할 수 있도록 하는" " 재고 관리 시스템의 일부입니다." -#: core/models.py:412 +#: core/models.py:400 msgid "the vendor supplying this product stock" msgstr "이 제품 재고를 공급하는 공급업체" -#: core/models.py:413 +#: core/models.py:401 msgid "associated vendor" msgstr "관련 공급업체" -#: core/models.py:417 +#: core/models.py:405 msgid "final price to the customer after markups" msgstr "마크업 후 고객에게 제공되는 최종 가격" -#: core/models.py:418 +#: core/models.py:406 msgid "selling price" msgstr "판매 가격" -#: core/models.py:423 +#: core/models.py:411 msgid "the product associated with this stock entry" msgstr "이 주식 항목과 관련된 제품" -#: core/models.py:424 core/models.py:708 core/models.py:765 -#: core/models.py:1709 +#: core/models.py:412 core/models.py:683 core/models.py:730 +#: core/models.py:1583 msgid "associated product" msgstr "관련 제품" -#: core/models.py:431 +#: core/models.py:419 msgid "the price paid to the vendor for this product" msgstr "이 제품에 대해 공급업체에 지불한 가격" -#: core/models.py:432 +#: core/models.py:420 msgid "vendor purchase price" msgstr "공급업체 구매 가격" -#: core/models.py:436 +#: core/models.py:424 msgid "available quantity of the product in stock" msgstr "재고가 있는 제품의 사용 가능한 수량" -#: core/models.py:437 +#: core/models.py:425 msgid "quantity in stock" msgstr "재고 수량" -#: core/models.py:441 +#: core/models.py:429 msgid "vendor-assigned SKU for identifying the product" msgstr "제품 식별을 위해 공급업체에서 할당하는 SKU" -#: core/models.py:442 +#: core/models.py:430 msgid "vendor sku" msgstr "공급업체의 SKU" -#: core/models.py:448 +#: core/models.py:436 msgid "digital file associated with this stock if applicable" msgstr "해당되는 경우 이 주식과 관련된 디지털 파일" -#: core/models.py:449 +#: core/models.py:437 msgid "digital file" msgstr "디지털 파일" -#: core/models.py:458 +#: core/models.py:446 msgid "stock entries" msgstr "재고 항목" -#: core/models.py:463 +#: core/models.py:451 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1585,55 +1560,55 @@ msgstr "" "사용하도록 설계되었습니다. 이 클래스는 관련 모델(예: 카테고리, 브랜드, 제품 태그)과 상호 작용하고 자주 액세스하는 속성에 대한 " "캐싱을 관리하여 성능을 개선합니다. 애플리케이션 내에서 제품 데이터 및 관련 정보를 정의하고 조작하는 데 사용됩니다." -#: core/models.py:476 +#: core/models.py:464 msgid "category this product belongs to" msgstr "이 제품이 속한 카테고리" -#: core/models.py:485 +#: core/models.py:473 msgid "optionally associate this product with a brand" msgstr "선택 사항으로 이 제품을 브랜드와 연결" -#: core/models.py:491 +#: core/models.py:479 msgid "tags that help describe or group this product" msgstr "이 제품을 설명하거나 그룹화하는 데 도움이 되는 태그" -#: core/models.py:496 +#: core/models.py:484 msgid "indicates whether this product is digitally delivered" msgstr "이 제품이 디지털 방식으로 배송되는지 여부를 나타냅니다." -#: core/models.py:497 +#: core/models.py:485 msgid "is product digital" msgstr "제품 디지털화 여부" -#: core/models.py:503 +#: core/models.py:491 msgid "provide a clear identifying name for the product" msgstr "제품에 대한 명확한 식별 이름 제공" -#: core/models.py:504 +#: core/models.py:492 msgid "product name" msgstr "제품 이름" -#: core/models.py:509 core/models.py:831 +#: core/models.py:497 core/models.py:772 msgid "add a detailed description of the product" msgstr "제품에 대한 자세한 설명 추가" -#: core/models.py:510 +#: core/models.py:498 msgid "product description" msgstr "제품 설명" -#: core/models.py:517 +#: core/models.py:505 msgid "part number for this product" msgstr "이 제품의 부품 번호" -#: core/models.py:518 +#: core/models.py:506 msgid "part number" msgstr "부품 번호" -#: core/models.py:537 +#: core/models.py:525 msgid "stock keeping unit for this product" msgstr "이 제품의 재고 보관 단위" -#: core/models.py:607 +#: core/models.py:599 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 " @@ -1646,303 +1621,388 @@ msgstr "" "사용됩니다. 속성에는 연관된 카테고리, 그룹, 값 유형 및 이름이 있습니다. 이 모델은 문자열, 정수, 실수, 부울, 배열, 객체 등 " "여러 유형의 값을 지원합니다. 이를 통해 동적이고 유연한 데이터 구조화가 가능합니다." -#: core/models.py:619 +#: core/models.py:611 msgid "category of this attribute" msgstr "이 속성의 범주" -#: core/models.py:627 +#: core/models.py:619 msgid "group of this attribute" msgstr "이 속성의 그룹" -#: core/models.py:633 +#: core/models.py:625 msgid "string" msgstr "문자열" -#: core/models.py:634 +#: core/models.py:626 msgid "integer" msgstr "정수" -#: core/models.py:635 +#: core/models.py:627 msgid "float" msgstr "Float" -#: core/models.py:636 +#: core/models.py:628 msgid "boolean" msgstr "부울" -#: core/models.py:637 +#: core/models.py:629 msgid "array" msgstr "배열" -#: core/models.py:638 +#: core/models.py:630 msgid "object" msgstr "개체" -#: core/models.py:640 +#: core/models.py:632 msgid "type of the attribute's value" msgstr "속성 값의 유형" -#: core/models.py:641 +#: core/models.py:633 msgid "value type" msgstr "값 유형" -#: core/models.py:646 +#: core/models.py:638 msgid "name of this attribute" msgstr "이 속성의 이름" -#: core/models.py:647 +#: core/models.py:639 msgid "attribute's name" msgstr "속성 이름" -#: core/models.py:653 +#: core/models.py:645 msgid "is filterable" msgstr "필터링 가능" -#: core/models.py:654 +#: core/models.py:646 msgid "designates whether this attribute can be used for filtering or not" msgstr "는 이 속성을 필터링에 사용할 수 있는지 여부를 지정합니다." -#: core/models.py:665 core/models.py:700 +#: core/models.py:657 core/models.py:675 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "속성" -#: core/models.py:699 +#: core/models.py:663 +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:674 msgid "attribute of this value" msgstr "이 값의 속성" -#: core/models.py:707 +#: core/models.py:682 msgid "the specific product associated with this attribute's value" msgstr "이 속성 값과 연관된 특정 제품" -#: core/models.py:713 +#: core/models.py:688 msgid "the specific value for this attribute" msgstr "이 속성의 구체적인 값은 다음과 같습니다." -#: core/models.py:747 +#: core/models.py:701 +msgid "" +"Represents a product image associated with a product in the system. This " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " +"determining their display order. It also includes an accessibility feature " +"with alternative text for the images." +msgstr "" +"시스템에서 제품과 연관된 제품 이미지를 나타냅니다. 이 클래스는 이미지 파일 업로드, 특정 제품과의 연결, 표시 순서 결정 등의 기능을 " +"포함하여 제품의 이미지를 관리하도록 설계되었습니다. 또한 이미지에 대한 대체 텍스트가 포함된 접근성 기능도 포함되어 있습니다." + +#: core/models.py:712 msgid "provide alternative text for the image for accessibility" msgstr "접근성을 위해 이미지에 대체 텍스트 제공" -#: core/models.py:748 +#: core/models.py:713 msgid "image alt text" msgstr "이미지 대체 텍스트" -#: core/models.py:751 +#: core/models.py:716 msgid "upload the image file for this product" msgstr "이 제품의 이미지 파일 업로드" -#: core/models.py:752 core/models.py:777 +#: core/models.py:717 core/models.py:742 msgid "product image" msgstr "제품 이미지" -#: core/models.py:758 +#: core/models.py:723 msgid "determines the order in which images are displayed" msgstr "이미지가 표시되는 순서를 결정합니다." -#: core/models.py:759 +#: core/models.py:724 msgid "display priority" msgstr "우선순위 표시" -#: core/models.py:764 +#: core/models.py:729 msgid "the product that this image represents" msgstr "이 이미지가 나타내는 제품" -#: core/models.py:778 +#: core/models.py:743 msgid "product images" msgstr "제품 이미지" -#: core/models.py:819 +#: core/models.py:748 +msgid "" +"Represents a promotional campaign for products with a discount. This class " +"is used to define and manage promotional campaigns that offer a percentage-" +"based discount for products. The class includes attributes for setting the " +"discount rate, providing details about the promotion, and linking it to the " +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." +msgstr "" +"할인이 적용되는 제품에 대한 프로모션 캠페인을 나타냅니다. 이 클래스는 제품에 대해 백분율 기반 할인을 제공하는 프로모션 캠페인을 " +"정의하고 관리하는 데 사용됩니다. 이 클래스에는 할인율 설정, 프로모션에 대한 세부 정보 제공 및 해당 제품에 대한 링크를 위한 속성이 " +"포함되어 있습니다. 제품 카탈로그와 통합되어 캠페인에서 영향을 받는 품목을 결정합니다." + +#: core/models.py:760 msgid "percentage discount for the selected products" msgstr "선택한 제품에 대한 할인 비율" -#: core/models.py:820 +#: core/models.py:761 msgid "discount percentage" msgstr "할인 비율" -#: core/models.py:825 +#: core/models.py:766 msgid "provide a unique name for this promotion" msgstr "이 프로모션의 고유한 이름을 입력하세요." -#: core/models.py:826 +#: core/models.py:767 msgid "promotion name" msgstr "프로모션 이름" -#: core/models.py:832 +#: core/models.py:773 msgid "promotion description" msgstr "프로모션 설명" -#: core/models.py:837 +#: core/models.py:778 msgid "select which products are included in this promotion" msgstr "이 프로모션에 포함되는 제품 선택" -#: core/models.py:838 +#: core/models.py:779 msgid "included products" msgstr "포함된 제품" -#: core/models.py:842 +#: core/models.py:783 msgid "promotion" msgstr "프로모션" -#: core/models.py:867 +#: core/models.py:794 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"class provides functionality to manage a collection of products, supporting " +"operations such as adding and removing products, as well as supporting " +"operations for adding and removing multiple products at once." +msgstr "" +"원하는 상품을 저장하고 관리하기 위한 사용자의 위시리스트를 나타냅니다. 이 클래스는 제품 컬렉션을 관리하는 기능을 제공하여 제품 추가 및" +" 제거와 같은 작업을 지원할 뿐만 아니라 여러 제품을 한 번에 추가 및 제거하는 작업도 지원합니다." + +#: core/models.py:806 msgid "products that the user has marked as wanted" msgstr "사용자가 원하는 것으로 표시한 제품" -#: core/models.py:875 +#: core/models.py:814 msgid "user who owns this wishlist" msgstr "이 위시리스트를 소유한 사용자" -#: core/models.py:876 +#: core/models.py:815 msgid "wishlist owner" msgstr "위시리스트의 소유자" -#: core/models.py:884 +#: core/models.py:823 msgid "wishlist" msgstr "위시리스트" -#: core/models.py:951 +#: core/models.py:865 +msgid "" +"Represents a documentary record tied to a product. This class is used to " +"store information about documentaries related to specific products, " +"including file uploads and their metadata. It contains methods and " +"properties to handle the file type and storage path for the documentary " +"files. It extends functionality from specific mixins and provides additional" +" custom features." +msgstr "" +"상품에 연결된 다큐멘터리 레코드를 나타냅니다. 이 클래스는 파일 업로드 및 메타데이터를 포함하여 특정 제품과 관련된 다큐멘터리에 대한 " +"정보를 저장하는 데 사용됩니다. 여기에는 다큐멘터리 파일의 파일 유형과 저장 경로를 처리하는 메서드와 프로퍼티가 포함되어 있습니다. 특정" +" 믹스인의 기능을 확장하고 추가 사용자 정의 기능을 제공합니다." + +#: core/models.py:878 msgid "documentary" msgstr "다큐멘터리" -#: core/models.py:952 +#: core/models.py:879 msgid "documentaries" msgstr "다큐멘터리" -#: core/models.py:962 +#: core/models.py:889 msgid "unresolved" msgstr "해결되지 않음" -#: core/models.py:1008 +#: core/models.py:894 +msgid "" +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." +msgstr "" +"위치 세부 정보 및 사용자와의 연결을 포함하는 주소 엔티티를 나타냅니다. 지리적 및 주소 데이터 저장과 지오코딩 서비스와의 통합을 위한 " +"기능을 제공합니다. 이 클래스는 거리, 도시, 지역, 국가, 지리적 위치(경도 및 위도)와 같은 구성 요소를 포함한 상세한 주소 정보를 " +"저장하도록 설계되었습니다. 지오코딩 API와의 통합을 지원하여 추가 처리 또는 검사를 위해 원시 API 응답을 저장할 수 있습니다. 또한" +" 이 클래스를 사용하면 주소를 사용자와 연결하여 개인화된 데이터 처리를 용이하게 할 수 있습니다." + +#: core/models.py:909 msgid "address line for the customer" msgstr "고객 주소 라인" -#: core/models.py:1009 +#: core/models.py:910 msgid "address line" msgstr "주소 라인" -#: core/models.py:1011 +#: core/models.py:912 msgid "street" msgstr "거리" -#: core/models.py:1012 +#: core/models.py:913 msgid "district" msgstr "지구" -#: core/models.py:1013 +#: core/models.py:914 msgid "city" msgstr "도시" -#: core/models.py:1014 +#: core/models.py:915 msgid "region" msgstr "지역" -#: core/models.py:1015 +#: core/models.py:916 msgid "postal code" msgstr "우편 번호" -#: core/models.py:1016 +#: core/models.py:917 msgid "country" msgstr "국가" -#: core/models.py:1023 +#: core/models.py:924 msgid "geolocation point: (longitude, latitude)" msgstr "지리적 위치 포인트(경도, 위도)" -#: core/models.py:1026 +#: core/models.py:927 msgid "full JSON response from geocoder for this address" msgstr "이 주소에 대한 지오코더의 전체 JSON 응답" -#: core/models.py:1031 +#: core/models.py:932 msgid "stored JSON response from the geocoding service" msgstr "지오코딩 서비스의 저장된 JSON 응답" -#: core/models.py:1039 +#: core/models.py:940 msgid "address" msgstr "주소" -#: core/models.py:1040 +#: core/models.py:941 msgid "addresses" msgstr "주소" -#: core/models.py:1085 +#: core/models.py:953 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" +"할인에 사용할 수 있는 프로모션 코드를 나타내며, 유효 기간, 할인 유형 및 적용을 관리합니다. 프로모션 코드 클래스는 고유 식별자, " +"할인 속성(금액 또는 백분율), 유효 기간, 관련 사용자(있는 경우), 사용 상태 등 프로모션 코드에 대한 세부 정보를 저장합니다. " +"여기에는 제약 조건이 충족되는지 확인하면서 프로모션 코드의 유효성을 검사하고 주문에 적용하는 기능이 포함되어 있습니다." + +#: core/models.py:967 msgid "unique code used by a user to redeem a discount" msgstr "사용자가 할인을 받기 위해 사용하는 고유 코드" -#: core/models.py:1086 +#: core/models.py:968 msgid "promo code identifier" msgstr "프로모션 코드 식별자" -#: core/models.py:1093 +#: core/models.py:975 msgid "fixed discount amount applied if percent is not used" msgstr "퍼센트를 사용하지 않을 경우 고정 할인 금액 적용" -#: core/models.py:1094 +#: core/models.py:976 msgid "fixed discount amount" msgstr "고정 할인 금액" -#: core/models.py:1100 +#: core/models.py:982 msgid "percentage discount applied if fixed amount is not used" msgstr "고정 금액 미사용 시 적용되는 할인 비율" -#: core/models.py:1101 +#: core/models.py:983 msgid "percentage discount" msgstr "백분율 할인" -#: core/models.py:1106 +#: core/models.py:988 msgid "timestamp when the promocode expires" msgstr "프로모션 코드 만료 시 타임스탬프" -#: core/models.py:1107 +#: core/models.py:989 msgid "end validity time" msgstr "유효 기간 종료 시간" -#: core/models.py:1112 +#: core/models.py:994 msgid "timestamp from which this promocode is valid" msgstr "이 프로모코드의 타임스탬프가 유효한 시점" -#: core/models.py:1113 +#: core/models.py:995 msgid "start validity time" msgstr "유효 기간 시작 시간" -#: core/models.py:1118 +#: core/models.py:1000 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "프로모코드가 사용된 타임스탬프, 아직 사용되지 않은 경우 비워둡니다." -#: core/models.py:1119 +#: core/models.py:1001 msgid "usage timestamp" msgstr "사용 타임스탬프" -#: core/models.py:1124 +#: core/models.py:1006 msgid "user assigned to this promocode if applicable" msgstr "해당되는 경우 이 프로모코드에 할당된 사용자" -#: core/models.py:1125 +#: core/models.py:1007 msgid "assigned user" msgstr "할당된 사용자" -#: core/models.py:1132 +#: core/models.py:1014 msgid "promo code" msgstr "프로모션 코드" -#: core/models.py:1133 +#: core/models.py:1015 msgid "promo codes" msgstr "프로모션 코드" -#: core/models.py:1140 +#: core/models.py:1022 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "할인 유형(금액 또는 백분율)은 한 가지 유형만 정의해야 하며, 두 가지 모두 또는 둘 다 정의해서는 안 됩니다." -#: core/models.py:1155 +#: core/models.py:1037 msgid "promocode already used" msgstr "프로모코드가 이미 사용되었습니다." -#: core/models.py:1171 +#: core/models.py:1053 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "프로모션 코드 {self.uuid}의 할인 유형이 잘못되었습니다!" -#: core/models.py:1180 +#: core/models.py:1062 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 " @@ -1955,278 +2015,320 @@ msgstr "" "포함하여 애플리케이션 내에서 주문을 모델링합니다. 주문에는 연결된 제품, 프로모션 적용, 주소 설정, 배송 또는 청구 세부 정보 " "업데이트가 가능합니다. 또한 주문 수명 주기에서 제품을 관리하는 기능도 지원합니다." -#: core/models.py:1197 +#: core/models.py:1079 msgid "the billing address used for this order" msgstr "이 주문에 사용된 청구 주소" -#: core/models.py:1205 +#: core/models.py:1087 msgid "optional promo code applied to this order" msgstr "이 주문에 적용된 프로모션 코드(선택 사항)" -#: core/models.py:1206 +#: core/models.py:1088 msgid "applied promo code" msgstr "프로모션 코드 적용" -#: core/models.py:1214 +#: core/models.py:1096 msgid "the shipping address used for this order" msgstr "이 주문에 사용된 배송지 주소" -#: core/models.py:1215 +#: core/models.py:1097 msgid "shipping address" msgstr "배송 주소" -#: core/models.py:1221 +#: core/models.py:1103 msgid "current status of the order in its lifecycle" msgstr "라이프사이클 내 주문의 현재 상태" -#: core/models.py:1222 +#: core/models.py:1104 msgid "order status" msgstr "주문 상태" -#: core/models.py:1227 core/models.py:1686 +#: core/models.py:1109 core/models.py:1560 msgid "json structure of notifications to display to users" msgstr "사용자에게 표시할 알림의 JSON 구조, 관리자 UI에서는 테이블 보기가 사용됩니다." -#: core/models.py:1233 +#: core/models.py:1115 msgid "json representation of order attributes for this order" msgstr "이 주문에 대한 주문 속성의 JSON 표현" -#: core/models.py:1239 +#: core/models.py:1121 msgid "the user who placed the order" msgstr "주문한 사용자" -#: core/models.py:1240 +#: core/models.py:1122 msgid "user" msgstr "사용자" -#: core/models.py:1246 +#: core/models.py:1128 msgid "the timestamp when the order was finalized" msgstr "주문이 완료된 타임스탬프" -#: core/models.py:1247 +#: core/models.py:1129 msgid "buy time" msgstr "시간 확보" -#: core/models.py:1254 +#: core/models.py:1136 msgid "a human-readable identifier for the order" msgstr "사람이 읽을 수 있는 주문 식별자" -#: core/models.py:1255 +#: core/models.py:1137 msgid "human readable id" msgstr "사람이 읽을 수 있는 ID" -#: core/models.py:1261 +#: core/models.py:1143 msgid "order" msgstr "주문" -#: core/models.py:1282 +#: core/models.py:1168 msgid "a user must have only one pending order at a time" msgstr "사용자는 한 번에 하나의 대기 주문만 보유해야 합니다!" -#: core/models.py:1316 +#: core/models.py:1202 msgid "you cannot add products to an order that is not a pending one" msgstr "보류 중인 주문이 아닌 주문에는 제품을 추가할 수 없습니다." -#: core/models.py:1321 +#: core/models.py:1207 msgid "you cannot add inactive products to order" msgstr "주문에 비활성 제품을 추가할 수 없습니다." -#: core/models.py:1338 +#: core/models.py:1224 msgid "you cannot add more products than available in stock" msgstr "재고가 있는 제품보다 많은 제품을 추가할 수 없습니다." -#: core/models.py:1360 core/models.py:1385 core/models.py:1393 +#: core/models.py:1246 core/models.py:1271 core/models.py:1279 msgid "you cannot remove products from an order that is not a pending one" msgstr "보류 중인 주문이 아닌 주문에서는 제품을 제거할 수 없습니다." -#: core/models.py:1381 +#: core/models.py:1267 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "쿼리 <{query}>에 {name}가 존재하지 않습니다!" -#: core/models.py:1413 +#: core/models.py:1299 msgid "promocode does not exist" msgstr "프로모코드가 존재하지 않습니다." -#: core/models.py:1419 +#: core/models.py:1305 msgid "you can only buy physical products with shipping address specified" msgstr "배송 주소가 지정된 실제 제품만 구매할 수 있습니다!" -#: core/models.py:1438 +#: core/models.py:1324 msgid "address does not exist" msgstr "주소가 존재하지 않습니다." -#: core/models.py:1459 core/models.py:1528 +#: core/models.py:1345 core/models.py:1414 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "지금은 구매할 수 없습니다. 몇 분 후에 다시 시도해 주세요." -#: core/models.py:1462 core/models.py:1524 +#: core/models.py:1348 core/models.py:1410 msgid "invalid force value" msgstr "잘못된 힘 값" -#: core/models.py:1468 core/models.py:1531 +#: core/models.py:1354 core/models.py:1417 msgid "you cannot purchase an empty order!" msgstr "빈 주문은 구매할 수 없습니다!" -#: core/models.py:1487 +#: core/models.py:1373 msgid "you cannot buy an order without a user" msgstr "사용자 없이는 주문을 구매할 수 없습니다!" -#: core/models.py:1501 +#: core/models.py:1387 msgid "a user without a balance cannot buy with balance" msgstr "잔액이 없는 사용자는 잔액으로 구매할 수 없습니다!" -#: core/models.py:1506 +#: core/models.py:1392 msgid "insufficient funds to complete the order" msgstr "주문을 완료하기에 자금이 부족합니다." -#: core/models.py:1540 +#: core/models.py:1426 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "등록하지 않으면 구매할 수 없으므로 고객 이름, 고객 이메일, 고객 전화 번호 등의 정보를 제공하세요." -#: core/models.py:1549 +#: core/models.py:1435 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "결제 방법이 잘못되었습니다: {payment_method}에서 {available_payment_methods}로!" -#: core/models.py:1674 +#: core/models.py:1533 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" +"주문과 관련된 제품 및 해당 속성을 나타냅니다. 주문 제품 모델은 구매 가격, 수량, 제품 속성 및 상태 등의 세부 정보를 포함하여 " +"주문의 일부인 제품에 대한 정보를 유지 관리합니다. 사용자 및 관리자에 대한 알림을 관리하고 제품 잔액 반환 또는 피드백 추가와 같은 " +"작업을 처리합니다. 또한 이 모델은 총 가격 계산이나 디지털 제품의 다운로드 URL 생성 등 비즈니스 로직을 지원하는 메서드와 속성을 " +"제공합니다. 이 모델은 주문 및 제품 모델과 통합되며 해당 모델에 대한 참조를 저장합니다." + +#: core/models.py:1548 msgid "the price paid by the customer for this product at purchase time" msgstr "구매 시점에 고객이 이 제품에 대해 지불한 가격입니다." -#: core/models.py:1675 +#: core/models.py:1549 msgid "purchase price at order time" msgstr "주문 시점의 구매 가격" -#: core/models.py:1680 +#: core/models.py:1554 msgid "internal comments for admins about this ordered product" msgstr "주문한 제품에 대한 관리자용 내부 댓글" -#: core/models.py:1681 +#: core/models.py:1555 msgid "internal comments" msgstr "내부 의견" -#: core/models.py:1687 +#: core/models.py:1561 msgid "user notifications" msgstr "사용자 알림" -#: core/models.py:1692 +#: core/models.py:1566 msgid "json representation of this item's attributes" msgstr "이 항목의 속성에 대한 JSON 표현" -#: core/models.py:1693 +#: core/models.py:1567 msgid "ordered product attributes" msgstr "주문한 제품 속성" -#: core/models.py:1698 +#: core/models.py:1572 msgid "reference to the parent order that contains this product" msgstr "이 제품이 포함된 상위 주문 참조" -#: core/models.py:1699 +#: core/models.py:1573 msgid "parent order" msgstr "상위 주문" -#: core/models.py:1708 +#: core/models.py:1582 msgid "the specific product associated with this order line" msgstr "이 주문 라인과 연결된 특정 제품" -#: core/models.py:1715 +#: core/models.py:1589 msgid "quantity of this specific product in the order" msgstr "이 특정 제품의 주문 수량" -#: core/models.py:1716 +#: core/models.py:1590 msgid "product quantity" msgstr "제품 수량" -#: core/models.py:1723 +#: core/models.py:1597 msgid "current status of this product in the order" msgstr "이 제품의 현재 상태 순서" -#: core/models.py:1724 +#: core/models.py:1598 msgid "product line status" msgstr "제품 라인 상태" -#: core/models.py:1784 +#: core/models.py:1661 msgid "order product must have an order" msgstr "주문제품에는 연결된 주문이 있어야 합니다!" -#: core/models.py:1786 +#: core/models.py:1663 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "피드백에 지정된 작업이 잘못되었습니다: {action}!" -#: core/models.py:1800 +#: core/models.py:1677 msgid "you cannot feedback an order which is not received" msgstr "받지 않은 주문에 대해서는 피드백을 제공할 수 없습니다." -#: core/models.py:1806 +#: core/models.py:1683 msgid "name" msgstr "이름" -#: core/models.py:1807 +#: core/models.py:1684 msgid "URL of the integration" msgstr "통합 URL" -#: core/models.py:1808 +#: core/models.py:1685 msgid "authentication credentials" msgstr "인증 자격 증명" -#: core/models.py:1822 +#: core/models.py:1699 msgid "you can only have one default CRM provider" msgstr "기본 CRM 공급업체는 하나만 사용할 수 있습니다." -#: core/models.py:1826 +#: core/models.py:1703 msgid "CRM" msgstr "CRM" -#: core/models.py:1827 +#: core/models.py:1704 msgid "CRMs" msgstr "CRM" -#: core/models.py:1839 +#: core/models.py:1716 msgid "order CRM link" msgstr "주문의 CRM 링크" -#: core/models.py:1840 +#: core/models.py:1717 msgid "orders CRM links" msgstr "주문의 CRM 링크" -#: core/models.py:1874 +#: core/models.py:1722 +msgid "" +"Represents the downloading functionality for digital assets associated with " +"orders. The DigitalAssetDownload class provides the ability to manage and " +"access downloads related to order products. It maintains information about " +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." +msgstr "" +"주문과 관련된 디지털 자산의 다운로드 기능을 나타냅니다. 디지털 자산 다운로드 클래스는 주문 상품과 관련된 다운로드를 관리하고 액세스할 " +"수 있는 기능을 제공합니다. 연결된 주문 상품, 다운로드 횟수, 자산이 공개적으로 표시되는지 여부에 대한 정보를 유지 관리합니다. " +"여기에는 연결된 주문이 완료 상태일 때 자산을 다운로드할 수 있는 URL을 생성하는 메서드가 포함되어 있습니다." + +#: core/models.py:1736 msgid "download" msgstr "다운로드" -#: core/models.py:1875 +#: core/models.py:1737 msgid "downloads" msgstr "다운로드" -#: core/models.py:1883 +#: core/models.py:1745 msgid "you can not download a digital asset for a non-finished order" msgstr "완료되지 않은 주문에 대해서는 디지털 자산을 다운로드할 수 없습니다." -#: core/models.py:1913 +#: core/models.py:1754 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." +msgstr "" +"제품에 대한 사용자 피드백을 관리합니다. 이 클래스는 사용자가 구매한 특정 제품에 대한 사용자 피드백을 캡처하고 저장하도록 " +"설계되었습니다. 여기에는 사용자 댓글, 주문에서 관련 제품에 대한 참조 및 사용자가 지정한 등급을 저장하는 속성이 포함되어 있습니다. 이" +" 클래스는 데이터베이스 필드를 사용하여 피드백 데이터를 효과적으로 모델링하고 관리합니다." + +#: core/models.py:1766 msgid "user-provided comments about their experience with the product" msgstr "제품 사용 경험에 대한 사용자 제공 의견" -#: core/models.py:1914 +#: core/models.py:1767 msgid "feedback comments" msgstr "피드백 댓글" -#: core/models.py:1921 +#: core/models.py:1774 msgid "" "references the specific product in an order that this feedback is about" msgstr "이 피드백에 대한 순서대로 특정 제품을 참조합니다." -#: core/models.py:1922 +#: core/models.py:1775 msgid "related order product" msgstr "관련 주문 제품" -#: core/models.py:1927 +#: core/models.py:1780 msgid "user-assigned rating for the product" msgstr "제품에 대한 사용자 지정 평점" -#: core/models.py:1928 +#: core/models.py:1781 msgid "product rating" msgstr "제품 평가" @@ -2433,17 +2535,17 @@ msgstr "잘못된 시간 초과 값, 0~216000초 사이여야 합니다." msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | 문의 시작됨" -#: core/utils/emailing.py:64 +#: core/utils/emailing.py:74 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | 주문 확인" -#: core/utils/emailing.py:99 +#: core/utils/emailing.py:109 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | 주문 배송됨" -#: core/utils/emailing.py:187 +#: core/utils/emailing.py:197 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | 프로모코드 부여됨" @@ -2465,15 +2567,15 @@ msgstr "이미지 크기는 w{max_width} x h{max_height} 픽셀을 초과하지 msgid "invalid phone number format" msgstr "잘못된 전화 번호 형식" -#: core/views.py:481 +#: core/views.py:489 msgid "you can only download the digital asset once" msgstr "디지털 자산은 한 번만 다운로드할 수 있습니다." -#: core/views.py:539 +#: core/views.py:547 msgid "favicon not found" msgstr "파비콘을 찾을 수 없습니다." -#: core/viewsets.py:1319 +#: core/viewsets.py:1357 #, python-brace-format msgid "Geocoding error: {e}" msgstr "지오코딩 오류입니다: {e}" diff --git a/core/locale/nl_NL/LC_MESSAGES/django.mo b/core/locale/nl_NL/LC_MESSAGES/django.mo index 42ec13386339e0482c6ef49aefd7ac4935cc94d2..102f9a111ebd2dc09626e2964839008d67af9589 100644 GIT binary patch delta 20857 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 delta 12593 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 diff --git a/core/locale/nl_NL/LC_MESSAGES/django.po b/core/locale/nl_NL/LC_MESSAGES/django.po index 136d5609..6d77987d 100644 --- a/core/locale/nl_NL/LC_MESSAGES/django.po +++ b/core/locale/nl_NL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:52+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -88,11 +88,11 @@ msgid "selected items have been deactivated." msgstr "Geselecteerde items zijn gedeactiveerd!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:712 core/models.py:720 +#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 msgid "attribute value" msgstr "Attribuut Waarde" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:721 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 msgid "attribute values" msgstr "Attribuutwaarden" @@ -104,7 +104,7 @@ msgstr "Afbeelding" msgid "images" msgstr "Afbeeldingen" -#: core/admin.py:155 core/models.py:457 +#: core/admin.py:155 core/models.py:445 msgid "stock" msgstr "Voorraad" @@ -112,11 +112,11 @@ msgstr "Voorraad" msgid "stocks" msgstr "Aandelen" -#: core/admin.py:166 core/models.py:1735 +#: core/admin.py:166 core/models.py:1609 msgid "order product" msgstr "Product bestellen" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1736 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 msgid "order products" msgstr "Producten bestellen" @@ -332,7 +332,7 @@ msgstr "" "Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare " "velden op te slaan" -#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:553 +#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:487 #: core/graphene/object_types.py:117 core/graphene/object_types.py:207 #: core/graphene/object_types.py:509 msgid "SEO Meta snapshot" @@ -611,47 +611,7 @@ msgstr "Alle producten weergeven (eenvoudige weergave)" msgid "(exact) Product UUID" msgstr "(exacte) UUID van product" -#: core/docs/drf/viewsets.py:384 -msgid "(icontains) Product name" -msgstr "(pictogrammen) Productnaam" - -#: core/docs/drf/viewsets.py:390 -msgid "(list) Category names, case-insensitive" -msgstr "(lijst) Categorienamen, hoofdlettergevoelig" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Category UUID" -msgstr "(exacte) UUID van categorie" - -#: core/docs/drf/viewsets.py:402 -msgid "(list) Tag names, case-insensitive" -msgstr "(lijst) Labelnamen, hoofdlettergevoelig" - -#: core/docs/drf/viewsets.py:408 -msgid "(gte) Minimum stock price" -msgstr "(gte) Minimale aandelenprijs" - -#: core/docs/drf/viewsets.py:414 -msgid "(lte) Maximum stock price" -msgstr "(lte) Maximale aandelenprijs" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Only active products" -msgstr "(exact) Alleen actieve producten" - -#: core/docs/drf/viewsets.py:426 -msgid "(iexact) Brand name" -msgstr "(iexact) Merknaam" - -#: core/docs/drf/viewsets.py:438 -msgid "(gt) Minimum stock quantity" -msgstr "(gt) Minimumvoorraad" - -#: core/docs/drf/viewsets.py:444 -msgid "(exact) Digital vs. physical" -msgstr "(exact) Digitaal vs. fysiek" - -#: core/docs/drf/viewsets.py:451 +#: core/docs/drf/viewsets.py:385 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -659,256 +619,260 @@ 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:465 core/docs/drf/viewsets.py:466 +#: core/docs/drf/viewsets.py:399 core/docs/drf/viewsets.py:400 msgid "retrieve a single product (detailed view)" msgstr "Een enkel product ophalen (gedetailleerde weergave)" -#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:495 -#: core/docs/drf/viewsets.py:511 core/docs/drf/viewsets.py:527 -#: core/docs/drf/viewsets.py:543 core/docs/drf/viewsets.py:559 +#: core/docs/drf/viewsets.py:405 core/docs/drf/viewsets.py:429 +#: core/docs/drf/viewsets.py:445 core/docs/drf/viewsets.py:461 +#: core/docs/drf/viewsets.py:477 core/docs/drf/viewsets.py:493 msgid "Product UUID or slug" msgstr "Product UUID of Slug" -#: core/docs/drf/viewsets.py:481 core/docs/drf/viewsets.py:482 +#: core/docs/drf/viewsets.py:415 core/docs/drf/viewsets.py:416 msgid "create a product" msgstr "Een product maken" -#: core/docs/drf/viewsets.py:489 core/docs/drf/viewsets.py:490 +#: core/docs/drf/viewsets.py:423 core/docs/drf/viewsets.py:424 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:505 core/docs/drf/viewsets.py:506 +#: core/docs/drf/viewsets.py:439 core/docs/drf/viewsets.py:440 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:521 core/docs/drf/viewsets.py:522 +#: core/docs/drf/viewsets.py:455 core/docs/drf/viewsets.py:456 msgid "delete a product" msgstr "Een product verwijderen" -#: core/docs/drf/viewsets.py:537 core/docs/drf/viewsets.py:538 +#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:472 msgid "lists all permitted feedbacks for a product" msgstr "somt alle toegestane feedbacks voor een product op" -#: core/docs/drf/viewsets.py:554 +#: core/docs/drf/viewsets.py:488 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:572 +#: core/docs/drf/viewsets.py:506 msgid "list all addresses" msgstr "Vermeld alle adressen" -#: core/docs/drf/viewsets.py:579 +#: core/docs/drf/viewsets.py:513 msgid "retrieve a single address" msgstr "Een enkel adres ophalen" -#: core/docs/drf/viewsets.py:586 +#: core/docs/drf/viewsets.py:520 msgid "create a new address" msgstr "Een nieuw adres maken" -#: core/docs/drf/viewsets.py:594 +#: core/docs/drf/viewsets.py:528 msgid "delete an address" msgstr "Een adres verwijderen" -#: core/docs/drf/viewsets.py:601 +#: core/docs/drf/viewsets.py:535 msgid "update an entire address" msgstr "Een heel adres bijwerken" -#: core/docs/drf/viewsets.py:609 +#: core/docs/drf/viewsets.py:543 msgid "partially update an address" msgstr "Een adres gedeeltelijk bijwerken" -#: core/docs/drf/viewsets.py:617 +#: core/docs/drf/viewsets.py:551 msgid "autocomplete address suggestions" msgstr "Automatische adresinvoer" -#: core/docs/drf/viewsets.py:622 +#: core/docs/drf/viewsets.py:556 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:628 +#: core/docs/drf/viewsets.py:562 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:641 +#: core/docs/drf/viewsets.py:575 msgid "list all feedbacks (simple view)" msgstr "alle feedbacks weergeven (eenvoudige weergave)" -#: core/docs/drf/viewsets.py:645 +#: core/docs/drf/viewsets.py:579 msgid "retrieve a single feedback (detailed view)" msgstr "een enkele feedback ophalen (gedetailleerde weergave)" -#: core/docs/drf/viewsets.py:649 +#: core/docs/drf/viewsets.py:583 msgid "create a feedback" msgstr "een feedback creëren" -#: core/docs/drf/viewsets.py:653 +#: core/docs/drf/viewsets.py:587 msgid "delete a feedback" msgstr "een feedback verwijderen" -#: core/docs/drf/viewsets.py:657 +#: core/docs/drf/viewsets.py:591 msgid "rewrite an existing feedback saving non-editables" msgstr "" "een bestaande feedback herschrijven waarbij niet-wijzigbare gegevens worden " "opgeslagen" -#: core/docs/drf/viewsets.py:661 +#: core/docs/drf/viewsets.py:595 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:668 +#: core/docs/drf/viewsets.py:602 msgid "list all order–product relations (simple view)" msgstr "alle order-productrelaties weergeven (eenvoudige weergave)" -#: core/docs/drf/viewsets.py:675 +#: core/docs/drf/viewsets.py:609 msgid "retrieve a single order–product relation (detailed view)" msgstr "" "een enkele bestelling-productrelatie ophalen (gedetailleerde weergave)" -#: core/docs/drf/viewsets.py:682 +#: core/docs/drf/viewsets.py:616 msgid "create a new order–product relation" msgstr "een nieuwe bestelling-product relatie maken" -#: core/docs/drf/viewsets.py:689 +#: core/docs/drf/viewsets.py:623 msgid "replace an existing order–product relation" msgstr "een bestaande order-productrelatie vervangen" -#: core/docs/drf/viewsets.py:696 +#: core/docs/drf/viewsets.py:630 msgid "partially update an existing order–product relation" msgstr "een bestaande order-productrelatie gedeeltelijk bijwerken" -#: core/docs/drf/viewsets.py:703 +#: core/docs/drf/viewsets.py:637 msgid "delete an order–product relation" msgstr "een order-productrelatie verwijderen" -#: core/docs/drf/viewsets.py:710 +#: core/docs/drf/viewsets.py:644 msgid "add or remove feedback on an order–product relation" msgstr "feedback toevoegen of verwijderen op een order-productrelatie" -#: core/elasticsearch/__init__.py:105 +#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 msgid "no search term provided." msgstr "Geen zoekterm opgegeven." -#: core/filters.py:64 core/filters.py:594 core/filters.py:623 +#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +msgid "Search" +msgstr "Zoek op" + +#: core/filters.py:66 core/filters.py:554 core/filters.py:583 msgid "UUID" msgstr "UUID" -#: core/filters.py:65 core/filters.py:429 core/filters.py:560 +#: core/filters.py:67 core/filters.py:399 core/filters.py:526 msgid "Name" msgstr "Naam" -#: core/filters.py:66 core/filters.py:562 +#: core/filters.py:68 core/filters.py:528 msgid "Categories" msgstr "Categorieën" -#: core/filters.py:68 +#: core/filters.py:70 msgid "Categories Slugs" msgstr "Categorieën Naaktslakken" -#: core/filters.py:69 core/filters.py:437 +#: core/filters.py:71 core/filters.py:407 msgid "Tags" msgstr "Tags" -#: core/filters.py:70 +#: core/filters.py:72 msgid "Min Price" msgstr "Min Prijs" -#: core/filters.py:71 +#: core/filters.py:73 msgid "Max Price" msgstr "Maximale prijs" -#: core/filters.py:72 +#: core/filters.py:74 msgid "Is Active" msgstr "Is actief" -#: core/filters.py:73 +#: core/filters.py:75 msgid "Brand" msgstr "Merk" -#: core/filters.py:74 +#: core/filters.py:76 msgid "Attributes" msgstr "Attributen" -#: core/filters.py:75 +#: core/filters.py:77 msgid "Quantity" msgstr "Hoeveelheid" -#: core/filters.py:76 core/filters.py:431 core/filters.py:561 -#: core/models.py:287 core/models.py:381 core/models.py:534 +#: core/filters.py:78 core/filters.py:401 core/filters.py:527 +#: core/models.py:287 core/models.py:369 core/models.py:522 msgid "Slug" msgstr "Slak" -#: core/filters.py:77 +#: core/filters.py:79 msgid "Is Digital" msgstr "Is digitaal" -#: core/filters.py:78 +#: core/filters.py:80 msgid "Include sub-categories" msgstr "Subcategorieën opnemen" -#: core/filters.py:81 +#: core/filters.py:83 msgid "Include personal ordered" msgstr "Inclusief persoonlijk bestelde producten" -#: core/filters.py:83 core/models.py:538 +#: core/filters.py:85 core/models.py:526 msgid "SKU" msgstr "SKU" -#: core/filters.py:166 +#: core/filters.py:161 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:356 +#: core/filters.py:324 msgid "Search (ID, product name or part number)" msgstr "Zoeken (ID, productnaam of onderdeelnummer)" -#: core/filters.py:359 +#: core/filters.py:327 msgid "Bought after (inclusive)" msgstr "Gekocht na (inclusief)" -#: core/filters.py:360 +#: core/filters.py:328 msgid "Bought before (inclusive)" msgstr "Eerder gekocht (inclusief)" -#: core/filters.py:363 core/filters.py:410 core/filters.py:625 +#: core/filters.py:331 core/filters.py:378 core/filters.py:585 msgid "User email" msgstr "E-mail gebruiker" -#: core/filters.py:364 core/filters.py:411 core/filters.py:603 -#: core/filters.py:624 +#: core/filters.py:332 core/filters.py:379 core/filters.py:563 +#: core/filters.py:584 msgid "User UUID" msgstr "Gebruiker UUID" -#: core/filters.py:365 +#: core/filters.py:333 msgid "Status" msgstr "Status" -#: core/filters.py:369 +#: core/filters.py:337 msgid "Human Readable ID" msgstr "Menselijk leesbare ID" -#: core/filters.py:430 +#: core/filters.py:400 msgid "Parent" msgstr "Ouder" -#: core/filters.py:434 +#: core/filters.py:404 msgid "Whole category(has at least 1 product or not)" msgstr "Hele categorie (heeft minstens 1 product of niet)" -#: core/filters.py:438 +#: core/filters.py:408 msgid "Level" msgstr "Niveau" -#: core/filters.py:598 +#: core/filters.py:558 msgid "Product UUID" msgstr "Product UUID" @@ -963,7 +927,7 @@ 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:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:821 +#: core/graphene/mutations.py:527 core/viewsets.py:839 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Verkeerd type kwam uit order.buy() methode: {type(instance)!s}" @@ -1025,37 +989,37 @@ msgstr "" msgid "add or delete a feedback for orderproduct" msgstr "Feedback toevoegen of verwijderen voor het orderproduct" -#: core/graphene/mutations.py:555 +#: core/graphene/mutations.py:556 msgid "action must be either `add` or `remove`" msgstr "De actie moet `toevoegen` of `verwijderen` zijn!" -#: core/graphene/mutations.py:558 +#: core/graphene/mutations.py:559 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderproduct {order_product_uuid} niet gevonden!" -#: core/graphene/mutations.py:621 +#: core/graphene/mutations.py:622 msgid "original address string provided by the user" msgstr "Originele adresstring geleverd door de gebruiker" -#: core/graphene/mutations.py:655 core/models.py:896 core/models.py:909 -#: core/models.py:1348 core/models.py:1377 core/models.py:1402 -#: core/viewsets.py:824 +#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 +#: core/models.py:1234 core/models.py:1263 core/models.py:1288 +#: core/viewsets.py:842 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} bestaat niet: {uuid}!" -#: core/graphene/mutations.py:668 +#: core/graphene/mutations.py:669 msgid "limit must be between 1 and 10" msgstr "Limiet moet tussen 1 en 10 liggen" -#: core/graphene/mutations.py:713 +#: core/graphene/mutations.py:714 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - werkt als een charme" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:666 core/models.py:1234 -#: core/models.py:1809 +#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 +#: core/models.py:1686 msgid "attributes" msgstr "Attributen" @@ -1068,11 +1032,11 @@ 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:224 core/models.py:312 core/models.py:620 +#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:612 msgid "categories" msgstr "Categorieën" -#: core/graphene/object_types.py:124 core/models.py:395 +#: core/graphene/object_types.py:124 core/models.py:383 msgid "brands" msgstr "Merken" @@ -1131,7 +1095,7 @@ msgid "represents feedback from a user." msgstr "Vertegenwoordigt feedback van een gebruiker." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1228 +#: core/models.py:1110 msgid "notifications" msgstr "Meldingen" @@ -1139,7 +1103,7 @@ msgstr "Meldingen" msgid "download url for this order product if applicable" msgstr "Download url voor dit bestelproduct indien van toepassing" -#: core/graphene/object_types.py:400 core/models.py:1938 +#: core/graphene/object_types.py:400 core/models.py:1791 msgid "feedback" msgstr "Feedback" @@ -1147,7 +1111,7 @@ msgstr "Feedback" msgid "a list of order products in this order" msgstr "Een lijst met bestelde producten in deze bestelling" -#: core/graphene/object_types.py:436 core/models.py:1198 +#: core/graphene/object_types.py:436 core/models.py:1080 msgid "billing address" msgstr "Factuuradres" @@ -1175,7 +1139,7 @@ msgstr "Zijn alle producten in de bestelling digitaal" msgid "transactions for this order" msgstr "Transacties voor deze bestelling" -#: core/graphene/object_types.py:465 core/models.py:1262 +#: core/graphene/object_types.py:465 core/models.py:1144 msgid "orders" msgstr "Bestellingen" @@ -1187,15 +1151,15 @@ msgstr "Afbeelding URL" msgid "product's images" msgstr "Afbeeldingen van het product" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:477 +#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 msgid "category" msgstr "Categorie" -#: core/graphene/object_types.py:502 core/models.py:1939 +#: core/graphene/object_types.py:502 core/models.py:1792 msgid "feedbacks" msgstr "Reacties" -#: core/graphene/object_types.py:503 core/models.py:394 core/models.py:486 +#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 msgid "brand" msgstr "Merk" @@ -1227,7 +1191,7 @@ msgstr "Aantal terugkoppelingen" msgid "only available for personal orders" msgstr "Producten alleen beschikbaar voor persoonlijke bestellingen" -#: core/graphene/object_types.py:534 core/models.py:548 +#: core/graphene/object_types.py:534 core/models.py:536 msgid "products" msgstr "Producten" @@ -1239,7 +1203,7 @@ msgstr "Promocodes" msgid "products on sale" msgstr "Producten te koop" -#: core/graphene/object_types.py:651 core/models.py:843 +#: core/graphene/object_types.py:651 core/models.py:784 msgid "promotions" msgstr "Promoties" @@ -1247,7 +1211,7 @@ msgstr "Promoties" msgid "vendor" msgstr "Verkoper" -#: core/graphene/object_types.py:656 core/models.py:547 +#: core/graphene/object_types.py:656 core/models.py:535 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1255,11 +1219,11 @@ msgstr "Verkoper" msgid "product" msgstr "Product" -#: core/graphene/object_types.py:667 core/models.py:868 +#: core/graphene/object_types.py:667 core/models.py:807 msgid "wishlisted products" msgstr "Gewenste producten" -#: core/graphene/object_types.py:673 core/models.py:885 +#: core/graphene/object_types.py:673 core/models.py:824 msgid "wishlists" msgstr "Verlanglijst" @@ -1267,7 +1231,7 @@ msgstr "Verlanglijst" msgid "tagged products" msgstr "Getagde producten" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:492 +#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 msgid "product tags" msgstr "Product tags" @@ -1379,7 +1343,7 @@ msgstr "Ouderattribuutgroep" msgid "attribute group's name" msgstr "Naam attribuutgroep" -#: core/models.py:100 core/models.py:628 +#: core/models.py:100 core/models.py:620 msgid "attribute group" msgstr "Attribuutgroep" @@ -1546,51 +1510,65 @@ msgstr "Categorie beschrijving" msgid "tags that help describe or group this category" msgstr "tags die deze categorie helpen beschrijven of groeperen" -#: core/models.py:299 core/models.py:387 +#: core/models.py:299 core/models.py:375 msgid "priority" msgstr "Prioriteit" -#: core/models.py:340 +#: core/models.py:318 +msgid "" +"Represents a Brand object in the system. This class handles information and " +"attributes related to a brand, including its name, logos, description, " +"associated categories, a unique slug, and priority order. It allows for the " +"organization and representation of brand-related data within the " +"application." +msgstr "" +"Vertegenwoordigt een merkobject in het systeem. Deze klasse behandelt " +"informatie en attributen met betrekking tot een merk, inclusief de naam, " +"logo's, beschrijving, geassocieerde categorieën, een unieke slug en " +"prioriteitsvolgorde. Hiermee kunnen merkgerelateerde gegevens worden " +"georganiseerd en weergegeven in de applicatie." + +#: core/models.py:328 msgid "name of this brand" msgstr "Naam van dit merk" -#: core/models.py:341 +#: core/models.py:329 msgid "brand name" msgstr "Merknaam" -#: core/models.py:348 +#: core/models.py:336 msgid "upload a logo representing this brand" msgstr "Upload een logo dat dit merk vertegenwoordigt" -#: core/models.py:350 +#: core/models.py:338 msgid "brand small image" msgstr "Klein merkimago" -#: core/models.py:356 +#: core/models.py:344 msgid "upload a big logo representing this brand" msgstr "Upload een groot logo dat dit merk vertegenwoordigt" -#: core/models.py:358 +#: core/models.py:346 msgid "brand big image" msgstr "Groot merkimago" -#: core/models.py:363 +#: core/models.py:351 msgid "add a detailed description of the brand" msgstr "Een gedetailleerde beschrijving van het merk toevoegen" -#: core/models.py:364 +#: core/models.py:352 msgid "brand description" msgstr "Merknaam" -#: core/models.py:369 +#: core/models.py:357 msgid "optional categories that this brand is associated with" msgstr "Optionele categorieën waarmee dit merk wordt geassocieerd" -#: core/models.py:370 +#: core/models.py:358 msgid "associated categories" msgstr "Categorieën" -#: core/models.py:400 +#: core/models.py:388 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1607,68 +1585,68 @@ msgstr "" "evalueren van beschikbare producten van verschillende leveranciers mogelijk " "te maken." -#: core/models.py:412 +#: core/models.py:400 msgid "the vendor supplying this product stock" msgstr "De verkoper die dit product levert" -#: core/models.py:413 +#: core/models.py:401 msgid "associated vendor" msgstr "Geassocieerde verkoper" -#: core/models.py:417 +#: core/models.py:405 msgid "final price to the customer after markups" msgstr "Eindprijs voor de klant na winstmarges" -#: core/models.py:418 +#: core/models.py:406 msgid "selling price" msgstr "Verkoopprijs" -#: core/models.py:423 +#: core/models.py:411 msgid "the product associated with this stock entry" msgstr "Het product dat bij deze voorraadvermelding hoort" -#: core/models.py:424 core/models.py:708 core/models.py:765 -#: core/models.py:1709 +#: core/models.py:412 core/models.py:683 core/models.py:730 +#: core/models.py:1583 msgid "associated product" msgstr "Bijbehorend product" -#: core/models.py:431 +#: core/models.py:419 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:432 +#: core/models.py:420 msgid "vendor purchase price" msgstr "Aankoopprijs verkoper" -#: core/models.py:436 +#: core/models.py:424 msgid "available quantity of the product in stock" msgstr "Beschikbare hoeveelheid van het product in voorraad" -#: core/models.py:437 +#: core/models.py:425 msgid "quantity in stock" msgstr "Hoeveelheid op voorraad" -#: core/models.py:441 +#: core/models.py:429 msgid "vendor-assigned SKU for identifying the product" msgstr "Door de verkoper toegewezen SKU om het product te identificeren" -#: core/models.py:442 +#: core/models.py:430 msgid "vendor sku" msgstr "Verkoper SKU" -#: core/models.py:448 +#: core/models.py:436 msgid "digital file associated with this stock if applicable" msgstr "Digitaal bestand gekoppeld aan deze voorraad indien van toepassing" -#: core/models.py:449 +#: core/models.py:437 msgid "digital file" msgstr "Digitaal bestand" -#: core/models.py:458 +#: core/models.py:446 msgid "stock entries" msgstr "Voorraadboekingen" -#: core/models.py:463 +#: core/models.py:451 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1689,55 +1667,55 @@ msgstr "" "verbeteren. Het wordt gebruikt om productgegevens en de bijbehorende " "informatie te definiëren en te manipuleren binnen een applicatie." -#: core/models.py:476 +#: core/models.py:464 msgid "category this product belongs to" msgstr "Categorie waartoe dit product behoort" -#: core/models.py:485 +#: core/models.py:473 msgid "optionally associate this product with a brand" msgstr "Dit product optioneel koppelen aan een merk" -#: core/models.py:491 +#: core/models.py:479 msgid "tags that help describe or group this product" msgstr "Tags die dit product helpen beschrijven of groeperen" -#: core/models.py:496 +#: core/models.py:484 msgid "indicates whether this product is digitally delivered" msgstr "Geeft aan of dit product digitaal wordt geleverd" -#: core/models.py:497 +#: core/models.py:485 msgid "is product digital" msgstr "Is product digitaal" -#: core/models.py:503 +#: core/models.py:491 msgid "provide a clear identifying name for the product" msgstr "Zorg voor een duidelijke identificerende naam voor het product" -#: core/models.py:504 +#: core/models.py:492 msgid "product name" msgstr "Naam product" -#: core/models.py:509 core/models.py:831 +#: core/models.py:497 core/models.py:772 msgid "add a detailed description of the product" msgstr "Voeg een gedetailleerde beschrijving van het product toe" -#: core/models.py:510 +#: core/models.py:498 msgid "product description" msgstr "Productbeschrijving" -#: core/models.py:517 +#: core/models.py:505 msgid "part number for this product" msgstr "Onderdeelnummer voor dit product" -#: core/models.py:518 +#: core/models.py:506 msgid "part number" msgstr "Onderdeelnummer" -#: core/models.py:537 +#: core/models.py:525 msgid "stock keeping unit for this product" msgstr "Voorraadhoudende eenheid voor dit product" -#: core/models.py:607 +#: core/models.py:599 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 " @@ -1754,295 +1732,407 @@ msgstr "" "boolean, array en object. Dit maakt dynamische en flexibele " "gegevensstructurering mogelijk." -#: core/models.py:619 +#: core/models.py:611 msgid "category of this attribute" msgstr "Categorie van dit kenmerk" -#: core/models.py:627 +#: core/models.py:619 msgid "group of this attribute" msgstr "Groep van dit kenmerk" -#: core/models.py:633 +#: core/models.py:625 msgid "string" msgstr "String" -#: core/models.py:634 +#: core/models.py:626 msgid "integer" msgstr "Integer" -#: core/models.py:635 +#: core/models.py:627 msgid "float" msgstr "Vlotter" -#: core/models.py:636 +#: core/models.py:628 msgid "boolean" msgstr "Booleaans" -#: core/models.py:637 +#: core/models.py:629 msgid "array" msgstr "Array" -#: core/models.py:638 +#: core/models.py:630 msgid "object" msgstr "Object" -#: core/models.py:640 +#: core/models.py:632 msgid "type of the attribute's value" msgstr "Type waarde van het kenmerk" -#: core/models.py:641 +#: core/models.py:633 msgid "value type" msgstr "Waardetype" -#: core/models.py:646 +#: core/models.py:638 msgid "name of this attribute" msgstr "Naam van dit kenmerk" -#: core/models.py:647 +#: core/models.py:639 msgid "attribute's name" msgstr "Naam attribuut" -#: core/models.py:653 +#: core/models.py:645 msgid "is filterable" msgstr "kan worden gefilterd" -#: core/models.py:654 +#: core/models.py:646 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:665 core/models.py:700 +#: core/models.py:657 core/models.py:675 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attribuut" -#: core/models.py:699 +#: core/models.py:663 +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 "" +"Vertegenwoordigt een specifieke waarde voor een kenmerk dat is gekoppeld aan" +" een product. Het koppelt het 'kenmerk' aan een unieke 'waarde', wat een " +"betere organisatie en dynamische weergave van productkenmerken mogelijk " +"maakt." + +#: core/models.py:674 msgid "attribute of this value" msgstr "Attribuut van deze waarde" -#: core/models.py:707 +#: core/models.py:682 msgid "the specific product associated with this attribute's value" msgstr "Het specifieke product geassocieerd met de waarde van dit kenmerk" -#: core/models.py:713 +#: core/models.py:688 msgid "the specific value for this attribute" msgstr "De specifieke waarde voor dit kenmerk" -#: core/models.py:747 +#: core/models.py:701 +msgid "" +"Represents a product image associated with a product in the system. This " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " +"determining their display order. It also includes an accessibility feature " +"with alternative text for the images." +msgstr "" +"Vertegenwoordigt een productafbeelding die gekoppeld is aan een product in " +"het systeem. Deze klasse is ontworpen om afbeeldingen voor producten te " +"beheren, inclusief functionaliteit voor het uploaden van " +"afbeeldingsbestanden, ze te associëren met specifieke producten en hun " +"weergavevolgorde te bepalen. Het bevat ook een toegankelijkheidsfunctie met " +"alternatieve tekst voor de afbeeldingen." + +#: core/models.py:712 msgid "provide alternative text for the image for accessibility" msgstr "Geef alternatieve tekst voor de afbeelding voor toegankelijkheid" -#: core/models.py:748 +#: core/models.py:713 msgid "image alt text" msgstr "Alt-tekst afbeelding" -#: core/models.py:751 +#: core/models.py:716 msgid "upload the image file for this product" msgstr "Upload het afbeeldingsbestand voor dit product" -#: core/models.py:752 core/models.py:777 +#: core/models.py:717 core/models.py:742 msgid "product image" msgstr "Product afbeelding" -#: core/models.py:758 +#: core/models.py:723 msgid "determines the order in which images are displayed" msgstr "Bepaalt de volgorde waarin afbeeldingen worden weergegeven" -#: core/models.py:759 +#: core/models.py:724 msgid "display priority" msgstr "Prioriteit weergeven" -#: core/models.py:764 +#: core/models.py:729 msgid "the product that this image represents" msgstr "Het product dat deze afbeelding vertegenwoordigt" -#: core/models.py:778 +#: core/models.py:743 msgid "product images" msgstr "Product afbeeldingen" -#: core/models.py:819 +#: core/models.py:748 +msgid "" +"Represents a promotional campaign for products with a discount. This class " +"is used to define and manage promotional campaigns that offer a percentage-" +"based discount for products. The class includes attributes for setting the " +"discount rate, providing details about the promotion, and linking it to the " +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." +msgstr "" +"Vertegenwoordigt een promotiecampagne voor producten met een korting. Deze " +"klasse wordt gebruikt om promotiecampagnes te definiëren en beheren die een " +"procentuele korting bieden voor producten. De klasse bevat attributen voor " +"het instellen van het kortingspercentage, het verstrekken van details over " +"de promotie en het koppelen aan de van toepassing zijnde producten. Het " +"integreert met de productcatalogus om de betreffende artikelen in de " +"campagne te bepalen." + +#: core/models.py:760 msgid "percentage discount for the selected products" msgstr "Kortingspercentage voor de geselecteerde producten" -#: core/models.py:820 +#: core/models.py:761 msgid "discount percentage" msgstr "Kortingspercentage" -#: core/models.py:825 +#: core/models.py:766 msgid "provide a unique name for this promotion" msgstr "Geef deze promotie een unieke naam" -#: core/models.py:826 +#: core/models.py:767 msgid "promotion name" msgstr "Naam promotie" -#: core/models.py:832 +#: core/models.py:773 msgid "promotion description" msgstr "Promotie beschrijving" -#: core/models.py:837 +#: core/models.py:778 msgid "select which products are included in this promotion" msgstr "Selecteer welke producten onder deze promotie vallen" -#: core/models.py:838 +#: core/models.py:779 msgid "included products" msgstr "Meegeleverde producten" -#: core/models.py:842 +#: core/models.py:783 msgid "promotion" msgstr "Promotie" -#: core/models.py:867 +#: core/models.py:794 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"class provides functionality to manage a collection of products, supporting " +"operations such as adding and removing products, as well as supporting " +"operations for adding and removing multiple products at once." +msgstr "" +"Vertegenwoordigt het verlanglijstje van een gebruiker voor het opslaan en " +"beheren van gewenste producten. De klasse biedt functionaliteit voor het " +"beheren van een verzameling producten en ondersteunt bewerkingen zoals het " +"toevoegen en verwijderen van producten, maar ook bewerkingen voor het " +"toevoegen en verwijderen van meerdere producten tegelijk." + +#: core/models.py:806 msgid "products that the user has marked as wanted" msgstr "Producten die de gebruiker als gewenst heeft gemarkeerd" -#: core/models.py:875 +#: core/models.py:814 msgid "user who owns this wishlist" msgstr "Gebruiker die eigenaar is van deze verlanglijst" -#: core/models.py:876 +#: core/models.py:815 msgid "wishlist owner" msgstr "Eigenaar verlanglijstje" -#: core/models.py:884 +#: core/models.py:823 msgid "wishlist" msgstr "Verlanglijst" -#: core/models.py:951 +#: core/models.py:865 +msgid "" +"Represents a documentary record tied to a product. This class is used to " +"store information about documentaries related to specific products, " +"including file uploads and their metadata. It contains methods and " +"properties to handle the file type and storage path for the documentary " +"files. It extends functionality from specific mixins and provides additional" +" custom features." +msgstr "" +"Vertegenwoordigt een documentair record gekoppeld aan een product. Deze " +"klasse wordt gebruikt om informatie op te slaan over documentaires met " +"betrekking tot specifieke producten, met inbegrip van het uploaden van " +"bestanden en hun metadata. Het bevat methoden en eigenschappen om het " +"bestandstype en het opslagpad voor de documentaire bestanden te behandelen. " +"Het breidt functionaliteit uit van specifieke mixins en biedt extra " +"aangepaste functies." + +#: core/models.py:878 msgid "documentary" msgstr "Documentaire" -#: core/models.py:952 +#: core/models.py:879 msgid "documentaries" msgstr "Documentaires" -#: core/models.py:962 +#: core/models.py:889 msgid "unresolved" msgstr "Onopgelost" -#: core/models.py:1008 +#: core/models.py:894 +msgid "" +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." +msgstr "" +"Vertegenwoordigt een adresentiteit met locatiegegevens en associaties met " +"een gebruiker. Biedt functionaliteit voor het opslaan van geografische en " +"adresgegevens, evenals integratie met geocoderingsservices. Deze klasse is " +"ontworpen om gedetailleerde adresgegevens op te slaan, inclusief componenten" +" als straat, stad, regio, land en geolocatie (lengtegraad en breedtegraad). " +"Het ondersteunt integratie met geocodering API's, waardoor de opslag van " +"ruwe API antwoorden voor verdere verwerking of inspectie mogelijk wordt. De " +"klasse maakt het ook mogelijk om een adres met een gebruiker te associëren, " +"wat het verwerken van gepersonaliseerde gegevens vergemakkelijkt." + +#: core/models.py:909 msgid "address line for the customer" msgstr "Adresregel voor de klant" -#: core/models.py:1009 +#: core/models.py:910 msgid "address line" msgstr "Adresregel" -#: core/models.py:1011 +#: core/models.py:912 msgid "street" msgstr "Straat" -#: core/models.py:1012 +#: core/models.py:913 msgid "district" msgstr "District" -#: core/models.py:1013 +#: core/models.py:914 msgid "city" msgstr "Stad" -#: core/models.py:1014 +#: core/models.py:915 msgid "region" msgstr "Regio" -#: core/models.py:1015 +#: core/models.py:916 msgid "postal code" msgstr "Postcode" -#: core/models.py:1016 +#: core/models.py:917 msgid "country" msgstr "Land" -#: core/models.py:1023 +#: core/models.py:924 msgid "geolocation point: (longitude, latitude)" msgstr "Geolocatie Punt (lengtegraad, breedtegraad)" -#: core/models.py:1026 +#: core/models.py:927 msgid "full JSON response from geocoder for this address" msgstr "Volledig JSON-antwoord van geocoder voor dit adres" -#: core/models.py:1031 +#: core/models.py:932 msgid "stored JSON response from the geocoding service" msgstr "Opgeslagen JSON-antwoord van de geocoderingsservice" -#: core/models.py:1039 +#: core/models.py:940 msgid "address" msgstr "Adres" -#: core/models.py:1040 +#: core/models.py:941 msgid "addresses" msgstr "Adressen" -#: core/models.py:1085 +#: core/models.py:953 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" +"Vertegenwoordigt een promotiecode die kan worden gebruikt voor kortingen en " +"beheert de geldigheid, het type korting en de toepassing ervan. De klasse " +"PromoCode slaat details op over een promotiecode, inclusief de unieke " +"identificatiecode, kortingseigenschappen (bedrag of percentage), " +"geldigheidsperiode, geassocieerde gebruiker (indien van toepassing) en " +"status van het gebruik. De klasse bevat functionaliteit om de promotiecode " +"te valideren en toe te passen op een bestelling, waarbij ervoor wordt " +"gezorgd dat aan de beperkingen wordt voldaan." + +#: core/models.py:967 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:1086 +#: core/models.py:968 msgid "promo code identifier" msgstr "Promo code identificatie" -#: core/models.py:1093 +#: core/models.py:975 msgid "fixed discount amount applied if percent is not used" msgstr "" "Vast kortingsbedrag dat wordt toegepast als percentage niet wordt gebruikt" -#: core/models.py:1094 +#: core/models.py:976 msgid "fixed discount amount" msgstr "Vast kortingsbedrag" -#: core/models.py:1100 +#: core/models.py:982 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:1101 +#: core/models.py:983 msgid "percentage discount" msgstr "Kortingspercentage" -#: core/models.py:1106 +#: core/models.py:988 msgid "timestamp when the promocode expires" msgstr "Tijdstempel wanneer de promocode verloopt" -#: core/models.py:1107 +#: core/models.py:989 msgid "end validity time" msgstr "Geldigheidsduur einde" -#: core/models.py:1112 +#: core/models.py:994 msgid "timestamp from which this promocode is valid" msgstr "Tijdstempel vanaf wanneer deze promocode geldig is" -#: core/models.py:1113 +#: core/models.py:995 msgid "start validity time" msgstr "Begin geldigheidsduur" -#: core/models.py:1118 +#: core/models.py:1000 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:1119 +#: core/models.py:1001 msgid "usage timestamp" msgstr "Gebruik tijdstempel" -#: core/models.py:1124 +#: core/models.py:1006 msgid "user assigned to this promocode if applicable" msgstr "Gebruiker toegewezen aan deze promocode indien van toepassing" -#: core/models.py:1125 +#: core/models.py:1007 msgid "assigned user" msgstr "Toegewezen gebruiker" -#: core/models.py:1132 +#: core/models.py:1014 msgid "promo code" msgstr "Kortingscode" -#: core/models.py:1133 +#: core/models.py:1015 msgid "promo codes" msgstr "Actiecodes" -#: core/models.py:1140 +#: core/models.py:1022 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2050,16 +2140,16 @@ msgstr "" "Er moet slechts één type korting worden gedefinieerd (bedrag of percentage)," " maar niet beide of geen van beide." -#: core/models.py:1155 +#: core/models.py:1037 msgid "promocode already used" msgstr "Promocode is al gebruikt" -#: core/models.py:1171 +#: core/models.py:1053 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Ongeldig kortingstype voor promocode {self.uuid}!" -#: core/models.py:1180 +#: core/models.py:1062 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 " @@ -2077,141 +2167,141 @@ msgstr "" "bijgewerkt. De functionaliteit ondersteunt ook het beheer van de producten " "in de levenscyclus van de bestelling." -#: core/models.py:1197 +#: core/models.py:1079 msgid "the billing address used for this order" msgstr "Het factuuradres dat voor deze bestelling is gebruikt" -#: core/models.py:1205 +#: core/models.py:1087 msgid "optional promo code applied to this order" msgstr "Optionele promotiecode toegepast op deze bestelling" -#: core/models.py:1206 +#: core/models.py:1088 msgid "applied promo code" msgstr "Kortingscode toegepast" -#: core/models.py:1214 +#: core/models.py:1096 msgid "the shipping address used for this order" msgstr "Het verzendadres dat voor deze bestelling is gebruikt" -#: core/models.py:1215 +#: core/models.py:1097 msgid "shipping address" msgstr "Verzendadres" -#: core/models.py:1221 +#: core/models.py:1103 msgid "current status of the order in its lifecycle" msgstr "Huidige status van de order in zijn levenscyclus" -#: core/models.py:1222 +#: core/models.py:1104 msgid "order status" msgstr "Bestelstatus" -#: core/models.py:1227 core/models.py:1686 +#: core/models.py:1109 core/models.py:1560 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:1233 +#: core/models.py:1115 msgid "json representation of order attributes for this order" msgstr "JSON-weergave van bestelattributen voor deze bestelling" -#: core/models.py:1239 +#: core/models.py:1121 msgid "the user who placed the order" msgstr "De gebruiker die de bestelling heeft geplaatst" -#: core/models.py:1240 +#: core/models.py:1122 msgid "user" msgstr "Gebruiker" -#: core/models.py:1246 +#: core/models.py:1128 msgid "the timestamp when the order was finalized" msgstr "De tijdstempel waarop de bestelling is afgerond" -#: core/models.py:1247 +#: core/models.py:1129 msgid "buy time" msgstr "Tijd kopen" -#: core/models.py:1254 +#: core/models.py:1136 msgid "a human-readable identifier for the order" msgstr "Een menselijk leesbare identificatiecode voor de bestelling" -#: core/models.py:1255 +#: core/models.py:1137 msgid "human readable id" msgstr "menselijk leesbare ID" -#: core/models.py:1261 +#: core/models.py:1143 msgid "order" msgstr "Bestel" -#: core/models.py:1282 +#: core/models.py:1168 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:1316 +#: core/models.py:1202 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:1321 +#: core/models.py:1207 msgid "you cannot add inactive products to order" msgstr "U kunt geen inactieve producten toevoegen aan uw bestelling" -#: core/models.py:1338 +#: core/models.py:1224 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:1360 core/models.py:1385 core/models.py:1393 +#: core/models.py:1246 core/models.py:1271 core/models.py:1279 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:1381 +#: core/models.py:1267 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} bestaat niet met query <{query}>!" -#: core/models.py:1413 +#: core/models.py:1299 msgid "promocode does not exist" msgstr "Promocode bestaat niet" -#: core/models.py:1419 +#: core/models.py:1305 msgid "you can only buy physical products with shipping address specified" msgstr "Je kunt alleen fysieke producten kopen met opgegeven verzendadres!" -#: core/models.py:1438 +#: core/models.py:1324 msgid "address does not exist" msgstr "Adres bestaat niet" -#: core/models.py:1459 core/models.py:1528 +#: core/models.py:1345 core/models.py:1414 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:1462 core/models.py:1524 +#: core/models.py:1348 core/models.py:1410 msgid "invalid force value" msgstr "Ongeldige krachtwaarde" -#: core/models.py:1468 core/models.py:1531 +#: core/models.py:1354 core/models.py:1417 msgid "you cannot purchase an empty order!" msgstr "Je kunt geen lege bestelling kopen!" -#: core/models.py:1487 +#: core/models.py:1373 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:1501 +#: core/models.py:1387 msgid "a user without a balance cannot buy with balance" msgstr "Een gebruiker zonder saldo kan niet kopen met saldo!" -#: core/models.py:1506 +#: core/models.py:1392 msgid "insufficient funds to complete the order" msgstr "Onvoldoende fondsen om de bestelling te voltooien" -#: core/models.py:1540 +#: core/models.py:1426 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2219,7 +2309,7 @@ msgstr "" "u niet kunt kopen zonder registratie, geef dan de volgende informatie: " "klantnaam, e-mail klant, telefoonnummer klant" -#: core/models.py:1549 +#: core/models.py:1435 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2227,146 +2317,202 @@ msgstr "" "Ongeldige betalingsmethode: {payment_method} van " "{available_payment_methods}!" -#: core/models.py:1674 +#: core/models.py:1533 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" +"Vertegenwoordigt producten die zijn gekoppeld aan orders en hun attributen. " +"Het OrderProduct-model onderhoudt informatie over een product dat deel " +"uitmaakt van een bestelling, met inbegrip van details zoals aankoopprijs, " +"hoeveelheid, productkenmerken en status. Het beheert meldingen voor de " +"gebruiker en beheerders en handelt handelingen af zoals het retourneren van " +"het producttegoed of het toevoegen van feedback. Dit model biedt ook " +"methoden en eigenschappen die bedrijfslogica ondersteunen, zoals het " +"berekenen van de totaalprijs of het genereren van een download-URL voor " +"digitale producten. Het model integreert met de modellen Order en Product en" +" slaat een verwijzing ernaar op." + +#: core/models.py:1548 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:1675 +#: core/models.py:1549 msgid "purchase price at order time" msgstr "Aankoopprijs bij bestelling" -#: core/models.py:1680 +#: core/models.py:1554 msgid "internal comments for admins about this ordered product" msgstr "Interne opmerkingen voor beheerders over dit bestelde product" -#: core/models.py:1681 +#: core/models.py:1555 msgid "internal comments" msgstr "Interne opmerkingen" -#: core/models.py:1687 +#: core/models.py:1561 msgid "user notifications" msgstr "Meldingen van gebruikers" -#: core/models.py:1692 +#: core/models.py:1566 msgid "json representation of this item's attributes" msgstr "JSON weergave van de attributen van dit item" -#: core/models.py:1693 +#: core/models.py:1567 msgid "ordered product attributes" msgstr "Geordende producteigenschappen" -#: core/models.py:1698 +#: core/models.py:1572 msgid "reference to the parent order that contains this product" msgstr "Verwijzing naar de bovenliggende bestelling die dit product bevat" -#: core/models.py:1699 +#: core/models.py:1573 msgid "parent order" msgstr "Ouderlijk bevel" -#: core/models.py:1708 +#: core/models.py:1582 msgid "the specific product associated with this order line" msgstr "Het specifieke product dat bij deze bestelregel hoort" -#: core/models.py:1715 +#: core/models.py:1589 msgid "quantity of this specific product in the order" msgstr "Hoeveelheid van dit specifieke product in de bestelling" -#: core/models.py:1716 +#: core/models.py:1590 msgid "product quantity" msgstr "Hoeveelheid product" -#: core/models.py:1723 +#: core/models.py:1597 msgid "current status of this product in the order" msgstr "Huidige status van dit product in de bestelling" -#: core/models.py:1724 +#: core/models.py:1598 msgid "product line status" msgstr "Status productlijn" -#: core/models.py:1784 +#: core/models.py:1661 msgid "order product must have an order" msgstr "Orderproduct moet een bijbehorende order hebben!" -#: core/models.py:1786 +#: core/models.py:1663 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Verkeerde actie opgegeven voor feedback: {action}!" -#: core/models.py:1800 +#: core/models.py:1677 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:1806 +#: core/models.py:1683 msgid "name" msgstr "Naam" -#: core/models.py:1807 +#: core/models.py:1684 msgid "URL of the integration" msgstr "URL van de integratie" -#: core/models.py:1808 +#: core/models.py:1685 msgid "authentication credentials" msgstr "Authenticatiegegevens" -#: core/models.py:1822 +#: core/models.py:1699 msgid "you can only have one default CRM provider" msgstr "Je kunt maar één standaard CRM-provider hebben" -#: core/models.py:1826 +#: core/models.py:1703 msgid "CRM" msgstr "CRM" -#: core/models.py:1827 +#: core/models.py:1704 msgid "CRMs" msgstr "CRM's" -#: core/models.py:1839 +#: core/models.py:1716 msgid "order CRM link" msgstr "CRM link van bestelling" -#: core/models.py:1840 +#: core/models.py:1717 msgid "orders CRM links" msgstr "CRM-koppelingen voor bestellingen" -#: core/models.py:1874 +#: core/models.py:1722 +msgid "" +"Represents the downloading functionality for digital assets associated with " +"orders. The DigitalAssetDownload class provides the ability to manage and " +"access downloads related to order products. It maintains information about " +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." +msgstr "" +"Vertegenwoordigt de downloadfunctionaliteit voor digitale activa gekoppeld " +"aan bestellingen. De DigitalAssetDownload klasse biedt de mogelijkheid om " +"downloads gerelateerd aan orderproducten te beheren en te openen. Het " +"onderhoudt informatie over het geassocieerde orderproduct, het aantal " +"downloads en of het object publiekelijk zichtbaar is. Het bevat een methode " +"om een URL te genereren voor het downloaden van de activa wanneer de " +"bijbehorende order een voltooide status heeft." + +#: core/models.py:1736 msgid "download" msgstr "Downloaden" -#: core/models.py:1875 +#: core/models.py:1737 msgid "downloads" msgstr "Downloads" -#: core/models.py:1883 +#: core/models.py:1745 msgid "you can not download a digital asset for a non-finished order" msgstr "" "U kunt geen digitale activa downloaden voor een niet-afgeronde bestelling" -#: core/models.py:1913 +#: core/models.py:1754 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." +msgstr "" +"Beheert gebruikersfeedback voor producten. Deze klasse is ontworpen om " +"feedback van gebruikers over specifieke producten die ze hebben gekocht vast" +" te leggen en op te slaan. De klasse bevat attributen voor het opslaan van " +"opmerkingen van gebruikers, een verwijzing naar het betreffende product in " +"de bestelling en een door de gebruiker toegekende beoordeling. De klasse " +"gebruikt databasevelden om feedbackgegevens effectief te modelleren en te " +"beheren." + +#: core/models.py:1766 msgid "user-provided comments about their experience with the product" msgstr "Opmerkingen van gebruikers over hun ervaring met het product" -#: core/models.py:1914 +#: core/models.py:1767 msgid "feedback comments" msgstr "Reacties" -#: core/models.py:1921 +#: core/models.py:1774 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:1922 +#: core/models.py:1775 msgid "related order product" msgstr "Gerelateerd product bestellen" -#: core/models.py:1927 +#: core/models.py:1780 msgid "user-assigned rating for the product" msgstr "Door de gebruiker toegekende waardering voor het product" -#: core/models.py:1928 +#: core/models.py:1781 msgid "product rating" msgstr "Productbeoordeling" @@ -2586,17 +2732,17 @@ msgstr "" msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | neem contact met ons op" -#: core/utils/emailing.py:64 +#: core/utils/emailing.py:74 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Orderbevestiging" -#: core/utils/emailing.py:99 +#: core/utils/emailing.py:109 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Bestelling afgeleverd" -#: core/utils/emailing.py:187 +#: core/utils/emailing.py:197 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | promocode toegekend" @@ -2620,15 +2766,15 @@ msgstr "" msgid "invalid phone number format" msgstr "Ongeldig formaat telefoonnummer" -#: core/views.py:481 +#: core/views.py:489 msgid "you can only download the digital asset once" msgstr "U kunt het digitale goed maar één keer downloaden" -#: core/views.py:539 +#: core/views.py:547 msgid "favicon not found" msgstr "favicon niet gevonden" -#: core/viewsets.py:1319 +#: core/viewsets.py:1357 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Fout bij geocodering: {e}" diff --git a/core/locale/no_NO/LC_MESSAGES/django.mo b/core/locale/no_NO/LC_MESSAGES/django.mo index 11d8f003237c4d47a989111cb43718bfe3aa1518..91c11ddcf6120a89e669c0cb3655c3993ce2511f 100644 GIT binary patch delta 20350 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 delta 12577 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 Aw*UYD diff --git a/core/locale/no_NO/LC_MESSAGES/django.po b/core/locale/no_NO/LC_MESSAGES/django.po index 11987119..ff273054 100644 --- a/core/locale/no_NO/LC_MESSAGES/django.po +++ b/core/locale/no_NO/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:52+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -89,11 +89,11 @@ msgid "selected items have been deactivated." msgstr "Utvalgte elementer har blitt deaktivert!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:712 core/models.py:720 +#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 msgid "attribute value" msgstr "Attributtverdi" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:721 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 msgid "attribute values" msgstr "Attributtverdier" @@ -105,7 +105,7 @@ msgstr "Bilde" msgid "images" msgstr "Bilder" -#: core/admin.py:155 core/models.py:457 +#: core/admin.py:155 core/models.py:445 msgid "stock" msgstr "Lager" @@ -113,11 +113,11 @@ msgstr "Lager" msgid "stocks" msgstr "Aksjer" -#: core/admin.py:166 core/models.py:1735 +#: core/admin.py:166 core/models.py:1609 msgid "order product" msgstr "Bestill produkt" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1736 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 msgid "order products" msgstr "Bestill produkter" @@ -332,7 +332,7 @@ msgstr "" "Skriv om noen av feltene i en eksisterende kategori for å lagre ikke-" "redigerbare" -#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:553 +#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:487 #: core/graphene/object_types.py:117 core/graphene/object_types.py:207 #: core/graphene/object_types.py:509 msgid "SEO Meta snapshot" @@ -602,47 +602,7 @@ msgstr "Liste over alle produkter (enkel visning)" msgid "(exact) Product UUID" msgstr "(nøyaktig) Produkt UUID" -#: core/docs/drf/viewsets.py:384 -msgid "(icontains) Product name" -msgstr "(icontains) Produktnavn" - -#: core/docs/drf/viewsets.py:390 -msgid "(list) Category names, case-insensitive" -msgstr "(liste) Kategorinavn, skiller mellom store og små bokstaver" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Category UUID" -msgstr "(nøyaktig) UUID for kategori" - -#: core/docs/drf/viewsets.py:402 -msgid "(list) Tag names, case-insensitive" -msgstr "(liste) Taggnavn, skiller mellom store og små bokstaver" - -#: core/docs/drf/viewsets.py:408 -msgid "(gte) Minimum stock price" -msgstr "(gte) Minimum aksjekurs" - -#: core/docs/drf/viewsets.py:414 -msgid "(lte) Maximum stock price" -msgstr "(lte) Maksimal aksjekurs" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Only active products" -msgstr "(nøyaktig) Kun aktive produkter" - -#: core/docs/drf/viewsets.py:426 -msgid "(iexact) Brand name" -msgstr "(iexact) Merkenavn" - -#: core/docs/drf/viewsets.py:438 -msgid "(gt) Minimum stock quantity" -msgstr "(gt) Minste lagerkvantitet" - -#: core/docs/drf/viewsets.py:444 -msgid "(exact) Digital vs. physical" -msgstr "(nøyaktig) Digital vs. fysisk" - -#: core/docs/drf/viewsets.py:451 +#: core/docs/drf/viewsets.py:385 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -650,251 +610,255 @@ 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:465 core/docs/drf/viewsets.py:466 +#: core/docs/drf/viewsets.py:399 core/docs/drf/viewsets.py:400 msgid "retrieve a single product (detailed view)" msgstr "Hent et enkelt produkt (detaljert visning)" -#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:495 -#: core/docs/drf/viewsets.py:511 core/docs/drf/viewsets.py:527 -#: core/docs/drf/viewsets.py:543 core/docs/drf/viewsets.py:559 +#: core/docs/drf/viewsets.py:405 core/docs/drf/viewsets.py:429 +#: core/docs/drf/viewsets.py:445 core/docs/drf/viewsets.py:461 +#: core/docs/drf/viewsets.py:477 core/docs/drf/viewsets.py:493 msgid "Product UUID or slug" msgstr "Produkt UUID eller Slug" -#: core/docs/drf/viewsets.py:481 core/docs/drf/viewsets.py:482 +#: core/docs/drf/viewsets.py:415 core/docs/drf/viewsets.py:416 msgid "create a product" msgstr "Opprett et produkt" -#: core/docs/drf/viewsets.py:489 core/docs/drf/viewsets.py:490 +#: core/docs/drf/viewsets.py:423 core/docs/drf/viewsets.py:424 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:505 core/docs/drf/viewsets.py:506 +#: core/docs/drf/viewsets.py:439 core/docs/drf/viewsets.py:440 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:521 core/docs/drf/viewsets.py:522 +#: core/docs/drf/viewsets.py:455 core/docs/drf/viewsets.py:456 msgid "delete a product" msgstr "Slett et produkt" -#: core/docs/drf/viewsets.py:537 core/docs/drf/viewsets.py:538 +#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:472 msgid "lists all permitted feedbacks for a product" msgstr "viser alle tillatte tilbakemeldinger for et produkt" -#: core/docs/drf/viewsets.py:554 +#: core/docs/drf/viewsets.py:488 msgid "returns a snapshot of the product's SEO meta data" msgstr "Returnerer et øyeblikksbilde av produktets SEO-metadata" -#: core/docs/drf/viewsets.py:572 +#: core/docs/drf/viewsets.py:506 msgid "list all addresses" msgstr "Liste over alle adresser" -#: core/docs/drf/viewsets.py:579 +#: core/docs/drf/viewsets.py:513 msgid "retrieve a single address" msgstr "Hent en enkelt adresse" -#: core/docs/drf/viewsets.py:586 +#: core/docs/drf/viewsets.py:520 msgid "create a new address" msgstr "Opprett en ny adresse" -#: core/docs/drf/viewsets.py:594 +#: core/docs/drf/viewsets.py:528 msgid "delete an address" msgstr "Slett en adresse" -#: core/docs/drf/viewsets.py:601 +#: core/docs/drf/viewsets.py:535 msgid "update an entire address" msgstr "Oppdater en hel adresse" -#: core/docs/drf/viewsets.py:609 +#: core/docs/drf/viewsets.py:543 msgid "partially update an address" msgstr "Delvis oppdatering av en adresse" -#: core/docs/drf/viewsets.py:617 +#: core/docs/drf/viewsets.py:551 msgid "autocomplete address suggestions" msgstr "Autofullfør adresseinndata" -#: core/docs/drf/viewsets.py:622 +#: core/docs/drf/viewsets.py:556 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:628 +#: core/docs/drf/viewsets.py:562 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "begrenser resultatmengden, 1 < grense < 10, standard: 5" -#: core/docs/drf/viewsets.py:641 +#: core/docs/drf/viewsets.py:575 msgid "list all feedbacks (simple view)" msgstr "liste opp alle tilbakemeldinger (enkel visning)" -#: core/docs/drf/viewsets.py:645 +#: core/docs/drf/viewsets.py:579 msgid "retrieve a single feedback (detailed view)" msgstr "hente en enkelt tilbakemelding (detaljert visning)" -#: core/docs/drf/viewsets.py:649 +#: core/docs/drf/viewsets.py:583 msgid "create a feedback" msgstr "skape en tilbakemelding" -#: core/docs/drf/viewsets.py:653 +#: core/docs/drf/viewsets.py:587 msgid "delete a feedback" msgstr "slette en tilbakemelding" -#: core/docs/drf/viewsets.py:657 +#: core/docs/drf/viewsets.py:591 msgid "rewrite an existing feedback saving non-editables" msgstr "" "omskrive en eksisterende tilbakemelding som lagrer ikke-redigerbare filer" -#: core/docs/drf/viewsets.py:661 +#: core/docs/drf/viewsets.py:595 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:668 +#: core/docs/drf/viewsets.py:602 msgid "list all order–product relations (simple view)" msgstr "liste opp alle ordre-produkt-relasjoner (enkel visning)" -#: core/docs/drf/viewsets.py:675 +#: core/docs/drf/viewsets.py:609 msgid "retrieve a single order–product relation (detailed view)" msgstr "hente en enkelt ordre-produkt-relasjon (detaljert visning)" -#: core/docs/drf/viewsets.py:682 +#: core/docs/drf/viewsets.py:616 msgid "create a new order–product relation" msgstr "opprette en ny ordre-produkt-relasjon" -#: core/docs/drf/viewsets.py:689 +#: core/docs/drf/viewsets.py:623 msgid "replace an existing order–product relation" msgstr "erstatte en eksisterende ordre-produkt-relasjon" -#: core/docs/drf/viewsets.py:696 +#: core/docs/drf/viewsets.py:630 msgid "partially update an existing order–product relation" msgstr "delvis oppdatere en eksisterende ordre-produkt-relasjon" -#: core/docs/drf/viewsets.py:703 +#: core/docs/drf/viewsets.py:637 msgid "delete an order–product relation" msgstr "slette en ordre-produkt-relasjon" -#: core/docs/drf/viewsets.py:710 +#: core/docs/drf/viewsets.py:644 msgid "add or remove feedback on an order–product relation" msgstr "legge til eller fjerne tilbakemeldinger på en ordre-produkt-relasjon" -#: core/elasticsearch/__init__.py:105 +#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 msgid "no search term provided." msgstr "Ingen søkeord oppgitt." -#: core/filters.py:64 core/filters.py:594 core/filters.py:623 +#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +msgid "Search" +msgstr "Søk" + +#: core/filters.py:66 core/filters.py:554 core/filters.py:583 msgid "UUID" msgstr "UUID" -#: core/filters.py:65 core/filters.py:429 core/filters.py:560 +#: core/filters.py:67 core/filters.py:399 core/filters.py:526 msgid "Name" msgstr "Navn" -#: core/filters.py:66 core/filters.py:562 +#: core/filters.py:68 core/filters.py:528 msgid "Categories" msgstr "Kategorier" -#: core/filters.py:68 +#: core/filters.py:70 msgid "Categories Slugs" msgstr "Kategorier Snegler" -#: core/filters.py:69 core/filters.py:437 +#: core/filters.py:71 core/filters.py:407 msgid "Tags" msgstr "Tagger" -#: core/filters.py:70 +#: core/filters.py:72 msgid "Min Price" msgstr "Min pris" -#: core/filters.py:71 +#: core/filters.py:73 msgid "Max Price" msgstr "Maks pris" -#: core/filters.py:72 +#: core/filters.py:74 msgid "Is Active" msgstr "Er aktiv" -#: core/filters.py:73 +#: core/filters.py:75 msgid "Brand" msgstr "Merkevare" -#: core/filters.py:74 +#: core/filters.py:76 msgid "Attributes" msgstr "Egenskaper" -#: core/filters.py:75 +#: core/filters.py:77 msgid "Quantity" msgstr "Antall" -#: core/filters.py:76 core/filters.py:431 core/filters.py:561 -#: core/models.py:287 core/models.py:381 core/models.py:534 +#: core/filters.py:78 core/filters.py:401 core/filters.py:527 +#: core/models.py:287 core/models.py:369 core/models.py:522 msgid "Slug" msgstr "Snegl" -#: core/filters.py:77 +#: core/filters.py:79 msgid "Is Digital" msgstr "Er Digital" -#: core/filters.py:78 +#: core/filters.py:80 msgid "Include sub-categories" msgstr "Inkluder underkategorier" -#: core/filters.py:81 +#: core/filters.py:83 msgid "Include personal ordered" msgstr "Inkluder personlig bestilte produkter" -#: core/filters.py:83 core/models.py:538 +#: core/filters.py:85 core/models.py:526 msgid "SKU" msgstr "SKU" -#: core/filters.py:166 +#: core/filters.py:161 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:356 +#: core/filters.py:324 msgid "Search (ID, product name or part number)" msgstr "Søk (ID, produktnavn eller delenummer)" -#: core/filters.py:359 +#: core/filters.py:327 msgid "Bought after (inclusive)" msgstr "Kjøpt etter (inklusive)" -#: core/filters.py:360 +#: core/filters.py:328 msgid "Bought before (inclusive)" msgstr "Kjøpt før (inkludert)" -#: core/filters.py:363 core/filters.py:410 core/filters.py:625 +#: core/filters.py:331 core/filters.py:378 core/filters.py:585 msgid "User email" msgstr "Brukerens e-post" -#: core/filters.py:364 core/filters.py:411 core/filters.py:603 -#: core/filters.py:624 +#: core/filters.py:332 core/filters.py:379 core/filters.py:563 +#: core/filters.py:584 msgid "User UUID" msgstr "Bruker UUID" -#: core/filters.py:365 +#: core/filters.py:333 msgid "Status" msgstr "Status" -#: core/filters.py:369 +#: core/filters.py:337 msgid "Human Readable ID" msgstr "Menneskelig lesbar ID" -#: core/filters.py:430 +#: core/filters.py:400 msgid "Parent" msgstr "Foreldre" -#: core/filters.py:434 +#: core/filters.py:404 msgid "Whole category(has at least 1 product or not)" msgstr "Hele kategorien (har minst 1 produkt eller ikke)" -#: core/filters.py:438 +#: core/filters.py:408 msgid "Level" msgstr "Nivå" -#: core/filters.py:598 +#: core/filters.py:558 msgid "Product UUID" msgstr "Produkt UUID" @@ -950,7 +914,7 @@ msgstr "" "Vennligst oppgi enten order_uuid eller order_hr_id - gjensidig utelukkende!" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:821 +#: core/graphene/mutations.py:527 core/viewsets.py:839 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Feil type kom fra order.buy()-metoden: {type(instance)!s}" @@ -1012,37 +976,37 @@ msgstr "" msgid "add or delete a feedback for orderproduct" msgstr "Legg til eller slett en tilbakemelding for ordreproduktet" -#: core/graphene/mutations.py:555 +#: core/graphene/mutations.py:556 msgid "action must be either `add` or `remove`" msgstr "Handlingen må være enten `add` eller `remove`!" -#: core/graphene/mutations.py:558 +#: core/graphene/mutations.py:559 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Bestill produkt {order_product_uuid} ikke funnet!" -#: core/graphene/mutations.py:621 +#: core/graphene/mutations.py:622 msgid "original address string provided by the user" msgstr "Opprinnelig adressestreng oppgitt av brukeren" -#: core/graphene/mutations.py:655 core/models.py:896 core/models.py:909 -#: core/models.py:1348 core/models.py:1377 core/models.py:1402 -#: core/viewsets.py:824 +#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 +#: core/models.py:1234 core/models.py:1263 core/models.py:1288 +#: core/viewsets.py:842 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} eksisterer ikke: {uuid}!" -#: core/graphene/mutations.py:668 +#: core/graphene/mutations.py:669 msgid "limit must be between 1 and 10" msgstr "Grensen må være mellom 1 og 10" -#: core/graphene/mutations.py:713 +#: core/graphene/mutations.py:714 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - fungerer som en drøm" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:666 core/models.py:1234 -#: core/models.py:1809 +#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 +#: core/models.py:1686 msgid "attributes" msgstr "Egenskaper" @@ -1055,11 +1019,11 @@ 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:224 core/models.py:312 core/models.py:620 +#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:612 msgid "categories" msgstr "Kategorier" -#: core/graphene/object_types.py:124 core/models.py:395 +#: core/graphene/object_types.py:124 core/models.py:383 msgid "brands" msgstr "Merkevarer" @@ -1118,7 +1082,7 @@ msgid "represents feedback from a user." msgstr "Representerer tilbakemeldinger fra en bruker." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1228 +#: core/models.py:1110 msgid "notifications" msgstr "Varsler" @@ -1126,7 +1090,7 @@ msgstr "Varsler" msgid "download url for this order product if applicable" msgstr "Last ned url for dette bestillingsproduktet, hvis aktuelt" -#: core/graphene/object_types.py:400 core/models.py:1938 +#: core/graphene/object_types.py:400 core/models.py:1791 msgid "feedback" msgstr "Tilbakemeldinger" @@ -1134,7 +1098,7 @@ msgstr "Tilbakemeldinger" msgid "a list of order products in this order" msgstr "En liste over bestillingsprodukter i denne rekkefølgen" -#: core/graphene/object_types.py:436 core/models.py:1198 +#: core/graphene/object_types.py:436 core/models.py:1080 msgid "billing address" msgstr "Faktureringsadresse" @@ -1162,7 +1126,7 @@ msgstr "Er alle produktene i bestillingen digitale" msgid "transactions for this order" msgstr "Transaksjoner for denne bestillingen" -#: core/graphene/object_types.py:465 core/models.py:1262 +#: core/graphene/object_types.py:465 core/models.py:1144 msgid "orders" msgstr "Bestillinger" @@ -1174,15 +1138,15 @@ msgstr "Bilde-URL" msgid "product's images" msgstr "Bilder av produktet" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:477 +#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 msgid "category" msgstr "Kategori" -#: core/graphene/object_types.py:502 core/models.py:1939 +#: core/graphene/object_types.py:502 core/models.py:1792 msgid "feedbacks" msgstr "Tilbakemeldinger" -#: core/graphene/object_types.py:503 core/models.py:394 core/models.py:486 +#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 msgid "brand" msgstr "Merkevare" @@ -1214,7 +1178,7 @@ msgstr "Antall tilbakemeldinger" msgid "only available for personal orders" msgstr "Produkter kun tilgjengelig for personlige bestillinger" -#: core/graphene/object_types.py:534 core/models.py:548 +#: core/graphene/object_types.py:534 core/models.py:536 msgid "products" msgstr "Produkter" @@ -1226,7 +1190,7 @@ msgstr "Promokoder" msgid "products on sale" msgstr "Produkter på salg" -#: core/graphene/object_types.py:651 core/models.py:843 +#: core/graphene/object_types.py:651 core/models.py:784 msgid "promotions" msgstr "Kampanjer" @@ -1234,7 +1198,7 @@ msgstr "Kampanjer" msgid "vendor" msgstr "Leverandør" -#: core/graphene/object_types.py:656 core/models.py:547 +#: core/graphene/object_types.py:656 core/models.py:535 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1242,11 +1206,11 @@ msgstr "Leverandør" msgid "product" msgstr "Produkt" -#: core/graphene/object_types.py:667 core/models.py:868 +#: core/graphene/object_types.py:667 core/models.py:807 msgid "wishlisted products" msgstr "Produkter på ønskelisten" -#: core/graphene/object_types.py:673 core/models.py:885 +#: core/graphene/object_types.py:673 core/models.py:824 msgid "wishlists" msgstr "Ønskelister" @@ -1254,7 +1218,7 @@ msgstr "Ønskelister" msgid "tagged products" msgstr "Merkede produkter" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:492 +#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 msgid "product tags" msgstr "Produktmerker" @@ -1364,7 +1328,7 @@ msgstr "Overordnet attributtgruppe" msgid "attribute group's name" msgstr "Attributtgruppens navn" -#: core/models.py:100 core/models.py:628 +#: core/models.py:100 core/models.py:620 msgid "attribute group" msgstr "Attributtgruppe" @@ -1529,51 +1493,65 @@ msgstr "Beskrivelse av kategori" msgid "tags that help describe or group this category" msgstr "tagger som bidrar til å beskrive eller gruppere denne kategorien" -#: core/models.py:299 core/models.py:387 +#: core/models.py:299 core/models.py:375 msgid "priority" msgstr "Prioritet" -#: core/models.py:340 +#: core/models.py:318 +msgid "" +"Represents a Brand object in the system. This class handles information and " +"attributes related to a brand, including its name, logos, description, " +"associated categories, a unique slug, and priority order. It allows for the " +"organization and representation of brand-related data within the " +"application." +msgstr "" +"Representerer et merkevareobjekt i systemet. Denne klassen håndterer " +"informasjon og attributter knyttet til et merke, inkludert navn, logoer, " +"beskrivelse, tilknyttede kategorier, en unik slug og " +"prioriteringsrekkefølge. Den gjør det mulig å organisere og representere " +"merkerelaterte data i applikasjonen." + +#: core/models.py:328 msgid "name of this brand" msgstr "Navnet på dette merket" -#: core/models.py:341 +#: core/models.py:329 msgid "brand name" msgstr "Merkenavn" -#: core/models.py:348 +#: core/models.py:336 msgid "upload a logo representing this brand" msgstr "Last opp en logo som representerer dette varemerket" -#: core/models.py:350 +#: core/models.py:338 msgid "brand small image" msgstr "Merkevare lite image" -#: core/models.py:356 +#: core/models.py:344 msgid "upload a big logo representing this brand" msgstr "Last opp en stor logo som representerer dette varemerket" -#: core/models.py:358 +#: core/models.py:346 msgid "brand big image" msgstr "Merkevare med stort image" -#: core/models.py:363 +#: core/models.py:351 msgid "add a detailed description of the brand" msgstr "Legg til en detaljert beskrivelse av merket" -#: core/models.py:364 +#: core/models.py:352 msgid "brand description" msgstr "Varemerkebeskrivelse" -#: core/models.py:369 +#: core/models.py:357 msgid "optional categories that this brand is associated with" msgstr "Valgfrie kategorier som dette merket er assosiert med" -#: core/models.py:370 +#: core/models.py:358 msgid "associated categories" msgstr "Kategorier" -#: core/models.py:400 +#: core/models.py:388 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1589,68 +1567,68 @@ msgstr "" "lagerstyringssystemet for å muliggjøre sporing og evaluering av produkter " "som er tilgjengelige fra ulike leverandører." -#: core/models.py:412 +#: core/models.py:400 msgid "the vendor supplying this product stock" msgstr "Leverandøren som leverer dette produktet lagerfører" -#: core/models.py:413 +#: core/models.py:401 msgid "associated vendor" msgstr "Tilknyttet leverandør" -#: core/models.py:417 +#: core/models.py:405 msgid "final price to the customer after markups" msgstr "Sluttpris til kunden etter påslag" -#: core/models.py:418 +#: core/models.py:406 msgid "selling price" msgstr "Salgspris" -#: core/models.py:423 +#: core/models.py:411 msgid "the product associated with this stock entry" msgstr "Produktet som er knyttet til denne lagerposten" -#: core/models.py:424 core/models.py:708 core/models.py:765 -#: core/models.py:1709 +#: core/models.py:412 core/models.py:683 core/models.py:730 +#: core/models.py:1583 msgid "associated product" msgstr "Tilhørende produkt" -#: core/models.py:431 +#: core/models.py:419 msgid "the price paid to the vendor for this product" msgstr "Prisen som er betalt til leverandøren for dette produktet" -#: core/models.py:432 +#: core/models.py:420 msgid "vendor purchase price" msgstr "Leverandørens innkjøpspris" -#: core/models.py:436 +#: core/models.py:424 msgid "available quantity of the product in stock" msgstr "Tilgjengelig mengde av produktet på lager" -#: core/models.py:437 +#: core/models.py:425 msgid "quantity in stock" msgstr "Antall på lager" -#: core/models.py:441 +#: core/models.py:429 msgid "vendor-assigned SKU for identifying the product" msgstr "Leverandørens SKU for identifisering av produktet" -#: core/models.py:442 +#: core/models.py:430 msgid "vendor sku" msgstr "Leverandørens SKU" -#: core/models.py:448 +#: core/models.py:436 msgid "digital file associated with this stock if applicable" msgstr "Digital fil knyttet til denne aksjen, hvis aktuelt" -#: core/models.py:449 +#: core/models.py:437 msgid "digital file" msgstr "Digital fil" -#: core/models.py:458 +#: core/models.py:446 msgid "stock entries" msgstr "Lageroppføringer" -#: core/models.py:463 +#: core/models.py:451 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1671,55 +1649,55 @@ msgstr "" "ytelsen. Den brukes til å definere og manipulere produktdata og tilhørende " "informasjon i en applikasjon." -#: core/models.py:476 +#: core/models.py:464 msgid "category this product belongs to" msgstr "Kategori dette produktet tilhører" -#: core/models.py:485 +#: core/models.py:473 msgid "optionally associate this product with a brand" msgstr "Du kan eventuelt knytte dette produktet til et varemerke" -#: core/models.py:491 +#: core/models.py:479 msgid "tags that help describe or group this product" msgstr "Tagger som bidrar til å beskrive eller gruppere dette produktet" -#: core/models.py:496 +#: core/models.py:484 msgid "indicates whether this product is digitally delivered" msgstr "Angir om dette produktet leveres digitalt" -#: core/models.py:497 +#: core/models.py:485 msgid "is product digital" msgstr "Er produktet digitalt" -#: core/models.py:503 +#: core/models.py:491 msgid "provide a clear identifying name for the product" msgstr "Gi produktet et tydelig navn som identifiserer det" -#: core/models.py:504 +#: core/models.py:492 msgid "product name" msgstr "Produktnavn" -#: core/models.py:509 core/models.py:831 +#: core/models.py:497 core/models.py:772 msgid "add a detailed description of the product" msgstr "Legg til en detaljert beskrivelse av produktet" -#: core/models.py:510 +#: core/models.py:498 msgid "product description" msgstr "Produktbeskrivelse" -#: core/models.py:517 +#: core/models.py:505 msgid "part number for this product" msgstr "Delenummer for dette produktet" -#: core/models.py:518 +#: core/models.py:506 msgid "part number" msgstr "Delenummer" -#: core/models.py:537 +#: core/models.py:525 msgid "stock keeping unit for this product" msgstr "Lagerholdsenhet for dette produktet" -#: core/models.py:607 +#: core/models.py:599 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 " @@ -1735,292 +1713,398 @@ msgstr "" "float, boolsk, matrise og objekt. Dette gir mulighet for dynamisk og " "fleksibel datastrukturering." -#: core/models.py:619 +#: core/models.py:611 msgid "category of this attribute" msgstr "Kategori for dette attributtet" -#: core/models.py:627 +#: core/models.py:619 msgid "group of this attribute" msgstr "Gruppe av dette attributtet" -#: core/models.py:633 +#: core/models.py:625 msgid "string" msgstr "Streng" -#: core/models.py:634 +#: core/models.py:626 msgid "integer" msgstr "Heltall" -#: core/models.py:635 +#: core/models.py:627 msgid "float" msgstr "Flyter" -#: core/models.py:636 +#: core/models.py:628 msgid "boolean" msgstr "Boolsk" -#: core/models.py:637 +#: core/models.py:629 msgid "array" msgstr "Array" -#: core/models.py:638 +#: core/models.py:630 msgid "object" msgstr "Objekt" -#: core/models.py:640 +#: core/models.py:632 msgid "type of the attribute's value" msgstr "Type av attributtets verdi" -#: core/models.py:641 +#: core/models.py:633 msgid "value type" msgstr "Verditype" -#: core/models.py:646 +#: core/models.py:638 msgid "name of this attribute" msgstr "Navn på dette attributtet" -#: core/models.py:647 +#: core/models.py:639 msgid "attribute's name" msgstr "Attributtets navn" -#: core/models.py:653 +#: core/models.py:645 msgid "is filterable" msgstr "er filtrerbar" -#: core/models.py:654 +#: core/models.py:646 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:665 core/models.py:700 +#: core/models.py:657 core/models.py:675 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attributt" -#: core/models.py:699 +#: core/models.py:663 +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 "" +"Representerer en spesifikk verdi for et attributt som er knyttet til et " +"produkt. Den knytter \"attributtet\" til en unik \"verdi\", noe som gir " +"bedre organisering og dynamisk representasjon av produktegenskaper." + +#: core/models.py:674 msgid "attribute of this value" msgstr "Attributt for denne verdien" -#: core/models.py:707 +#: core/models.py:682 msgid "the specific product associated with this attribute's value" msgstr "Det spesifikke produktet som er knyttet til dette attributtets verdi" -#: core/models.py:713 +#: core/models.py:688 msgid "the specific value for this attribute" msgstr "Den spesifikke verdien for dette attributtet" -#: core/models.py:747 +#: core/models.py:701 +msgid "" +"Represents a product image associated with a product in the system. This " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " +"determining their display order. It also includes an accessibility feature " +"with alternative text for the images." +msgstr "" +"Representerer et produktbilde som er knyttet til et produkt i systemet. " +"Denne klassen er utviklet for å administrere bilder for produkter, inkludert" +" funksjonalitet for å laste opp bildefiler, knytte dem til spesifikke " +"produkter og bestemme visningsrekkefølgen. Den inneholder også en " +"tilgjengelighetsfunksjon med alternativ tekst for bildene." + +#: core/models.py:712 msgid "provide alternative text for the image for accessibility" msgstr "Gi alternativ tekst til bildet for tilgjengelighet" -#: core/models.py:748 +#: core/models.py:713 msgid "image alt text" msgstr "Alt-tekst til bilder" -#: core/models.py:751 +#: core/models.py:716 msgid "upload the image file for this product" msgstr "Last opp bildefilen for dette produktet" -#: core/models.py:752 core/models.py:777 +#: core/models.py:717 core/models.py:742 msgid "product image" msgstr "Produktbilde" -#: core/models.py:758 +#: core/models.py:723 msgid "determines the order in which images are displayed" msgstr "Bestemmer rekkefølgen bildene skal vises i" -#: core/models.py:759 +#: core/models.py:724 msgid "display priority" msgstr "Prioritet på skjermen" -#: core/models.py:764 +#: core/models.py:729 msgid "the product that this image represents" msgstr "Produktet som dette bildet representerer" -#: core/models.py:778 +#: core/models.py:743 msgid "product images" msgstr "Produktbilder" -#: core/models.py:819 +#: core/models.py:748 +msgid "" +"Represents a promotional campaign for products with a discount. This class " +"is used to define and manage promotional campaigns that offer a percentage-" +"based discount for products. The class includes attributes for setting the " +"discount rate, providing details about the promotion, and linking it to the " +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." +msgstr "" +"Representerer en kampanje for produkter med rabatt. Denne klassen brukes til" +" å definere og administrere kampanjekampanjer som tilbyr en prosentbasert " +"rabatt for produkter. Klassen inneholder attributter for å angi " +"rabattsatsen, gi detaljer om kampanjen og knytte den til de aktuelle " +"produktene. Den integreres med produktkatalogen for å finne de berørte " +"varene i kampanjen." + +#: core/models.py:760 msgid "percentage discount for the selected products" msgstr "Prosentvis rabatt for de valgte produktene" -#: core/models.py:820 +#: core/models.py:761 msgid "discount percentage" msgstr "Rabattprosent" -#: core/models.py:825 +#: core/models.py:766 msgid "provide a unique name for this promotion" msgstr "Oppgi et unikt navn for denne kampanjen" -#: core/models.py:826 +#: core/models.py:767 msgid "promotion name" msgstr "Navn på kampanjen" -#: core/models.py:832 +#: core/models.py:773 msgid "promotion description" msgstr "Beskrivelse av kampanjen" -#: core/models.py:837 +#: core/models.py:778 msgid "select which products are included in this promotion" msgstr "Velg hvilke produkter som er inkludert i denne kampanjen" -#: core/models.py:838 +#: core/models.py:779 msgid "included products" msgstr "Inkluderte produkter" -#: core/models.py:842 +#: core/models.py:783 msgid "promotion" msgstr "Markedsføring" -#: core/models.py:867 +#: core/models.py:794 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"class provides functionality to manage a collection of products, supporting " +"operations such as adding and removing products, as well as supporting " +"operations for adding and removing multiple products at once." +msgstr "" +"Representerer en brukers ønskeliste for lagring og administrasjon av ønskede" +" produkter. Klassen tilbyr funksjonalitet for å administrere en samling " +"produkter, og støtter operasjoner som å legge til og fjerne produkter, samt " +"operasjoner for å legge til og fjerne flere produkter samtidig." + +#: core/models.py:806 msgid "products that the user has marked as wanted" msgstr "Produkter som brukeren har merket som ønsket" -#: core/models.py:875 +#: core/models.py:814 msgid "user who owns this wishlist" msgstr "Bruker som eier denne ønskelisten" -#: core/models.py:876 +#: core/models.py:815 msgid "wishlist owner" msgstr "Ønskelistens eier" -#: core/models.py:884 +#: core/models.py:823 msgid "wishlist" msgstr "Ønskeliste" -#: core/models.py:951 +#: core/models.py:865 +msgid "" +"Represents a documentary record tied to a product. This class is used to " +"store information about documentaries related to specific products, " +"including file uploads and their metadata. It contains methods and " +"properties to handle the file type and storage path for the documentary " +"files. It extends functionality from specific mixins and provides additional" +" custom features." +msgstr "" +"Representerer en dokumentarpost knyttet til et produkt. Denne klassen brukes" +" til å lagre informasjon om dokumentarer knyttet til bestemte produkter, " +"inkludert filopplastinger og metadata for disse. Den inneholder metoder og " +"egenskaper for å håndtere filtype og lagringsbane for dokumentarfilene. Den " +"utvider funksjonaliteten fra spesifikke mixins og tilbyr flere tilpassede " +"funksjoner." + +#: core/models.py:878 msgid "documentary" msgstr "Dokumentarfilm" -#: core/models.py:952 +#: core/models.py:879 msgid "documentaries" msgstr "Dokumentarfilmer" -#: core/models.py:962 +#: core/models.py:889 msgid "unresolved" msgstr "Uavklart" -#: core/models.py:1008 +#: core/models.py:894 +msgid "" +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." +msgstr "" +"Representerer en adresseenhet som inneholder stedsdetaljer og assosiasjoner " +"til en bruker. Tilbyr funksjonalitet for lagring av geografiske data og " +"adressedata, samt integrering med geokodingstjenester. Denne klassen er " +"utformet for å lagre detaljert adresseinformasjon, inkludert komponenter som" +" gate, by, region, land og geolokalisering (lengde- og breddegrad). Den " +"støtter integrasjon med API-er for geokoding, og gjør det mulig å lagre rå " +"API-svar for videre behandling eller inspeksjon. Klassen gjør det også mulig" +" å knytte en adresse til en bruker, noe som gjør det enklere å tilpasse " +"datahåndteringen." + +#: core/models.py:909 msgid "address line for the customer" msgstr "Adresselinje for kunden" -#: core/models.py:1009 +#: core/models.py:910 msgid "address line" msgstr "Adresselinje" -#: core/models.py:1011 +#: core/models.py:912 msgid "street" msgstr "Gate" -#: core/models.py:1012 +#: core/models.py:913 msgid "district" msgstr "Distrikt" -#: core/models.py:1013 +#: core/models.py:914 msgid "city" msgstr "By" -#: core/models.py:1014 +#: core/models.py:915 msgid "region" msgstr "Region" -#: core/models.py:1015 +#: core/models.py:916 msgid "postal code" msgstr "Postnummer" -#: core/models.py:1016 +#: core/models.py:917 msgid "country" msgstr "Land" -#: core/models.py:1023 +#: core/models.py:924 msgid "geolocation point: (longitude, latitude)" msgstr "Geolokaliseringspunkt(lengdegrad, breddegrad)" -#: core/models.py:1026 +#: core/models.py:927 msgid "full JSON response from geocoder for this address" msgstr "Fullstendig JSON-svar fra geokoderen for denne adressen" -#: core/models.py:1031 +#: core/models.py:932 msgid "stored JSON response from the geocoding service" msgstr "Lagret JSON-svar fra geokodingstjenesten" -#: core/models.py:1039 +#: core/models.py:940 msgid "address" msgstr "Adresse" -#: core/models.py:1040 +#: core/models.py:941 msgid "addresses" msgstr "Adresser" -#: core/models.py:1085 +#: core/models.py:953 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" +"Representerer en kampanjekode som kan brukes til rabatter, og styrer dens " +"gyldighet, rabattype og anvendelse. PromoCode-klassen lagrer informasjon om " +"en kampanjekode, inkludert dens unike identifikator, rabattegenskaper (beløp" +" eller prosent), gyldighetsperiode, tilknyttet bruker (hvis noen) og status " +"for bruken av den. Den inneholder funksjonalitet for å validere og bruke " +"kampanjekoden på en bestilling, samtidig som den sikrer at begrensningene er" +" oppfylt." + +#: core/models.py:967 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:1086 +#: core/models.py:968 msgid "promo code identifier" msgstr "Kampanjekode-identifikator" -#: core/models.py:1093 +#: core/models.py:975 msgid "fixed discount amount applied if percent is not used" msgstr "Fast rabattbeløp som brukes hvis prosent ikke brukes" -#: core/models.py:1094 +#: core/models.py:976 msgid "fixed discount amount" msgstr "Fast rabattbeløp" -#: core/models.py:1100 +#: core/models.py:982 msgid "percentage discount applied if fixed amount is not used" msgstr "Prosentvis rabatt hvis fast beløp ikke brukes" -#: core/models.py:1101 +#: core/models.py:983 msgid "percentage discount" msgstr "Prosentvis rabatt" -#: core/models.py:1106 +#: core/models.py:988 msgid "timestamp when the promocode expires" msgstr "Tidsstempel for når kampanjekoden utløper" -#: core/models.py:1107 +#: core/models.py:989 msgid "end validity time" msgstr "Slutt gyldighetstid" -#: core/models.py:1112 +#: core/models.py:994 msgid "timestamp from which this promocode is valid" msgstr "Tidsstempel som denne kampanjekoden er gyldig fra" -#: core/models.py:1113 +#: core/models.py:995 msgid "start validity time" msgstr "Start gyldighetstid" -#: core/models.py:1118 +#: core/models.py:1000 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:1119 +#: core/models.py:1001 msgid "usage timestamp" msgstr "Tidsstempel for bruk" -#: core/models.py:1124 +#: core/models.py:1006 msgid "user assigned to this promocode if applicable" msgstr "Bruker som er tilordnet denne kampanjekoden, hvis aktuelt" -#: core/models.py:1125 +#: core/models.py:1007 msgid "assigned user" msgstr "Tilordnet bruker" -#: core/models.py:1132 +#: core/models.py:1014 msgid "promo code" msgstr "Kampanjekode" -#: core/models.py:1133 +#: core/models.py:1015 msgid "promo codes" msgstr "Kampanjekoder" -#: core/models.py:1140 +#: core/models.py:1022 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2028,16 +2112,16 @@ msgstr "" "Bare én type rabatt skal defineres (beløp eller prosent), men ikke begge " "eller ingen av delene." -#: core/models.py:1155 +#: core/models.py:1037 msgid "promocode already used" msgstr "Promokoden har allerede blitt brukt" -#: core/models.py:1171 +#: core/models.py:1053 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Ugyldig rabattype for kampanjekode {self.uuid}!" -#: core/models.py:1180 +#: core/models.py:1062 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 " @@ -2054,140 +2138,140 @@ msgstr "" "kan oppdateres. På samme måte støtter funksjonaliteten håndtering av " "produktene i bestillingens livssyklus." -#: core/models.py:1197 +#: core/models.py:1079 msgid "the billing address used for this order" msgstr "Faktureringsadressen som brukes for denne bestillingen" -#: core/models.py:1205 +#: core/models.py:1087 msgid "optional promo code applied to this order" msgstr "Valgfri kampanjekode brukt på denne bestillingen" -#: core/models.py:1206 +#: core/models.py:1088 msgid "applied promo code" msgstr "Anvendt kampanjekode" -#: core/models.py:1214 +#: core/models.py:1096 msgid "the shipping address used for this order" msgstr "Leveringsadressen som brukes for denne bestillingen" -#: core/models.py:1215 +#: core/models.py:1097 msgid "shipping address" msgstr "Leveringsadresse" -#: core/models.py:1221 +#: core/models.py:1103 msgid "current status of the order in its lifecycle" msgstr "Ordrens nåværende status i livssyklusen" -#: core/models.py:1222 +#: core/models.py:1104 msgid "order status" msgstr "Order status" -#: core/models.py:1227 core/models.py:1686 +#: core/models.py:1109 core/models.py:1560 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:1233 +#: core/models.py:1115 msgid "json representation of order attributes for this order" msgstr "JSON-representasjon av ordreattributter for denne ordren" -#: core/models.py:1239 +#: core/models.py:1121 msgid "the user who placed the order" msgstr "Brukeren som har lagt inn bestillingen" -#: core/models.py:1240 +#: core/models.py:1122 msgid "user" msgstr "Bruker" -#: core/models.py:1246 +#: core/models.py:1128 msgid "the timestamp when the order was finalized" msgstr "Tidsstempel for når bestillingen ble fullført" -#: core/models.py:1247 +#: core/models.py:1129 msgid "buy time" msgstr "Kjøp tid" -#: core/models.py:1254 +#: core/models.py:1136 msgid "a human-readable identifier for the order" msgstr "En menneskelig lesbar identifikator for bestillingen" -#: core/models.py:1255 +#: core/models.py:1137 msgid "human readable id" msgstr "ID som kan leses av mennesker" -#: core/models.py:1261 +#: core/models.py:1143 msgid "order" msgstr "Bestilling" -#: core/models.py:1282 +#: core/models.py:1168 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:1316 +#: core/models.py:1202 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:1321 +#: core/models.py:1207 msgid "you cannot add inactive products to order" msgstr "Du kan ikke legge til inaktive produkter i bestillingen" -#: core/models.py:1338 +#: core/models.py:1224 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:1360 core/models.py:1385 core/models.py:1393 +#: core/models.py:1246 core/models.py:1271 core/models.py:1279 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:1381 +#: core/models.py:1267 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} finnes ikke med spørring <{query}>!" -#: core/models.py:1413 +#: core/models.py:1299 msgid "promocode does not exist" msgstr "Promokoden finnes ikke" -#: core/models.py:1419 +#: core/models.py:1305 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:1438 +#: core/models.py:1324 msgid "address does not exist" msgstr "Adressen eksisterer ikke" -#: core/models.py:1459 core/models.py:1528 +#: core/models.py:1345 core/models.py:1414 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:1462 core/models.py:1524 +#: core/models.py:1348 core/models.py:1410 msgid "invalid force value" msgstr "Ugyldig kraftverdi" -#: core/models.py:1468 core/models.py:1531 +#: core/models.py:1354 core/models.py:1417 msgid "you cannot purchase an empty order!" msgstr "Du kan ikke kjøpe en tom ordre!" -#: core/models.py:1487 +#: core/models.py:1373 msgid "you cannot buy an order without a user" msgstr "Du kan ikke kjøpe en ordre uten en bruker!" -#: core/models.py:1501 +#: core/models.py:1387 msgid "a user without a balance cannot buy with balance" msgstr "En bruker uten saldo kan ikke kjøpe med saldo!" -#: core/models.py:1506 +#: core/models.py:1392 msgid "insufficient funds to complete the order" msgstr "Utilstrekkelige midler til å fullføre bestillingen" -#: core/models.py:1540 +#: core/models.py:1426 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2195,153 +2279,208 @@ msgstr "" "du kan ikke kjøpe uten registrering, vennligst oppgi følgende informasjon: " "kundenavn, kundens e-postadresse, kundens telefonnummer" -#: core/models.py:1549 +#: core/models.py:1435 #, 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:1674 +#: core/models.py:1533 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" +"Representerer produkter som er knyttet til bestillinger og deres " +"attributter. OrderProduct-modellen inneholder informasjon om et produkt som " +"er en del av en bestilling, inkludert detaljer som innkjøpspris, antall, " +"produktattributter og status. Den håndterer varslinger til brukeren og " +"administratorer, og håndterer operasjoner som å returnere produktsaldoen " +"eller legge til tilbakemeldinger. Modellen inneholder også metoder og " +"egenskaper som støtter forretningslogikk, for eksempel beregning av " +"totalpris eller generering av en nedlastings-URL for digitale produkter. " +"Modellen integreres med Order- og Product-modellene og lagrer en referanse " +"til disse." + +#: core/models.py:1548 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:1675 +#: core/models.py:1549 msgid "purchase price at order time" msgstr "Innkjøpspris på bestillingstidspunktet" -#: core/models.py:1680 +#: core/models.py:1554 msgid "internal comments for admins about this ordered product" msgstr "Interne kommentarer for administratorer om dette bestilte produktet" -#: core/models.py:1681 +#: core/models.py:1555 msgid "internal comments" msgstr "Interne kommentarer" -#: core/models.py:1687 +#: core/models.py:1561 msgid "user notifications" msgstr "Brukervarsler" -#: core/models.py:1692 +#: core/models.py:1566 msgid "json representation of this item's attributes" msgstr "JSON-representasjon av dette elementets attributter" -#: core/models.py:1693 +#: core/models.py:1567 msgid "ordered product attributes" msgstr "Bestilte produktegenskaper" -#: core/models.py:1698 +#: core/models.py:1572 msgid "reference to the parent order that contains this product" msgstr "" "Referanse til den overordnede bestillingen som inneholder dette produktet" -#: core/models.py:1699 +#: core/models.py:1573 msgid "parent order" msgstr "Overordnet ordre" -#: core/models.py:1708 +#: core/models.py:1582 msgid "the specific product associated with this order line" msgstr "Det spesifikke produktet som er knyttet til denne ordrelinjen" -#: core/models.py:1715 +#: core/models.py:1589 msgid "quantity of this specific product in the order" msgstr "Antall av dette spesifikke produktet i bestillingen" -#: core/models.py:1716 +#: core/models.py:1590 msgid "product quantity" msgstr "Produktmengde" -#: core/models.py:1723 +#: core/models.py:1597 msgid "current status of this product in the order" msgstr "Nåværende status for dette produktet i bestillingen" -#: core/models.py:1724 +#: core/models.py:1598 msgid "product line status" msgstr "Status for produktlinjen" -#: core/models.py:1784 +#: core/models.py:1661 msgid "order product must have an order" msgstr "Orderproduct må ha en tilknyttet ordre!" -#: core/models.py:1786 +#: core/models.py:1663 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Feil handling angitt for tilbakemelding: {action}!" -#: core/models.py:1800 +#: core/models.py:1677 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:1806 +#: core/models.py:1683 msgid "name" msgstr "Navn" -#: core/models.py:1807 +#: core/models.py:1684 msgid "URL of the integration" msgstr "URL-adressen til integrasjonen" -#: core/models.py:1808 +#: core/models.py:1685 msgid "authentication credentials" msgstr "Legitimasjon for autentisering" -#: core/models.py:1822 +#: core/models.py:1699 msgid "you can only have one default CRM provider" msgstr "Du kan bare ha én standard CRM-leverandør" -#: core/models.py:1826 +#: core/models.py:1703 msgid "CRM" msgstr "CRM" -#: core/models.py:1827 +#: core/models.py:1704 msgid "CRMs" msgstr "CRM" -#: core/models.py:1839 +#: core/models.py:1716 msgid "order CRM link" msgstr "Ordre CRM-kobling" -#: core/models.py:1840 +#: core/models.py:1717 msgid "orders CRM links" msgstr "CRM-koblinger for bestillinger" -#: core/models.py:1874 +#: core/models.py:1722 +msgid "" +"Represents the downloading functionality for digital assets associated with " +"orders. The DigitalAssetDownload class provides the ability to manage and " +"access downloads related to order products. It maintains information about " +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." +msgstr "" +"Representerer nedlastingsfunksjonaliteten for digitale ressurser knyttet til" +" bestillinger. DigitalAssetDownload-klassen gir mulighet til å administrere " +"og få tilgang til nedlastinger knyttet til bestillingsprodukter. Den " +"inneholder informasjon om det tilknyttede bestillingsproduktet, antall " +"nedlastinger og om ressursen er offentlig synlig. Den inneholder en metode " +"for å generere en URL for nedlasting av ressursen når den tilknyttede " +"bestillingen har status som fullført." + +#: core/models.py:1736 msgid "download" msgstr "Last ned" -#: core/models.py:1875 +#: core/models.py:1737 msgid "downloads" msgstr "Nedlastinger" -#: core/models.py:1883 +#: core/models.py:1745 msgid "you can not download a digital asset for a non-finished order" msgstr "" "Du kan ikke laste ned en digital ressurs for en bestilling som ikke er " "fullført" -#: core/models.py:1913 +#: core/models.py:1754 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." +msgstr "" +"Håndterer brukernes tilbakemeldinger på produkter. Denne klassen er utformet" +" for å fange opp og lagre tilbakemeldinger fra brukerne om spesifikke " +"produkter de har kjøpt. Den inneholder attributter for å lagre " +"brukerkommentarer, en referanse til det relaterte produktet i bestillingen " +"og en brukertildelt vurdering. Klassen bruker databasefelt for å modellere " +"og administrere tilbakemeldingsdata på en effektiv måte." + +#: core/models.py:1766 msgid "user-provided comments about their experience with the product" msgstr "Brukerkommentarer om deres erfaringer med produktet" -#: core/models.py:1914 +#: core/models.py:1767 msgid "feedback comments" msgstr "Tilbakemeldinger og kommentarer" -#: core/models.py:1921 +#: core/models.py:1774 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:1922 +#: core/models.py:1775 msgid "related order product" msgstr "Relatert bestillingsprodukt" -#: core/models.py:1927 +#: core/models.py:1780 msgid "user-assigned rating for the product" msgstr "Brukertildelt vurdering for produktet" -#: core/models.py:1928 +#: core/models.py:1781 msgid "product rating" msgstr "Produktvurdering" @@ -2560,17 +2699,17 @@ msgstr "Ugyldig tidsavbruddsverdi, den må være mellom 0 og 216000 sekunder" msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | kontakt oss initiert" -#: core/utils/emailing.py:64 +#: core/utils/emailing.py:74 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Ordrebekreftelse" -#: core/utils/emailing.py:99 +#: core/utils/emailing.py:109 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Bestilling levert" -#: core/utils/emailing.py:187 +#: core/utils/emailing.py:197 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | promokode gitt" @@ -2593,15 +2732,15 @@ msgstr "" msgid "invalid phone number format" msgstr "Ugyldig telefonnummerformat" -#: core/views.py:481 +#: core/views.py:489 msgid "you can only download the digital asset once" msgstr "Du kan bare laste ned den digitale ressursen én gang" -#: core/views.py:539 +#: core/views.py:547 msgid "favicon not found" msgstr "favicon ble ikke funnet" -#: core/viewsets.py:1319 +#: core/viewsets.py:1357 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Feil i geokoding: {e}" diff --git a/core/locale/pl_PL/LC_MESSAGES/django.mo b/core/locale/pl_PL/LC_MESSAGES/django.mo index 342a2faa850d9c65db6087c73a606117ee0cdf60..e8d4c515b12585834900cf27fe745ec6ca1d75f2 100644 GIT binary patch delta 20778 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�oY>>&3%v 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 delta 12657 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -90,11 +90,11 @@ msgid "selected items have been deactivated." msgstr "Wybrane elementy zostały dezaktywowane!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:712 core/models.py:720 +#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 msgid "attribute value" msgstr "Wartość atrybutu" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:721 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 msgid "attribute values" msgstr "Wartości atrybutów" @@ -106,7 +106,7 @@ msgstr "Obraz" msgid "images" msgstr "Obrazy" -#: core/admin.py:155 core/models.py:457 +#: core/admin.py:155 core/models.py:445 msgid "stock" msgstr "Stan magazynowy" @@ -114,11 +114,11 @@ msgstr "Stan magazynowy" msgid "stocks" msgstr "Akcje" -#: core/admin.py:166 core/models.py:1735 +#: core/admin.py:166 core/models.py:1609 msgid "order product" msgstr "Zamów produkt" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1736 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 msgid "order products" msgstr "Zamawianie produktów" @@ -333,7 +333,7 @@ msgstr "" "Przepisz niektóre pola istniejącej kategorii, zapisując elementy " "nieedytowalne" -#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:553 +#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:487 #: core/graphene/object_types.py:117 core/graphene/object_types.py:207 #: core/graphene/object_types.py:509 msgid "SEO Meta snapshot" @@ -607,47 +607,7 @@ msgstr "Lista wszystkich produktów (widok prosty)" msgid "(exact) Product UUID" msgstr "(dokładny) UUID produktu" -#: core/docs/drf/viewsets.py:384 -msgid "(icontains) Product name" -msgstr "(ikony) Nazwa produktu" - -#: core/docs/drf/viewsets.py:390 -msgid "(list) Category names, case-insensitive" -msgstr "(lista) Nazwy kategorii, wielkość liter nie ma znaczenia" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Category UUID" -msgstr "(dokładny) UUID kategorii" - -#: core/docs/drf/viewsets.py:402 -msgid "(list) Tag names, case-insensitive" -msgstr "(lista) Nazwy tagów, wielkość liter nie ma znaczenia" - -#: core/docs/drf/viewsets.py:408 -msgid "(gte) Minimum stock price" -msgstr "(gte) Minimalna cena akcji" - -#: core/docs/drf/viewsets.py:414 -msgid "(lte) Maximum stock price" -msgstr "(lte) Maksymalna cena akcji" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Only active products" -msgstr "(dokładnie) Tylko aktywne produkty" - -#: core/docs/drf/viewsets.py:426 -msgid "(iexact) Brand name" -msgstr "(iexact) Nazwa marki" - -#: core/docs/drf/viewsets.py:438 -msgid "(gt) Minimum stock quantity" -msgstr "(gt) Minimalna ilość zapasów" - -#: core/docs/drf/viewsets.py:444 -msgid "(exact) Digital vs. physical" -msgstr "(dokładnie) Cyfrowe vs. fizyczne" - -#: core/docs/drf/viewsets.py:451 +#: core/docs/drf/viewsets.py:385 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -655,252 +615,256 @@ 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:465 core/docs/drf/viewsets.py:466 +#: core/docs/drf/viewsets.py:399 core/docs/drf/viewsets.py:400 msgid "retrieve a single product (detailed view)" msgstr "Pobieranie pojedynczego produktu (widok szczegółowy)" -#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:495 -#: core/docs/drf/viewsets.py:511 core/docs/drf/viewsets.py:527 -#: core/docs/drf/viewsets.py:543 core/docs/drf/viewsets.py:559 +#: core/docs/drf/viewsets.py:405 core/docs/drf/viewsets.py:429 +#: core/docs/drf/viewsets.py:445 core/docs/drf/viewsets.py:461 +#: core/docs/drf/viewsets.py:477 core/docs/drf/viewsets.py:493 msgid "Product UUID or slug" msgstr "UUID produktu lub Slug" -#: core/docs/drf/viewsets.py:481 core/docs/drf/viewsets.py:482 +#: core/docs/drf/viewsets.py:415 core/docs/drf/viewsets.py:416 msgid "create a product" msgstr "Tworzenie produktu" -#: core/docs/drf/viewsets.py:489 core/docs/drf/viewsets.py:490 +#: core/docs/drf/viewsets.py:423 core/docs/drf/viewsets.py:424 msgid "rewrite an existing product, preserving non-editable fields" msgstr "Przepisz istniejący produkt, zachowując nieedytowalne pola" -#: core/docs/drf/viewsets.py:505 core/docs/drf/viewsets.py:506 +#: core/docs/drf/viewsets.py:439 core/docs/drf/viewsets.py:440 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:521 core/docs/drf/viewsets.py:522 +#: core/docs/drf/viewsets.py:455 core/docs/drf/viewsets.py:456 msgid "delete a product" msgstr "Usuń produkt" -#: core/docs/drf/viewsets.py:537 core/docs/drf/viewsets.py:538 +#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:472 msgid "lists all permitted feedbacks for a product" msgstr "wyświetla wszystkie dozwolone informacje zwrotne dotyczące produktu" -#: core/docs/drf/viewsets.py:554 +#: core/docs/drf/viewsets.py:488 msgid "returns a snapshot of the product's SEO meta data" msgstr "Zwraca migawkę metadanych SEO produktu." -#: core/docs/drf/viewsets.py:572 +#: core/docs/drf/viewsets.py:506 msgid "list all addresses" msgstr "Lista wszystkich adresów" -#: core/docs/drf/viewsets.py:579 +#: core/docs/drf/viewsets.py:513 msgid "retrieve a single address" msgstr "Pobieranie pojedynczego adresu" -#: core/docs/drf/viewsets.py:586 +#: core/docs/drf/viewsets.py:520 msgid "create a new address" msgstr "Utwórz nowy adres" -#: core/docs/drf/viewsets.py:594 +#: core/docs/drf/viewsets.py:528 msgid "delete an address" msgstr "Usuwanie adresu" -#: core/docs/drf/viewsets.py:601 +#: core/docs/drf/viewsets.py:535 msgid "update an entire address" msgstr "Aktualizacja całego adresu" -#: core/docs/drf/viewsets.py:609 +#: core/docs/drf/viewsets.py:543 msgid "partially update an address" msgstr "Częściowa aktualizacja adresu" -#: core/docs/drf/viewsets.py:617 +#: core/docs/drf/viewsets.py:551 msgid "autocomplete address suggestions" msgstr "Wprowadzanie adresu w trybie autouzupełniania" -#: core/docs/drf/viewsets.py:622 +#: core/docs/drf/viewsets.py:556 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:628 +#: core/docs/drf/viewsets.py:562 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:641 +#: core/docs/drf/viewsets.py:575 msgid "list all feedbacks (simple view)" msgstr "lista wszystkich opinii (widok prosty)" -#: core/docs/drf/viewsets.py:645 +#: core/docs/drf/viewsets.py:579 msgid "retrieve a single feedback (detailed view)" msgstr "pobieranie pojedynczej informacji zwrotnej (widok szczegółowy)" -#: core/docs/drf/viewsets.py:649 +#: core/docs/drf/viewsets.py:583 msgid "create a feedback" msgstr "utworzyć informację zwrotną" -#: core/docs/drf/viewsets.py:653 +#: core/docs/drf/viewsets.py:587 msgid "delete a feedback" msgstr "usuwanie opinii" -#: core/docs/drf/viewsets.py:657 +#: core/docs/drf/viewsets.py:591 msgid "rewrite an existing feedback saving non-editables" msgstr "" "przepisanie istniejącej informacji zwrotnej z zachowaniem elementów " "nieedytowalnych" -#: core/docs/drf/viewsets.py:661 +#: core/docs/drf/viewsets.py:595 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:668 +#: core/docs/drf/viewsets.py:602 msgid "list all order–product relations (simple view)" msgstr "lista wszystkich relacji zamówienie-produkt (widok prosty)" -#: core/docs/drf/viewsets.py:675 +#: core/docs/drf/viewsets.py:609 msgid "retrieve a single order–product relation (detailed view)" msgstr "pobranie pojedynczej relacji zamówienie-produkt (widok szczegółowy)" -#: core/docs/drf/viewsets.py:682 +#: core/docs/drf/viewsets.py:616 msgid "create a new order–product relation" msgstr "utworzyć nową relację zamówienie-produkt" -#: core/docs/drf/viewsets.py:689 +#: core/docs/drf/viewsets.py:623 msgid "replace an existing order–product relation" msgstr "zastąpić istniejącą relację zamówienie-produkt" -#: core/docs/drf/viewsets.py:696 +#: core/docs/drf/viewsets.py:630 msgid "partially update an existing order–product relation" msgstr "częściowa aktualizacja istniejącej relacji zamówienie-produkt" -#: core/docs/drf/viewsets.py:703 +#: core/docs/drf/viewsets.py:637 msgid "delete an order–product relation" msgstr "usunąć relację zamówienie-produkt" -#: core/docs/drf/viewsets.py:710 +#: core/docs/drf/viewsets.py:644 msgid "add or remove feedback on an order–product relation" msgstr "dodawanie lub usuwanie opinii na temat relacji zamówienie-produkt" -#: core/elasticsearch/__init__.py:105 +#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 msgid "no search term provided." msgstr "Nie podano wyszukiwanego hasła." -#: core/filters.py:64 core/filters.py:594 core/filters.py:623 +#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +msgid "Search" +msgstr "Wyszukiwanie" + +#: core/filters.py:66 core/filters.py:554 core/filters.py:583 msgid "UUID" msgstr "UUID" -#: core/filters.py:65 core/filters.py:429 core/filters.py:560 +#: core/filters.py:67 core/filters.py:399 core/filters.py:526 msgid "Name" msgstr "Nazwa" -#: core/filters.py:66 core/filters.py:562 +#: core/filters.py:68 core/filters.py:528 msgid "Categories" msgstr "Kategorie" -#: core/filters.py:68 +#: core/filters.py:70 msgid "Categories Slugs" msgstr "Kategorie Ślimaki" -#: core/filters.py:69 core/filters.py:437 +#: core/filters.py:71 core/filters.py:407 msgid "Tags" msgstr "Tagi" -#: core/filters.py:70 +#: core/filters.py:72 msgid "Min Price" msgstr "Cena minimalna" -#: core/filters.py:71 +#: core/filters.py:73 msgid "Max Price" msgstr "Maksymalna cena" -#: core/filters.py:72 +#: core/filters.py:74 msgid "Is Active" msgstr "Jest aktywny" -#: core/filters.py:73 +#: core/filters.py:75 msgid "Brand" msgstr "Marka" -#: core/filters.py:74 +#: core/filters.py:76 msgid "Attributes" msgstr "Atrybuty" -#: core/filters.py:75 +#: core/filters.py:77 msgid "Quantity" msgstr "Ilość" -#: core/filters.py:76 core/filters.py:431 core/filters.py:561 -#: core/models.py:287 core/models.py:381 core/models.py:534 +#: core/filters.py:78 core/filters.py:401 core/filters.py:527 +#: core/models.py:287 core/models.py:369 core/models.py:522 msgid "Slug" msgstr "Ślimak" -#: core/filters.py:77 +#: core/filters.py:79 msgid "Is Digital" msgstr "Czy cyfrowy" -#: core/filters.py:78 +#: core/filters.py:80 msgid "Include sub-categories" msgstr "Uwzględnienie podkategorii" -#: core/filters.py:81 +#: core/filters.py:83 msgid "Include personal ordered" msgstr "Obejmuje produkty zamawiane osobiście" -#: core/filters.py:83 core/models.py:538 +#: core/filters.py:85 core/models.py:526 msgid "SKU" msgstr "SKU" -#: core/filters.py:166 +#: core/filters.py:161 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:356 +#: core/filters.py:324 msgid "Search (ID, product name or part number)" msgstr "Wyszukiwanie (ID, nazwa produktu lub numer części)" -#: core/filters.py:359 +#: core/filters.py:327 msgid "Bought after (inclusive)" msgstr "Kupione po (włącznie)" -#: core/filters.py:360 +#: core/filters.py:328 msgid "Bought before (inclusive)" msgstr "Kupione wcześniej (włącznie)" -#: core/filters.py:363 core/filters.py:410 core/filters.py:625 +#: core/filters.py:331 core/filters.py:378 core/filters.py:585 msgid "User email" msgstr "E-mail użytkownika" -#: core/filters.py:364 core/filters.py:411 core/filters.py:603 -#: core/filters.py:624 +#: core/filters.py:332 core/filters.py:379 core/filters.py:563 +#: core/filters.py:584 msgid "User UUID" msgstr "UUID użytkownika" -#: core/filters.py:365 +#: core/filters.py:333 msgid "Status" msgstr "Status" -#: core/filters.py:369 +#: core/filters.py:337 msgid "Human Readable ID" msgstr "Identyfikator czytelny dla człowieka" -#: core/filters.py:430 +#: core/filters.py:400 msgid "Parent" msgstr "Rodzic" -#: core/filters.py:434 +#: core/filters.py:404 msgid "Whole category(has at least 1 product or not)" msgstr "Cała kategoria (ma co najmniej 1 produkt lub nie)" -#: core/filters.py:438 +#: core/filters.py:408 msgid "Level" msgstr "Poziom" -#: core/filters.py:598 +#: core/filters.py:558 msgid "Product UUID" msgstr "UUID produktu" @@ -955,7 +919,7 @@ 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:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:821 +#: core/graphene/mutations.py:527 core/viewsets.py:839 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Nieprawidłowy typ pochodzi z metody order.buy(): {type(instance)!s}" @@ -1018,37 +982,37 @@ msgstr "" msgid "add or delete a feedback for orderproduct" msgstr "Dodawanie lub usuwanie opinii dla produktu zamówienia" -#: core/graphene/mutations.py:555 +#: core/graphene/mutations.py:556 msgid "action must be either `add` or `remove`" msgstr "Akcją musi być `add` lub `remove`!" -#: core/graphene/mutations.py:558 +#: core/graphene/mutations.py:559 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderproduct {order_product_uuid} nie został znaleziony!" -#: core/graphene/mutations.py:621 +#: core/graphene/mutations.py:622 msgid "original address string provided by the user" msgstr "Oryginalny ciąg adresu podany przez użytkownika" -#: core/graphene/mutations.py:655 core/models.py:896 core/models.py:909 -#: core/models.py:1348 core/models.py:1377 core/models.py:1402 -#: core/viewsets.py:824 +#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 +#: core/models.py:1234 core/models.py:1263 core/models.py:1288 +#: core/viewsets.py:842 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} nie istnieje: {uuid}!" -#: core/graphene/mutations.py:668 +#: core/graphene/mutations.py:669 msgid "limit must be between 1 and 10" msgstr "Limit musi wynosić od 1 do 10" -#: core/graphene/mutations.py:713 +#: core/graphene/mutations.py:714 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - działa jak urok" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:666 core/models.py:1234 -#: core/models.py:1809 +#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 +#: core/models.py:1686 msgid "attributes" msgstr "Atrybuty" @@ -1061,11 +1025,11 @@ 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:224 core/models.py:312 core/models.py:620 +#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:612 msgid "categories" msgstr "Kategorie" -#: core/graphene/object_types.py:124 core/models.py:395 +#: core/graphene/object_types.py:124 core/models.py:383 msgid "brands" msgstr "Marki" @@ -1122,7 +1086,7 @@ msgid "represents feedback from a user." msgstr "Reprezentuje informacje zwrotne od użytkownika." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1228 +#: core/models.py:1110 msgid "notifications" msgstr "Powiadomienia" @@ -1130,7 +1094,7 @@ msgstr "Powiadomienia" 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:400 core/models.py:1938 +#: core/graphene/object_types.py:400 core/models.py:1791 msgid "feedback" msgstr "Informacje zwrotne" @@ -1138,7 +1102,7 @@ msgstr "Informacje zwrotne" msgid "a list of order products in this order" msgstr "Lista zamówionych produktów w tym zamówieniu" -#: core/graphene/object_types.py:436 core/models.py:1198 +#: core/graphene/object_types.py:436 core/models.py:1080 msgid "billing address" msgstr "Adres rozliczeniowy" @@ -1166,7 +1130,7 @@ msgstr "Czy wszystkie produkty w zamówieniu są cyfrowe?" msgid "transactions for this order" msgstr "Transakcje dla tego zamówienia" -#: core/graphene/object_types.py:465 core/models.py:1262 +#: core/graphene/object_types.py:465 core/models.py:1144 msgid "orders" msgstr "Zamówienia" @@ -1178,15 +1142,15 @@ msgstr "Adres URL obrazu" msgid "product's images" msgstr "Zdjęcia produktu" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:477 +#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 msgid "category" msgstr "Kategoria" -#: core/graphene/object_types.py:502 core/models.py:1939 +#: core/graphene/object_types.py:502 core/models.py:1792 msgid "feedbacks" msgstr "Informacje zwrotne" -#: core/graphene/object_types.py:503 core/models.py:394 core/models.py:486 +#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 msgid "brand" msgstr "Marka" @@ -1218,7 +1182,7 @@ msgstr "Liczba informacji zwrotnych" msgid "only available for personal orders" msgstr "Produkty dostępne tylko dla zamówień osobistych" -#: core/graphene/object_types.py:534 core/models.py:548 +#: core/graphene/object_types.py:534 core/models.py:536 msgid "products" msgstr "Produkty" @@ -1230,7 +1194,7 @@ msgstr "Promocodes" msgid "products on sale" msgstr "Produkty w sprzedaży" -#: core/graphene/object_types.py:651 core/models.py:843 +#: core/graphene/object_types.py:651 core/models.py:784 msgid "promotions" msgstr "Promocje" @@ -1238,7 +1202,7 @@ msgstr "Promocje" msgid "vendor" msgstr "Sprzedawca" -#: core/graphene/object_types.py:656 core/models.py:547 +#: core/graphene/object_types.py:656 core/models.py:535 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1246,11 +1210,11 @@ msgstr "Sprzedawca" msgid "product" msgstr "Produkt" -#: core/graphene/object_types.py:667 core/models.py:868 +#: core/graphene/object_types.py:667 core/models.py:807 msgid "wishlisted products" msgstr "Produkty z listy życzeń" -#: core/graphene/object_types.py:673 core/models.py:885 +#: core/graphene/object_types.py:673 core/models.py:824 msgid "wishlists" msgstr "Listy życzeń" @@ -1258,7 +1222,7 @@ msgstr "Listy życzeń" msgid "tagged products" msgstr "Produkty Tagged" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:492 +#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 msgid "product tags" msgstr "Tagi produktu" @@ -1368,7 +1332,7 @@ msgstr "Grupa atrybutów nadrzędnych" msgid "attribute group's name" msgstr "Nazwa grupy atrybutów" -#: core/models.py:100 core/models.py:628 +#: core/models.py:100 core/models.py:620 msgid "attribute group" msgstr "Grupa atrybutów" @@ -1533,51 +1497,64 @@ msgstr "Opis kategorii" msgid "tags that help describe or group this category" msgstr "tagi, które pomagają opisać lub pogrupować tę kategorię" -#: core/models.py:299 core/models.py:387 +#: core/models.py:299 core/models.py:375 msgid "priority" msgstr "Priorytet" -#: core/models.py:340 +#: core/models.py:318 +msgid "" +"Represents a Brand object in the system. This class handles information and " +"attributes related to a brand, including its name, logos, description, " +"associated categories, a unique slug, and priority order. It allows for the " +"organization and representation of brand-related data within the " +"application." +msgstr "" +"Reprezentuje obiekt marki w systemie. Ta klasa obsługuje informacje i " +"atrybuty związane z marką, w tym jej nazwę, logo, opis, powiązane kategorie," +" unikalny slug i kolejność priorytetów. Pozwala na organizację i " +"reprezentację danych związanych z marką w aplikacji." + +#: core/models.py:328 msgid "name of this brand" msgstr "Nazwa tej marki" -#: core/models.py:341 +#: core/models.py:329 msgid "brand name" msgstr "Nazwa marki" -#: core/models.py:348 +#: core/models.py:336 msgid "upload a logo representing this brand" msgstr "Prześlij logo reprezentujące tę markę" -#: core/models.py:350 +#: core/models.py:338 msgid "brand small image" msgstr "Mały wizerunek marki" -#: core/models.py:356 +#: core/models.py:344 msgid "upload a big logo representing this brand" msgstr "Prześlij duże logo reprezentujące tę markę" -#: core/models.py:358 +#: core/models.py:346 msgid "brand big image" msgstr "Duży wizerunek marki" -#: core/models.py:363 +#: core/models.py:351 msgid "add a detailed description of the brand" msgstr "Dodaj szczegółowy opis marki" -#: core/models.py:364 +#: core/models.py:352 msgid "brand description" msgstr "Opis marki" -#: core/models.py:369 +#: core/models.py:357 msgid "optional categories that this brand is associated with" msgstr "Opcjonalne kategorie, z którymi powiązana jest ta marka" -#: core/models.py:370 +#: core/models.py:358 msgid "associated categories" msgstr "Kategorie" -#: core/models.py:400 +#: core/models.py:388 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1593,68 +1570,68 @@ 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:412 +#: core/models.py:400 msgid "the vendor supplying this product stock" msgstr "Sprzedawca dostarczający ten produkt" -#: core/models.py:413 +#: core/models.py:401 msgid "associated vendor" msgstr "Powiązany sprzedawca" -#: core/models.py:417 +#: core/models.py:405 msgid "final price to the customer after markups" msgstr "Ostateczna cena dla klienta po uwzględnieniu marży" -#: core/models.py:418 +#: core/models.py:406 msgid "selling price" msgstr "Cena sprzedaży" -#: core/models.py:423 +#: core/models.py:411 msgid "the product associated with this stock entry" msgstr "Produkt powiązany z tym wpisem magazynowym" -#: core/models.py:424 core/models.py:708 core/models.py:765 -#: core/models.py:1709 +#: core/models.py:412 core/models.py:683 core/models.py:730 +#: core/models.py:1583 msgid "associated product" msgstr "Produkt powiązany" -#: core/models.py:431 +#: core/models.py:419 msgid "the price paid to the vendor for this product" msgstr "Cena zapłacona sprzedawcy za ten produkt" -#: core/models.py:432 +#: core/models.py:420 msgid "vendor purchase price" msgstr "Cena zakupu przez sprzedawcę" -#: core/models.py:436 +#: core/models.py:424 msgid "available quantity of the product in stock" msgstr "Dostępna ilość produktu w magazynie" -#: core/models.py:437 +#: core/models.py:425 msgid "quantity in stock" msgstr "Ilość w magazynie" -#: core/models.py:441 +#: core/models.py:429 msgid "vendor-assigned SKU for identifying the product" msgstr "Jednostki SKU przypisane przez dostawcę w celu identyfikacji produktu" -#: core/models.py:442 +#: core/models.py:430 msgid "vendor sku" msgstr "SKU sprzedawcy" -#: core/models.py:448 +#: core/models.py:436 msgid "digital file associated with this stock if applicable" msgstr "Plik cyfrowy powiązany z tymi zapasami, jeśli dotyczy" -#: core/models.py:449 +#: core/models.py:437 msgid "digital file" msgstr "Plik cyfrowy" -#: core/models.py:458 +#: core/models.py:446 msgid "stock entries" msgstr "Zapisy magazynowe" -#: core/models.py:463 +#: core/models.py:451 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1675,55 +1652,55 @@ msgstr "" "definiowania i manipulowania danymi produktu i powiązanymi z nimi " "informacjami w aplikacji." -#: core/models.py:476 +#: core/models.py:464 msgid "category this product belongs to" msgstr "Kategoria, do której należy ten produkt" -#: core/models.py:485 +#: core/models.py:473 msgid "optionally associate this product with a brand" msgstr "Opcjonalnie można powiązać ten produkt z marką" -#: core/models.py:491 +#: core/models.py:479 msgid "tags that help describe or group this product" msgstr "Tagi, które pomagają opisać lub pogrupować ten produkt" -#: core/models.py:496 +#: core/models.py:484 msgid "indicates whether this product is digitally delivered" msgstr "Wskazuje, czy produkt jest dostarczany cyfrowo." -#: core/models.py:497 +#: core/models.py:485 msgid "is product digital" msgstr "Czy produkt jest cyfrowy?" -#: core/models.py:503 +#: core/models.py:491 msgid "provide a clear identifying name for the product" msgstr "Wyraźna nazwa identyfikująca produkt" -#: core/models.py:504 +#: core/models.py:492 msgid "product name" msgstr "Nazwa produktu" -#: core/models.py:509 core/models.py:831 +#: core/models.py:497 core/models.py:772 msgid "add a detailed description of the product" msgstr "Dodaj szczegółowy opis produktu" -#: core/models.py:510 +#: core/models.py:498 msgid "product description" msgstr "Opis produktu" -#: core/models.py:517 +#: core/models.py:505 msgid "part number for this product" msgstr "Numer części dla tego produktu" -#: core/models.py:518 +#: core/models.py:506 msgid "part number" msgstr "Numer części" -#: core/models.py:537 +#: core/models.py:525 msgid "stock keeping unit for this product" msgstr "Jednostka magazynowa dla tego produktu" -#: core/models.py:607 +#: core/models.py:599 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 " @@ -1739,292 +1716,399 @@ msgstr "" "string, integer, float, boolean, array i object. Pozwala to na dynamiczną i " "elastyczną strukturę danych." -#: core/models.py:619 +#: core/models.py:611 msgid "category of this attribute" msgstr "Kategoria tego atrybutu" -#: core/models.py:627 +#: core/models.py:619 msgid "group of this attribute" msgstr "Grupa tego atrybutu" -#: core/models.py:633 +#: core/models.py:625 msgid "string" msgstr "String" -#: core/models.py:634 +#: core/models.py:626 msgid "integer" msgstr "Integer" -#: core/models.py:635 +#: core/models.py:627 msgid "float" msgstr "Pływak" -#: core/models.py:636 +#: core/models.py:628 msgid "boolean" msgstr "Wartość logiczna" -#: core/models.py:637 +#: core/models.py:629 msgid "array" msgstr "Tablica" -#: core/models.py:638 +#: core/models.py:630 msgid "object" msgstr "Obiekt" -#: core/models.py:640 +#: core/models.py:632 msgid "type of the attribute's value" msgstr "Typ wartości atrybutu" -#: core/models.py:641 +#: core/models.py:633 msgid "value type" msgstr "Typ wartości" -#: core/models.py:646 +#: core/models.py:638 msgid "name of this attribute" msgstr "Nazwa tego atrybutu" -#: core/models.py:647 +#: core/models.py:639 msgid "attribute's name" msgstr "Nazwa atrybutu" -#: core/models.py:653 +#: core/models.py:645 msgid "is filterable" msgstr "można filtrować" -#: core/models.py:654 +#: core/models.py:646 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:665 core/models.py:700 +#: core/models.py:657 core/models.py:675 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Atrybut" -#: core/models.py:699 +#: core/models.py:663 +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 "" +"Reprezentuje określoną wartość atrybutu powiązanego z produktem. Łączy " +"\"atrybut\" z unikalną \"wartością\", umożliwiając lepszą organizację i " +"dynamiczną reprezentację cech produktu." + +#: core/models.py:674 msgid "attribute of this value" msgstr "Atrybut tej wartości" -#: core/models.py:707 +#: core/models.py:682 msgid "the specific product associated with this attribute's value" msgstr "Konkretny produkt powiązany z wartością tego atrybutu" -#: core/models.py:713 +#: core/models.py:688 msgid "the specific value for this attribute" msgstr "Konkretna wartość dla tego atrybutu" -#: core/models.py:747 +#: core/models.py:701 +msgid "" +"Represents a product image associated with a product in the system. This " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " +"determining their display order. It also includes an accessibility feature " +"with alternative text for the images." +msgstr "" +"Reprezentuje obraz produktu powiązany z produktem w systemie. Ta klasa jest " +"przeznaczona do zarządzania obrazami produktów, w tym funkcjonalnością " +"przesyłania plików graficznych, kojarzenia ich z określonymi produktami i " +"określania kolejności ich wyświetlania. Zawiera również funkcję dostępności " +"z tekstem alternatywnym dla obrazów." + +#: core/models.py:712 msgid "provide alternative text for the image for accessibility" msgstr "" "Zapewnienie alternatywnego tekstu dla obrazu w celu ułatwienia dostępu" -#: core/models.py:748 +#: core/models.py:713 msgid "image alt text" msgstr "Tekst alternatywny obrazu" -#: core/models.py:751 +#: core/models.py:716 msgid "upload the image file for this product" msgstr "Prześlij plik obrazu dla tego produktu" -#: core/models.py:752 core/models.py:777 +#: core/models.py:717 core/models.py:742 msgid "product image" msgstr "Obraz produktu" -#: core/models.py:758 +#: core/models.py:723 msgid "determines the order in which images are displayed" msgstr "Określa kolejność wyświetlania obrazów" -#: core/models.py:759 +#: core/models.py:724 msgid "display priority" msgstr "Priorytet wyświetlania" -#: core/models.py:764 +#: core/models.py:729 msgid "the product that this image represents" msgstr "Produkt, który przedstawia ten obraz" -#: core/models.py:778 +#: core/models.py:743 msgid "product images" msgstr "Zdjęcia produktów" -#: core/models.py:819 +#: core/models.py:748 +msgid "" +"Represents a promotional campaign for products with a discount. This class " +"is used to define and manage promotional campaigns that offer a percentage-" +"based discount for products. The class includes attributes for setting the " +"discount rate, providing details about the promotion, and linking it to the " +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." +msgstr "" +"Reprezentuje kampanię promocyjną dla produktów z rabatem. Ta klasa służy do " +"definiowania i zarządzania kampaniami promocyjnymi, które oferują procentowy" +" rabat na produkty. Klasa zawiera atrybuty do ustawiania stopy rabatu, " +"dostarczania szczegółów na temat promocji i łączenia jej z odpowiednimi " +"produktami. Integruje się z katalogiem produktów w celu określenia pozycji, " +"których dotyczy kampania." + +#: core/models.py:760 msgid "percentage discount for the selected products" msgstr "Rabat procentowy na wybrane produkty" -#: core/models.py:820 +#: core/models.py:761 msgid "discount percentage" msgstr "Procent rabatu" -#: core/models.py:825 +#: core/models.py:766 msgid "provide a unique name for this promotion" msgstr "Podaj unikalną nazwę tej promocji" -#: core/models.py:826 +#: core/models.py:767 msgid "promotion name" msgstr "Nazwa promocji" -#: core/models.py:832 +#: core/models.py:773 msgid "promotion description" msgstr "Opis promocji" -#: core/models.py:837 +#: core/models.py:778 msgid "select which products are included in this promotion" msgstr "Wybierz produkty objęte promocją" -#: core/models.py:838 +#: core/models.py:779 msgid "included products" msgstr "Dołączone produkty" -#: core/models.py:842 +#: core/models.py:783 msgid "promotion" msgstr "Promocja" -#: core/models.py:867 +#: core/models.py:794 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"class provides functionality to manage a collection of products, supporting " +"operations such as adding and removing products, as well as supporting " +"operations for adding and removing multiple products at once." +msgstr "" +"Reprezentuje listę życzeń użytkownika do przechowywania i zarządzania " +"pożądanymi produktami. Klasa zapewnia funkcjonalność do zarządzania kolekcją" +" 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:806 msgid "products that the user has marked as wanted" msgstr "Produkty, które użytkownik oznaczył jako poszukiwane" -#: core/models.py:875 +#: core/models.py:814 msgid "user who owns this wishlist" msgstr "Użytkownik posiadający tę listę życzeń" -#: core/models.py:876 +#: core/models.py:815 msgid "wishlist owner" msgstr "Właściciel listy życzeń" -#: core/models.py:884 +#: core/models.py:823 msgid "wishlist" msgstr "Lista życzeń" -#: core/models.py:951 +#: core/models.py:865 +msgid "" +"Represents a documentary record tied to a product. This class is used to " +"store information about documentaries related to specific products, " +"including file uploads and their metadata. It contains methods and " +"properties to handle the file type and storage path for the documentary " +"files. It extends functionality from specific mixins and provides additional" +" custom features." +msgstr "" +"Reprezentuje rekord dokumentu powiązany z produktem. Ta klasa służy do " +"przechowywania informacji o dokumentach związanych z określonymi produktami," +" w tym przesyłanych plików i ich metadanych. Zawiera metody i właściwości do" +" obsługi typu pliku i ścieżki przechowywania plików dokumentów. Rozszerza " +"funkcjonalność z określonych miksów i zapewnia dodatkowe niestandardowe " +"funkcje." + +#: core/models.py:878 msgid "documentary" msgstr "Film dokumentalny" -#: core/models.py:952 +#: core/models.py:879 msgid "documentaries" msgstr "Filmy dokumentalne" -#: core/models.py:962 +#: core/models.py:889 msgid "unresolved" msgstr "Nierozwiązany" -#: core/models.py:1008 +#: core/models.py:894 +msgid "" +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." +msgstr "" +"Reprezentuje jednostkę adresu, która zawiera szczegóły lokalizacji i " +"powiązania z użytkownikiem. Zapewnia funkcjonalność przechowywania danych " +"geograficznych i adresowych, a także integrację z usługami geokodowania. " +"Klasa ta została zaprojektowana do przechowywania szczegółowych informacji " +"adresowych, w tym elementów takich jak ulica, miasto, region, kraj i " +"geolokalizacja (długość i szerokość geograficzna). Obsługuje integrację z " +"interfejsami API geokodowania, umożliwiając przechowywanie nieprzetworzonych" +" odpowiedzi API do dalszego przetwarzania lub kontroli. Klasa umożliwia " +"również powiązanie adresu z użytkownikiem, ułatwiając spersonalizowaną " +"obsługę danych." + +#: core/models.py:909 msgid "address line for the customer" msgstr "Linia adresu dla klienta" -#: core/models.py:1009 +#: core/models.py:910 msgid "address line" msgstr "Linia adresowa" -#: core/models.py:1011 +#: core/models.py:912 msgid "street" msgstr "ul." -#: core/models.py:1012 +#: core/models.py:913 msgid "district" msgstr "Okręg" -#: core/models.py:1013 +#: core/models.py:914 msgid "city" msgstr "Miasto" -#: core/models.py:1014 +#: core/models.py:915 msgid "region" msgstr "Region" -#: core/models.py:1015 +#: core/models.py:916 msgid "postal code" msgstr "Kod pocztowy" -#: core/models.py:1016 +#: core/models.py:917 msgid "country" msgstr "Kraj" -#: core/models.py:1023 +#: core/models.py:924 msgid "geolocation point: (longitude, latitude)" msgstr "Geolocation Point(Longitude, Latitude)" -#: core/models.py:1026 +#: core/models.py:927 msgid "full JSON response from geocoder for this address" msgstr "Pełna odpowiedź JSON z geokodera dla tego adresu" -#: core/models.py:1031 +#: core/models.py:932 msgid "stored JSON response from the geocoding service" msgstr "Przechowywana odpowiedź JSON z usługi geokodowania" -#: core/models.py:1039 +#: core/models.py:940 msgid "address" msgstr "Adres" -#: core/models.py:1040 +#: core/models.py:941 msgid "addresses" msgstr "Adresy" -#: core/models.py:1085 +#: core/models.py:953 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" +"Reprezentuje kod promocyjny, który może być wykorzystywany do udzielania " +"rabatów, zarządzania jego ważnością, typem rabatu i zastosowaniem. Klasa " +"PromoCode przechowuje szczegółowe informacje o kodzie promocyjnym, w tym " +"jego unikalny identyfikator, właściwości rabatu (kwota lub procent), okres " +"ważności, powiązanego użytkownika (jeśli istnieje) i status jego użycia. " +"Obejmuje funkcję sprawdzania poprawności i stosowania kodu promocyjnego do " +"zamówienia, zapewniając jednocześnie spełnienie ograniczeń." + +#: core/models.py:967 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:1086 +#: core/models.py:968 msgid "promo code identifier" msgstr "Identyfikator kodu promocyjnego" -#: core/models.py:1093 +#: core/models.py:975 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:1094 +#: core/models.py:976 msgid "fixed discount amount" msgstr "Stała kwota rabatu" -#: core/models.py:1100 +#: core/models.py:982 msgid "percentage discount applied if fixed amount is not used" msgstr "Rabat procentowy stosowany w przypadku niewykorzystania stałej kwoty" -#: core/models.py:1101 +#: core/models.py:983 msgid "percentage discount" msgstr "Rabat procentowy" -#: core/models.py:1106 +#: core/models.py:988 msgid "timestamp when the promocode expires" msgstr "Znacznik czasu wygaśnięcia kodu promocyjnego" -#: core/models.py:1107 +#: core/models.py:989 msgid "end validity time" msgstr "Końcowy czas ważności" -#: core/models.py:1112 +#: core/models.py:994 msgid "timestamp from which this promocode is valid" msgstr "Znacznik czasu, od którego ten kod promocyjny jest ważny" -#: core/models.py:1113 +#: core/models.py:995 msgid "start validity time" msgstr "Czas rozpoczęcia ważności" -#: core/models.py:1118 +#: core/models.py:1000 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:1119 +#: core/models.py:1001 msgid "usage timestamp" msgstr "Znacznik czasu użycia" -#: core/models.py:1124 +#: core/models.py:1006 msgid "user assigned to this promocode if applicable" msgstr "Użytkownik przypisany do tego kodu promocyjnego, jeśli dotyczy" -#: core/models.py:1125 +#: core/models.py:1007 msgid "assigned user" msgstr "Przypisany użytkownik" -#: core/models.py:1132 +#: core/models.py:1014 msgid "promo code" msgstr "Kod promocyjny" -#: core/models.py:1133 +#: core/models.py:1015 msgid "promo codes" msgstr "Kody promocyjne" -#: core/models.py:1140 +#: core/models.py:1022 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2032,16 +2116,16 @@ msgstr "" "Należy zdefiniować tylko jeden rodzaj rabatu (kwotowy lub procentowy), ale " "nie oba lub żaden z nich." -#: core/models.py:1155 +#: core/models.py:1037 msgid "promocode already used" msgstr "Kod promocyjny został już wykorzystany" -#: core/models.py:1171 +#: core/models.py:1053 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Nieprawidłowy typ rabatu dla kodu promocyjnego {self.uuid}!" -#: core/models.py:1180 +#: core/models.py:1062 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 " @@ -2058,142 +2142,142 @@ msgstr "" "Funkcjonalność wspiera również zarządzanie produktami w cyklu życia " "zamówienia." -#: core/models.py:1197 +#: core/models.py:1079 msgid "the billing address used for this order" msgstr "Adres rozliczeniowy użyty dla tego zamówienia" -#: core/models.py:1205 +#: core/models.py:1087 msgid "optional promo code applied to this order" msgstr "Opcjonalny kod promocyjny zastosowany do tego zamówienia" -#: core/models.py:1206 +#: core/models.py:1088 msgid "applied promo code" msgstr "Zastosowany kod promocyjny" -#: core/models.py:1214 +#: core/models.py:1096 msgid "the shipping address used for this order" msgstr "Adres wysyłki użyty dla tego zamówienia" -#: core/models.py:1215 +#: core/models.py:1097 msgid "shipping address" msgstr "Adres wysyłki" -#: core/models.py:1221 +#: core/models.py:1103 msgid "current status of the order in its lifecycle" msgstr "Aktualny status zamówienia w jego cyklu życia" -#: core/models.py:1222 +#: core/models.py:1104 msgid "order status" msgstr "Status zamówienia" -#: core/models.py:1227 core/models.py:1686 +#: core/models.py:1109 core/models.py:1560 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:1233 +#: core/models.py:1115 msgid "json representation of order attributes for this order" msgstr "Reprezentacja JSON atrybutów zamówienia dla tego zamówienia" -#: core/models.py:1239 +#: core/models.py:1121 msgid "the user who placed the order" msgstr "Użytkownik, który złożył zamówienie" -#: core/models.py:1240 +#: core/models.py:1122 msgid "user" msgstr "Użytkownik" -#: core/models.py:1246 +#: core/models.py:1128 msgid "the timestamp when the order was finalized" msgstr "Znacznik czasu, kiedy zamówienie zostało sfinalizowane" -#: core/models.py:1247 +#: core/models.py:1129 msgid "buy time" msgstr "Kup czas" -#: core/models.py:1254 +#: core/models.py:1136 msgid "a human-readable identifier for the order" msgstr "Czytelny dla człowieka identyfikator zamówienia" -#: core/models.py:1255 +#: core/models.py:1137 msgid "human readable id" msgstr "Identyfikator czytelny dla człowieka" -#: core/models.py:1261 +#: core/models.py:1143 msgid "order" msgstr "Zamówienie" -#: core/models.py:1282 +#: core/models.py:1168 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:1316 +#: core/models.py:1202 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:1321 +#: core/models.py:1207 msgid "you cannot add inactive products to order" msgstr "Nie można dodać nieaktywnych produktów do zamówienia" -#: core/models.py:1338 +#: core/models.py:1224 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:1360 core/models.py:1385 core/models.py:1393 +#: core/models.py:1246 core/models.py:1271 core/models.py:1279 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:1381 +#: core/models.py:1267 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} nie istnieje z zapytaniem <{query}>!" -#: core/models.py:1413 +#: core/models.py:1299 msgid "promocode does not exist" msgstr "Kod promocyjny nie istnieje" -#: core/models.py:1419 +#: core/models.py:1305 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:1438 +#: core/models.py:1324 msgid "address does not exist" msgstr "Adres nie istnieje" -#: core/models.py:1459 core/models.py:1528 +#: core/models.py:1345 core/models.py:1414 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:1462 core/models.py:1524 +#: core/models.py:1348 core/models.py:1410 msgid "invalid force value" msgstr "Nieprawidłowa wartość siły" -#: core/models.py:1468 core/models.py:1531 +#: core/models.py:1354 core/models.py:1417 msgid "you cannot purchase an empty order!" msgstr "Nie można kupić pustego zamówienia!" -#: core/models.py:1487 +#: core/models.py:1373 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:1501 +#: core/models.py:1387 msgid "a user without a balance cannot buy with balance" msgstr "Użytkownik bez salda nie może kupować za saldo!" -#: core/models.py:1506 +#: core/models.py:1392 msgid "insufficient funds to complete the order" msgstr "Niewystarczające środki do zrealizowania zamówienia" -#: core/models.py:1540 +#: core/models.py:1426 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2202,7 +2286,7 @@ msgstr "" "informacje: imię i nazwisko klienta, adres e-mail klienta, numer telefonu " "klienta." -#: core/models.py:1549 +#: core/models.py:1435 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2210,147 +2294,202 @@ msgstr "" "Nieprawidłowa metoda płatności: {payment_method} z " "{available_payment_methods}!" -#: core/models.py:1674 +#: core/models.py:1533 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" +"Reprezentuje produkty powiązane z zamówieniami i ich atrybutami. Model " +"OrderProduct przechowuje informacje o produkcie, który jest częścią " +"zamówienia, w tym szczegóły, takie jak cena zakupu, ilość, atrybuty produktu" +" i status. Zarządza powiadomieniami dla użytkownika i administratorów oraz " +"obsługuje operacje, takie jak zwracanie salda produktu lub dodawanie opinii." +" Model ten zapewnia również metody i właściwości, które obsługują logikę " +"biznesową, taką jak obliczanie całkowitej ceny lub generowanie adresu URL " +"pobierania dla produktów cyfrowych. Model ten integruje się z modelami Order" +" i Product i przechowuje odniesienia do nich." + +#: core/models.py:1548 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:1675 +#: core/models.py:1549 msgid "purchase price at order time" msgstr "Cena zakupu w momencie zamówienia" -#: core/models.py:1680 +#: core/models.py:1554 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:1681 +#: core/models.py:1555 msgid "internal comments" msgstr "Uwagi wewnętrzne" -#: core/models.py:1687 +#: core/models.py:1561 msgid "user notifications" msgstr "Powiadomienia użytkownika" -#: core/models.py:1692 +#: core/models.py:1566 msgid "json representation of this item's attributes" msgstr "Reprezentacja JSON atrybutów tego elementu" -#: core/models.py:1693 +#: core/models.py:1567 msgid "ordered product attributes" msgstr "Zamówione atrybuty produktu" -#: core/models.py:1698 +#: core/models.py:1572 msgid "reference to the parent order that contains this product" msgstr "Odniesienie do zamówienia nadrzędnego zawierającego ten produkt" -#: core/models.py:1699 +#: core/models.py:1573 msgid "parent order" msgstr "Zamówienie nadrzędne" -#: core/models.py:1708 +#: core/models.py:1582 msgid "the specific product associated with this order line" msgstr "Konkretny produkt powiązany z tą linią zamówienia" -#: core/models.py:1715 +#: core/models.py:1589 msgid "quantity of this specific product in the order" msgstr "Ilość tego konkretnego produktu w zamówieniu" -#: core/models.py:1716 +#: core/models.py:1590 msgid "product quantity" msgstr "Ilość produktu" -#: core/models.py:1723 +#: core/models.py:1597 msgid "current status of this product in the order" msgstr "Aktualny status tego produktu w zamówieniu" -#: core/models.py:1724 +#: core/models.py:1598 msgid "product line status" msgstr "Status linii produktów" -#: core/models.py:1784 +#: core/models.py:1661 msgid "order product must have an order" msgstr "Orderproduct musi mieć powiązane zamówienie!" -#: core/models.py:1786 +#: core/models.py:1663 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Nieprawidłowa akcja określona dla informacji zwrotnej: {action}!" -#: core/models.py:1800 +#: core/models.py:1677 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:1806 +#: core/models.py:1683 msgid "name" msgstr "Nazwa" -#: core/models.py:1807 +#: core/models.py:1684 msgid "URL of the integration" msgstr "Adres URL integracji" -#: core/models.py:1808 +#: core/models.py:1685 msgid "authentication credentials" msgstr "Dane uwierzytelniające" -#: core/models.py:1822 +#: core/models.py:1699 msgid "you can only have one default CRM provider" msgstr "Można mieć tylko jednego domyślnego dostawcę CRM" -#: core/models.py:1826 +#: core/models.py:1703 msgid "CRM" msgstr "CRM" -#: core/models.py:1827 +#: core/models.py:1704 msgid "CRMs" msgstr "CRM" -#: core/models.py:1839 +#: core/models.py:1716 msgid "order CRM link" msgstr "Łącze CRM zamówienia" -#: core/models.py:1840 +#: core/models.py:1717 msgid "orders CRM links" msgstr "Łącza CRM zamówień" -#: core/models.py:1874 +#: core/models.py:1722 +msgid "" +"Represents the downloading functionality for digital assets associated with " +"orders. The DigitalAssetDownload class provides the ability to manage and " +"access downloads related to order products. It maintains information about " +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." +msgstr "" +"Reprezentuje funkcjonalność pobierania zasobów cyfrowych powiązanych z " +"zamówieniami. Klasa DigitalAssetDownload zapewnia możliwość zarządzania i " +"uzyskiwania dostępu do plików do pobrania powiązanych z produktami " +"zamówienia. Przechowuje informacje o powiązanym produkcie zamówienia, " +"liczbie pobrań i tym, czy zasób jest publicznie widoczny. Zawiera metodę " +"generowania adresu URL do pobrania zasobu, gdy powiązane zamówienie ma " +"status ukończonego." + +#: core/models.py:1736 msgid "download" msgstr "Pobierz" -#: core/models.py:1875 +#: core/models.py:1737 msgid "downloads" msgstr "Pliki do pobrania" -#: core/models.py:1883 +#: core/models.py:1745 msgid "you can not download a digital asset for a non-finished order" msgstr "Nie można pobrać zasobu cyfrowego dla nieukończonego zamówienia." -#: core/models.py:1913 +#: core/models.py:1754 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." +msgstr "" +"Zarządza opiniami użytkowników na temat produktów. Ta klasa jest " +"przeznaczona do przechwytywania i przechowywania opinii użytkowników na " +"temat konkretnych produktów, które zostały przez nich zakupione. Zawiera " +"atrybuty do przechowywania komentarzy użytkowników, odniesienie do " +"powiązanego produktu w zamówieniu oraz ocenę przypisaną przez użytkownika. " +"Klasa wykorzystuje pola bazy danych do efektywnego modelowania i zarządzania" +" danymi opinii." + +#: core/models.py:1766 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:1914 +#: core/models.py:1767 msgid "feedback comments" msgstr "Komentarze zwrotne" -#: core/models.py:1921 +#: core/models.py:1774 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:1922 +#: core/models.py:1775 msgid "related order product" msgstr "Powiązany produkt zamówienia" -#: core/models.py:1927 +#: core/models.py:1780 msgid "user-assigned rating for the product" msgstr "Ocena produktu przypisana przez użytkownika" -#: core/models.py:1928 +#: core/models.py:1781 msgid "product rating" msgstr "Ocena produktu" @@ -2571,17 +2710,17 @@ msgstr "" msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | zainicjowany kontakt" -#: core/utils/emailing.py:64 +#: core/utils/emailing.py:74 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Potwierdzenie zamówienia" -#: core/utils/emailing.py:99 +#: core/utils/emailing.py:109 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Zamówienie dostarczone" -#: core/utils/emailing.py:187 +#: core/utils/emailing.py:197 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | przyznany kod promocyjny" @@ -2604,15 +2743,15 @@ msgstr "" msgid "invalid phone number format" msgstr "Nieprawidłowy format numeru telefonu" -#: core/views.py:481 +#: core/views.py:489 msgid "you can only download the digital asset once" msgstr "Zasób cyfrowy można pobrać tylko raz" -#: core/views.py:539 +#: core/views.py:547 msgid "favicon not found" msgstr "nie znaleziono favicon" -#: core/viewsets.py:1319 +#: core/viewsets.py:1357 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Błąd geokodowania: {e}" diff --git a/core/locale/pt_BR/LC_MESSAGES/django.mo b/core/locale/pt_BR/LC_MESSAGES/django.mo index 9c98c2d632b56aeec48671e86c5ff312747a7976..aefdd38c1e3911e4cc1f02b974efc7dd12c85909 100644 GIT binary patch delta 20718 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 delta 12619 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 b?fyA^wpQ`YiQUO$2k*=E$+@zBL5KeVD=Td; diff --git a/core/locale/pt_BR/LC_MESSAGES/django.po b/core/locale/pt_BR/LC_MESSAGES/django.po index a2cdb2ab..21693a04 100644 --- a/core/locale/pt_BR/LC_MESSAGES/django.po +++ b/core/locale/pt_BR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:52+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -90,11 +90,11 @@ msgid "selected items have been deactivated." msgstr "Os itens selecionados foram desativados!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:712 core/models.py:720 +#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 msgid "attribute value" msgstr "Valor do atributo" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:721 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 msgid "attribute values" msgstr "Valores de atributos" @@ -106,7 +106,7 @@ msgstr "Imagem" msgid "images" msgstr "Imagens" -#: core/admin.py:155 core/models.py:457 +#: core/admin.py:155 core/models.py:445 msgid "stock" msgstr "Estoque" @@ -114,11 +114,11 @@ msgstr "Estoque" msgid "stocks" msgstr "Ações" -#: core/admin.py:166 core/models.py:1735 +#: core/admin.py:166 core/models.py:1609 msgid "order product" msgstr "Pedido de produto" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1736 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 msgid "order products" msgstr "Solicitar produtos" @@ -327,7 +327,7 @@ 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:155 core/docs/drf/viewsets.py:553 +#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:487 #: core/graphene/object_types.py:117 core/graphene/object_types.py:207 #: core/graphene/object_types.py:509 msgid "SEO Meta snapshot" @@ -600,48 +600,7 @@ msgstr "Listar todos os produtos (visualização simples)" msgid "(exact) Product UUID" msgstr "UUID (exato) do produto" -#: core/docs/drf/viewsets.py:384 -msgid "(icontains) Product name" -msgstr "(icontains) Nome do produto" - -#: core/docs/drf/viewsets.py:390 -msgid "(list) Category names, case-insensitive" -msgstr "" -"(lista) Nomes de categorias, sem distinção entre maiúsculas e minúsculas" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Category UUID" -msgstr "(exato) UUID da categoria" - -#: core/docs/drf/viewsets.py:402 -msgid "(list) Tag names, case-insensitive" -msgstr "(lista) Nomes de tags, sem distinção entre maiúsculas e minúsculas" - -#: core/docs/drf/viewsets.py:408 -msgid "(gte) Minimum stock price" -msgstr "(gte) Preço mínimo das ações" - -#: core/docs/drf/viewsets.py:414 -msgid "(lte) Maximum stock price" -msgstr "(lte) Preço máximo da ação" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Only active products" -msgstr "(exato) Somente produtos ativos" - -#: core/docs/drf/viewsets.py:426 -msgid "(iexact) Brand name" -msgstr "(iexact) Nome da marca" - -#: core/docs/drf/viewsets.py:438 -msgid "(gt) Minimum stock quantity" -msgstr "(gt) Quantidade mínima em estoque" - -#: core/docs/drf/viewsets.py:444 -msgid "(exact) Digital vs. physical" -msgstr "(exato) Digital vs. físico" - -#: core/docs/drf/viewsets.py:451 +#: core/docs/drf/viewsets.py:385 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -649,250 +608,254 @@ 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:465 core/docs/drf/viewsets.py:466 +#: core/docs/drf/viewsets.py:399 core/docs/drf/viewsets.py:400 msgid "retrieve a single product (detailed view)" msgstr "Recuperar um único produto (visualização detalhada)" -#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:495 -#: core/docs/drf/viewsets.py:511 core/docs/drf/viewsets.py:527 -#: core/docs/drf/viewsets.py:543 core/docs/drf/viewsets.py:559 +#: core/docs/drf/viewsets.py:405 core/docs/drf/viewsets.py:429 +#: core/docs/drf/viewsets.py:445 core/docs/drf/viewsets.py:461 +#: core/docs/drf/viewsets.py:477 core/docs/drf/viewsets.py:493 msgid "Product UUID or slug" msgstr "UUID ou Slug do produto" -#: core/docs/drf/viewsets.py:481 core/docs/drf/viewsets.py:482 +#: core/docs/drf/viewsets.py:415 core/docs/drf/viewsets.py:416 msgid "create a product" msgstr "Criar um produto" -#: core/docs/drf/viewsets.py:489 core/docs/drf/viewsets.py:490 +#: core/docs/drf/viewsets.py:423 core/docs/drf/viewsets.py:424 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:505 core/docs/drf/viewsets.py:506 +#: core/docs/drf/viewsets.py:439 core/docs/drf/viewsets.py:440 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:521 core/docs/drf/viewsets.py:522 +#: core/docs/drf/viewsets.py:455 core/docs/drf/viewsets.py:456 msgid "delete a product" msgstr "Excluir um produto" -#: core/docs/drf/viewsets.py:537 core/docs/drf/viewsets.py:538 +#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:472 msgid "lists all permitted feedbacks for a product" msgstr "lista todos os feedbacks permitidos para um produto" -#: core/docs/drf/viewsets.py:554 +#: core/docs/drf/viewsets.py:488 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:572 +#: core/docs/drf/viewsets.py:506 msgid "list all addresses" msgstr "Listar todos os endereços" -#: core/docs/drf/viewsets.py:579 +#: core/docs/drf/viewsets.py:513 msgid "retrieve a single address" msgstr "Recuperar um único endereço" -#: core/docs/drf/viewsets.py:586 +#: core/docs/drf/viewsets.py:520 msgid "create a new address" msgstr "Criar um novo endereço" -#: core/docs/drf/viewsets.py:594 +#: core/docs/drf/viewsets.py:528 msgid "delete an address" msgstr "Excluir um endereço" -#: core/docs/drf/viewsets.py:601 +#: core/docs/drf/viewsets.py:535 msgid "update an entire address" msgstr "Atualizar um endereço inteiro" -#: core/docs/drf/viewsets.py:609 +#: core/docs/drf/viewsets.py:543 msgid "partially update an address" msgstr "Atualizar parcialmente um endereço" -#: core/docs/drf/viewsets.py:617 +#: core/docs/drf/viewsets.py:551 msgid "autocomplete address suggestions" msgstr "Entrada de endereço com preenchimento automático" -#: core/docs/drf/viewsets.py:622 +#: core/docs/drf/viewsets.py:556 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:628 +#: core/docs/drf/viewsets.py:562 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:641 +#: core/docs/drf/viewsets.py:575 msgid "list all feedbacks (simple view)" msgstr "listar todos os feedbacks (visualização simples)" -#: core/docs/drf/viewsets.py:645 +#: core/docs/drf/viewsets.py:579 msgid "retrieve a single feedback (detailed view)" msgstr "recuperar um único feedback (visualização detalhada)" -#: core/docs/drf/viewsets.py:649 +#: core/docs/drf/viewsets.py:583 msgid "create a feedback" msgstr "criar um feedback" -#: core/docs/drf/viewsets.py:653 +#: core/docs/drf/viewsets.py:587 msgid "delete a feedback" msgstr "excluir um feedback" -#: core/docs/drf/viewsets.py:657 +#: core/docs/drf/viewsets.py:591 msgid "rewrite an existing feedback saving non-editables" msgstr "reescrever um feedback existente salvando itens não editáveis" -#: core/docs/drf/viewsets.py:661 +#: core/docs/drf/viewsets.py:595 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:668 +#: core/docs/drf/viewsets.py:602 msgid "list all order–product relations (simple view)" msgstr "listar todas as relações pedido-produto (visualização simples)" -#: core/docs/drf/viewsets.py:675 +#: core/docs/drf/viewsets.py:609 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:682 +#: core/docs/drf/viewsets.py:616 msgid "create a new order–product relation" msgstr "criar uma nova relação pedido-produto" -#: core/docs/drf/viewsets.py:689 +#: core/docs/drf/viewsets.py:623 msgid "replace an existing order–product relation" msgstr "substituir uma relação pedido-produto existente" -#: core/docs/drf/viewsets.py:696 +#: core/docs/drf/viewsets.py:630 msgid "partially update an existing order–product relation" msgstr "atualizar parcialmente uma relação pedido-produto existente" -#: core/docs/drf/viewsets.py:703 +#: core/docs/drf/viewsets.py:637 msgid "delete an order–product relation" msgstr "excluir uma relação pedido-produto" -#: core/docs/drf/viewsets.py:710 +#: core/docs/drf/viewsets.py:644 msgid "add or remove feedback on an order–product relation" msgstr "adicionar ou remover feedback em uma relação pedido-produto" -#: core/elasticsearch/__init__.py:105 +#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 msgid "no search term provided." msgstr "Nenhum termo de pesquisa foi fornecido." -#: core/filters.py:64 core/filters.py:594 core/filters.py:623 +#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +msgid "Search" +msgstr "Pesquisa" + +#: core/filters.py:66 core/filters.py:554 core/filters.py:583 msgid "UUID" msgstr "UUID" -#: core/filters.py:65 core/filters.py:429 core/filters.py:560 +#: core/filters.py:67 core/filters.py:399 core/filters.py:526 msgid "Name" msgstr "Nome" -#: core/filters.py:66 core/filters.py:562 +#: core/filters.py:68 core/filters.py:528 msgid "Categories" msgstr "Categorias" -#: core/filters.py:68 +#: core/filters.py:70 msgid "Categories Slugs" msgstr "Categorias Lesmas" -#: core/filters.py:69 core/filters.py:437 +#: core/filters.py:71 core/filters.py:407 msgid "Tags" msgstr "Tags" -#: core/filters.py:70 +#: core/filters.py:72 msgid "Min Price" msgstr "Preço mínimo" -#: core/filters.py:71 +#: core/filters.py:73 msgid "Max Price" msgstr "Preço máximo" -#: core/filters.py:72 +#: core/filters.py:74 msgid "Is Active" msgstr "Está ativo" -#: core/filters.py:73 +#: core/filters.py:75 msgid "Brand" msgstr "Brand" -#: core/filters.py:74 +#: core/filters.py:76 msgid "Attributes" msgstr "Atributos" -#: core/filters.py:75 +#: core/filters.py:77 msgid "Quantity" msgstr "Quantidade" -#: core/filters.py:76 core/filters.py:431 core/filters.py:561 -#: core/models.py:287 core/models.py:381 core/models.py:534 +#: core/filters.py:78 core/filters.py:401 core/filters.py:527 +#: core/models.py:287 core/models.py:369 core/models.py:522 msgid "Slug" msgstr "Lesma" -#: core/filters.py:77 +#: core/filters.py:79 msgid "Is Digital" msgstr "É digital" -#: core/filters.py:78 +#: core/filters.py:80 msgid "Include sub-categories" msgstr "Incluir subcategorias" -#: core/filters.py:81 +#: core/filters.py:83 msgid "Include personal ordered" msgstr "Incluir produtos pessoais encomendados" -#: core/filters.py:83 core/models.py:538 +#: core/filters.py:85 core/models.py:526 msgid "SKU" msgstr "SKU" -#: core/filters.py:166 +#: core/filters.py:161 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:356 +#: core/filters.py:324 msgid "Search (ID, product name or part number)" msgstr "Pesquisa (ID, nome do produto ou número de peça)" -#: core/filters.py:359 +#: core/filters.py:327 msgid "Bought after (inclusive)" msgstr "Comprado depois (inclusive)" -#: core/filters.py:360 +#: core/filters.py:328 msgid "Bought before (inclusive)" msgstr "Comprado antes (inclusive)" -#: core/filters.py:363 core/filters.py:410 core/filters.py:625 +#: core/filters.py:331 core/filters.py:378 core/filters.py:585 msgid "User email" msgstr "E-mail do usuário" -#: core/filters.py:364 core/filters.py:411 core/filters.py:603 -#: core/filters.py:624 +#: core/filters.py:332 core/filters.py:379 core/filters.py:563 +#: core/filters.py:584 msgid "User UUID" msgstr "UUID do usuário" -#: core/filters.py:365 +#: core/filters.py:333 msgid "Status" msgstr "Status" -#: core/filters.py:369 +#: core/filters.py:337 msgid "Human Readable ID" msgstr "ID legível por humanos" -#: core/filters.py:430 +#: core/filters.py:400 msgid "Parent" msgstr "Parent" -#: core/filters.py:434 +#: core/filters.py:404 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:438 +#: core/filters.py:408 msgid "Level" msgstr "Nível" -#: core/filters.py:598 +#: core/filters.py:558 msgid "Product UUID" msgstr "UUID do produto" @@ -947,7 +910,7 @@ 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:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:821 +#: core/graphene/mutations.py:527 core/viewsets.py:839 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "O tipo errado veio do método order.buy(): {type(instance)!s}" @@ -1009,37 +972,37 @@ msgstr "" msgid "add or delete a feedback for orderproduct" msgstr "Adicionar ou excluir um feedback para o produto do pedido" -#: core/graphene/mutations.py:555 +#: core/graphene/mutations.py:556 msgid "action must be either `add` or `remove`" msgstr "A ação deve ser `add` ou `remove`!" -#: core/graphene/mutations.py:558 +#: core/graphene/mutations.py:559 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderproduct {order_product_uuid} não encontrado!" -#: core/graphene/mutations.py:621 +#: core/graphene/mutations.py:622 msgid "original address string provided by the user" msgstr "Cadeia de endereços original fornecida pelo usuário" -#: core/graphene/mutations.py:655 core/models.py:896 core/models.py:909 -#: core/models.py:1348 core/models.py:1377 core/models.py:1402 -#: core/viewsets.py:824 +#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 +#: core/models.py:1234 core/models.py:1263 core/models.py:1288 +#: core/viewsets.py:842 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} não existe: {uuid}!" -#: core/graphene/mutations.py:668 +#: core/graphene/mutations.py:669 msgid "limit must be between 1 and 10" msgstr "O limite deve estar entre 1 e 10" -#: core/graphene/mutations.py:713 +#: core/graphene/mutations.py:714 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - funciona muito bem" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:666 core/models.py:1234 -#: core/models.py:1809 +#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 +#: core/models.py:1686 msgid "attributes" msgstr "Atributos" @@ -1052,11 +1015,11 @@ 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:224 core/models.py:312 core/models.py:620 +#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:612 msgid "categories" msgstr "Categorias" -#: core/graphene/object_types.py:124 core/models.py:395 +#: core/graphene/object_types.py:124 core/models.py:383 msgid "brands" msgstr "Marcas" @@ -1113,7 +1076,7 @@ msgid "represents feedback from a user." msgstr "Representa o feedback de um usuário." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1228 +#: core/models.py:1110 msgid "notifications" msgstr "Notificações" @@ -1121,7 +1084,7 @@ msgstr "Notificações" 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:400 core/models.py:1938 +#: core/graphene/object_types.py:400 core/models.py:1791 msgid "feedback" msgstr "Feedback" @@ -1129,7 +1092,7 @@ msgstr "Feedback" msgid "a list of order products in this order" msgstr "Uma lista dos produtos solicitados nesse pedido" -#: core/graphene/object_types.py:436 core/models.py:1198 +#: core/graphene/object_types.py:436 core/models.py:1080 msgid "billing address" msgstr "Endereço de cobrança" @@ -1157,7 +1120,7 @@ msgstr "Todos os produtos estão no pedido digital?" msgid "transactions for this order" msgstr "Transações para esta ordem" -#: core/graphene/object_types.py:465 core/models.py:1262 +#: core/graphene/object_types.py:465 core/models.py:1144 msgid "orders" msgstr "Pedidos" @@ -1169,15 +1132,15 @@ msgstr "URL da imagem" msgid "product's images" msgstr "Imagens do produto" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:477 +#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 msgid "category" msgstr "Categoria" -#: core/graphene/object_types.py:502 core/models.py:1939 +#: core/graphene/object_types.py:502 core/models.py:1792 msgid "feedbacks" msgstr "Feedbacks" -#: core/graphene/object_types.py:503 core/models.py:394 core/models.py:486 +#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 msgid "brand" msgstr "Brand" @@ -1209,7 +1172,7 @@ msgstr "Número de feedbacks" msgid "only available for personal orders" msgstr "Produtos disponíveis apenas para pedidos pessoais" -#: core/graphene/object_types.py:534 core/models.py:548 +#: core/graphene/object_types.py:534 core/models.py:536 msgid "products" msgstr "Produtos" @@ -1221,7 +1184,7 @@ msgstr "Códigos promocionais" msgid "products on sale" msgstr "Produtos à venda" -#: core/graphene/object_types.py:651 core/models.py:843 +#: core/graphene/object_types.py:651 core/models.py:784 msgid "promotions" msgstr "Promoções" @@ -1229,7 +1192,7 @@ msgstr "Promoções" msgid "vendor" msgstr "Vendor" -#: core/graphene/object_types.py:656 core/models.py:547 +#: core/graphene/object_types.py:656 core/models.py:535 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1237,11 +1200,11 @@ msgstr "Vendor" msgid "product" msgstr "Produto" -#: core/graphene/object_types.py:667 core/models.py:868 +#: core/graphene/object_types.py:667 core/models.py:807 msgid "wishlisted products" msgstr "Produtos da lista de desejos" -#: core/graphene/object_types.py:673 core/models.py:885 +#: core/graphene/object_types.py:673 core/models.py:824 msgid "wishlists" msgstr "Listas de desejos" @@ -1249,7 +1212,7 @@ msgstr "Listas de desejos" msgid "tagged products" msgstr "Produtos marcados" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:492 +#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 msgid "product tags" msgstr "Etiquetas do produto" @@ -1360,7 +1323,7 @@ msgstr "Grupo de atributos pai" msgid "attribute group's name" msgstr "Nome do grupo de atributos" -#: core/models.py:100 core/models.py:628 +#: core/models.py:100 core/models.py:620 msgid "attribute group" msgstr "Grupo de atributos" @@ -1526,51 +1489,65 @@ msgstr "Descrição da categoria" msgid "tags that help describe or group this category" msgstr "tags que ajudam a descrever ou agrupar essa categoria" -#: core/models.py:299 core/models.py:387 +#: core/models.py:299 core/models.py:375 msgid "priority" msgstr "Prioridade" -#: core/models.py:340 +#: core/models.py:318 +msgid "" +"Represents a Brand object in the system. This class handles information and " +"attributes related to a brand, including its name, logos, description, " +"associated categories, a unique slug, and priority order. It allows for the " +"organization and representation of brand-related data within the " +"application." +msgstr "" +"Representa um objeto de marca no sistema. Essa classe lida com informações e" +" atributos relacionados a uma marca, incluindo seu nome, logotipos, " +"descrição, categorias associadas, um slug exclusivo e ordem de prioridade. " +"Ela permite a organização e a representação de dados relacionados à marca no" +" aplicativo." + +#: core/models.py:328 msgid "name of this brand" msgstr "Nome da marca" -#: core/models.py:341 +#: core/models.py:329 msgid "brand name" msgstr "Nome da marca" -#: core/models.py:348 +#: core/models.py:336 msgid "upload a logo representing this brand" msgstr "Faça upload de um logotipo que represente essa marca" -#: core/models.py:350 +#: core/models.py:338 msgid "brand small image" msgstr "Imagem pequena da marca" -#: core/models.py:356 +#: core/models.py:344 msgid "upload a big logo representing this brand" msgstr "Faça upload de um logotipo grande que represente essa marca" -#: core/models.py:358 +#: core/models.py:346 msgid "brand big image" msgstr "Imagem de marca grande" -#: core/models.py:363 +#: core/models.py:351 msgid "add a detailed description of the brand" msgstr "Adicione uma descrição detalhada da marca" -#: core/models.py:364 +#: core/models.py:352 msgid "brand description" msgstr "Descrição da marca" -#: core/models.py:369 +#: core/models.py:357 msgid "optional categories that this brand is associated with" msgstr "Categorias opcionais às quais essa marca está associada" -#: core/models.py:370 +#: core/models.py:358 msgid "associated categories" msgstr "Categorias" -#: core/models.py:400 +#: core/models.py:388 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1586,68 +1563,68 @@ 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:412 +#: core/models.py:400 msgid "the vendor supplying this product stock" msgstr "O fornecedor que fornece esse estoque de produtos" -#: core/models.py:413 +#: core/models.py:401 msgid "associated vendor" msgstr "Fornecedor associado" -#: core/models.py:417 +#: core/models.py:405 msgid "final price to the customer after markups" msgstr "Preço final para o cliente após as marcações" -#: core/models.py:418 +#: core/models.py:406 msgid "selling price" msgstr "Preço de venda" -#: core/models.py:423 +#: core/models.py:411 msgid "the product associated with this stock entry" msgstr "O produto associado a essa entrada em estoque" -#: core/models.py:424 core/models.py:708 core/models.py:765 -#: core/models.py:1709 +#: core/models.py:412 core/models.py:683 core/models.py:730 +#: core/models.py:1583 msgid "associated product" msgstr "Produto associado" -#: core/models.py:431 +#: core/models.py:419 msgid "the price paid to the vendor for this product" msgstr "O preço pago ao fornecedor por esse produto" -#: core/models.py:432 +#: core/models.py:420 msgid "vendor purchase price" msgstr "Preço de compra do fornecedor" -#: core/models.py:436 +#: core/models.py:424 msgid "available quantity of the product in stock" msgstr "Quantidade disponível do produto em estoque" -#: core/models.py:437 +#: core/models.py:425 msgid "quantity in stock" msgstr "Quantidade em estoque" -#: core/models.py:441 +#: core/models.py:429 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU atribuído pelo fornecedor para identificar o produto" -#: core/models.py:442 +#: core/models.py:430 msgid "vendor sku" msgstr "SKU do fornecedor" -#: core/models.py:448 +#: core/models.py:436 msgid "digital file associated with this stock if applicable" msgstr "Arquivo digital associado a esse estoque, se aplicável" -#: core/models.py:449 +#: core/models.py:437 msgid "digital file" msgstr "Arquivo digital" -#: core/models.py:458 +#: core/models.py:446 msgid "stock entries" msgstr "Entradas de estoque" -#: core/models.py:463 +#: core/models.py:451 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1668,55 +1645,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:476 +#: core/models.py:464 msgid "category this product belongs to" msgstr "Categoria à qual este produto pertence" -#: core/models.py:485 +#: core/models.py:473 msgid "optionally associate this product with a brand" msgstr "Opcionalmente, associe esse produto a uma marca" -#: core/models.py:491 +#: core/models.py:479 msgid "tags that help describe or group this product" msgstr "Tags que ajudam a descrever ou agrupar este produto" -#: core/models.py:496 +#: core/models.py:484 msgid "indicates whether this product is digitally delivered" msgstr "Indica se esse produto é entregue digitalmente" -#: core/models.py:497 +#: core/models.py:485 msgid "is product digital" msgstr "O produto é digital" -#: core/models.py:503 +#: core/models.py:491 msgid "provide a clear identifying name for the product" msgstr "Fornecer um nome de identificação claro para o produto" -#: core/models.py:504 +#: core/models.py:492 msgid "product name" msgstr "Nome do produto" -#: core/models.py:509 core/models.py:831 +#: core/models.py:497 core/models.py:772 msgid "add a detailed description of the product" msgstr "Adicione uma descrição detalhada do produto" -#: core/models.py:510 +#: core/models.py:498 msgid "product description" msgstr "Descrição do produto" -#: core/models.py:517 +#: core/models.py:505 msgid "part number for this product" msgstr "Número de peça para este produto" -#: core/models.py:518 +#: core/models.py:506 msgid "part number" msgstr "Número da peça" -#: core/models.py:537 +#: core/models.py:525 msgid "stock keeping unit for this product" msgstr "Unidade de Manutenção de Estoque para este produto" -#: core/models.py:607 +#: core/models.py:599 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 " @@ -1732,293 +1709,401 @@ 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:619 +#: core/models.py:611 msgid "category of this attribute" msgstr "Categoria desse atributo" -#: core/models.py:627 +#: core/models.py:619 msgid "group of this attribute" msgstr "Grupo desse atributo" -#: core/models.py:633 +#: core/models.py:625 msgid "string" msgstr "Cordas" -#: core/models.py:634 +#: core/models.py:626 msgid "integer" msgstr "Inteiro" -#: core/models.py:635 +#: core/models.py:627 msgid "float" msgstr "Flutuação" -#: core/models.py:636 +#: core/models.py:628 msgid "boolean" msgstr "Booleano" -#: core/models.py:637 +#: core/models.py:629 msgid "array" msgstr "Matriz" -#: core/models.py:638 +#: core/models.py:630 msgid "object" msgstr "Objeto" -#: core/models.py:640 +#: core/models.py:632 msgid "type of the attribute's value" msgstr "Tipo do valor do atributo" -#: core/models.py:641 +#: core/models.py:633 msgid "value type" msgstr "Tipo de valor" -#: core/models.py:646 +#: core/models.py:638 msgid "name of this attribute" msgstr "Nome desse atributo" -#: core/models.py:647 +#: core/models.py:639 msgid "attribute's name" msgstr "Nome do atributo" -#: core/models.py:653 +#: core/models.py:645 msgid "is filterable" msgstr "é filtrável" -#: core/models.py:654 +#: core/models.py:646 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:665 core/models.py:700 +#: core/models.py:657 core/models.py:675 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Atributo" -#: core/models.py:699 +#: core/models.py:663 +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 "" +"Representa um valor específico para um atributo que está vinculado a um " +"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:674 msgid "attribute of this value" msgstr "Atributo desse valor" -#: core/models.py:707 +#: core/models.py:682 msgid "the specific product associated with this attribute's value" msgstr "O produto específico associado ao valor desse atributo" -#: core/models.py:713 +#: core/models.py:688 msgid "the specific value for this attribute" msgstr "O valor específico para esse atributo" -#: core/models.py:747 +#: core/models.py:701 +msgid "" +"Represents a product image associated with a product in the system. This " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " +"determining their display order. It also includes an accessibility feature " +"with alternative text for the images." +msgstr "" +"Representa uma imagem de produto associada a um produto no sistema. Essa " +"classe foi projetada para gerenciar imagens de produtos, incluindo a " +"funcionalidade de carregar arquivos de imagem, associá-los a produtos " +"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:712 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:748 +#: core/models.py:713 msgid "image alt text" msgstr "Texto alternativo da imagem" -#: core/models.py:751 +#: core/models.py:716 msgid "upload the image file for this product" msgstr "Faça o upload do arquivo de imagem para este produto" -#: core/models.py:752 core/models.py:777 +#: core/models.py:717 core/models.py:742 msgid "product image" msgstr "Imagem do produto" -#: core/models.py:758 +#: core/models.py:723 msgid "determines the order in which images are displayed" msgstr "Determina a ordem em que as imagens são exibidas" -#: core/models.py:759 +#: core/models.py:724 msgid "display priority" msgstr "Prioridade de exibição" -#: core/models.py:764 +#: core/models.py:729 msgid "the product that this image represents" msgstr "O produto que esta imagem representa" -#: core/models.py:778 +#: core/models.py:743 msgid "product images" msgstr "Imagens do produto" -#: core/models.py:819 +#: core/models.py:748 +msgid "" +"Represents a promotional campaign for products with a discount. This class " +"is used to define and manage promotional campaigns that offer a percentage-" +"based discount for products. The class includes attributes for setting the " +"discount rate, providing details about the promotion, and linking it to the " +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." +msgstr "" +"Representa uma campanha promocional para produtos com desconto. Essa classe " +"é usada para definir e gerenciar campanhas promocionais que oferecem um " +"desconto baseado em porcentagem para produtos. A classe inclui atributos " +"para definir a taxa de desconto, fornecer detalhes sobre a promoção e " +"vinculá-la aos produtos aplicáveis. Ela se integra ao catálogo de produtos " +"para determinar os itens afetados na campanha." + +#: core/models.py:760 msgid "percentage discount for the selected products" msgstr "Desconto percentual para os produtos selecionados" -#: core/models.py:820 +#: core/models.py:761 msgid "discount percentage" msgstr "Porcentagem de desconto" -#: core/models.py:825 +#: core/models.py:766 msgid "provide a unique name for this promotion" msgstr "Forneça um nome exclusivo para essa promoção" -#: core/models.py:826 +#: core/models.py:767 msgid "promotion name" msgstr "Nome da promoção" -#: core/models.py:832 +#: core/models.py:773 msgid "promotion description" msgstr "Descrição da promoção" -#: core/models.py:837 +#: core/models.py:778 msgid "select which products are included in this promotion" msgstr "Selecione quais produtos estão incluídos nessa promoção" -#: core/models.py:838 +#: core/models.py:779 msgid "included products" msgstr "Produtos incluídos" -#: core/models.py:842 +#: core/models.py:783 msgid "promotion" msgstr "Promoção" -#: core/models.py:867 +#: core/models.py:794 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"class provides functionality to manage a collection of products, supporting " +"operations such as adding and removing products, as well as supporting " +"operations for adding and removing multiple products at once." +msgstr "" +"Representa a lista de desejos de um usuário para armazenar e gerenciar os " +"produtos desejados. A classe oferece funcionalidade para gerenciar uma " +"coleção de produtos, suportando operações como adicionar e remover produtos," +" bem como operações de suporte para adicionar e remover vários produtos de " +"uma só vez." + +#: core/models.py:806 msgid "products that the user has marked as wanted" msgstr "Produtos que o usuário marcou como desejados" -#: core/models.py:875 +#: core/models.py:814 msgid "user who owns this wishlist" msgstr "Usuário que possui esta lista de desejos" -#: core/models.py:876 +#: core/models.py:815 msgid "wishlist owner" msgstr "Proprietário da lista de desejos" -#: core/models.py:884 +#: core/models.py:823 msgid "wishlist" msgstr "Lista de desejos" -#: core/models.py:951 +#: core/models.py:865 +msgid "" +"Represents a documentary record tied to a product. This class is used to " +"store information about documentaries related to specific products, " +"including file uploads and their metadata. It contains methods and " +"properties to handle the file type and storage path for the documentary " +"files. It extends functionality from specific mixins and provides additional" +" custom features." +msgstr "" +"Representa um registro de documentário vinculado a um produto. Essa classe é" +" usada para armazenar informações sobre documentários relacionados a " +"produtos específicos, incluindo uploads de arquivos e seus metadados. Ela " +"contém métodos e propriedades para lidar com o tipo de arquivo e o caminho " +"de armazenamento dos arquivos do documentário. Ela estende a funcionalidade " +"de mixins específicos e fornece recursos personalizados adicionais." + +#: core/models.py:878 msgid "documentary" msgstr "Documentário" -#: core/models.py:952 +#: core/models.py:879 msgid "documentaries" msgstr "Documentários" -#: core/models.py:962 +#: core/models.py:889 msgid "unresolved" msgstr "Não resolvido" -#: core/models.py:1008 +#: core/models.py:894 +msgid "" +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." +msgstr "" +"Representa uma entidade de endereço que inclui detalhes de localização e " +"associações com um usuário. Fornece funcionalidade para armazenamento de " +"dados geográficos e de endereço, bem como integração com serviços de " +"geocodificação. Essa classe foi projetada para armazenar informações " +"detalhadas de endereço, incluindo componentes como rua, cidade, região, país" +" e geolocalização (longitude e latitude). Ela oferece suporte à integração " +"com APIs de geocodificação, permitindo o armazenamento de respostas brutas " +"de API para processamento ou inspeção posterior. A classe também permite " +"associar um endereço a um usuário, facilitando o tratamento personalizado " +"dos dados." + +#: core/models.py:909 msgid "address line for the customer" msgstr "Linha de endereço do cliente" -#: core/models.py:1009 +#: core/models.py:910 msgid "address line" msgstr "Linha de endereço" -#: core/models.py:1011 +#: core/models.py:912 msgid "street" msgstr "Rua" -#: core/models.py:1012 +#: core/models.py:913 msgid "district" msgstr "Distrito" -#: core/models.py:1013 +#: core/models.py:914 msgid "city" msgstr "Cidade" -#: core/models.py:1014 +#: core/models.py:915 msgid "region" msgstr "Região" -#: core/models.py:1015 +#: core/models.py:916 msgid "postal code" msgstr "Código postal" -#: core/models.py:1016 +#: core/models.py:917 msgid "country" msgstr "País" -#: core/models.py:1023 +#: core/models.py:924 msgid "geolocation point: (longitude, latitude)" msgstr "Ponto de geolocalização (Longitude, Latitude)" -#: core/models.py:1026 +#: core/models.py:927 msgid "full JSON response from geocoder for this address" msgstr "Resposta JSON completa do geocodificador para este endereço" -#: core/models.py:1031 +#: core/models.py:932 msgid "stored JSON response from the geocoding service" msgstr "Resposta JSON armazenada do serviço de geocodificação" -#: core/models.py:1039 +#: core/models.py:940 msgid "address" msgstr "Endereço" -#: core/models.py:1040 +#: core/models.py:941 msgid "addresses" msgstr "Endereços" -#: core/models.py:1085 +#: core/models.py:953 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" +"Representa um código promocional que pode ser usado para descontos, " +"gerenciando sua validade, tipo de desconto e aplicação. A classe PromoCode " +"armazena detalhes sobre um código promocional, incluindo seu identificador " +"exclusivo, propriedades de desconto (valor ou porcentagem), período de " +"validade, usuário associado (se houver) e status de seu uso. Ela inclui a " +"funcionalidade para validar e aplicar o código promocional a um pedido, " +"garantindo que as restrições sejam atendidas." + +#: core/models.py:967 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:1086 +#: core/models.py:968 msgid "promo code identifier" msgstr "Identificador de código promocional" -#: core/models.py:1093 +#: core/models.py:975 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:1094 +#: core/models.py:976 msgid "fixed discount amount" msgstr "Valor do desconto fixo" -#: core/models.py:1100 +#: core/models.py:982 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:1101 +#: core/models.py:983 msgid "percentage discount" msgstr "Desconto percentual" -#: core/models.py:1106 +#: core/models.py:988 msgid "timestamp when the promocode expires" msgstr "Registro de data e hora em que o código promocional expira" -#: core/models.py:1107 +#: core/models.py:989 msgid "end validity time" msgstr "Tempo de validade final" -#: core/models.py:1112 +#: core/models.py:994 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:1113 +#: core/models.py:995 msgid "start validity time" msgstr "Hora de início da validade" -#: core/models.py:1118 +#: core/models.py:1000 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:1119 +#: core/models.py:1001 msgid "usage timestamp" msgstr "Registro de data e hora de uso" -#: core/models.py:1124 +#: core/models.py:1006 msgid "user assigned to this promocode if applicable" msgstr "Usuário atribuído a esse código promocional, se aplicável" -#: core/models.py:1125 +#: core/models.py:1007 msgid "assigned user" msgstr "Usuário atribuído" -#: core/models.py:1132 +#: core/models.py:1014 msgid "promo code" msgstr "Código promocional" -#: core/models.py:1133 +#: core/models.py:1015 msgid "promo codes" msgstr "Códigos promocionais" -#: core/models.py:1140 +#: core/models.py:1022 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2026,16 +2111,16 @@ msgstr "" "Apenas um tipo de desconto deve ser definido (valor ou porcentagem), mas não" " ambos ou nenhum." -#: core/models.py:1155 +#: core/models.py:1037 msgid "promocode already used" msgstr "O código promocional já foi usado" -#: core/models.py:1171 +#: core/models.py:1053 #, 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:1180 +#: core/models.py:1062 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 " @@ -2052,138 +2137,138 @@ msgstr "" "atualizados. Da mesma forma, a funcionalidade suporta o gerenciamento dos " "produtos no ciclo de vida do pedido." -#: core/models.py:1197 +#: core/models.py:1079 msgid "the billing address used for this order" msgstr "O endereço de cobrança usado para esse pedido" -#: core/models.py:1205 +#: core/models.py:1087 msgid "optional promo code applied to this order" msgstr "Código promocional opcional aplicado a este pedido" -#: core/models.py:1206 +#: core/models.py:1088 msgid "applied promo code" msgstr "Código promocional aplicado" -#: core/models.py:1214 +#: core/models.py:1096 msgid "the shipping address used for this order" msgstr "O endereço de entrega usado para esse pedido" -#: core/models.py:1215 +#: core/models.py:1097 msgid "shipping address" msgstr "Endereço de entrega" -#: core/models.py:1221 +#: core/models.py:1103 msgid "current status of the order in its lifecycle" msgstr "Status atual do pedido em seu ciclo de vida" -#: core/models.py:1222 +#: core/models.py:1104 msgid "order status" msgstr "Status do pedido" -#: core/models.py:1227 core/models.py:1686 +#: core/models.py:1109 core/models.py:1560 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:1233 +#: core/models.py:1115 msgid "json representation of order attributes for this order" msgstr "Representação JSON dos atributos do pedido para esse pedido" -#: core/models.py:1239 +#: core/models.py:1121 msgid "the user who placed the order" msgstr "O usuário que fez o pedido" -#: core/models.py:1240 +#: core/models.py:1122 msgid "user" msgstr "Usuário" -#: core/models.py:1246 +#: core/models.py:1128 msgid "the timestamp when the order was finalized" msgstr "O registro de data e hora em que o pedido foi finalizado" -#: core/models.py:1247 +#: core/models.py:1129 msgid "buy time" msgstr "Tempo de compra" -#: core/models.py:1254 +#: core/models.py:1136 msgid "a human-readable identifier for the order" msgstr "Um identificador legível por humanos para o pedido" -#: core/models.py:1255 +#: core/models.py:1137 msgid "human readable id" msgstr "ID legível por humanos" -#: core/models.py:1261 +#: core/models.py:1143 msgid "order" msgstr "Pedido" -#: core/models.py:1282 +#: core/models.py:1168 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:1316 +#: core/models.py:1202 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:1321 +#: core/models.py:1207 msgid "you cannot add inactive products to order" msgstr "Não é possível adicionar produtos inativos ao pedido" -#: core/models.py:1338 +#: core/models.py:1224 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:1360 core/models.py:1385 core/models.py:1393 +#: core/models.py:1246 core/models.py:1271 core/models.py:1279 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:1381 +#: core/models.py:1267 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} não existe com a consulta <{query}>!" -#: core/models.py:1413 +#: core/models.py:1299 msgid "promocode does not exist" msgstr "O código promocional não existe" -#: core/models.py:1419 +#: core/models.py:1305 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:1438 +#: core/models.py:1324 msgid "address does not exist" msgstr "O endereço não existe" -#: core/models.py:1459 core/models.py:1528 +#: core/models.py:1345 core/models.py:1414 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:1462 core/models.py:1524 +#: core/models.py:1348 core/models.py:1410 msgid "invalid force value" msgstr "Valor de força inválido" -#: core/models.py:1468 core/models.py:1531 +#: core/models.py:1354 core/models.py:1417 msgid "you cannot purchase an empty order!" msgstr "Você não pode comprar um pedido vazio!" -#: core/models.py:1487 +#: core/models.py:1373 msgid "you cannot buy an order without a user" msgstr "Não é possível comprar um pedido sem um usuário!" -#: core/models.py:1501 +#: core/models.py:1387 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:1506 +#: core/models.py:1392 msgid "insufficient funds to complete the order" msgstr "Fundos insuficientes para concluir o pedido" -#: core/models.py:1540 +#: core/models.py:1426 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2191,7 +2276,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:1549 +#: core/models.py:1435 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2199,147 +2284,200 @@ msgstr "" "Método de pagamento inválido: {payment_method} de " "{available_payment_methods}!" -#: core/models.py:1674 +#: core/models.py:1533 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" +"Representa produtos associados a pedidos e seus atributos. O modelo " +"OrderProduct mantém informações sobre um produto que faz parte de um pedido," +" incluindo detalhes como preço de compra, quantidade, atributos do produto e" +" status. Ele gerencia as notificações para o usuário e os administradores e " +"trata de operações como devolver o saldo do produto ou adicionar feedback. " +"Esse modelo também fornece métodos e propriedades que dão suporte à lógica " +"comercial, como o cálculo do preço total ou a geração de um URL de download " +"para produtos digitais. O modelo se integra aos modelos Order e Product e " +"armazena uma referência a eles." + +#: core/models.py:1548 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:1675 +#: core/models.py:1549 msgid "purchase price at order time" msgstr "Preço de compra no momento do pedido" -#: core/models.py:1680 +#: core/models.py:1554 msgid "internal comments for admins about this ordered product" msgstr "" "Comentários internos para administradores sobre este produto encomendado" -#: core/models.py:1681 +#: core/models.py:1555 msgid "internal comments" msgstr "Comentários internos" -#: core/models.py:1687 +#: core/models.py:1561 msgid "user notifications" msgstr "Notificações do usuário" -#: core/models.py:1692 +#: core/models.py:1566 msgid "json representation of this item's attributes" msgstr "Representação JSON dos atributos desse item" -#: core/models.py:1693 +#: core/models.py:1567 msgid "ordered product attributes" msgstr "Atributos ordenados do produto" -#: core/models.py:1698 +#: core/models.py:1572 msgid "reference to the parent order that contains this product" msgstr "Referência ao pedido pai que contém esse produto" -#: core/models.py:1699 +#: core/models.py:1573 msgid "parent order" msgstr "Ordem dos pais" -#: core/models.py:1708 +#: core/models.py:1582 msgid "the specific product associated with this order line" msgstr "O produto específico associado a essa linha de pedido" -#: core/models.py:1715 +#: core/models.py:1589 msgid "quantity of this specific product in the order" msgstr "Quantidade desse produto específico no pedido" -#: core/models.py:1716 +#: core/models.py:1590 msgid "product quantity" msgstr "Quantidade do produto" -#: core/models.py:1723 +#: core/models.py:1597 msgid "current status of this product in the order" msgstr "Status atual desse produto no pedido" -#: core/models.py:1724 +#: core/models.py:1598 msgid "product line status" msgstr "Status da linha de produtos" -#: core/models.py:1784 +#: core/models.py:1661 msgid "order product must have an order" msgstr "O Orderproduct deve ter um pedido associado!" -#: core/models.py:1786 +#: core/models.py:1663 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Ação incorreta especificada para o feedback: {action}!" -#: core/models.py:1800 +#: core/models.py:1677 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:1806 +#: core/models.py:1683 msgid "name" msgstr "Nome" -#: core/models.py:1807 +#: core/models.py:1684 msgid "URL of the integration" msgstr "URL da integração" -#: core/models.py:1808 +#: core/models.py:1685 msgid "authentication credentials" msgstr "Credenciais de autenticação" -#: core/models.py:1822 +#: core/models.py:1699 msgid "you can only have one default CRM provider" msgstr "Você só pode ter um provedor de CRM padrão" -#: core/models.py:1826 +#: core/models.py:1703 msgid "CRM" msgstr "CRM" -#: core/models.py:1827 +#: core/models.py:1704 msgid "CRMs" msgstr "CRMs" -#: core/models.py:1839 +#: core/models.py:1716 msgid "order CRM link" msgstr "Link do CRM do pedido" -#: core/models.py:1840 +#: core/models.py:1717 msgid "orders CRM links" msgstr "Links de CRM dos pedidos" -#: core/models.py:1874 +#: core/models.py:1722 +msgid "" +"Represents the downloading functionality for digital assets associated with " +"orders. The DigitalAssetDownload class provides the ability to manage and " +"access downloads related to order products. It maintains information about " +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." +msgstr "" +"Representa a funcionalidade de download de ativos digitais associados a " +"pedidos. A classe DigitalAssetDownload oferece a capacidade de gerenciar e " +"acessar downloads relacionados a produtos de pedidos. Ela mantém informações" +" sobre o produto do pedido associado, o número de downloads e se o ativo " +"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:1736 msgid "download" msgstr "Baixar" -#: core/models.py:1875 +#: core/models.py:1737 msgid "downloads" msgstr "Downloads" -#: core/models.py:1883 +#: core/models.py:1745 msgid "you can not download a digital asset for a non-finished order" msgstr "" "Não é possível fazer download de um ativo digital para um pedido não " "concluído" -#: core/models.py:1913 +#: core/models.py:1754 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." +msgstr "" +"Gerencia o feedback dos usuários sobre os produtos. Essa classe foi criada " +"para capturar e armazenar o feedback dos usuários sobre produtos específicos" +" que eles compraram. Ela contém atributos para armazenar comentários de " +"usuários, uma referência ao produto relacionado no pedido e uma " +"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:1766 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:1914 +#: core/models.py:1767 msgid "feedback comments" msgstr "Comentários de feedback" -#: core/models.py:1921 +#: core/models.py:1774 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:1922 +#: core/models.py:1775 msgid "related order product" msgstr "Produto de pedido relacionado" -#: core/models.py:1927 +#: core/models.py:1780 msgid "user-assigned rating for the product" msgstr "Classificação atribuída pelo usuário ao produto" -#: core/models.py:1928 +#: core/models.py:1781 msgid "product rating" msgstr "Avaliação do produto" @@ -2557,17 +2695,17 @@ msgstr "Valor de tempo limite inválido, deve estar entre 0 e 216000 segundos" msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | entre em contato conosco iniciado" -#: core/utils/emailing.py:64 +#: core/utils/emailing.py:74 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Confirmação do pedido" -#: core/utils/emailing.py:99 +#: core/utils/emailing.py:109 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Pedido entregue" -#: core/utils/emailing.py:187 +#: core/utils/emailing.py:197 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | promocode granted" @@ -2590,15 +2728,15 @@ msgstr "" msgid "invalid phone number format" msgstr "Formato de número telefônico inválido" -#: core/views.py:481 +#: core/views.py:489 msgid "you can only download the digital asset once" msgstr "Você só pode fazer o download do ativo digital uma vez" -#: core/views.py:539 +#: core/views.py:547 msgid "favicon not found" msgstr "favicon não encontrado" -#: core/viewsets.py:1319 +#: core/viewsets.py:1357 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Erro de geocodificação: {e}" diff --git a/core/locale/ro_RO/LC_MESSAGES/django.mo b/core/locale/ro_RO/LC_MESSAGES/django.mo index fb8591a8060515970609f0388b4805dc969685d7..c18ab35eda0e9c6f9c7249dbd86832eb757295ce 100644 GIT binary patch delta 20965 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%0D~Z=XQNKsSl2y~1 zk2aS8$+%HxZOYjWWj0lZBvv@&kjG5q^Y!!A^qk>dHZE3p*+ph&-^RBzW!wsqECw@Y`!F&a8`E`{DMb5%uN9VqqLaPm!XA7h@(pQv)LpaGtk7(t3^ypc zWI?}icMe+4I82}T!KaW^QqY^0Lg?2|S=lAZYv0W~UdA?WqW+e3oEZ2Bw{>RnD|lTl9^|*4nT7inE%F+>0W{I%ktV+FDqqo($ltM`qf{CVWwxHHwWq@= zGinSriLid&)&UWVI?mC|#Pnj}iT;HxSG%fR$^OvFfH>rbrxAp=o;%D;2d~gvY{^s;!jy;to8a6Qo+r2Jj?B32vjemN`rKSE{ zImZtfnDG;Vy2{3D>l8T&SM0+2!gFq5?`*b2>yp)I06+80MVoU0b0L(HJo$^8#$|zf zxDD8Pg*I2ad1xYq&8Nbj76#S4Ho&#cB?hQL${)aF)%O4zM{$J1GTJ$}tuZd7jXchW zMUrUayLH|x%-a5}WvGHauoce3bWS%U8T` zt}q72E8Gm3C6GS{Nf~tHE{V)B7njEb$l9>;npfQwQO4|Z?%yUAAH(EwbGno6ioO|4 zaK;i9{&bF^38MRq;(MYxl)(j^*=w5`-fZNB0B2pFo2<|use2+E0u!Xmi$inapq5`5 z)*tHcxPDMnBvE6qGIn+wijgzFi709{`7CnRM(!l;e7$j1nT~?WqPwHG?VAW3%Q44D zj$v+)ng$trgJc{qlS&kJ9~VrG{flACV3P0?~Mf zyTKt|=S`0n+J)o3cXL*Lxsve;qqLds3Q>+!bTIkZN4T+A7&P5+s#sXNe0ZP~eSYdo zN^8m)k8chAX8`$;xo48*?5$0aGv{}jpItENe#vb=bt(7Hm3Hf4k16<$-8p0w&Inr4 z1wou6HGT!UP04=df ze6fT(6mH7gFr39K&M=z7uVIzOiIb2k!a0RG)98NC~F1!HlpZ!WmYKOsDEMSUWwr66(67EBS>yMurA&3`gQl0G}N#AVfz07%Sr`J delta 12649 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 wxa6BPVO@ex=D5{?StB=g^2\n" "Language-Team: BRITISH ENGLISH \n" @@ -90,11 +90,11 @@ msgid "selected items have been deactivated." msgstr "Articolele selectate au fost dezactivate!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:712 core/models.py:720 +#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 msgid "attribute value" msgstr "Atribut Valoare" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:721 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 msgid "attribute values" msgstr "Valori ale atributului" @@ -106,7 +106,7 @@ msgstr "Imagine" msgid "images" msgstr "Imagini" -#: core/admin.py:155 core/models.py:457 +#: core/admin.py:155 core/models.py:445 msgid "stock" msgstr "Stoc" @@ -114,11 +114,11 @@ msgstr "Stoc" msgid "stocks" msgstr "Stocuri" -#: core/admin.py:166 core/models.py:1735 +#: core/admin.py:166 core/models.py:1609 msgid "order product" msgstr "Comanda Produs" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1736 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 msgid "order products" msgstr "Comandați produse" @@ -333,7 +333,7 @@ msgstr "" "Rescrieți unele câmpuri ale unei categorii existente, salvând elementele " "needitabile" -#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:553 +#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:487 #: core/graphene/object_types.py:117 core/graphene/object_types.py:207 #: core/graphene/object_types.py:509 msgid "SEO Meta snapshot" @@ -607,47 +607,7 @@ msgstr "Listează toate produsele (vizualizare simplă)" msgid "(exact) Product UUID" msgstr "(exact) UUID al produsului" -#: core/docs/drf/viewsets.py:384 -msgid "(icontains) Product name" -msgstr "(icontains) Denumirea produsului" - -#: core/docs/drf/viewsets.py:390 -msgid "(list) Category names, case-insensitive" -msgstr "(listă) Numele categoriilor, fără deosebire de majuscule" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Category UUID" -msgstr "(exact) UUID al categoriei" - -#: core/docs/drf/viewsets.py:402 -msgid "(list) Tag names, case-insensitive" -msgstr "(listă) Nume de etichete, fără diferențiere de majuscule" - -#: core/docs/drf/viewsets.py:408 -msgid "(gte) Minimum stock price" -msgstr "(gte) Prețul minim al acțiunilor" - -#: core/docs/drf/viewsets.py:414 -msgid "(lte) Maximum stock price" -msgstr "(lte) Prețul maxim al acțiunilor" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Only active products" -msgstr "(exact) Numai produse active" - -#: core/docs/drf/viewsets.py:426 -msgid "(iexact) Brand name" -msgstr "(iexact) Denumire comercială" - -#: core/docs/drf/viewsets.py:438 -msgid "(gt) Minimum stock quantity" -msgstr "(gt) Cantitatea minimă de stoc" - -#: core/docs/drf/viewsets.py:444 -msgid "(exact) Digital vs. physical" -msgstr "(exact) Digital vs. fizic" - -#: core/docs/drf/viewsets.py:451 +#: core/docs/drf/viewsets.py:385 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -655,73 +615,73 @@ 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:465 core/docs/drf/viewsets.py:466 +#: core/docs/drf/viewsets.py:399 core/docs/drf/viewsets.py:400 msgid "retrieve a single product (detailed view)" msgstr "Recuperarea unui singur produs (vedere detaliată)" -#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:495 -#: core/docs/drf/viewsets.py:511 core/docs/drf/viewsets.py:527 -#: core/docs/drf/viewsets.py:543 core/docs/drf/viewsets.py:559 +#: core/docs/drf/viewsets.py:405 core/docs/drf/viewsets.py:429 +#: core/docs/drf/viewsets.py:445 core/docs/drf/viewsets.py:461 +#: core/docs/drf/viewsets.py:477 core/docs/drf/viewsets.py:493 msgid "Product UUID or slug" msgstr "UUID sau Slug al produsului" -#: core/docs/drf/viewsets.py:481 core/docs/drf/viewsets.py:482 +#: core/docs/drf/viewsets.py:415 core/docs/drf/viewsets.py:416 msgid "create a product" msgstr "Creați un produs" -#: core/docs/drf/viewsets.py:489 core/docs/drf/viewsets.py:490 +#: core/docs/drf/viewsets.py:423 core/docs/drf/viewsets.py:424 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:505 core/docs/drf/viewsets.py:506 +#: core/docs/drf/viewsets.py:439 core/docs/drf/viewsets.py:440 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:521 core/docs/drf/viewsets.py:522 +#: core/docs/drf/viewsets.py:455 core/docs/drf/viewsets.py:456 msgid "delete a product" msgstr "Ștergeți un produs" -#: core/docs/drf/viewsets.py:537 core/docs/drf/viewsets.py:538 +#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:472 msgid "lists all permitted feedbacks for a product" msgstr "listează toate feedback-urile permise pentru un produs" -#: core/docs/drf/viewsets.py:554 +#: core/docs/drf/viewsets.py:488 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:572 +#: core/docs/drf/viewsets.py:506 msgid "list all addresses" msgstr "Enumerați toate adresele" -#: core/docs/drf/viewsets.py:579 +#: core/docs/drf/viewsets.py:513 msgid "retrieve a single address" msgstr "Recuperarea unei singure adrese" -#: core/docs/drf/viewsets.py:586 +#: core/docs/drf/viewsets.py:520 msgid "create a new address" msgstr "Creați o adresă nouă" -#: core/docs/drf/viewsets.py:594 +#: core/docs/drf/viewsets.py:528 msgid "delete an address" msgstr "Ștergeți o adresă" -#: core/docs/drf/viewsets.py:601 +#: core/docs/drf/viewsets.py:535 msgid "update an entire address" msgstr "Actualizarea unei adrese întregi" -#: core/docs/drf/viewsets.py:609 +#: core/docs/drf/viewsets.py:543 msgid "partially update an address" msgstr "Actualizarea parțială a unei adrese" -#: core/docs/drf/viewsets.py:617 +#: core/docs/drf/viewsets.py:551 msgid "autocomplete address suggestions" msgstr "Autocompletare adresă de intrare" -#: core/docs/drf/viewsets.py:622 +#: core/docs/drf/viewsets.py:556 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" @@ -729,181 +689,185 @@ msgstr "" "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" -#: core/docs/drf/viewsets.py:628 +#: core/docs/drf/viewsets.py:562 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:641 +#: core/docs/drf/viewsets.py:575 msgid "list all feedbacks (simple view)" msgstr "lista tuturor feedback-urilor (vizualizare simplă)" -#: core/docs/drf/viewsets.py:645 +#: core/docs/drf/viewsets.py:579 msgid "retrieve a single feedback (detailed view)" msgstr "recuperați un singur feedback (vizualizare detaliată)" -#: core/docs/drf/viewsets.py:649 +#: core/docs/drf/viewsets.py:583 msgid "create a feedback" msgstr "creați un feedback" -#: core/docs/drf/viewsets.py:653 +#: core/docs/drf/viewsets.py:587 msgid "delete a feedback" msgstr "ștergeți un feedback" -#: core/docs/drf/viewsets.py:657 +#: core/docs/drf/viewsets.py:591 msgid "rewrite an existing feedback saving non-editables" msgstr "rescrierea unui feedback existent cu salvarea elementelor needitabile" -#: core/docs/drf/viewsets.py:661 +#: core/docs/drf/viewsets.py:595 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:668 +#: core/docs/drf/viewsets.py:602 msgid "list all order–product relations (simple view)" msgstr "lista tuturor relațiilor comandă-produs (vedere simplă)" -#: core/docs/drf/viewsets.py:675 +#: core/docs/drf/viewsets.py:609 msgid "retrieve a single order–product relation (detailed view)" msgstr "recuperarea unei singure relații comandă-produs (vedere detaliată)" -#: core/docs/drf/viewsets.py:682 +#: core/docs/drf/viewsets.py:616 msgid "create a new order–product relation" msgstr "crearea unei noi relații comandă-produs" -#: core/docs/drf/viewsets.py:689 +#: core/docs/drf/viewsets.py:623 msgid "replace an existing order–product relation" msgstr "să înlocuiască o relație comandă-produs existentă" -#: core/docs/drf/viewsets.py:696 +#: core/docs/drf/viewsets.py:630 msgid "partially update an existing order–product relation" msgstr "actualizarea parțială a unei relații comandă-produs existente" -#: core/docs/drf/viewsets.py:703 +#: core/docs/drf/viewsets.py:637 msgid "delete an order–product relation" msgstr "ștergeți o relație comandă-produs" -#: core/docs/drf/viewsets.py:710 +#: core/docs/drf/viewsets.py:644 msgid "add or remove feedback on an order–product relation" msgstr "adăugarea sau eliminarea feedback-ului într-o relație comandă-produs" -#: core/elasticsearch/__init__.py:105 +#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 msgid "no search term provided." msgstr "Nu a fost furnizat niciun termen de căutare." -#: core/filters.py:64 core/filters.py:594 core/filters.py:623 +#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +msgid "Search" +msgstr "Căutare" + +#: core/filters.py:66 core/filters.py:554 core/filters.py:583 msgid "UUID" msgstr "UUID" -#: core/filters.py:65 core/filters.py:429 core/filters.py:560 +#: core/filters.py:67 core/filters.py:399 core/filters.py:526 msgid "Name" msgstr "Nume și prenume" -#: core/filters.py:66 core/filters.py:562 +#: core/filters.py:68 core/filters.py:528 msgid "Categories" msgstr "Categorii" -#: core/filters.py:68 +#: core/filters.py:70 msgid "Categories Slugs" msgstr "Categorii Melci" -#: core/filters.py:69 core/filters.py:437 +#: core/filters.py:71 core/filters.py:407 msgid "Tags" msgstr "Etichete" -#: core/filters.py:70 +#: core/filters.py:72 msgid "Min Price" msgstr "Preț minim" -#: core/filters.py:71 +#: core/filters.py:73 msgid "Max Price" msgstr "Preț maxim" -#: core/filters.py:72 +#: core/filters.py:74 msgid "Is Active" msgstr "Este activ" -#: core/filters.py:73 +#: core/filters.py:75 msgid "Brand" msgstr "Marca" -#: core/filters.py:74 +#: core/filters.py:76 msgid "Attributes" msgstr "Atribute" -#: core/filters.py:75 +#: core/filters.py:77 msgid "Quantity" msgstr "Cantitate" -#: core/filters.py:76 core/filters.py:431 core/filters.py:561 -#: core/models.py:287 core/models.py:381 core/models.py:534 +#: core/filters.py:78 core/filters.py:401 core/filters.py:527 +#: core/models.py:287 core/models.py:369 core/models.py:522 msgid "Slug" msgstr "Melc" -#: core/filters.py:77 +#: core/filters.py:79 msgid "Is Digital" msgstr "Este digital" -#: core/filters.py:78 +#: core/filters.py:80 msgid "Include sub-categories" msgstr "Includeți subcategorii" -#: core/filters.py:81 +#: core/filters.py:83 msgid "Include personal ordered" msgstr "Includeți produsele comandate personal" -#: core/filters.py:83 core/models.py:538 +#: core/filters.py:85 core/models.py:526 msgid "SKU" msgstr "SKU" -#: core/filters.py:166 +#: core/filters.py:161 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:356 +#: core/filters.py:324 msgid "Search (ID, product name or part number)" msgstr "Căutare (ID, numele produsului sau numărul piesei)" -#: core/filters.py:359 +#: core/filters.py:327 msgid "Bought after (inclusive)" msgstr "Cumpărat după (inclusiv)" -#: core/filters.py:360 +#: core/filters.py:328 msgid "Bought before (inclusive)" msgstr "Cumpărat înainte (inclusiv)" -#: core/filters.py:363 core/filters.py:410 core/filters.py:625 +#: core/filters.py:331 core/filters.py:378 core/filters.py:585 msgid "User email" msgstr "E-mail utilizator" -#: core/filters.py:364 core/filters.py:411 core/filters.py:603 -#: core/filters.py:624 +#: core/filters.py:332 core/filters.py:379 core/filters.py:563 +#: core/filters.py:584 msgid "User UUID" msgstr "UUID utilizator" -#: core/filters.py:365 +#: core/filters.py:333 msgid "Status" msgstr "Statut" -#: core/filters.py:369 +#: core/filters.py:337 msgid "Human Readable ID" msgstr "ID lizibil de către om" -#: core/filters.py:430 +#: core/filters.py:400 msgid "Parent" msgstr "Părinte" -#: core/filters.py:434 +#: core/filters.py:404 msgid "Whole category(has at least 1 product or not)" msgstr "Întreaga categorie (are cel puțin 1 produs sau nu)" -#: core/filters.py:438 +#: core/filters.py:408 msgid "Level" msgstr "Nivel" -#: core/filters.py:598 +#: core/filters.py:558 msgid "Product UUID" msgstr "UUID produs" @@ -959,7 +923,7 @@ msgstr "" "Vă rugăm să furnizați fie order_uuid sau order_hr_id - se exclud reciproc!" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:821 +#: core/graphene/mutations.py:527 core/viewsets.py:839 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Metoda order.buy() a generat un tip greșit: {type(instance)!s}" @@ -1022,37 +986,37 @@ msgstr "" msgid "add or delete a feedback for orderproduct" msgstr "Adăugați sau ștergeți un feedback pentru comandaprodus" -#: core/graphene/mutations.py:555 +#: core/graphene/mutations.py:556 msgid "action must be either `add` or `remove`" msgstr "Acțiunea trebuie să fie `add` sau `remove`!" -#: core/graphene/mutations.py:558 +#: core/graphene/mutations.py:559 #, 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:621 +#: core/graphene/mutations.py:622 msgid "original address string provided by the user" msgstr "Șirul de adrese original furnizat de utilizator" -#: core/graphene/mutations.py:655 core/models.py:896 core/models.py:909 -#: core/models.py:1348 core/models.py:1377 core/models.py:1402 -#: core/viewsets.py:824 +#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 +#: core/models.py:1234 core/models.py:1263 core/models.py:1288 +#: core/viewsets.py:842 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} nu există: {uuid}!" -#: core/graphene/mutations.py:668 +#: core/graphene/mutations.py:669 msgid "limit must be between 1 and 10" msgstr "Limita trebuie să fie între 1 și 10" -#: core/graphene/mutations.py:713 +#: core/graphene/mutations.py:714 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - funcționează ca un farmec" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:666 core/models.py:1234 -#: core/models.py:1809 +#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 +#: core/models.py:1686 msgid "attributes" msgstr "Atribute" @@ -1065,11 +1029,11 @@ 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:224 core/models.py:312 core/models.py:620 +#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:612 msgid "categories" msgstr "Categorii" -#: core/graphene/object_types.py:124 core/models.py:395 +#: core/graphene/object_types.py:124 core/models.py:383 msgid "brands" msgstr "Mărci" @@ -1128,7 +1092,7 @@ msgid "represents feedback from a user." msgstr "Reprezintă feedback de la un utilizator." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1228 +#: core/models.py:1110 msgid "notifications" msgstr "Notificări" @@ -1136,7 +1100,7 @@ msgstr "Notificări" 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:400 core/models.py:1938 +#: core/graphene/object_types.py:400 core/models.py:1791 msgid "feedback" msgstr "Feedback" @@ -1144,7 +1108,7 @@ msgstr "Feedback" msgid "a list of order products in this order" msgstr "O listă a produselor comandate în această comandă" -#: core/graphene/object_types.py:436 core/models.py:1198 +#: core/graphene/object_types.py:436 core/models.py:1080 msgid "billing address" msgstr "Adresa de facturare" @@ -1172,7 +1136,7 @@ msgstr "Sunt toate produsele din comanda digitală" msgid "transactions for this order" msgstr "Tranzacții pentru această comandă" -#: core/graphene/object_types.py:465 core/models.py:1262 +#: core/graphene/object_types.py:465 core/models.py:1144 msgid "orders" msgstr "Ordine" @@ -1184,15 +1148,15 @@ msgstr "URL imagine" msgid "product's images" msgstr "Imagini ale produsului" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:477 +#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 msgid "category" msgstr "Categorie" -#: core/graphene/object_types.py:502 core/models.py:1939 +#: core/graphene/object_types.py:502 core/models.py:1792 msgid "feedbacks" msgstr "Feedback-uri" -#: core/graphene/object_types.py:503 core/models.py:394 core/models.py:486 +#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 msgid "brand" msgstr "Marca" @@ -1224,7 +1188,7 @@ msgstr "Numărul de reacții" msgid "only available for personal orders" msgstr "Produse disponibile numai pentru comenzi personale" -#: core/graphene/object_types.py:534 core/models.py:548 +#: core/graphene/object_types.py:534 core/models.py:536 msgid "products" msgstr "Produse" @@ -1236,7 +1200,7 @@ msgstr "Coduri promoționale" msgid "products on sale" msgstr "Produse scoase la vânzare" -#: core/graphene/object_types.py:651 core/models.py:843 +#: core/graphene/object_types.py:651 core/models.py:784 msgid "promotions" msgstr "Promoții" @@ -1244,7 +1208,7 @@ msgstr "Promoții" msgid "vendor" msgstr "Furnizor" -#: core/graphene/object_types.py:656 core/models.py:547 +#: core/graphene/object_types.py:656 core/models.py:535 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1252,11 +1216,11 @@ msgstr "Furnizor" msgid "product" msgstr "Produs" -#: core/graphene/object_types.py:667 core/models.py:868 +#: core/graphene/object_types.py:667 core/models.py:807 msgid "wishlisted products" msgstr "Produse dorite" -#: core/graphene/object_types.py:673 core/models.py:885 +#: core/graphene/object_types.py:673 core/models.py:824 msgid "wishlists" msgstr "Liste de dorințe" @@ -1264,7 +1228,7 @@ msgstr "Liste de dorințe" msgid "tagged products" msgstr "Produse etichetate" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:492 +#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 msgid "product tags" msgstr "Etichete de produs" @@ -1376,7 +1340,7 @@ msgstr "Grup de atribute părinte" msgid "attribute group's name" msgstr "Numele grupului de atribute" -#: core/models.py:100 core/models.py:628 +#: core/models.py:100 core/models.py:620 msgid "attribute group" msgstr "Grup de atribute" @@ -1543,51 +1507,65 @@ msgstr "Descriere categorie" msgid "tags that help describe or group this category" msgstr "etichete care ajută la descrierea sau gruparea acestei categorii" -#: core/models.py:299 core/models.py:387 +#: core/models.py:299 core/models.py:375 msgid "priority" msgstr "Prioritate" -#: core/models.py:340 +#: core/models.py:318 +msgid "" +"Represents a Brand object in the system. This class handles information and " +"attributes related to a brand, including its name, logos, description, " +"associated categories, a unique slug, and priority order. It allows for the " +"organization and representation of brand-related data within the " +"application." +msgstr "" +"Reprezintă un obiect Brand în sistem. Această clasă gestionează informațiile" +" și atributele legate de o marcă, inclusiv numele acesteia, logo-urile, " +"descrierea, categoriile asociate, un slug unic și ordinea de prioritate. " +"Aceasta permite organizarea și reprezentarea datelor legate de marcă în " +"cadrul aplicației." + +#: core/models.py:328 msgid "name of this brand" msgstr "Denumirea acestui brand" -#: core/models.py:341 +#: core/models.py:329 msgid "brand name" msgstr "Nume de marcă" -#: core/models.py:348 +#: core/models.py:336 msgid "upload a logo representing this brand" msgstr "Încărcați un logo care reprezintă acest brand" -#: core/models.py:350 +#: core/models.py:338 msgid "brand small image" msgstr "Brand imagine mică" -#: core/models.py:356 +#: core/models.py:344 msgid "upload a big logo representing this brand" msgstr "Încărcați un logo mare care reprezintă acest brand" -#: core/models.py:358 +#: core/models.py:346 msgid "brand big image" msgstr "Imagine de marcă mare" -#: core/models.py:363 +#: core/models.py:351 msgid "add a detailed description of the brand" msgstr "Adăugați o descriere detaliată a mărcii" -#: core/models.py:364 +#: core/models.py:352 msgid "brand description" msgstr "Descrierea mărcii" -#: core/models.py:369 +#: core/models.py:357 msgid "optional categories that this brand is associated with" msgstr "Categorii opționale cu care acest brand este asociat" -#: core/models.py:370 +#: core/models.py:358 msgid "associated categories" msgstr "Categorii" -#: core/models.py:400 +#: core/models.py:388 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1603,68 +1581,68 @@ 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:412 +#: core/models.py:400 msgid "the vendor supplying this product stock" msgstr "Furnizorul care furnizează acest stoc de produse" -#: core/models.py:413 +#: core/models.py:401 msgid "associated vendor" msgstr "Furnizor asociat" -#: core/models.py:417 +#: core/models.py:405 msgid "final price to the customer after markups" msgstr "Prețul final pentru client după majorări" -#: core/models.py:418 +#: core/models.py:406 msgid "selling price" msgstr "Prețul de vânzare" -#: core/models.py:423 +#: core/models.py:411 msgid "the product associated with this stock entry" msgstr "Produsul asociat cu această intrare în stoc" -#: core/models.py:424 core/models.py:708 core/models.py:765 -#: core/models.py:1709 +#: core/models.py:412 core/models.py:683 core/models.py:730 +#: core/models.py:1583 msgid "associated product" msgstr "Produs asociat" -#: core/models.py:431 +#: core/models.py:419 msgid "the price paid to the vendor for this product" msgstr "Prețul plătit vânzătorului pentru acest produs" -#: core/models.py:432 +#: core/models.py:420 msgid "vendor purchase price" msgstr "Prețul de achiziție al furnizorului" -#: core/models.py:436 +#: core/models.py:424 msgid "available quantity of the product in stock" msgstr "Cantitatea disponibilă a produsului în stoc" -#: core/models.py:437 +#: core/models.py:425 msgid "quantity in stock" msgstr "Cantitate în stoc" -#: core/models.py:441 +#: core/models.py:429 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU atribuit de furnizor pentru identificarea produsului" -#: core/models.py:442 +#: core/models.py:430 msgid "vendor sku" msgstr "SKU al furnizorului" -#: core/models.py:448 +#: core/models.py:436 msgid "digital file associated with this stock if applicable" msgstr "Fișier digital asociat cu acest stoc, dacă este cazul" -#: core/models.py:449 +#: core/models.py:437 msgid "digital file" msgstr "Fișier digital" -#: core/models.py:458 +#: core/models.py:446 msgid "stock entries" msgstr "Intrări pe stoc" -#: core/models.py:463 +#: core/models.py:451 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1685,55 +1663,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:476 +#: core/models.py:464 msgid "category this product belongs to" msgstr "Categoria din care face parte acest produs" -#: core/models.py:485 +#: core/models.py:473 msgid "optionally associate this product with a brand" msgstr "Opțional, asociați acest produs cu un brand" -#: core/models.py:491 +#: core/models.py:479 msgid "tags that help describe or group this product" msgstr "Etichete care ajută la descrierea sau gruparea acestui produs" -#: core/models.py:496 +#: core/models.py:484 msgid "indicates whether this product is digitally delivered" msgstr "Indică dacă acest produs este livrat digital" -#: core/models.py:497 +#: core/models.py:485 msgid "is product digital" msgstr "Produsul este digital" -#: core/models.py:503 +#: core/models.py:491 msgid "provide a clear identifying name for the product" msgstr "Furnizați o denumire clară de identificare a produsului" -#: core/models.py:504 +#: core/models.py:492 msgid "product name" msgstr "Denumirea produsului" -#: core/models.py:509 core/models.py:831 +#: core/models.py:497 core/models.py:772 msgid "add a detailed description of the product" msgstr "Adăugați o descriere detaliată a produsului" -#: core/models.py:510 +#: core/models.py:498 msgid "product description" msgstr "Descrierea produsului" -#: core/models.py:517 +#: core/models.py:505 msgid "part number for this product" msgstr "Numărul piesei pentru acest produs" -#: core/models.py:518 +#: core/models.py:506 msgid "part number" msgstr "Numărul piesei" -#: core/models.py:537 +#: core/models.py:525 msgid "stock keeping unit for this product" msgstr "Stock Keeping Unit pentru acest produs" -#: core/models.py:607 +#: core/models.py:599 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 " @@ -1749,292 +1727,403 @@ 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:619 +#: core/models.py:611 msgid "category of this attribute" msgstr "Categoria acestui atribut" -#: core/models.py:627 +#: core/models.py:619 msgid "group of this attribute" msgstr "Grupul acestui atribut" -#: core/models.py:633 +#: core/models.py:625 msgid "string" msgstr "Șir de caractere" -#: core/models.py:634 +#: core/models.py:626 msgid "integer" msgstr "Număr întreg" -#: core/models.py:635 +#: core/models.py:627 msgid "float" msgstr "Float" -#: core/models.py:636 +#: core/models.py:628 msgid "boolean" msgstr "Boolean" -#: core/models.py:637 +#: core/models.py:629 msgid "array" msgstr "Array" -#: core/models.py:638 +#: core/models.py:630 msgid "object" msgstr "Obiect" -#: core/models.py:640 +#: core/models.py:632 msgid "type of the attribute's value" msgstr "Tipul valorii atributului" -#: core/models.py:641 +#: core/models.py:633 msgid "value type" msgstr "Tipul de valoare" -#: core/models.py:646 +#: core/models.py:638 msgid "name of this attribute" msgstr "Denumirea acestui atribut" -#: core/models.py:647 +#: core/models.py:639 msgid "attribute's name" msgstr "Numele atributului" -#: core/models.py:653 +#: core/models.py:645 msgid "is filterable" msgstr "este filtrabil" -#: core/models.py:654 +#: core/models.py:646 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:665 core/models.py:700 +#: core/models.py:657 core/models.py:675 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Atribut" -#: core/models.py:699 +#: core/models.py:663 +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 "" +"Reprezintă o valoare specifică pentru un atribut care este legat de un " +"produs. Leagă \"atributul\" de o \"valoare\" unică, permițând o mai bună " +"organizare și reprezentare dinamică a caracteristicilor produsului." + +#: core/models.py:674 msgid "attribute of this value" msgstr "Atributul acestei valori" -#: core/models.py:707 +#: core/models.py:682 msgid "the specific product associated with this attribute's value" msgstr "Produsul specific asociat cu valoarea acestui atribut" -#: core/models.py:713 +#: core/models.py:688 msgid "the specific value for this attribute" msgstr "Valoarea specifică pentru acest atribut" -#: core/models.py:747 +#: core/models.py:701 +msgid "" +"Represents a product image associated with a product in the system. This " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " +"determining their display order. It also includes an accessibility feature " +"with alternative text for the images." +msgstr "" +"Reprezintă o imagine de produs asociată cu un produs din sistem. Această " +"clasă este concepută pentru a gestiona imagini pentru produse, inclusiv " +"funcționalități pentru încărcarea fișierelor de imagine, asocierea acestora " +"cu produse specifice și determinarea ordinii de afișare a acestora. De " +"asemenea, include o funcție de accesibilitate cu text alternativ pentru " +"imagini." + +#: core/models.py:712 msgid "provide alternative text for the image for accessibility" msgstr "Furnizați text alternativ pentru imagine pentru accesibilitate" -#: core/models.py:748 +#: core/models.py:713 msgid "image alt text" msgstr "Textul alt al imaginii" -#: core/models.py:751 +#: core/models.py:716 msgid "upload the image file for this product" msgstr "Încărcați fișierul de imagine pentru acest produs" -#: core/models.py:752 core/models.py:777 +#: core/models.py:717 core/models.py:742 msgid "product image" msgstr "Imaginea produsului" -#: core/models.py:758 +#: core/models.py:723 msgid "determines the order in which images are displayed" msgstr "Determină ordinea în care sunt afișate imaginile" -#: core/models.py:759 +#: core/models.py:724 msgid "display priority" msgstr "Prioritatea afișării" -#: core/models.py:764 +#: core/models.py:729 msgid "the product that this image represents" msgstr "Produsul pe care îl reprezintă această imagine" -#: core/models.py:778 +#: core/models.py:743 msgid "product images" msgstr "Imagini ale produsului" -#: core/models.py:819 +#: core/models.py:748 +msgid "" +"Represents a promotional campaign for products with a discount. This class " +"is used to define and manage promotional campaigns that offer a percentage-" +"based discount for products. The class includes attributes for setting the " +"discount rate, providing details about the promotion, and linking it to the " +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." +msgstr "" +"Reprezintă o campanie promoțională pentru produse cu o reducere. Această " +"clasă este utilizată pentru a defini și gestiona campanii promoționale care " +"oferă o reducere procentuală pentru produse. Clasa include atribute pentru " +"stabilirea ratei de reducere, furnizarea de detalii despre promoție și " +"asocierea acesteia la produsele aplicabile. Se integrează cu catalogul de " +"produse pentru a determina articolele afectate în cadrul campaniei." + +#: core/models.py:760 msgid "percentage discount for the selected products" msgstr "Procentul de reducere pentru produsele selectate" -#: core/models.py:820 +#: core/models.py:761 msgid "discount percentage" msgstr "Procent de reducere" -#: core/models.py:825 +#: core/models.py:766 msgid "provide a unique name for this promotion" msgstr "Furnizați un nume unic pentru această promoție" -#: core/models.py:826 +#: core/models.py:767 msgid "promotion name" msgstr "Numele promoției" -#: core/models.py:832 +#: core/models.py:773 msgid "promotion description" msgstr "Descrierea promoției" -#: core/models.py:837 +#: core/models.py:778 msgid "select which products are included in this promotion" msgstr "Selectați ce produse sunt incluse în această promoție" -#: core/models.py:838 +#: core/models.py:779 msgid "included products" msgstr "Produse incluse" -#: core/models.py:842 +#: core/models.py:783 msgid "promotion" msgstr "Promovare" -#: core/models.py:867 +#: core/models.py:794 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"class provides functionality to manage a collection of products, supporting " +"operations such as adding and removing products, as well as supporting " +"operations for adding and removing multiple products at once." +msgstr "" +"Reprezintă lista de dorințe a unui utilizator pentru stocarea și gestionarea" +" produselor dorite. Clasa oferă funcționalitatea de a gestiona o colecție de" +" produse, suportând operațiuni precum adăugarea și eliminarea de produse, " +"precum și operațiuni pentru adăugarea și eliminarea mai multor produse " +"simultan." + +#: core/models.py:806 msgid "products that the user has marked as wanted" msgstr "Produse pe care utilizatorul le-a marcat ca fiind dorite" -#: core/models.py:875 +#: core/models.py:814 msgid "user who owns this wishlist" msgstr "Utilizatorul care deține această listă de dorințe" -#: core/models.py:876 +#: core/models.py:815 msgid "wishlist owner" msgstr "Proprietarul listei de dorințe" -#: core/models.py:884 +#: core/models.py:823 msgid "wishlist" msgstr "Lista dorințelor" -#: core/models.py:951 +#: core/models.py:865 +msgid "" +"Represents a documentary record tied to a product. This class is used to " +"store information about documentaries related to specific products, " +"including file uploads and their metadata. It contains methods and " +"properties to handle the file type and storage path for the documentary " +"files. It extends functionality from specific mixins and provides additional" +" custom features." +msgstr "" +"Reprezintă o înregistrare documentară legată de un produs. Această clasă " +"este utilizată pentru a stoca informații despre documentarele legate de " +"anumite produse, inclusiv încărcările de fișiere și metadatele acestora. " +"Aceasta conține metode și proprietăți pentru gestionarea tipului de fișier " +"și a căii de stocare pentru fișierele documentare. Aceasta extinde " +"funcționalitatea mixinilor specifici și oferă caracteristici personalizate " +"suplimentare." + +#: core/models.py:878 msgid "documentary" msgstr "Documentar" -#: core/models.py:952 +#: core/models.py:879 msgid "documentaries" msgstr "Documentare" -#: core/models.py:962 +#: core/models.py:889 msgid "unresolved" msgstr "Nerezolvat" -#: core/models.py:1008 +#: core/models.py:894 +msgid "" +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." +msgstr "" +"Reprezintă o entitate de adresă care include detalii despre locație și " +"asocieri cu un utilizator. Oferă funcționalitate pentru stocarea datelor " +"geografice și de adresă, precum și pentru integrarea cu serviciile de " +"geocodare. Această clasă este concepută pentru a stoca informații detaliate " +"despre adresă, inclusiv componente precum strada, orașul, regiunea, țara și " +"geolocalizarea (longitudine și latitudine). Aceasta suportă integrarea cu " +"API-urile de geocodare, permițând stocarea răspunsurilor API brute pentru " +"procesare sau inspecție ulterioară. De asemenea, clasa permite asocierea " +"unei adrese cu un utilizator, facilitând gestionarea personalizată a " +"datelor." + +#: core/models.py:909 msgid "address line for the customer" msgstr "Linia de adresă pentru client" -#: core/models.py:1009 +#: core/models.py:910 msgid "address line" msgstr "Linia de adresă" -#: core/models.py:1011 +#: core/models.py:912 msgid "street" msgstr "Strada" -#: core/models.py:1012 +#: core/models.py:913 msgid "district" msgstr "Districtul" -#: core/models.py:1013 +#: core/models.py:914 msgid "city" msgstr "Oraș" -#: core/models.py:1014 +#: core/models.py:915 msgid "region" msgstr "Regiunea" -#: core/models.py:1015 +#: core/models.py:916 msgid "postal code" msgstr "Cod poștal" -#: core/models.py:1016 +#: core/models.py:917 msgid "country" msgstr "Țara" -#: core/models.py:1023 +#: core/models.py:924 msgid "geolocation point: (longitude, latitude)" msgstr "Punct de geolocație (longitudine, latitudine)" -#: core/models.py:1026 +#: core/models.py:927 msgid "full JSON response from geocoder for this address" msgstr "Răspuns JSON complet de la geocoder pentru această adresă" -#: core/models.py:1031 +#: core/models.py:932 msgid "stored JSON response from the geocoding service" msgstr "Răspuns JSON stocat de la serviciul de geocodare" -#: core/models.py:1039 +#: core/models.py:940 msgid "address" msgstr "Adresă" -#: core/models.py:1040 +#: core/models.py:941 msgid "addresses" msgstr "Adrese" -#: core/models.py:1085 +#: core/models.py:953 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" +"Reprezintă un cod promoțional care poate fi utilizat pentru reduceri, " +"gestionând valabilitatea, tipul de reducere și aplicarea acestuia. Clasa " +"PromoCode stochează detalii despre un cod promoțional, inclusiv " +"identificatorul său unic, proprietățile de reducere (sumă sau procent), " +"perioada de valabilitate, utilizatorul asociat (dacă există) și starea " +"utilizării acestuia. Aceasta include funcționalități de validare și aplicare" +" a codului promoțional la o comandă, asigurându-se în același timp că sunt " +"respectate constrângerile." + +#: core/models.py:967 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:1086 +#: core/models.py:968 msgid "promo code identifier" msgstr "Cod promoțional de identificare" -#: core/models.py:1093 +#: core/models.py:975 msgid "fixed discount amount applied if percent is not used" msgstr "Valoarea fixă a reducerii aplicate dacă procentul nu este utilizat" -#: core/models.py:1094 +#: core/models.py:976 msgid "fixed discount amount" msgstr "Valoarea fixă a reducerii" -#: core/models.py:1100 +#: core/models.py:982 msgid "percentage discount applied if fixed amount is not used" msgstr "Procentul de reducere aplicat dacă suma fixă nu este utilizată" -#: core/models.py:1101 +#: core/models.py:983 msgid "percentage discount" msgstr "Reducere procentuală" -#: core/models.py:1106 +#: core/models.py:988 msgid "timestamp when the promocode expires" msgstr "Data la care expiră codul promoțional" -#: core/models.py:1107 +#: core/models.py:989 msgid "end validity time" msgstr "Timpul final de valabilitate" -#: core/models.py:1112 +#: core/models.py:994 msgid "timestamp from which this promocode is valid" msgstr "Timestamp de la care acest cod promoțional este valabil" -#: core/models.py:1113 +#: core/models.py:995 msgid "start validity time" msgstr "Ora de începere a valabilității" -#: core/models.py:1118 +#: core/models.py:1000 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:1119 +#: core/models.py:1001 msgid "usage timestamp" msgstr "Timestamp de utilizare" -#: core/models.py:1124 +#: core/models.py:1006 msgid "user assigned to this promocode if applicable" msgstr "Utilizatorul atribuit acestui cod promoțional, dacă este cazul" -#: core/models.py:1125 +#: core/models.py:1007 msgid "assigned user" msgstr "Utilizator atribuit" -#: core/models.py:1132 +#: core/models.py:1014 msgid "promo code" msgstr "Cod promoțional" -#: core/models.py:1133 +#: core/models.py:1015 msgid "promo codes" msgstr "Coduri promoționale" -#: core/models.py:1140 +#: core/models.py:1022 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2042,16 +2131,16 @@ msgstr "" "Trebuie definit un singur tip de reducere (sumă sau procent), dar nu ambele " "sau niciuna." -#: core/models.py:1155 +#: core/models.py:1037 msgid "promocode already used" msgstr "Codul promoțional a fost deja utilizat" -#: core/models.py:1171 +#: core/models.py:1053 #, 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:1180 +#: core/models.py:1062 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 " @@ -2068,140 +2157,140 @@ msgstr "" "de expediere sau de facturare. În egală măsură, funcționalitatea sprijină " "gestionarea produselor în ciclul de viață al comenzii." -#: core/models.py:1197 +#: core/models.py:1079 msgid "the billing address used for this order" msgstr "Adresa de facturare utilizată pentru această comandă" -#: core/models.py:1205 +#: core/models.py:1087 msgid "optional promo code applied to this order" msgstr "Cod promoțional opțional aplicat la această comandă" -#: core/models.py:1206 +#: core/models.py:1088 msgid "applied promo code" msgstr "Cod promoțional aplicat" -#: core/models.py:1214 +#: core/models.py:1096 msgid "the shipping address used for this order" msgstr "Adresa de expediere utilizată pentru această comandă" -#: core/models.py:1215 +#: core/models.py:1097 msgid "shipping address" msgstr "Adresa de expediere" -#: core/models.py:1221 +#: core/models.py:1103 msgid "current status of the order in its lifecycle" msgstr "Stadiul actual al comenzii în ciclul său de viață" -#: core/models.py:1222 +#: core/models.py:1104 msgid "order status" msgstr "Stadiul comenzii" -#: core/models.py:1227 core/models.py:1686 +#: core/models.py:1109 core/models.py:1560 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:1233 +#: core/models.py:1115 msgid "json representation of order attributes for this order" msgstr "Reprezentarea JSON a atributelor comenzii pentru această comandă" -#: core/models.py:1239 +#: core/models.py:1121 msgid "the user who placed the order" msgstr "Utilizatorul care a plasat comanda" -#: core/models.py:1240 +#: core/models.py:1122 msgid "user" msgstr "Utilizator" -#: core/models.py:1246 +#: core/models.py:1128 msgid "the timestamp when the order was finalized" msgstr "Momentul în care comanda a fost finalizată" -#: core/models.py:1247 +#: core/models.py:1129 msgid "buy time" msgstr "Cumpărați timp" -#: core/models.py:1254 +#: core/models.py:1136 msgid "a human-readable identifier for the order" msgstr "Un identificator ușor de citit pentru comandă" -#: core/models.py:1255 +#: core/models.py:1137 msgid "human readable id" msgstr "ID lizibil de către om" -#: core/models.py:1261 +#: core/models.py:1143 msgid "order" msgstr "Comandă" -#: core/models.py:1282 +#: core/models.py:1168 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:1316 +#: core/models.py:1202 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:1321 +#: core/models.py:1207 msgid "you cannot add inactive products to order" msgstr "Nu puteți adăuga produse inactive la comandă" -#: core/models.py:1338 +#: core/models.py:1224 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:1360 core/models.py:1385 core/models.py:1393 +#: core/models.py:1246 core/models.py:1271 core/models.py:1279 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:1381 +#: core/models.py:1267 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} nu există cu interogarea <{query}>!" -#: core/models.py:1413 +#: core/models.py:1299 msgid "promocode does not exist" msgstr "Codul promoțional nu există" -#: core/models.py:1419 +#: core/models.py:1305 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:1438 +#: core/models.py:1324 msgid "address does not exist" msgstr "Adresa nu există" -#: core/models.py:1459 core/models.py:1528 +#: core/models.py:1345 core/models.py:1414 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:1462 core/models.py:1524 +#: core/models.py:1348 core/models.py:1410 msgid "invalid force value" msgstr "Valoare forță invalidă" -#: core/models.py:1468 core/models.py:1531 +#: core/models.py:1354 core/models.py:1417 msgid "you cannot purchase an empty order!" msgstr "Nu puteți achiziționa o comandă goală!" -#: core/models.py:1487 +#: core/models.py:1373 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:1501 +#: core/models.py:1387 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:1506 +#: core/models.py:1392 msgid "insufficient funds to complete the order" msgstr "Insuficiența fondurilor pentru finalizarea comenzii" -#: core/models.py:1540 +#: core/models.py:1426 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2209,7 +2298,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:1549 +#: core/models.py:1435 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2217,146 +2306,201 @@ msgstr "" "Metodă de plată invalidă: {payment_method} de la " "{available_payment_methods}!" -#: core/models.py:1674 +#: core/models.py:1533 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" +"Reprezintă produsele asociate comenzilor și atributele acestora. Modelul " +"OrderProduct păstrează informații despre un produs care face parte dintr-o " +"comandă, inclusiv detalii precum prețul de achiziție, cantitatea, atributele" +" produsului și starea acestuia. Acesta gestionează notificările pentru " +"utilizator și administratori și se ocupă de operațiuni precum returnarea " +"soldului produsului sau adăugarea de feedback. Acest model oferă, de " +"asemenea, metode și proprietăți care susțin logica de afaceri, cum ar fi " +"calcularea prețului total sau generarea unui URL de descărcare pentru " +"produsele digitale. Modelul se integrează cu modelele Order și Product și " +"stochează o referință la acestea." + +#: core/models.py:1548 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:1675 +#: core/models.py:1549 msgid "purchase price at order time" msgstr "Prețul de achiziție la momentul comenzii" -#: core/models.py:1680 +#: core/models.py:1554 msgid "internal comments for admins about this ordered product" msgstr "" "Comentarii interne pentru administratori cu privire la acest produs comandat" -#: core/models.py:1681 +#: core/models.py:1555 msgid "internal comments" msgstr "Observații interne" -#: core/models.py:1687 +#: core/models.py:1561 msgid "user notifications" msgstr "Notificări pentru utilizatori" -#: core/models.py:1692 +#: core/models.py:1566 msgid "json representation of this item's attributes" msgstr "Reprezentarea JSON a atributelor acestui element" -#: core/models.py:1693 +#: core/models.py:1567 msgid "ordered product attributes" msgstr "Atribute de produs ordonate" -#: core/models.py:1698 +#: core/models.py:1572 msgid "reference to the parent order that contains this product" msgstr "Trimitere la comanda mamă care conține acest produs" -#: core/models.py:1699 +#: core/models.py:1573 msgid "parent order" msgstr "Ordinul părinților" -#: core/models.py:1708 +#: core/models.py:1582 msgid "the specific product associated with this order line" msgstr "Produsul specific asociat cu această linie de comandă" -#: core/models.py:1715 +#: core/models.py:1589 msgid "quantity of this specific product in the order" msgstr "Cantitatea acestui produs specific din comandă" -#: core/models.py:1716 +#: core/models.py:1590 msgid "product quantity" msgstr "Cantitatea produsului" -#: core/models.py:1723 +#: core/models.py:1597 msgid "current status of this product in the order" msgstr "Starea actuală a acestui produs în comandă" -#: core/models.py:1724 +#: core/models.py:1598 msgid "product line status" msgstr "Starea liniei de produse" -#: core/models.py:1784 +#: core/models.py:1661 msgid "order product must have an order" msgstr "Comandaprodusul trebuie să aibă o comandă asociată!" -#: core/models.py:1786 +#: core/models.py:1663 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Acțiune greșită specificată pentru feedback: {action}!" -#: core/models.py:1800 +#: core/models.py:1677 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:1806 +#: core/models.py:1683 msgid "name" msgstr "Nume și prenume" -#: core/models.py:1807 +#: core/models.py:1684 msgid "URL of the integration" msgstr "Adresa URL a integrării" -#: core/models.py:1808 +#: core/models.py:1685 msgid "authentication credentials" msgstr "Acreditări de autentificare" -#: core/models.py:1822 +#: core/models.py:1699 msgid "you can only have one default CRM provider" msgstr "Puteți avea un singur furnizor CRM implicit" -#: core/models.py:1826 +#: core/models.py:1703 msgid "CRM" msgstr "CRM" -#: core/models.py:1827 +#: core/models.py:1704 msgid "CRMs" msgstr "CRM-uri" -#: core/models.py:1839 +#: core/models.py:1716 msgid "order CRM link" msgstr "Legătura CRM a comenzii" -#: core/models.py:1840 +#: core/models.py:1717 msgid "orders CRM links" msgstr "Legături CRM pentru comenzi" -#: core/models.py:1874 +#: core/models.py:1722 +msgid "" +"Represents the downloading functionality for digital assets associated with " +"orders. The DigitalAssetDownload class provides the ability to manage and " +"access downloads related to order products. It maintains information about " +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." +msgstr "" +"Reprezintă funcționalitatea de descărcare pentru activele digitale asociate " +"comenzilor. Clasa DigitalAssetDownload oferă posibilitatea de a gestiona și " +"de a accesa descărcările legate de produsele de comandă. Aceasta păstrează " +"informații despre produsul de comandă asociat, numărul de descărcări și dacă" +" activul este vizibil public. Aceasta include o metodă de generare a unei " +"adrese URL pentru descărcarea activului atunci când comanda asociată este în" +" stare finalizată." + +#: core/models.py:1736 msgid "download" msgstr "Descărcare" -#: core/models.py:1875 +#: core/models.py:1737 msgid "downloads" msgstr "Descărcări" -#: core/models.py:1883 +#: core/models.py:1745 msgid "you can not download a digital asset for a non-finished order" msgstr "Nu puteți descărca un bun digital pentru o comandă nefinalizată" -#: core/models.py:1913 +#: core/models.py:1754 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." +msgstr "" +"Gestionează feedback-ul utilizatorilor pentru produse. Această clasă este " +"concepută pentru a capta și stoca feedback-ul utilizatorilor pentru anumite " +"produse pe care le-au achiziționat. Aceasta conține atribute pentru a stoca " +"comentariile utilizatorilor, o referință la produsul aferent din comandă și " +"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:1766 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:1914 +#: core/models.py:1767 msgid "feedback comments" msgstr "Comentarii de feedback" -#: core/models.py:1921 +#: core/models.py:1774 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:1922 +#: core/models.py:1775 msgid "related order product" msgstr "Produs aferent comenzii" -#: core/models.py:1927 +#: core/models.py:1780 msgid "user-assigned rating for the product" msgstr "Rating atribuit de utilizator pentru produs" -#: core/models.py:1928 +#: core/models.py:1781 msgid "product rating" msgstr "Evaluarea produsului" @@ -2575,17 +2719,17 @@ msgstr "Valoare timeout invalidă, trebuie să fie între 0 și 216000 secunde" msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | contactați-ne inițiat" -#: core/utils/emailing.py:64 +#: core/utils/emailing.py:74 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Confirmarea comenzii" -#: core/utils/emailing.py:99 +#: core/utils/emailing.py:109 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Livrarea comenzii" -#: core/utils/emailing.py:187 +#: core/utils/emailing.py:197 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | promocode acordat" @@ -2609,15 +2753,15 @@ msgstr "" msgid "invalid phone number format" msgstr "Format invalid al numărului de telefon" -#: core/views.py:481 +#: core/views.py:489 msgid "you can only download the digital asset once" msgstr "Puteți descărca activul digital o singură dată" -#: core/views.py:539 +#: core/views.py:547 msgid "favicon not found" msgstr "favicon nu a fost găsit" -#: core/viewsets.py:1319 +#: core/viewsets.py:1357 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Eroare de geocodare: {e}" diff --git a/core/locale/ru_RU/LC_MESSAGES/django.mo b/core/locale/ru_RU/LC_MESSAGES/django.mo index 4bf7a31ff6b2aaeb999d2a815c41bff30d347949..dd780dd720fdf2d85d470b06cb1d57be0292b850 100644 GIT binary patch delta 22116 zcmai)2Y?hs`nP+?2nfP1QKZRfNfH!Pf`Et#Q9uP1hS>o|cXyVVS%QHfNKn%0aG)H5 z3L-|rvXW8H(=)qkKFsG~7PFpW_?}-?%_g}2*IeyWRoz|n)|;w&yd|Gh+x2Aio!i~>GT=y93tkORfKy>p7=z8=Qdk|{3#-BhVKulF z&Vf6j-s|1N^BTZ`Fw^sr-Y6=o=m^6a@K>k@13m48bzy7TnXn@~4K{}pVG)8}2m90R z+1m{0T?6~lp6mFi$A2y*q38E}-7OV-MgpJ|zurB;J)Hq*5Ev(*nd;~UuDAkKXtmGYpSjGDz zNu?o`p%Xl>D;x*q9P{Cca5dEZd*StPH*634Txp$gJgi5163m2oP|x24WvVq$g4_@5 z!$K&5pM(uy@(>lR>EOw$)Ohl8O6oB(|ogO|`c4WL%q4Ay~d zp#si~gySPn0zM99``4jtcNEGLb%Qnq z`;G&kCLRN|kZh=NXTmI)gz~kAU{cQTmh1Q$o=&^PWSdgQKnb$K@h+%|cewVGPy)OT zo59ZZ4P^t7C zs1;S8W(DgAHPJ;-;kpP)rR$-5V>|TW(@@U(3Dg3rL_F_8m;q1wEzZG!#aF4zqofxY3$h+h?63?;}ISP$L^HSki`z7L*4y9mkz zuR)DlJJ0SJCmUk_VN|5*9LE*Vr@alfge9;i{2I1`e$?I{47<_}!fJ3il%{TjGQlQT z3qI!B&%hD1KXUzD^SQ71??dH8cox(^7eIyOXef!NL8=70TH*!hY}-I26{t&Wua^ zQ&Ctff^wRdpd@@9O5!h|Cj1e~t23{+JRP>DJ;Al-!Dh5KLD~Eul<#~GrGW-F@GNWr zFNHJVF#OMZp2|o)aHI9o@zAHe7|Iv6Kn;8V$`o(HUa;yM%f3(=nCf^N?5OAA0C*TG z?0n|ZbLYWRp?t3w#oNN4)8Qd^qtRU3J_l-|q~mrdRel7|fDPx_`xilJa4sAIpK
  • gWhA$5XcL zWdkVDRMfz-Y`X*tX-`GHZ`&UOW;Yc**n&Dxj$#I0MeTtQW?>vzFgeDLsaS&=(K^%~ z+KKA;n)Rl=e+QN5Gt_(DBDp%Fi_!O=$S~DW2C9R6)DQgDN_)Q!hj4uvYRy|PAKOvS ze?@g1&M36Y2jDEs#R}YkdalFz5R3KwcT!OTX)L%p$V08&3{=LOP>JnBJ=cnQ?wGxQ z#kTL-_8TM@^Aq*E!~uU^?87SBIkvqS13F0dP?4vRT+Cf$^E;;>IHi{V8jU)bOXLwn z#AKqF&{tAI=(AHPC9;Vq;@`q*I}K5<`WYLl_^9ep=H+IaS__Qsym;X)Dg*nXR3+d19x^?f@e@< zFuqSpaKFbDwPtZs(}vY+mjrXYWo_HNKU~4XNkiL$DW@VLLsz$k&RvQQeoRSq`+UC6 TbH_uwF9iK*liFI+y25?~RFS-& diff --git a/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.po b/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.po index 43511ada..0f362680 100644 --- a/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.po +++ b/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -70,7 +70,7 @@ msgstr "验证令牌" msgid "Verify a token (refresh or access)." msgstr "验证令牌(刷新或访问)。" -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:115 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 msgid "the token is valid" msgstr "令牌有效" @@ -104,7 +104,7 @@ msgstr "确认用户密码重置" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:115 +#: vibes_auth/viewsets.py:82 msgid "passwords do not match" msgstr "密码不匹配" @@ -147,8 +147,8 @@ msgstr "畸形电话号码:{phone_number}!" msgid "Invalid attribute format: {attribute_pair}" msgstr "属性格式无效:{attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 -#: vibes_auth/viewsets.py:177 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:125 +#: vibes_auth/viewsets.py:144 msgid "activation link is invalid!" msgstr "激活链接无效!" @@ -160,14 +160,14 @@ msgstr "帐户已激活..." msgid "something went wrong: {e!s}" msgstr "出了问题:{e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:93 msgid "token is invalid!" msgstr "令牌无效!" #: vibes_auth/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:180 @@ -342,20 +342,15 @@ msgstr "你好%(user_first_name)s," #: vibes_auth/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 -msgid "" -"reset\n" -" password" -msgstr "" -"激活\n" -" 账户" +msgid "reset password" +msgstr "重置密码" -#: vibes_auth/templates/user_reset_password_email.html:98 +#: vibes_auth/templates/user_reset_password_email.html:97 #: vibes_auth/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" @@ -364,7 +359,7 @@ msgstr "" "如果上面的按钮不起作用,请将以下 URL 复制并粘贴到浏览器中\n" " 复制并粘贴到您的浏览器中:" -#: vibes_auth/templates/user_reset_password_email.html:101 +#: vibes_auth/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." @@ -372,12 +367,12 @@ msgstr "" "如果您没有发送此请求,请忽略此邮件\n" " 电子邮件。" -#: vibes_auth/templates/user_reset_password_email.html:103 +#: vibes_auth/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:109 +#: vibes_auth/templates/user_reset_password_email.html:108 #: vibes_auth/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "保留所有权利" @@ -421,17 +416,51 @@ msgstr "{config.PROJECT_NAME}| 重置密码" 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:117 +#: vibes_auth/views.py:29 +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 " +"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 " +"令牌(访问和刷新)。它建立在基本令牌视图之上,并确保适当的速率限制,以防止暴力攻击。" + +#: vibes_auth/views.py:47 +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." +msgstr "" +"处理刷新令牌以进行身份验证。该类用于为作为身份验证系统一部分的令牌刷新操作提供功能。它能确保客户端在规定的速率限制内请求刷新令牌。视图依赖于相关的序列化器来验证令牌刷新输入并产生适当的输出。" + +#: vibes_auth/views.py:66 +msgid "" +"Represents a view for verifying JSON Web Tokens (JWT) using specific " +"serialization and validation logic. " +msgstr "代表使用特定序列化和验证逻辑验证 JSON Web 标记 (JWT) 的视图。" + +#: vibes_auth/views.py:79 msgid "the token is invalid" msgstr "令牌无效" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:43 +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." +msgstr "" +"用户视图集实施。\n" +"该类提供了一组操作,用于管理用户相关数据,如创建、检索、更新、删除以及自定义操作,包括密码重置、上传头像、激活账户和合并最近查看的项目。该类对 mixins 和 GenericViewSet 进行了扩展,以实现强大的 API 处理功能。" + +#: vibes_auth/viewsets.py:97 msgid "password reset successfully" msgstr "密码已重置成功!" -#: vibes_auth/viewsets.py:163 +#: vibes_auth/viewsets.py:130 msgid "account already activated!" msgstr "您已经激活了账户..." diff --git a/vibes_auth/serializers.py b/vibes_auth/serializers.py index 58b6480c..3fca7fcf 100644 --- a/vibes_auth/serializers.py +++ b/vibes_auth/serializers.py @@ -70,7 +70,7 @@ class UserSerializer(ModelSerializer): "created", ] - def create(self, validated_data): + def create(self, validated_data: dict[str, Any]): user = User.objects.create( email=validated_data.pop("email"), first_name=validated_data.pop("first_name", ""), @@ -83,7 +83,7 @@ class UserSerializer(ModelSerializer): user.save() return user - def update(self, instance, validated_data): + def update(self, instance: User, validated_data: dict[str, Any]): for attr, value in validated_data.items(): if is_safe_key(attr): setattr(instance, attr, value) @@ -93,7 +93,7 @@ class UserSerializer(ModelSerializer): instance.save() return instance - def validate(self, attrs): + def validate(self, attrs: dict[str, Any]) -> dict[str, Any]: if "attributes" in attrs: if not isinstance(attrs["attributes"], dict): raise ValidationError(_("attributes must be a dictionary")) @@ -109,13 +109,13 @@ class UserSerializer(ModelSerializer): raise ValidationError(_("passwords do not match")) if "phone_number" in attrs: validate_phone_number(attrs["phone_number"]) - if self.instance: + if type(self.instance) is User: if User.objects.filter(phone_number=attrs["phone_number"]).exclude(uuid=self.instance.uuid).exists(): phone_number = attrs["phone_number"] raise ValidationError(_(f"malformed phone number: {phone_number}")) if "email" in attrs: validate_email(attrs["email"]) - if self.instance: + if type(self.instance) is User: if User.objects.filter(email=attrs["email"]).exclude(uuid=self.instance.uuid).exists(): email = attrs["email"] raise ValidationError(_(f"malformed email: {email}")) @@ -123,7 +123,7 @@ class UserSerializer(ModelSerializer): return attrs @extend_schema_field(ProductSimpleSerializer(many=True)) - def get_recently_viewed(self, obj) -> Collection[Any]: + def get_recently_viewed(self, obj: User) -> Collection[Any]: """ Returns a list of serialized ProductSimpleSerializer representations for the UUIDs in obj.recently_viewed. diff --git a/vibes_auth/tasks.py b/vibes_auth/tasks.py index aa103eb6..79f7a870 100644 --- a/vibes_auth/tasks.py +++ b/vibes_auth/tasks.py @@ -5,7 +5,7 @@ from vibes_auth.models import User @shared_task(queue="default") -def create_pending_order(user_uuid): +def create_pending_order(user_uuid: str) -> tuple[bool, str]: try: user = User.objects.get(uuid=user_uuid) Order.objects.create(user=user, status="PENDING") @@ -15,7 +15,7 @@ def create_pending_order(user_uuid): @shared_task(queue="default") -def create_wishlist(user_uuid): +def create_wishlist(user_uuid: str) -> tuple[bool, str]: try: user = User.objects.get(uuid=user_uuid) Wishlist.objects.create(user=user) diff --git a/vibes_auth/templates/user_reset_password_email.html b/vibes_auth/templates/user_reset_password_email.html index 0d1b7946..f1b6d7e1 100644 --- a/vibes_auth/templates/user_reset_password_email.html +++ b/vibes_auth/templates/user_reset_password_email.html @@ -92,8 +92,7 @@

    {% blocktrans %}we have received a request to reset your password. please reset your password by clicking the button below:{% endblocktrans %}

    {% blocktrans %}if the button above does not work, please copy and paste the following URL into your web browser:{% endblocktrans %}

    diff --git a/vibes_auth/validators.py b/vibes_auth/validators.py index ec74c7e9..c171bb11 100644 --- a/vibes_auth/validators.py +++ b/vibes_auth/validators.py @@ -5,7 +5,7 @@ from django.core.validators import EmailValidator from django.utils.translation import gettext_lazy as _ -def validate_phone_number(value): +def validate_phone_number(value: str): phone_regex = re.compile(r"^\+?1?\d{9,15}$") # The regex pattern to match valid phone numbers if not phone_regex.match(value): raise ValidationError( @@ -16,7 +16,7 @@ def validate_phone_number(value): ) -def is_valid_email(value): +def is_valid_email(value: str): validator = EmailValidator() try: validator(value) @@ -25,7 +25,7 @@ def is_valid_email(value): return False -def is_valid_phone_number(value): +def is_valid_phone_number(value: str): try: validate_phone_number(value) return True diff --git a/vibes_auth/views.py b/vibes_auth/views.py index 39326f5d..52826bb3 100644 --- a/vibes_auth/views.py +++ b/vibes_auth/views.py @@ -7,6 +7,7 @@ from drf_spectacular.utils import ( extend_schema_view, ) from rest_framework import status +from rest_framework.request import Request from rest_framework.response import Response from rest_framework_simplejwt.exceptions import TokenError from rest_framework_simplejwt.views import TokenViewBase @@ -24,90 +25,51 @@ logger = logging.getLogger("django") @extend_schema_view(**TOKEN_OBTAIN_SCHEMA) class TokenObtainPairView(TokenViewBase): - """ - Represents a view for getting a pair of access and refresh tokens. - - 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. - - Attributes: - serializer_class: Serializer class used for processing request data - and returning response data. - _serializer_class: Internal serializer class reference. - - Usage: - This view should be used in authentication-related APIs where clients - need to get new sets of tokens. It incorporates both a serializer for - processing incoming data and also rate limiting to enforce request limits. - - Methods: - post: Handles HTTP POST requests for token retrieval. This method is - subject to rate limiting depending on the global DEBUG setting. - """ + __doc__ = _( + "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." + ) 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")) - def post(self, request, *args, **kwargs): + def post(self, request: Request, *args, **kwargs) -> Response: return super().post(request, *args, **kwargs) @extend_schema_view(**TOKEN_REFRESH_SCHEMA) class TokenRefreshView(TokenViewBase): - """ - 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. - - Attributes: - serializer_class (Serializer): The serializer used to handle - token refresh operations. This establishes the validation - and processing logic for incoming requests. - - _serializer_class (Serializer): Internal reference to the - serializer, typically used for ensuring consistent processing - for refresh-related logic. - - Methods: - post: Handles HTTP POST requests to refresh the token. - Rate limits requests based on the IP of the client submitting - the request. Rate limit settings are defined depending on - whether the application is in DEBUG mode or not. - """ + __doc__ = _( + "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." + ) 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")) - def post(self, request, *args, **kwargs): + def post(self, request: Request, *args, **kwargs) -> Response: return super().post(request, *args, **kwargs) @extend_schema_view(**TOKEN_VERIFY_SCHEMA) class TokenVerifyView(TokenViewBase): - """ - Represents a view for verifying JSON Web Tokens (JWT) using specific serialization - and validation logic. - - This class inherits from the `TokenViewBase` and is designed to handle the POST - request for verifying JWT tokens. Tokens are validated using the associated - `TokenVerifySerializer`. The view processes incoming requests, validates tokens, - and returns a response indicating whether the token is valid. If valid, associated - user data can also be returned. Errors during token validation result in an appropriate - error response. - """ + __doc__ = _( + "Represents a view for verifying JSON Web Tokens (JWT) using specific serialization and validation logic. " + ) serializer_class = TokenVerifySerializer # type: ignore [assignment] _serializer_class = TokenVerifySerializer # type: ignore [assignment] - def post(self, request, *args, **kwargs): + def post(self, request: Request, *args, **kwargs) -> Response: try: serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) diff --git a/vibes_auth/viewsets.py b/vibes_auth/viewsets.py index 9e756267..be1881f7 100644 --- a/vibes_auth/viewsets.py +++ b/vibes_auth/viewsets.py @@ -14,6 +14,7 @@ from drf_spectacular.utils import extend_schema_view from rest_framework import mixins, status from rest_framework.decorators import action from rest_framework.permissions import AllowAny, IsAuthenticated +from rest_framework.request import Request from rest_framework.response import Response from rest_framework.viewsets import GenericViewSet from rest_framework_simplejwt.tokens import RefreshToken @@ -30,7 +31,6 @@ from vibes_auth.utils.emailing import send_reset_password_email_task logger = logging.getLogger("django") -# noinspection GrazieInspection @extend_schema_view(**USER_SCHEMA) class UserViewSet( mixins.CreateModelMixin, @@ -39,46 +39,13 @@ class UserViewSet( mixins.DestroyModelMixin, GenericViewSet, ): - """ - User view set implementation. - - 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. - - Attributes: - serializer_class (class): Serializer class used to serialize the user data. - queryset (QuerySet): Queryset that fetches active user objects. - permission_classes (list): List of permissions applied to certain actions. - - Methods: - reset_password(request): - Sends a reset password email to a user based on the provided email. - upload_avatar(request, **_kwargs): - Allows an authenticated user to upload an avatar for their profile. - confirm_password_reset(request, *_args, **_kwargs): - Confirms the password reset and updates the new password for a user. - create(request, *args, **kwargs): - Creates a new user instance using the provided payload. - activate(request): - Activates a user account based on their unique activation link. - merge_recently_viewed(request, **_kwargs): - Merges a list of recently viewed products into the user's profile. - retrieve(request, pk=None, *args, **kwargs): - Retrieves user details for the given user ID. - update(request, pk=None, *args, **kwargs): - Updates user details for the given user ID. - - Raises: - DoesNotExist: - Raised when a user is not found in specific methods working with - database queries. - ValidationError: - Raised for invalid data during serialization or password validation. - OverflowError, TypeError: - Raised for decoding or type conversion issues. - """ + __doc__ = _( + "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." + ) serializer_class = UserSerializer queryset = User.objects.filter(is_active=True) @@ -86,7 +53,7 @@ class UserViewSet( @action(detail=False, methods=["post"]) @method_decorator(ratelimit(key="ip", rate="2/h" if not DEBUG else "888/h")) - def reset_password(self, request): + def reset_password(self, request: Request) -> Response: user = None with suppress(User.DoesNotExist): user = User.objects.get(email=request.data.get("email")) @@ -96,7 +63,7 @@ class UserViewSet( @action(detail=True, methods=["put"], permission_classes=[IsAuthenticated]) @method_decorator(ratelimit(key="ip", rate="2/h" if not DEBUG else "888/h")) - def upload_avatar(self, request, **_kwargs): + def upload_avatar(self, request: Request, *args, **kwargs) -> Response: user = self.get_object() if request.user != user: return Response(status=status.HTTP_403_FORBIDDEN) @@ -108,7 +75,7 @@ class UserViewSet( @action(detail=False, methods=["post"]) @method_decorator(ratelimit(key="ip", rate="2/h" if not DEBUG else "888/h")) - def confirm_password_reset(self, request, *_args, **_kwargs): + def confirm_password_reset(self, request: Request, *args, **kwargs) -> Response: try: if not compare_digest(request.data.get("password"), request.data.get("confirm_password")): return Response( @@ -137,7 +104,7 @@ class UserViewSet( return Response(data, status=status.HTTP_400_BAD_REQUEST) @method_decorator(ratelimit(key="ip", rate="3/h" if not DEBUG else "888/h")) - def create(self, request, *args, **kwargs): + def create(self, request: Request, *args, **kwargs) -> Response: serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) user = serializer.save() @@ -147,7 +114,7 @@ class UserViewSet( @action(detail=False, methods=["post"]) @method_decorator(ratelimit(key="ip", rate="2/h" if not DEBUG else "888/h")) - def activate(self, request): + def activate(self, request: Request) -> Response: detail = "" activation_error = None try: @@ -185,7 +152,7 @@ class UserViewSet( return Response(response_data, status=status.HTTP_200_OK) @action(detail=True, methods=["put"], permission_classes=[IsAuthenticated]) - def merge_recently_viewed(self, request, **_kwargs): + def merge_recently_viewed(self, request: Request, *args, **kwargs) -> Response: user = self.get_object() if request.user != user: return Response(status=status.HTTP_403_FORBIDDEN) @@ -195,12 +162,12 @@ class UserViewSet( user.add_to_recently_viewed(product_uuid) return Response(status=status.HTTP_202_ACCEPTED, data=self.serializer_class(user).data) - def retrieve(self, request, pk=None, *args, **kwargs): + def retrieve(self, request: Request, *args, **kwargs) -> Response: instance = self.get_object() serializer = self.get_serializer(instance) return Response(serializer.data) - def update(self, request, pk=None, *args, **kwargs): + def update(self, request: Request, *args, **kwargs) -> Response: instance = self.get_object() serializer = self.get_serializer(instance) instance = serializer.update(instance=self.get_object(), validated_data=request.data) From dc4da60e82ee1950211b7ea8d79619e847130184 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Tue, 7 Oct 2025 15:53:08 +0300 Subject: [PATCH 9/9] Features: 1) Add support for multilingual meta descriptions in the `post` model, covering 30+ locales. Fixes: None. Extra: Update `django.po` and `django.mo` localization files to reflect translation changes and model updates. --- blog/locale/ar_AR/LC_MESSAGES/django.po | 24 +-- blog/locale/cs_CZ/LC_MESSAGES/django.po | 24 +-- blog/locale/da_DK/LC_MESSAGES/django.po | 24 +-- blog/locale/de_DE/LC_MESSAGES/django.po | 24 +-- blog/locale/en_GB/LC_MESSAGES/django.po | 24 +-- blog/locale/en_US/LC_MESSAGES/django.po | 24 +-- blog/locale/es_ES/LC_MESSAGES/django.po | 24 +-- blog/locale/fa_IR/LC_MESSAGES/django.po | 24 +-- blog/locale/fr_FR/LC_MESSAGES/django.po | 24 +-- blog/locale/he_IL/LC_MESSAGES/django.po | 24 +-- blog/locale/hi_IN/LC_MESSAGES/django.po | 24 +-- blog/locale/hr_HR/LC_MESSAGES/django.po | 24 +-- blog/locale/id_ID/LC_MESSAGES/django.po | 24 +-- blog/locale/it_IT/LC_MESSAGES/django.po | 24 +-- blog/locale/ja_JP/LC_MESSAGES/django.po | 24 +-- blog/locale/kk_KZ/LC_MESSAGES/django.po | 24 +-- blog/locale/ko_KR/LC_MESSAGES/django.po | 24 +-- blog/locale/nl_NL/LC_MESSAGES/django.po | 24 +-- blog/locale/no_NO/LC_MESSAGES/django.po | 24 +-- blog/locale/pl_PL/LC_MESSAGES/django.po | 24 +-- blog/locale/pt_BR/LC_MESSAGES/django.po | 24 +-- blog/locale/ro_RO/LC_MESSAGES/django.po | 24 +-- blog/locale/ru_RU/LC_MESSAGES/django.po | 24 +-- blog/locale/sv_SE/LC_MESSAGES/django.po | 24 +-- blog/locale/th_TH/LC_MESSAGES/django.po | 24 +-- blog/locale/tr_TR/LC_MESSAGES/django.po | 24 +-- blog/locale/vi_VN/LC_MESSAGES/django.po | 24 +-- blog/locale/zh_Hans/LC_MESSAGES/django.po | 24 +-- ...on_post_meta_description_ar_ar_and_more.py | 158 ++++++++++++++++++ blog/models.py | 1 + blog/translation.py | 2 +- core/locale/ar_AR/LC_MESSAGES/django.mo | Bin 97914 -> 97954 bytes core/locale/ar_AR/LC_MESSAGES/django.po | 6 +- core/locale/cs_CZ/LC_MESSAGES/django.mo | Bin 83586 -> 83626 bytes core/locale/cs_CZ/LC_MESSAGES/django.po | 6 +- core/locale/da_DK/LC_MESSAGES/django.mo | Bin 81933 -> 81972 bytes core/locale/da_DK/LC_MESSAGES/django.po | 6 +- core/locale/de_DE/LC_MESSAGES/django.mo | Bin 86688 -> 86730 bytes core/locale/de_DE/LC_MESSAGES/django.po | 6 +- core/locale/en_GB/LC_MESSAGES/django.mo | Bin 79043 -> 79075 bytes core/locale/en_GB/LC_MESSAGES/django.po | 6 +- core/locale/en_US/LC_MESSAGES/django.mo | Bin 79034 -> 79066 bytes core/locale/en_US/LC_MESSAGES/django.po | 6 +- core/locale/es_ES/LC_MESSAGES/django.mo | Bin 84811 -> 84848 bytes core/locale/es_ES/LC_MESSAGES/django.po | 6 +- core/locale/fa_IR/LC_MESSAGES/django.po | 6 +- core/locale/fr_FR/LC_MESSAGES/django.mo | Bin 87394 -> 87438 bytes core/locale/fr_FR/LC_MESSAGES/django.po | 6 +- core/locale/he_IL/LC_MESSAGES/django.mo | Bin 90780 -> 90822 bytes core/locale/he_IL/LC_MESSAGES/django.po | 6 +- core/locale/hi_IN/LC_MESSAGES/django.po | 6 +- core/locale/hr_HR/LC_MESSAGES/django.po | 6 +- core/locale/id_ID/LC_MESSAGES/django.mo | Bin 81927 -> 81967 bytes core/locale/id_ID/LC_MESSAGES/django.po | 6 +- core/locale/it_IT/LC_MESSAGES/django.mo | Bin 84954 -> 84992 bytes core/locale/it_IT/LC_MESSAGES/django.po | 6 +- core/locale/ja_JP/LC_MESSAGES/django.mo | Bin 89881 -> 89918 bytes core/locale/ja_JP/LC_MESSAGES/django.po | 6 +- core/locale/kk_KZ/LC_MESSAGES/django.po | 6 +- core/locale/ko_KR/LC_MESSAGES/django.mo | Bin 84997 -> 85032 bytes core/locale/ko_KR/LC_MESSAGES/django.po | 6 +- core/locale/nl_NL/LC_MESSAGES/django.mo | Bin 84564 -> 84602 bytes core/locale/nl_NL/LC_MESSAGES/django.po | 6 +- core/locale/no_NO/LC_MESSAGES/django.mo | Bin 82492 -> 82529 bytes core/locale/no_NO/LC_MESSAGES/django.po | 6 +- core/locale/pl_PL/LC_MESSAGES/django.mo | Bin 83945 -> 83982 bytes core/locale/pl_PL/LC_MESSAGES/django.po | 6 +- core/locale/pt_BR/LC_MESSAGES/django.mo | Bin 84470 -> 84510 bytes core/locale/pt_BR/LC_MESSAGES/django.po | 6 +- core/locale/ro_RO/LC_MESSAGES/django.mo | Bin 86166 -> 86204 bytes core/locale/ro_RO/LC_MESSAGES/django.po | 6 +- core/locale/ru_RU/LC_MESSAGES/django.mo | Bin 111599 -> 111653 bytes core/locale/ru_RU/LC_MESSAGES/django.po | 6 +- core/locale/sv_SE/LC_MESSAGES/django.mo | Bin 82581 -> 82620 bytes core/locale/sv_SE/LC_MESSAGES/django.po | 6 +- core/locale/th_TH/LC_MESSAGES/django.mo | Bin 133039 -> 133088 bytes core/locale/th_TH/LC_MESSAGES/django.po | 6 +- core/locale/tr_TR/LC_MESSAGES/django.mo | Bin 84641 -> 84677 bytes core/locale/tr_TR/LC_MESSAGES/django.po | 6 +- core/locale/vi_VN/LC_MESSAGES/django.mo | Bin 94823 -> 94859 bytes core/locale/vi_VN/LC_MESSAGES/django.po | 6 +- core/locale/zh_Hans/LC_MESSAGES/django.mo | Bin 74166 -> 74200 bytes core/locale/zh_Hans/LC_MESSAGES/django.po | 6 +- core/templates/json_table_widget.html | 65 +++---- evibes/locale/ar_AR/LC_MESSAGES/django.po | 18 +- evibes/locale/cs_CZ/LC_MESSAGES/django.po | 18 +- evibes/locale/da_DK/LC_MESSAGES/django.po | 18 +- evibes/locale/de_DE/LC_MESSAGES/django.po | 18 +- evibes/locale/en_GB/LC_MESSAGES/django.po | 18 +- evibes/locale/en_US/LC_MESSAGES/django.po | 18 +- evibes/locale/es_ES/LC_MESSAGES/django.po | 18 +- evibes/locale/fa_IR/LC_MESSAGES/django.po | 18 +- evibes/locale/fr_FR/LC_MESSAGES/django.po | 18 +- evibes/locale/he_IL/LC_MESSAGES/django.po | 18 +- evibes/locale/hi_IN/LC_MESSAGES/django.po | 18 +- evibes/locale/hr_HR/LC_MESSAGES/django.po | 18 +- evibes/locale/id_ID/LC_MESSAGES/django.po | 18 +- evibes/locale/it_IT/LC_MESSAGES/django.po | 18 +- evibes/locale/ja_JP/LC_MESSAGES/django.po | 18 +- evibes/locale/kk_KZ/LC_MESSAGES/django.po | 18 +- evibes/locale/ko_KR/LC_MESSAGES/django.po | 18 +- evibes/locale/nl_NL/LC_MESSAGES/django.po | 18 +- evibes/locale/no_NO/LC_MESSAGES/django.po | 18 +- evibes/locale/pl_PL/LC_MESSAGES/django.po | 18 +- evibes/locale/pt_BR/LC_MESSAGES/django.po | 18 +- evibes/locale/ro_RO/LC_MESSAGES/django.po | 18 +- evibes/locale/ru_RU/LC_MESSAGES/django.po | 18 +- evibes/locale/sv_SE/LC_MESSAGES/django.po | 18 +- evibes/locale/th_TH/LC_MESSAGES/django.po | 18 +- evibes/locale/tr_TR/LC_MESSAGES/django.po | 18 +- evibes/locale/vi_VN/LC_MESSAGES/django.po | 18 +- evibes/locale/zh_Hans/LC_MESSAGES/django.po | 18 +- evibes/settings/constance.py | 15 +- 113 files changed, 919 insertions(+), 666 deletions(-) create mode 100644 blog/migrations/0006_post_meta_description_post_meta_description_ar_ar_and_more.py diff --git a/blog/locale/ar_AR/LC_MESSAGES/django.po b/blog/locale/ar_AR/LC_MESSAGES/django.po index 1640991d..acb45ba2 100644 --- a/blog/locale/ar_AR/LC_MESSAGES/django.po +++ b/blog/locale/ar_AR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -25,44 +25,44 @@ msgstr "عنوان المنشور" msgid "title" msgstr "العنوان" -#: blog/models.py:83 +#: blog/models.py:84 msgid "post" msgstr "المنشور" -#: blog/models.py:84 +#: blog/models.py:85 msgid "posts" msgstr "المنشورات" -#: blog/models.py:88 +#: blog/models.py:89 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" "ملفات تخفيض السعر غير مدعومة Yer - استخدم محتوى تخفيض السعر بدلاً من ذلك!" -#: blog/models.py:90 +#: blog/models.py:91 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "يجب توفير ملف ترميز أو محتوى ترميز مخفض - متنافيان" -#: blog/models.py:122 +#: blog/models.py:123 msgid "internal tag identifier for the post tag" msgstr "معرّف العلامة الداخلي لعلامة المنشور" -#: blog/models.py:123 +#: blog/models.py:124 msgid "tag name" msgstr "اسم العلامة" -#: blog/models.py:127 +#: blog/models.py:128 msgid "user-friendly name for the post tag" msgstr "اسم سهل الاستخدام لعلامة المنشور" -#: blog/models.py:128 +#: blog/models.py:129 msgid "tag display name" msgstr "اسم عرض العلامة" -#: blog/models.py:136 +#: blog/models.py:137 msgid "post tag" msgstr "علامة المشاركة" -#: blog/models.py:137 +#: blog/models.py:138 msgid "post tags" msgstr "علامات المشاركة" diff --git a/blog/locale/cs_CZ/LC_MESSAGES/django.po b/blog/locale/cs_CZ/LC_MESSAGES/django.po index 5277451a..a8218ed7 100644 --- a/blog/locale/cs_CZ/LC_MESSAGES/django.po +++ b/blog/locale/cs_CZ/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -25,46 +25,46 @@ msgstr "Název příspěvku" msgid "title" msgstr "Název" -#: blog/models.py:83 +#: blog/models.py:84 msgid "post" msgstr "Příspěvek" -#: blog/models.py:84 +#: blog/models.py:85 msgid "posts" msgstr "Příspěvky" -#: blog/models.py:88 +#: blog/models.py:89 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:90 +#: blog/models.py:91 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:122 +#: blog/models.py:123 msgid "internal tag identifier for the post tag" msgstr "interní identifikátor tagu pro tag příspěvku" -#: blog/models.py:123 +#: blog/models.py:124 msgid "tag name" msgstr "Název štítku" -#: blog/models.py:127 +#: blog/models.py:128 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:128 +#: blog/models.py:129 msgid "tag display name" msgstr "Zobrazení názvu štítku" -#: blog/models.py:136 +#: blog/models.py:137 msgid "post tag" msgstr "Označení příspěvku" -#: blog/models.py:137 +#: blog/models.py:138 msgid "post tags" msgstr "Štítky příspěvků" diff --git a/blog/locale/da_DK/LC_MESSAGES/django.po b/blog/locale/da_DK/LC_MESSAGES/django.po index e1741de6..b053a23d 100644 --- a/blog/locale/da_DK/LC_MESSAGES/django.po +++ b/blog/locale/da_DK/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -25,44 +25,44 @@ msgstr "Indlæggets titel" msgid "title" msgstr "Titel" -#: blog/models.py:83 +#: blog/models.py:84 msgid "post" msgstr "Indlæg" -#: blog/models.py:84 +#: blog/models.py:85 msgid "posts" msgstr "Indlæg" -#: blog/models.py:88 +#: blog/models.py:89 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:90 +#: blog/models.py:91 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:122 +#: blog/models.py:123 msgid "internal tag identifier for the post tag" msgstr "intern tag-identifikator for indlægs-tagget" -#: blog/models.py:123 +#: blog/models.py:124 msgid "tag name" msgstr "Tag-navn" -#: blog/models.py:127 +#: blog/models.py:128 msgid "user-friendly name for the post tag" msgstr "Brugervenligt navn til posttagget" -#: blog/models.py:128 +#: blog/models.py:129 msgid "tag display name" msgstr "Navn på tag-visning" -#: blog/models.py:136 +#: blog/models.py:137 msgid "post tag" msgstr "Tag til indlæg" -#: blog/models.py:137 +#: blog/models.py:138 msgid "post tags" msgstr "Tags til indlæg" diff --git a/blog/locale/de_DE/LC_MESSAGES/django.po b/blog/locale/de_DE/LC_MESSAGES/django.po index 485fb45f..84004c8a 100644 --- a/blog/locale/de_DE/LC_MESSAGES/django.po +++ b/blog/locale/de_DE/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -25,47 +25,47 @@ msgstr "Titel des Beitrags" msgid "title" msgstr "Titel" -#: blog/models.py:83 +#: blog/models.py:84 msgid "post" msgstr "Beitrag" -#: blog/models.py:84 +#: blog/models.py:85 msgid "posts" msgstr "Beiträge" -#: blog/models.py:88 +#: blog/models.py:89 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:90 +#: blog/models.py:91 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:122 +#: blog/models.py:123 msgid "internal tag identifier for the post tag" msgstr "interner Tag-Bezeichner für den Post-Tag" -#: blog/models.py:123 +#: blog/models.py:124 msgid "tag name" msgstr "Tag name" -#: blog/models.py:127 +#: blog/models.py:128 msgid "user-friendly name for the post tag" msgstr "Benutzerfreundlicher Name für das Post-Tag" -#: blog/models.py:128 +#: blog/models.py:129 msgid "tag display name" msgstr "Tag-Anzeigename" -#: blog/models.py:136 +#: blog/models.py:137 msgid "post tag" msgstr "Tag eintragen" -#: blog/models.py:137 +#: blog/models.py:138 msgid "post tags" msgstr "Tags eintragen" diff --git a/blog/locale/en_GB/LC_MESSAGES/django.po b/blog/locale/en_GB/LC_MESSAGES/django.po index e5117438..3c9cd166 100644 --- a/blog/locale/en_GB/LC_MESSAGES/django.po +++ b/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" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -29,44 +29,44 @@ msgstr "Post's title" msgid "title" msgstr "Title" -#: blog/models.py:83 +#: blog/models.py:84 msgid "post" msgstr "Post" -#: blog/models.py:84 +#: blog/models.py:85 msgid "posts" msgstr "Posts" -#: blog/models.py:88 +#: blog/models.py:89 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:90 +#: blog/models.py:91 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:122 +#: blog/models.py:123 msgid "internal tag identifier for the post tag" msgstr "internal tag identifier for the post tag" -#: blog/models.py:123 +#: blog/models.py:124 msgid "tag name" msgstr "Tag name" -#: blog/models.py:127 +#: blog/models.py:128 msgid "user-friendly name for the post tag" msgstr "User-friendly name for the post tag" -#: blog/models.py:128 +#: blog/models.py:129 msgid "tag display name" msgstr "Tag display name" -#: blog/models.py:136 +#: blog/models.py:137 msgid "post tag" msgstr "Post tag" -#: blog/models.py:137 +#: blog/models.py:138 msgid "post tags" msgstr "Post tags" diff --git a/blog/locale/en_US/LC_MESSAGES/django.po b/blog/locale/en_US/LC_MESSAGES/django.po index 1806d6d9..2320c862 100644 --- a/blog/locale/en_US/LC_MESSAGES/django.po +++ b/blog/locale/en_US/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -25,44 +25,44 @@ msgstr "Post's title" msgid "title" msgstr "Title" -#: blog/models.py:83 +#: blog/models.py:84 msgid "post" msgstr "Post" -#: blog/models.py:84 +#: blog/models.py:85 msgid "posts" msgstr "Posts" -#: blog/models.py:88 +#: blog/models.py:89 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:90 +#: blog/models.py:91 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:122 +#: blog/models.py:123 msgid "internal tag identifier for the post tag" msgstr "internal tag identifier for the post tag" -#: blog/models.py:123 +#: blog/models.py:124 msgid "tag name" msgstr "Tag name" -#: blog/models.py:127 +#: blog/models.py:128 msgid "user-friendly name for the post tag" msgstr "User-friendly name for the post tag" -#: blog/models.py:128 +#: blog/models.py:129 msgid "tag display name" msgstr "Tag display name" -#: blog/models.py:136 +#: blog/models.py:137 msgid "post tag" msgstr "Post tag" -#: blog/models.py:137 +#: blog/models.py:138 msgid "post tags" msgstr "Post tags" diff --git a/blog/locale/es_ES/LC_MESSAGES/django.po b/blog/locale/es_ES/LC_MESSAGES/django.po index 80f67efa..b12fa7a2 100644 --- a/blog/locale/es_ES/LC_MESSAGES/django.po +++ b/blog/locale/es_ES/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -25,46 +25,46 @@ msgstr "Título del mensaje" msgid "title" msgstr "Título" -#: blog/models.py:83 +#: blog/models.py:84 msgid "post" msgstr "Publicar en" -#: blog/models.py:84 +#: blog/models.py:85 msgid "posts" msgstr "Puestos" -#: blog/models.py:88 +#: blog/models.py:89 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:90 +#: blog/models.py:91 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:122 +#: blog/models.py:123 msgid "internal tag identifier for the post tag" msgstr "identificador interno de la etiqueta post" -#: blog/models.py:123 +#: blog/models.py:124 msgid "tag name" msgstr "Nombre de la etiqueta" -#: blog/models.py:127 +#: blog/models.py:128 msgid "user-friendly name for the post tag" msgstr "Nombre fácil de usar para la etiqueta de la entrada" -#: blog/models.py:128 +#: blog/models.py:129 msgid "tag display name" msgstr "Nombre de la etiqueta" -#: blog/models.py:136 +#: blog/models.py:137 msgid "post tag" msgstr "Etiqueta postal" -#: blog/models.py:137 +#: blog/models.py:138 msgid "post tags" msgstr "Etiquetas" diff --git a/blog/locale/fa_IR/LC_MESSAGES/django.po b/blog/locale/fa_IR/LC_MESSAGES/django.po index 88231200..9595224e 100644 --- a/blog/locale/fa_IR/LC_MESSAGES/django.po +++ b/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-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -28,43 +28,43 @@ msgstr "" msgid "title" msgstr "" -#: blog/models.py:83 +#: blog/models.py:84 msgid "post" msgstr "" -#: blog/models.py:84 +#: blog/models.py:85 msgid "posts" msgstr "" -#: blog/models.py:88 +#: blog/models.py:89 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" -#: blog/models.py:90 +#: blog/models.py:91 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" -#: blog/models.py:122 +#: blog/models.py:123 msgid "internal tag identifier for the post tag" msgstr "" -#: blog/models.py:123 +#: blog/models.py:124 msgid "tag name" msgstr "" -#: blog/models.py:127 +#: blog/models.py:128 msgid "user-friendly name for the post tag" msgstr "" -#: blog/models.py:128 +#: blog/models.py:129 msgid "tag display name" msgstr "" -#: blog/models.py:136 +#: blog/models.py:137 msgid "post tag" msgstr "" -#: blog/models.py:137 +#: blog/models.py:138 msgid "post tags" msgstr "" diff --git a/blog/locale/fr_FR/LC_MESSAGES/django.po b/blog/locale/fr_FR/LC_MESSAGES/django.po index 9c013ae1..e511ca0b 100644 --- a/blog/locale/fr_FR/LC_MESSAGES/django.po +++ b/blog/locale/fr_FR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -25,47 +25,47 @@ msgstr "Titre du message" msgid "title" msgstr "Titre" -#: blog/models.py:83 +#: blog/models.py:84 msgid "post" msgstr "Poste" -#: blog/models.py:84 +#: blog/models.py:85 msgid "posts" msgstr "Postes" -#: blog/models.py:88 +#: blog/models.py:89 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:90 +#: blog/models.py:91 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" -#: blog/models.py:122 +#: blog/models.py:123 msgid "internal tag identifier for the post tag" msgstr "identifiant interne de la balise post" -#: blog/models.py:123 +#: blog/models.py:124 msgid "tag name" msgstr "Nom du jour" -#: blog/models.py:127 +#: blog/models.py:128 msgid "user-friendly name for the post tag" msgstr "Nom convivial pour la balise post" -#: blog/models.py:128 +#: blog/models.py:129 msgid "tag display name" msgstr "Nom d'affichage de l'étiquette" -#: blog/models.py:136 +#: blog/models.py:137 msgid "post tag" msgstr "Tag de poste" -#: blog/models.py:137 +#: blog/models.py:138 msgid "post tags" msgstr "Tags de la poste" diff --git a/blog/locale/he_IL/LC_MESSAGES/django.po b/blog/locale/he_IL/LC_MESSAGES/django.po index dbb91abf..0f1124c3 100644 --- a/blog/locale/he_IL/LC_MESSAGES/django.po +++ b/blog/locale/he_IL/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -25,43 +25,43 @@ msgstr "כותרת הפוסט" msgid "title" msgstr "כותרת" -#: blog/models.py:83 +#: blog/models.py:84 msgid "post" msgstr "פוסט" -#: blog/models.py:84 +#: blog/models.py:85 msgid "posts" msgstr "פוסטים" -#: blog/models.py:88 +#: blog/models.py:89 msgid "markdown files are not supported yet - use markdown content instead" msgstr "קובצי Markdown אינם נתמכים עדיין - השתמש בתוכן Markdown במקום!" -#: blog/models.py:90 +#: blog/models.py:91 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "יש לספק קובץ markdown או תוכן markdown - באופן בלעדי" -#: blog/models.py:122 +#: blog/models.py:123 msgid "internal tag identifier for the post tag" msgstr "מזהה תגיות פנימי עבור תגיות הפוסט" -#: blog/models.py:123 +#: blog/models.py:124 msgid "tag name" msgstr "שם היום" -#: blog/models.py:127 +#: blog/models.py:128 msgid "user-friendly name for the post tag" msgstr "שם ידידותי למשתמש עבור תגיות הפוסט" -#: blog/models.py:128 +#: blog/models.py:129 msgid "tag display name" msgstr "שם תצוגה של התג" -#: blog/models.py:136 +#: blog/models.py:137 msgid "post tag" msgstr "תגית פוסט" -#: blog/models.py:137 +#: blog/models.py:138 msgid "post tags" msgstr "תגיות פוסט" diff --git a/blog/locale/hi_IN/LC_MESSAGES/django.po b/blog/locale/hi_IN/LC_MESSAGES/django.po index 6edbfb85..61146baa 100644 --- a/blog/locale/hi_IN/LC_MESSAGES/django.po +++ b/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" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -28,43 +28,43 @@ msgstr "" msgid "title" msgstr "" -#: blog/models.py:83 +#: blog/models.py:84 msgid "post" msgstr "" -#: blog/models.py:84 +#: blog/models.py:85 msgid "posts" msgstr "" -#: blog/models.py:88 +#: blog/models.py:89 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" -#: blog/models.py:90 +#: blog/models.py:91 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" -#: blog/models.py:122 +#: blog/models.py:123 msgid "internal tag identifier for the post tag" msgstr "" -#: blog/models.py:123 +#: blog/models.py:124 msgid "tag name" msgstr "" -#: blog/models.py:127 +#: blog/models.py:128 msgid "user-friendly name for the post tag" msgstr "" -#: blog/models.py:128 +#: blog/models.py:129 msgid "tag display name" msgstr "" -#: blog/models.py:136 +#: blog/models.py:137 msgid "post tag" msgstr "" -#: blog/models.py:137 +#: blog/models.py:138 msgid "post tags" msgstr "" diff --git a/blog/locale/hr_HR/LC_MESSAGES/django.po b/blog/locale/hr_HR/LC_MESSAGES/django.po index 88231200..9595224e 100644 --- a/blog/locale/hr_HR/LC_MESSAGES/django.po +++ b/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-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -28,43 +28,43 @@ msgstr "" msgid "title" msgstr "" -#: blog/models.py:83 +#: blog/models.py:84 msgid "post" msgstr "" -#: blog/models.py:84 +#: blog/models.py:85 msgid "posts" msgstr "" -#: blog/models.py:88 +#: blog/models.py:89 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" -#: blog/models.py:90 +#: blog/models.py:91 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" -#: blog/models.py:122 +#: blog/models.py:123 msgid "internal tag identifier for the post tag" msgstr "" -#: blog/models.py:123 +#: blog/models.py:124 msgid "tag name" msgstr "" -#: blog/models.py:127 +#: blog/models.py:128 msgid "user-friendly name for the post tag" msgstr "" -#: blog/models.py:128 +#: blog/models.py:129 msgid "tag display name" msgstr "" -#: blog/models.py:136 +#: blog/models.py:137 msgid "post tag" msgstr "" -#: blog/models.py:137 +#: blog/models.py:138 msgid "post tags" msgstr "" diff --git a/blog/locale/id_ID/LC_MESSAGES/django.po b/blog/locale/id_ID/LC_MESSAGES/django.po index 23566dc3..a66228a0 100644 --- a/blog/locale/id_ID/LC_MESSAGES/django.po +++ b/blog/locale/id_ID/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -25,47 +25,47 @@ msgstr "Judul postingan" msgid "title" msgstr "Judul" -#: blog/models.py:83 +#: blog/models.py:84 msgid "post" msgstr "Pos" -#: blog/models.py:84 +#: blog/models.py:85 msgid "posts" msgstr "Posting" -#: blog/models.py:88 +#: blog/models.py:89 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" "File penurunan harga tidak didukung - gunakan konten penurunan harga sebagai " "gantinya!" -#: blog/models.py:90 +#: blog/models.py:91 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:122 +#: blog/models.py:123 msgid "internal tag identifier for the post tag" msgstr "pengidentifikasi tag internal untuk tag pos" -#: blog/models.py:123 +#: blog/models.py:124 msgid "tag name" msgstr "Nama tag" -#: blog/models.py:127 +#: blog/models.py:128 msgid "user-friendly name for the post tag" msgstr "Nama yang mudah digunakan untuk tag postingan" -#: blog/models.py:128 +#: blog/models.py:129 msgid "tag display name" msgstr "Nama tampilan tag" -#: blog/models.py:136 +#: blog/models.py:137 msgid "post tag" msgstr "Tag pos" -#: blog/models.py:137 +#: blog/models.py:138 msgid "post tags" msgstr "Tag pos" diff --git a/blog/locale/it_IT/LC_MESSAGES/django.po b/blog/locale/it_IT/LC_MESSAGES/django.po index 492342bb..2064f355 100644 --- a/blog/locale/it_IT/LC_MESSAGES/django.po +++ b/blog/locale/it_IT/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -25,45 +25,45 @@ msgstr "Titolo del post" msgid "title" msgstr "Titolo" -#: blog/models.py:83 +#: blog/models.py:84 msgid "post" msgstr "Posta" -#: blog/models.py:84 +#: blog/models.py:85 msgid "posts" msgstr "Messaggi" -#: blog/models.py:88 +#: blog/models.py:89 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:90 +#: blog/models.py:91 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:122 +#: blog/models.py:123 msgid "internal tag identifier for the post tag" msgstr "identificatore interno del tag post" -#: blog/models.py:123 +#: blog/models.py:124 msgid "tag name" msgstr "Nome del tag" -#: blog/models.py:127 +#: blog/models.py:128 msgid "user-friendly name for the post tag" msgstr "Nome intuitivo per il tag del post" -#: blog/models.py:128 +#: blog/models.py:129 msgid "tag display name" msgstr "Nome del tag" -#: blog/models.py:136 +#: blog/models.py:137 msgid "post tag" msgstr "Post tag" -#: blog/models.py:137 +#: blog/models.py:138 msgid "post tags" msgstr "Tag dei post" diff --git a/blog/locale/ja_JP/LC_MESSAGES/django.po b/blog/locale/ja_JP/LC_MESSAGES/django.po index 8323d973..b9fcf782 100644 --- a/blog/locale/ja_JP/LC_MESSAGES/django.po +++ b/blog/locale/ja_JP/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -25,47 +25,47 @@ msgstr "投稿タイトル" msgid "title" msgstr "タイトル" -#: blog/models.py:83 +#: blog/models.py:84 msgid "post" msgstr "ポスト" -#: blog/models.py:84 +#: blog/models.py:85 msgid "posts" msgstr "投稿" -#: blog/models.py:88 +#: blog/models.py:89 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" "マークダウン・ファイルはサポートされていません - 代わりにマークダウン・コンテ" "ンツを使用してください!" -#: blog/models.py:90 +#: blog/models.py:91 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" "マークダウン・ファイルまたはマークダウン・コンテンツを提供しなければならな" "い。" -#: blog/models.py:122 +#: blog/models.py:123 msgid "internal tag identifier for the post tag" msgstr "投稿タグの内部タグ識別子" -#: blog/models.py:123 +#: blog/models.py:124 msgid "tag name" msgstr "タグ名" -#: blog/models.py:127 +#: blog/models.py:128 msgid "user-friendly name for the post tag" msgstr "投稿タグのユーザーフレンドリーな名前" -#: blog/models.py:128 +#: blog/models.py:129 msgid "tag display name" msgstr "タグ表示名" -#: blog/models.py:136 +#: blog/models.py:137 msgid "post tag" msgstr "投稿タグ" -#: blog/models.py:137 +#: blog/models.py:138 msgid "post tags" msgstr "投稿タグ" diff --git a/blog/locale/kk_KZ/LC_MESSAGES/django.po b/blog/locale/kk_KZ/LC_MESSAGES/django.po index 6edbfb85..61146baa 100644 --- a/blog/locale/kk_KZ/LC_MESSAGES/django.po +++ b/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" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -28,43 +28,43 @@ msgstr "" msgid "title" msgstr "" -#: blog/models.py:83 +#: blog/models.py:84 msgid "post" msgstr "" -#: blog/models.py:84 +#: blog/models.py:85 msgid "posts" msgstr "" -#: blog/models.py:88 +#: blog/models.py:89 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" -#: blog/models.py:90 +#: blog/models.py:91 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" -#: blog/models.py:122 +#: blog/models.py:123 msgid "internal tag identifier for the post tag" msgstr "" -#: blog/models.py:123 +#: blog/models.py:124 msgid "tag name" msgstr "" -#: blog/models.py:127 +#: blog/models.py:128 msgid "user-friendly name for the post tag" msgstr "" -#: blog/models.py:128 +#: blog/models.py:129 msgid "tag display name" msgstr "" -#: blog/models.py:136 +#: blog/models.py:137 msgid "post tag" msgstr "" -#: blog/models.py:137 +#: blog/models.py:138 msgid "post tags" msgstr "" diff --git a/blog/locale/ko_KR/LC_MESSAGES/django.po b/blog/locale/ko_KR/LC_MESSAGES/django.po index 04b294fb..27923e77 100644 --- a/blog/locale/ko_KR/LC_MESSAGES/django.po +++ b/blog/locale/ko_KR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -25,44 +25,44 @@ msgstr "게시물 제목" msgid "title" msgstr "제목" -#: blog/models.py:83 +#: blog/models.py:84 msgid "post" msgstr "게시물" -#: blog/models.py:84 +#: blog/models.py:85 msgid "posts" msgstr "게시물" -#: blog/models.py:88 +#: blog/models.py:89 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" "마크다운 파일은 지원되지 않습니다 예 - 대신 마크다운 콘텐츠를 사용하세요!" -#: blog/models.py:90 +#: blog/models.py:91 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "마크다운 파일 또는 마크다운 콘텐츠가 제공되어야 합니다." -#: blog/models.py:122 +#: blog/models.py:123 msgid "internal tag identifier for the post tag" msgstr "게시물 태그의 내부 태그 식별자" -#: blog/models.py:123 +#: blog/models.py:124 msgid "tag name" msgstr "태그 이름" -#: blog/models.py:127 +#: blog/models.py:128 msgid "user-friendly name for the post tag" msgstr "게시물 태그의 사용자 친화적인 이름" -#: blog/models.py:128 +#: blog/models.py:129 msgid "tag display name" msgstr "태그 표시 이름" -#: blog/models.py:136 +#: blog/models.py:137 msgid "post tag" msgstr "게시물 태그" -#: blog/models.py:137 +#: blog/models.py:138 msgid "post tags" msgstr "게시물 태그" diff --git a/blog/locale/nl_NL/LC_MESSAGES/django.po b/blog/locale/nl_NL/LC_MESSAGES/django.po index 972f6f86..6d3e7c42 100644 --- a/blog/locale/nl_NL/LC_MESSAGES/django.po +++ b/blog/locale/nl_NL/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -25,47 +25,47 @@ msgstr "Titel van de post" msgid "title" msgstr "Titel" -#: blog/models.py:83 +#: blog/models.py:84 msgid "post" msgstr "Plaats" -#: blog/models.py:84 +#: blog/models.py:85 msgid "posts" msgstr "Berichten" -#: blog/models.py:88 +#: blog/models.py:89 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:90 +#: blog/models.py:91 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" -#: blog/models.py:122 +#: blog/models.py:123 msgid "internal tag identifier for the post tag" msgstr "interne tagidentifier voor de posttag" -#: blog/models.py:123 +#: blog/models.py:124 msgid "tag name" msgstr "Tag naam" -#: blog/models.py:127 +#: blog/models.py:128 msgid "user-friendly name for the post tag" msgstr "Gebruiksvriendelijke naam voor de posttag" -#: blog/models.py:128 +#: blog/models.py:129 msgid "tag display name" msgstr "Tag weergavenaam" -#: blog/models.py:136 +#: blog/models.py:137 msgid "post tag" msgstr "Post tag" -#: blog/models.py:137 +#: blog/models.py:138 msgid "post tags" msgstr "Post tags" diff --git a/blog/locale/no_NO/LC_MESSAGES/django.po b/blog/locale/no_NO/LC_MESSAGES/django.po index 6bb0e797..5093d4a0 100644 --- a/blog/locale/no_NO/LC_MESSAGES/django.po +++ b/blog/locale/no_NO/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -25,44 +25,44 @@ msgstr "Innleggets tittel" msgid "title" msgstr "Title" -#: blog/models.py:83 +#: blog/models.py:84 msgid "post" msgstr "Post" -#: blog/models.py:84 +#: blog/models.py:85 msgid "posts" msgstr "Innlegg" -#: blog/models.py:88 +#: blog/models.py:89 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:90 +#: blog/models.py:91 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:122 +#: blog/models.py:123 msgid "internal tag identifier for the post tag" msgstr "intern tagg-identifikator for innleggstaggen" -#: blog/models.py:123 +#: blog/models.py:124 msgid "tag name" msgstr "Tagg navn" -#: blog/models.py:127 +#: blog/models.py:128 msgid "user-friendly name for the post tag" msgstr "Brukervennlig navn for innleggstaggen" -#: blog/models.py:128 +#: blog/models.py:129 msgid "tag display name" msgstr "Visningsnavn for taggen" -#: blog/models.py:136 +#: blog/models.py:137 msgid "post tag" msgstr "Post tag" -#: blog/models.py:137 +#: blog/models.py:138 msgid "post tags" msgstr "Tagger for innlegg" diff --git a/blog/locale/pl_PL/LC_MESSAGES/django.po b/blog/locale/pl_PL/LC_MESSAGES/django.po index dfda196a..e79f7db1 100644 --- a/blog/locale/pl_PL/LC_MESSAGES/django.po +++ b/blog/locale/pl_PL/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -25,46 +25,46 @@ msgstr "Tytuł postu" msgid "title" msgstr "Tytuł" -#: blog/models.py:83 +#: blog/models.py:84 msgid "post" msgstr "Post" -#: blog/models.py:84 +#: blog/models.py:85 msgid "posts" msgstr "Posty" -#: blog/models.py:88 +#: blog/models.py:89 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:90 +#: blog/models.py:91 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:122 +#: blog/models.py:123 msgid "internal tag identifier for the post tag" msgstr "wewnętrzny identyfikator tagu posta" -#: blog/models.py:123 +#: blog/models.py:124 msgid "tag name" msgstr "Nazwa tagu" -#: blog/models.py:127 +#: blog/models.py:128 msgid "user-friendly name for the post tag" msgstr "Przyjazna dla użytkownika nazwa tagu posta" -#: blog/models.py:128 +#: blog/models.py:129 msgid "tag display name" msgstr "Wyświetlana nazwa znacznika" -#: blog/models.py:136 +#: blog/models.py:137 msgid "post tag" msgstr "Tag posta" -#: blog/models.py:137 +#: blog/models.py:138 msgid "post tags" msgstr "Tagi postów" diff --git a/blog/locale/pt_BR/LC_MESSAGES/django.po b/blog/locale/pt_BR/LC_MESSAGES/django.po index 5329cff8..4aa2f1a9 100644 --- a/blog/locale/pt_BR/LC_MESSAGES/django.po +++ b/blog/locale/pt_BR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -25,45 +25,45 @@ msgstr "Título da postagem" msgid "title" msgstr "Título" -#: blog/models.py:83 +#: blog/models.py:84 msgid "post" msgstr "Postar" -#: blog/models.py:84 +#: blog/models.py:85 msgid "posts" msgstr "Publicações" -#: blog/models.py:88 +#: blog/models.py:89 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!" -#: blog/models.py:90 +#: blog/models.py:91 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:122 +#: blog/models.py:123 msgid "internal tag identifier for the post tag" msgstr "identificador de tag interno para a tag de postagem" -#: blog/models.py:123 +#: blog/models.py:124 msgid "tag name" msgstr "Nome da etiqueta" -#: blog/models.py:127 +#: blog/models.py:128 msgid "user-friendly name for the post tag" msgstr "Nome de fácil utilização para a tag de postagem" -#: blog/models.py:128 +#: blog/models.py:129 msgid "tag display name" msgstr "Nome de exibição da tag" -#: blog/models.py:136 +#: blog/models.py:137 msgid "post tag" msgstr "Etiqueta de postagem" -#: blog/models.py:137 +#: blog/models.py:138 msgid "post tags" msgstr "Tags de postagem" diff --git a/blog/locale/ro_RO/LC_MESSAGES/django.po b/blog/locale/ro_RO/LC_MESSAGES/django.po index 4b17ea9d..b9245af0 100644 --- a/blog/locale/ro_RO/LC_MESSAGES/django.po +++ b/blog/locale/ro_RO/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -25,46 +25,46 @@ msgstr "Titlul postului" msgid "title" msgstr "Titlul" -#: blog/models.py:83 +#: blog/models.py:84 msgid "post" msgstr "Post" -#: blog/models.py:84 +#: blog/models.py:85 msgid "posts" msgstr "Mesaje" -#: blog/models.py:88 +#: blog/models.py:89 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!" -#: blog/models.py:90 +#: blog/models.py:91 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:122 +#: blog/models.py:123 msgid "internal tag identifier for the post tag" msgstr "identificator intern de etichetă pentru eticheta postului" -#: blog/models.py:123 +#: blog/models.py:124 msgid "tag name" msgstr "Nume etichetă" -#: blog/models.py:127 +#: blog/models.py:128 msgid "user-friendly name for the post tag" msgstr "Nume ușor de utilizat pentru eticheta postului" -#: blog/models.py:128 +#: blog/models.py:129 msgid "tag display name" msgstr "Nume afișare etichetă" -#: blog/models.py:136 +#: blog/models.py:137 msgid "post tag" msgstr "Etichetă post" -#: blog/models.py:137 +#: blog/models.py:138 msgid "post tags" msgstr "Etichete poștale" diff --git a/blog/locale/ru_RU/LC_MESSAGES/django.po b/blog/locale/ru_RU/LC_MESSAGES/django.po index 6f68a066..3122d380 100644 --- a/blog/locale/ru_RU/LC_MESSAGES/django.po +++ b/blog/locale/ru_RU/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -25,47 +25,47 @@ msgstr "Заголовок сообщения" msgid "title" msgstr "Название" -#: blog/models.py:83 +#: blog/models.py:84 msgid "post" msgstr "Пост" -#: blog/models.py:84 +#: blog/models.py:85 msgid "posts" msgstr "Посты" -#: blog/models.py:88 +#: blog/models.py:89 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" "Файлы в формате Markdown не поддерживаются - используйте вместо них " "содержимое в формате Markdown!" -#: blog/models.py:90 +#: blog/models.py:91 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" "необходимо предоставить файл разметки или содержимое разметки - " "взаимоисключающие варианты" -#: blog/models.py:122 +#: blog/models.py:123 msgid "internal tag identifier for the post tag" msgstr "внутренний идентификатор тега для тега post" -#: blog/models.py:123 +#: blog/models.py:124 msgid "tag name" msgstr "Название тега" -#: blog/models.py:127 +#: blog/models.py:128 msgid "user-friendly name for the post tag" msgstr "Удобное для пользователя название тега поста" -#: blog/models.py:128 +#: blog/models.py:129 msgid "tag display name" msgstr "Отображаемое имя тега" -#: blog/models.py:136 +#: blog/models.py:137 msgid "post tag" msgstr "Тэг поста" -#: blog/models.py:137 +#: blog/models.py:138 msgid "post tags" msgstr "Тэги постов" diff --git a/blog/locale/sv_SE/LC_MESSAGES/django.po b/blog/locale/sv_SE/LC_MESSAGES/django.po index 601ccaa5..5598ba37 100644 --- a/blog/locale/sv_SE/LC_MESSAGES/django.po +++ b/blog/locale/sv_SE/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -25,45 +25,45 @@ msgstr "Inläggets titel" msgid "title" msgstr "Titel" -#: blog/models.py:83 +#: blog/models.py:84 msgid "post" msgstr "Post" -#: blog/models.py:84 +#: blog/models.py:85 msgid "posts" msgstr "Inlägg" -#: blog/models.py:88 +#: blog/models.py:89 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:90 +#: blog/models.py:91 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:122 +#: blog/models.py:123 msgid "internal tag identifier for the post tag" msgstr "intern taggidentifierare för inläggstaggen" -#: blog/models.py:123 +#: blog/models.py:124 msgid "tag name" msgstr "Tagg namn" -#: blog/models.py:127 +#: blog/models.py:128 msgid "user-friendly name for the post tag" msgstr "Användarvänligt namn för inläggstaggen" -#: blog/models.py:128 +#: blog/models.py:129 msgid "tag display name" msgstr "Taggens visningsnamn" -#: blog/models.py:136 +#: blog/models.py:137 msgid "post tag" msgstr "Post tagg" -#: blog/models.py:137 +#: blog/models.py:138 msgid "post tags" msgstr "Taggar för inlägg" diff --git a/blog/locale/th_TH/LC_MESSAGES/django.po b/blog/locale/th_TH/LC_MESSAGES/django.po index 10c1c6a6..a5679629 100644 --- a/blog/locale/th_TH/LC_MESSAGES/django.po +++ b/blog/locale/th_TH/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -25,43 +25,43 @@ msgstr "ชื่อโพสต์" msgid "title" msgstr "ชื่อเรื่อง" -#: blog/models.py:83 +#: blog/models.py:84 msgid "post" msgstr "โพสต์" -#: blog/models.py:84 +#: blog/models.py:85 msgid "posts" msgstr "โพสต์" -#: blog/models.py:88 +#: blog/models.py:89 msgid "markdown files are not supported yet - use markdown content instead" msgstr "ไฟล์มาร์กดาวน์ยังไม่รองรับในตอนนี้ - กรุณาใช้เนื้อหาแบบมาร์กดาวน์แทน!" -#: blog/models.py:90 +#: blog/models.py:91 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "ไฟล์มาร์กดาวน์หรือเนื้อหาแบบมาร์กดาวน์ต้องได้รับการจัดเตรียมไว้ - ไม่สามารถใช้ร่วมกันได้" -#: blog/models.py:122 +#: blog/models.py:123 msgid "internal tag identifier for the post tag" msgstr "ตัวระบุแท็กภายในสำหรับแท็กโพสต์" -#: blog/models.py:123 +#: blog/models.py:124 msgid "tag name" msgstr "ชื่อวัน" -#: blog/models.py:127 +#: blog/models.py:128 msgid "user-friendly name for the post tag" msgstr "ชื่อที่ใช้งานได้ง่ายสำหรับแท็กโพสต์" -#: blog/models.py:128 +#: blog/models.py:129 msgid "tag display name" msgstr "แสดงชื่อแท็ก" -#: blog/models.py:136 +#: blog/models.py:137 msgid "post tag" msgstr "โพสต์แท็ก" -#: blog/models.py:137 +#: blog/models.py:138 msgid "post tags" msgstr "ป้ายกำกับโพสต์" diff --git a/blog/locale/tr_TR/LC_MESSAGES/django.po b/blog/locale/tr_TR/LC_MESSAGES/django.po index eb5908b5..5356d8a0 100644 --- a/blog/locale/tr_TR/LC_MESSAGES/django.po +++ b/blog/locale/tr_TR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -25,46 +25,46 @@ msgstr "Gönderinin başlığı" msgid "title" msgstr "Başlık" -#: blog/models.py:83 +#: blog/models.py:84 msgid "post" msgstr "Posta" -#: blog/models.py:84 +#: blog/models.py:85 msgid "posts" msgstr "Mesajlar" -#: blog/models.py:88 +#: blog/models.py:89 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:90 +#: blog/models.py:91 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" -#: blog/models.py:122 +#: blog/models.py:123 msgid "internal tag identifier for the post tag" msgstr "gönderi etiketi için dahili etiket tanımlayıcısı" -#: blog/models.py:123 +#: blog/models.py:124 msgid "tag name" msgstr "Etiket adı" -#: blog/models.py:127 +#: blog/models.py:128 msgid "user-friendly name for the post tag" msgstr "Gönderi etiketi için kullanıcı dostu ad" -#: blog/models.py:128 +#: blog/models.py:129 msgid "tag display name" msgstr "Etiket görünen adı" -#: blog/models.py:136 +#: blog/models.py:137 msgid "post tag" msgstr "Mesaj etiketi" -#: blog/models.py:137 +#: blog/models.py:138 msgid "post tags" msgstr "Gönderi etiketleri" diff --git a/blog/locale/vi_VN/LC_MESSAGES/django.po b/blog/locale/vi_VN/LC_MESSAGES/django.po index 3d5e7a8e..3f4be0db 100644 --- a/blog/locale/vi_VN/LC_MESSAGES/django.po +++ b/blog/locale/vi_VN/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -25,46 +25,46 @@ msgstr "Tiêu đề bài đăng" msgid "title" msgstr "Tiêu đề" -#: blog/models.py:83 +#: blog/models.py:84 msgid "post" msgstr "Bài đăng" -#: blog/models.py:84 +#: blog/models.py:85 msgid "posts" msgstr "Bài đăng" -#: blog/models.py:88 +#: blog/models.py:89 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:90 +#: blog/models.py:91 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:122 +#: blog/models.py:123 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:123 +#: blog/models.py:124 msgid "tag name" msgstr "Tên ngày" -#: blog/models.py:127 +#: blog/models.py:128 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:128 +#: blog/models.py:129 msgid "tag display name" msgstr "Hiển thị tên thẻ" -#: blog/models.py:136 +#: blog/models.py:137 msgid "post tag" msgstr "Thẻ bài viết" -#: blog/models.py:137 +#: blog/models.py:138 msgid "post tags" msgstr "Thẻ bài viết" diff --git a/blog/locale/zh_Hans/LC_MESSAGES/django.po b/blog/locale/zh_Hans/LC_MESSAGES/django.po index a92e04e4..3c93b593 100644 --- a/blog/locale/zh_Hans/LC_MESSAGES/django.po +++ b/blog/locale/zh_Hans/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -25,43 +25,43 @@ msgstr "帖子标题" msgid "title" msgstr "标题" -#: blog/models.py:83 +#: blog/models.py:84 msgid "post" msgstr "职位" -#: blog/models.py:84 +#: blog/models.py:85 msgid "posts" msgstr "职位" -#: blog/models.py:88 +#: blog/models.py:89 msgid "markdown files are not supported yet - use markdown content instead" msgstr "不支持 Markdown 文件,请使用 Markdown 内容!" -#: blog/models.py:90 +#: blog/models.py:91 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "必须提供标记符文件或标记符内容 - 相互排斥" -#: blog/models.py:122 +#: blog/models.py:123 msgid "internal tag identifier for the post tag" msgstr "职位标签的内部标签标识符" -#: blog/models.py:123 +#: blog/models.py:124 msgid "tag name" msgstr "标签名称" -#: blog/models.py:127 +#: blog/models.py:128 msgid "user-friendly name for the post tag" msgstr "方便用户使用的帖子标签名称" -#: blog/models.py:128 +#: blog/models.py:129 msgid "tag display name" msgstr "标签显示名称" -#: blog/models.py:136 +#: blog/models.py:137 msgid "post tag" msgstr "职位标签" -#: blog/models.py:137 +#: blog/models.py:138 msgid "post tags" msgstr "帖子标签" diff --git a/blog/migrations/0006_post_meta_description_post_meta_description_ar_ar_and_more.py b/blog/migrations/0006_post_meta_description_post_meta_description_ar_ar_and_more.py new file mode 100644 index 00000000..25fae75f --- /dev/null +++ b/blog/migrations/0006_post_meta_description_post_meta_description_ar_ar_and_more.py @@ -0,0 +1,158 @@ +# Generated by Django 5.2 on 2025-10-07 12:46 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("blog", "0005_post_content_fa_ir_post_content_he_il_and_more"), + ] + + operations = [ + migrations.AddField( + model_name="post", + name="meta_description", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_ar_ar", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_cs_cz", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_da_dk", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_de_de", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_en_gb", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_en_us", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_es_es", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_fa_ir", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_fr_fr", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_he_il", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_hi_in", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_hr_hr", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_id_id", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_it_it", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_ja_jp", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_kk_kz", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_ko_kr", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_nl_nl", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_no_no", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_pl_pl", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_pt_br", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_ro_ro", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_ru_ru", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_sv_se", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_th_th", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_tr_tr", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_vi_vn", + field=models.CharField(blank=True, max_length=150, null=True), + ), + migrations.AddField( + model_name="post", + name="meta_description_zh_hans", + field=models.CharField(blank=True, max_length=150, null=True), + ), + ] diff --git a/blog/models.py b/blog/models.py index 18878a5a..d11f3de6 100644 --- a/blog/models.py +++ b/blog/models.py @@ -75,6 +75,7 @@ class Post(NiceModel): # type: ignore [django-manager-missing] file = FileField(upload_to="posts/", blank=True, null=True) slug = AutoSlugField(populate_from="title", allow_unicode=True, unique=True, editable=False) tags = ManyToManyField(to="blog.PostTag", blank=True, related_name="posts") + meta_description = CharField(max_length=150, blank=True, null=True) def __str__(self): return f"{self.title} | {self.author.first_name} {self.author.last_name}" diff --git a/blog/translation.py b/blog/translation.py index 58f7ac02..0fe484dc 100644 --- a/blog/translation.py +++ b/blog/translation.py @@ -6,4 +6,4 @@ from blog.models import Post @register(Post) class PostOptions(TranslationOptions): - fields = ("title", "content") + fields = ("title", "content", "meta_description") diff --git a/core/locale/ar_AR/LC_MESSAGES/django.mo b/core/locale/ar_AR/LC_MESSAGES/django.mo index 37e75d3690a35746bc1cdbea75e6c92f7e95b7ef..29b922589212917cb75cfaf3371325e9d826e92f 100644 GIT binary patch delta 12659 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 XnYHfhq^$MfSv$^7%3QMJr_cWjhresi delta 12621 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 R)t5c8PTJJ$y<5+G`9I_mV%7iv diff --git a/core/locale/ar_AR/LC_MESSAGES/django.po b/core/locale/ar_AR/LC_MESSAGES/django.po index b3688d10..67aac41a 100644 --- a/core/locale/ar_AR/LC_MESSAGES/django.po +++ b/core/locale/ar_AR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -2546,6 +2546,10 @@ msgstr "مع أطيب تحياتي،
    فريق %(project_name)s" msgid "key" msgstr "المفتاح" +#: 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 msgid "promocode granted" diff --git a/core/locale/cs_CZ/LC_MESSAGES/django.mo b/core/locale/cs_CZ/LC_MESSAGES/django.mo index a471167f9e7fe90949a7e08ee15e4a1986f6425f..8b96c028b9c6f110b4c0fa8eb21d094f3f413b59 100644 GIT binary patch delta 12660 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 delta 12621 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 diff --git a/core/locale/cs_CZ/LC_MESSAGES/django.po b/core/locale/cs_CZ/LC_MESSAGES/django.po index 82391b00..4274b7d6 100644 --- a/core/locale/cs_CZ/LC_MESSAGES/django.po +++ b/core/locale/cs_CZ/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -2605,6 +2605,10 @@ msgstr "S pozdravem,
    tým %(project_name)s" msgid "key" msgstr "Klíč" +#: 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 msgid "promocode granted" diff --git a/core/locale/da_DK/LC_MESSAGES/django.mo b/core/locale/da_DK/LC_MESSAGES/django.mo index c621057ffc62169c101fa04ea25e63a7a615dbc8..d8ad9255fe29ed49e8468bf664794c0a40db1d08 100644 GIT binary patch delta 12659 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 delta 12621 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 W4$b^Eeu^h^SoQSDnI*P{&-fo`F(JhO diff --git a/core/locale/da_DK/LC_MESSAGES/django.po b/core/locale/da_DK/LC_MESSAGES/django.po index 78936ead..d8ccb886 100644 --- a/core/locale/da_DK/LC_MESSAGES/django.po +++ b/core/locale/da_DK/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -2627,6 +2627,10 @@ msgstr "Med venlig hilsen,
    teamet %(project_name)s." msgid "key" msgstr "Nøgle" +#: 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 msgid "promocode granted" diff --git a/core/locale/de_DE/LC_MESSAGES/django.mo b/core/locale/de_DE/LC_MESSAGES/django.mo index 1dfd6c97bc7343e515d4f0af1ebe56bcb9e58111..e210205ded9d0a311aadaf3567f9a98b0d306043 100644 GIT binary patch delta 12662 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 pci5AIM{aGObYfyq=RWr0f##F)97>k3j9L~k9 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 H^0NN{=WZaL diff --git a/core/locale/de_DE/LC_MESSAGES/django.po b/core/locale/de_DE/LC_MESSAGES/django.po index 0d942358..f55009f1 100644 --- a/core/locale/de_DE/LC_MESSAGES/django.po +++ b/core/locale/de_DE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -2689,6 +2689,10 @@ msgstr "Mit freundlichen Grüßen,
    das %(project_name)s-Team" msgid "key" msgstr "Schlüssel" +#: 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 msgid "promocode granted" diff --git a/core/locale/en_GB/LC_MESSAGES/django.mo b/core/locale/en_GB/LC_MESSAGES/django.mo index 6dcc5c6f0ea9e3044d66fc0f78437d2c68f54e74..30eaac40cc5f964c4a1f5807102f3d911f2ea757 100644 GIT binary patch delta 12656 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 L&i!&*z@YyElPx#W delta 12615 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 diff --git a/core/locale/en_GB/LC_MESSAGES/django.po b/core/locale/en_GB/LC_MESSAGES/django.po index 7df6a0a1..6d5dce1f 100644 --- a/core/locale/en_GB/LC_MESSAGES/django.po +++ b/core/locale/en_GB/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -2577,6 +2577,10 @@ msgstr "Best regards,
    the %(project_name)s team" msgid "key" msgstr "Key" +#: 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 msgid "promocode granted" diff --git a/core/locale/en_US/LC_MESSAGES/django.mo b/core/locale/en_US/LC_MESSAGES/django.mo index 5d734ce622f52171f727edad1b5f8298d1ff4b94..ea1ce8a6c0d917e80567660ac9c2a20c12a9e6ba 100644 GIT binary patch delta 12656 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 A#sB~S diff --git a/core/locale/en_US/LC_MESSAGES/django.po b/core/locale/en_US/LC_MESSAGES/django.po index 228e92d1..1a82841e 100644 --- a/core/locale/en_US/LC_MESSAGES/django.po +++ b/core/locale/en_US/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -2573,6 +2573,10 @@ msgstr "Best regards,
    the %(project_name)s team" msgid "key" msgstr "Key" +#: 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 msgid "promocode granted" diff --git a/core/locale/es_ES/LC_MESSAGES/django.mo b/core/locale/es_ES/LC_MESSAGES/django.mo index 0878edefe01f21bb69ad340485aa08babcd60d29..5a078f57d089e69710369d9fb85d06b1a3960cd3 100644 GIT binary patch delta 12656 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 O{W1si&WYL>J?nqW_!MdY delta 12621 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 diff --git a/core/locale/es_ES/LC_MESSAGES/django.po b/core/locale/es_ES/LC_MESSAGES/django.po index 245e94f4..e2d6d769 100644 --- a/core/locale/es_ES/LC_MESSAGES/django.po +++ b/core/locale/es_ES/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -2643,6 +2643,10 @@ msgstr "Saludos cordiales,
    el equipo %(project_name)s" msgid "key" msgstr "Clave" +#: 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 msgid "promocode granted" diff --git a/core/locale/fa_IR/LC_MESSAGES/django.po b/core/locale/fa_IR/LC_MESSAGES/django.po index fdd945e6..aeb64f8c 100644 --- a/core/locale/fa_IR/LC_MESSAGES/django.po +++ b/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-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -2397,6 +2397,10 @@ msgstr "" msgid "key" msgstr "" +#: 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 msgid "promocode granted" diff --git a/core/locale/fr_FR/LC_MESSAGES/django.mo b/core/locale/fr_FR/LC_MESSAGES/django.mo index d4a442c065c9e78c1acc94c687347c504db62429..752765ad60bed2f8697fc54d9876a78740592c5d 100644 GIT binary patch delta 12663 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 delta 12621 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 HXVw1zery)c diff --git a/core/locale/fr_FR/LC_MESSAGES/django.po b/core/locale/fr_FR/LC_MESSAGES/django.po index bcb874cf..c79bc3d1 100644 --- a/core/locale/fr_FR/LC_MESSAGES/django.po +++ b/core/locale/fr_FR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -2688,6 +2688,10 @@ msgstr "Meilleures salutations,
    l'équipe %(project_name)s" msgid "key" msgstr "Clé" +#: 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 msgid "promocode granted" diff --git a/core/locale/he_IL/LC_MESSAGES/django.mo b/core/locale/he_IL/LC_MESSAGES/django.mo index 958a9bb71f4badc15df13644b4d80a14aff0827d..887e42e8dae7eb5c32acba5b44348f13887a1d89 100644 GIT binary patch delta 12661 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

    )kUOe+r zd*cdfGgazppS(W~Bfk)iy><@?}^i37&xO{|K;~%gQ_ULYxIxiM-9Qc+*mgRu4I&^FTh-Q9yNepT>ekgd*Y!hFVV}sSRyf)@;0bFk&5a#9lPTi)Dk_y zYS=2pWBQ?YED60bf5cF{gL;A@srJp)0k!#FL9N-FsHHfDsTk7RcJMN)gDh-@#roJ8 zO?9qD?Uie&nX2=Q$GorepGHC>F5cJvu;_-m(Nxsl_!eJ4Pd_`=FQQ&l?_pK^-s$OY zzox69-kc*aOzqHv{J!yBWpePhYecv&$N5`D#Rgkv_-glEvrtd*Cy_{cyDc_fJHMoC zIO!|I0%9`x4w#1<7bQKKm_$Sn+Q4~mIq^L)jkrdcuD0wyv!BFKUzY!DLQQiB<+^eb zV+l66@6v7_Lz;c&``NaY{M*EL2^AYEX#tfA9-6nD+ z30B>F#QVq8qflp6R|18f<0ImC(xnIvh$%WtT-tPr1VLQHk_6#M>9uM#NZ zo#eZ|z~@MvCaO}dt0`WjJel{8sqPvsv~^~Q%NrVfO1d)TpI|3fzY!mhe~x&QbPM7O zq5yfFoSnoeB8$APF~qN=^Sivtcp>_(SN}KvWOWMuLq!wZfO@0p8cLe~zA$eRde2vP zPocUyl>_#vUo*Z&F<^<04p7wZqMBpRnt{s!qA zs8{G`_$B5csy+3YT%_yJURNCHmtEZ&@_I3qCI7iAyJl(rds6u$ z@rZcEwOU8I2JsU4QTXKgiG-K@Anb$NT*Y+K^GSbz4~fU5`Q2d}5EqC-y~%AMPrH{G{_;jkrlZLf3MlGjWKz^~5`*H(|VMdzX9- zVmSGU#2L~9T^&gi@9xu$vL*KU`N2TpbtT@u6rbs2=8S6c#XL4Do5Y~q7X6DmFfFlS50CP(SsOG z=;}{|($3GdeG5hEP|Y_?I-l2fU^#i2@YlaHH2}pC$fLf@?kT z3T>WTYe~OMrZ2J3mCtxm?~I`C2h#5my@=ApN#ZV%pE_MfNN2hI=liFXx(pzlieHF3 z#0_FEp{po$=kUoG5A)&geKq_m3F!-@KO=4tRS8`)EWW>pR`LMtwA}AwPIse!be4}3 zPp)~SPZ9fxDB^D_rVy*1G;j{1&X06`3?zyZq1^Oa)K%AFGMrCn=jyX5_z&Uzg@O`K z9*cqxiAIDj{Z!6DeS2Jl0eBf>XulG5t-!B{A4&f}G$Or&*i1TwI7@s=93+MkYl$aU zO`ZP`ZuXcDJh@&Yz18LOQ+JK@5h@=N<%qLSwe9cH=~&A>L{WF6Z!wOtR19}@B{78j zG1ul9EyyS`HK?fV8o4?jJ^Ax>V!A8LNk@N?&P&^Iq(31Yj++Tx2eGb8m#58OmsVYv zORrXjtAYN|hR{E+wS1~!Y07>kE>ZRXbzLT&Ckj%wov6TPqRH=epPNVe>8ly#Z@W5` zXS&LGTuPj9b>5k-A{Q3nriBSzEok6xlfHj;izGdg$Z#LbMZ4LgTVPY%MjW8N4>5)G z0PKx}h-HNS{|n~hRm$H*UBm42b4G36^rNB*>Av_X@ec8>s|&(qE-j*nA=E#8wINf` zJ%IiR?&+&JZGUp@J=DEH`fpDQ-p#JnEeh(BKJM}j$@|mrH~fRL7#xpvh>E0j?IT_! vT_W>D>=aL~0Ruuir;W+%78f`rc;TrGxbHd delta 12621 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 Rp6w}7xze`3wlika{{UkyGa~>1 diff --git a/core/locale/he_IL/LC_MESSAGES/django.po b/core/locale/he_IL/LC_MESSAGES/django.po index 54149662..27ca6463 100644 --- a/core/locale/he_IL/LC_MESSAGES/django.po +++ b/core/locale/he_IL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -2511,6 +2511,10 @@ msgstr "בברכה,
    צוות %(project_name)s" msgid "key" msgstr "מפתח" +#: 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 msgid "promocode granted" diff --git a/core/locale/hi_IN/LC_MESSAGES/django.po b/core/locale/hi_IN/LC_MESSAGES/django.po index caaea813..ea8f005f 100644 --- a/core/locale/hi_IN/LC_MESSAGES/django.po +++ b/core/locale/hi_IN/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -2397,6 +2397,10 @@ msgstr "" msgid "key" msgstr "" +#: 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 msgid "promocode granted" diff --git a/core/locale/hr_HR/LC_MESSAGES/django.po b/core/locale/hr_HR/LC_MESSAGES/django.po index fdd945e6..aeb64f8c 100644 --- a/core/locale/hr_HR/LC_MESSAGES/django.po +++ b/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-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -2397,6 +2397,10 @@ msgstr "" msgid "key" msgstr "" +#: 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 msgid "promocode granted" diff --git a/core/locale/id_ID/LC_MESSAGES/django.mo b/core/locale/id_ID/LC_MESSAGES/django.mo index 89df9716b4de8e59cccb3d796c7ba6b7cbc4cb03..100c9ef0c8e0c476dd5839e4f1d9bf6f0fee5d01 100644 GIT binary patch delta 12646 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 D>Vz2g delta 12607 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 diff --git a/core/locale/id_ID/LC_MESSAGES/django.po b/core/locale/id_ID/LC_MESSAGES/django.po index d7c5d2f9..2f1d5865 100644 --- a/core/locale/id_ID/LC_MESSAGES/django.po +++ b/core/locale/id_ID/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -2648,6 +2648,10 @@ msgstr "Salam hormat, tim %(project_name)s" msgid "key" msgstr "Kunci" +#: 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 msgid "promocode granted" diff --git a/core/locale/it_IT/LC_MESSAGES/django.mo b/core/locale/it_IT/LC_MESSAGES/django.mo index a98c4658086eb3b16f0340dbbaf8c092e2f268e1..bd3ad7da8fdb9b8fbf58a1e04a58c2f8ea4ca580 100644 GIT binary patch delta 12657 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 M-Wl0Zo43#TA6_RQhX4Qo delta 12621 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 m4=5{-ZzEMqY0^6O5dBF\n" "Language-Team: BRITISH ENGLISH \n" @@ -2657,6 +2657,10 @@ msgstr "Cordiali saluti,
    il team %(project_name)s" msgid "key" msgstr "Chiave" +#: 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 msgid "promocode granted" diff --git a/core/locale/ja_JP/LC_MESSAGES/django.mo b/core/locale/ja_JP/LC_MESSAGES/django.mo index f0b7b569376a2646d1a8353cd8ee6bac015937c0..c8e06c424169fb08036c243eee83f13761f867c9 100644 GIT binary patch delta 12657 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 diff --git a/core/locale/ja_JP/LC_MESSAGES/django.po b/core/locale/ja_JP/LC_MESSAGES/django.po index a50b54d9..2ccdfdf7 100644 --- a/core/locale/ja_JP/LC_MESSAGES/django.po +++ b/core/locale/ja_JP/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -2448,6 +2448,10 @@ msgstr "よろしくお願いします、
    %(project_name)sチーム" msgid "key" msgstr "キー" +#: 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 msgid "promocode granted" diff --git a/core/locale/kk_KZ/LC_MESSAGES/django.po b/core/locale/kk_KZ/LC_MESSAGES/django.po index caaea813..ea8f005f 100644 --- a/core/locale/kk_KZ/LC_MESSAGES/django.po +++ b/core/locale/kk_KZ/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -2397,6 +2397,10 @@ msgstr "" msgid "key" msgstr "" +#: 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 msgid "promocode granted" diff --git a/core/locale/ko_KR/LC_MESSAGES/django.mo b/core/locale/ko_KR/LC_MESSAGES/django.mo index 995c7592baf081dad4c82d67feb1bae6a45a74fc..2bb662730c28191d41f5d89f98b39d84642dadaa 100644 GIT binary patch delta 12655 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 delta 12621 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -2473,6 +2473,10 @@ msgstr "감사합니다,
    %(project_name)s 팀" msgid "key" msgstr "키" +#: 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 msgid "promocode granted" diff --git a/core/locale/nl_NL/LC_MESSAGES/django.mo b/core/locale/nl_NL/LC_MESSAGES/django.mo index a5d9af8a190d1c09f4c6af4f8635df32ca0b724e..88e38f824db1b4a7cf22c511efd293ed76dc8c55 100644 GIT binary patch delta 12658 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 GUGRUqa}Fl} delta 12621 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -2666,6 +2666,10 @@ msgstr "Vriendelijke groeten,
    het %(project_name)s team" msgid "key" msgstr "Sleutel" +#: 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 msgid "promocode granted" diff --git a/core/locale/no_NO/LC_MESSAGES/django.mo b/core/locale/no_NO/LC_MESSAGES/django.mo index de0c12d86f791420d4efc71c1f4252029f194873..85d2ecda31bea262c0e60f6a8013288e8b8b36b5 100644 GIT binary patch delta 12657 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
    Xpi z|A+>3Dv`3!2-dfMG@Fs$N1EriM>f##>PX;(=~U|AHEsSTb`U$sM^bmq)wLmCjr>J5 zF}&RT#~h1U=<@n$ z^9#~iOrK+0SHB(~k$;VNk91SwYa%Ckz5TWmr-(!3b&MdclICZZ|BkjU{pNq;PnBMY zZ&A?@KSu3u9eqjjDQn&%29U4foO2ox+{@LY$V@-ctF(UqS2^hJ#`t!2@?8%>PYB!htb3| z>PHi~NH0RZSo#0aS;jffJ5}S~nFeQxr^Fksb}i|u#9;EnFyr`@gpYhL?1o!i#U#?R zNN>a^#52+@urBc%k%#|X9(^25cS{R|HH*@Ds~ZdsOW+HT*F}Uo4Lp+ z^4o}M#J9wC;{PATX?vTt6$pL&>WH8$io6bea_WdBa{0@+|2bEwiX{Evj$+u{)z#-B z*$Ex`Ce)7jmb!Js2c$P3-&Op_J^rjp3?x5>I7j+bSEmNm-E}%rw$MI5zrUsM29=f7 zg2O{)FcC-k0+IaO1qPFzOWA0m9O=u%FGK}*;SkDO68{o6D38GjL^|n=;~x@D2;VsV zc$;|ODhJ_gA`daemFeSIM>S$B(TNyN=;%p!X_wixor@>^HT=AYr^(+TQi#8ZK9rRv z{w3W?>#rh-oD>AO-jg)15RaAMSVz1;n~Y->=^E5u#mCb5Umk)OI>Fr$y(aq>_88vb=0>EB52CH^ET z5;`VZOmF9Y+G)DiU?z8=$J)!siHu_==~Kj4L?rQ$it)tqj0VnB>N1nAgCRsg!plW} zKpnL#X0bO0M}DU}Zzk#IkH(bGb9E|Dca_y~5plxR`KGvvAk4=_^Ab9m(jd?#O+V5Rq=yo# z-HAc8dxvyWY=m2h{nU3O#*u~(jt=RL;dqd3o^Og0~By()F;sPSJ&P{-3-zXJxzHxyB2>^P>1w!m#;@Y zkcQXsFUl%m8rCGrlGd@0=uf&(`ibcAo}iQzZ@U2_(mTd%9+$o4tG#=BhxX~`9o!=& KJ@C`mY5xa9Ara#M delta 12621 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -2633,6 +2633,10 @@ msgstr "Med vennlig hilsen,
    teamet %(project_name)s" msgid "key" msgstr "Nøkkel" +#: 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 msgid "promocode granted" diff --git a/core/locale/pl_PL/LC_MESSAGES/django.mo b/core/locale/pl_PL/LC_MESSAGES/django.mo index ba97b8f44a842ddc6e1001247c2bfe7b8108f393..d8e276349fcf36239fd8192bfa26f5e17df2b525 100644 GIT binary patch delta 12657 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 LI;X&vvv2($2jvr- delta 12621 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 diff --git a/core/locale/pl_PL/LC_MESSAGES/django.po b/core/locale/pl_PL/LC_MESSAGES/django.po index 7014e9bb..c1180eac 100644 --- a/core/locale/pl_PL/LC_MESSAGES/django.po +++ b/core/locale/pl_PL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -2644,6 +2644,10 @@ msgstr "Najlepsze pozdrowienia,
    zespół %(project_name)s" msgid "key" msgstr "Klucz" +#: 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 msgid "promocode granted" diff --git a/core/locale/pt_BR/LC_MESSAGES/django.mo b/core/locale/pt_BR/LC_MESSAGES/django.mo index fa6f3aef12a3003296f71ed93b7c86c7f5ee776c..7e4570996ef0efda81458aba52cc19497ad42506 100644 GIT binary patch delta 12659 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 m9dA(\n" "Language-Team: BRITISH ENGLISH \n" @@ -2629,6 +2629,10 @@ msgstr "Atenciosamente,
    a equipe %(project_name)s" msgid "key" msgstr "Chave" +#: 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 msgid "promocode granted" diff --git a/core/locale/ro_RO/LC_MESSAGES/django.mo b/core/locale/ro_RO/LC_MESSAGES/django.mo index 60ef81d87db504993721dc8260c3b03c99c0224d..07a56e10887e07d2d0985a9ea1cdd2a6d2f039f6 100644 GIT binary patch delta 12657 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 delta 12621 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 OZFnKSaNyQH1^)v`nixR< diff --git a/core/locale/ro_RO/LC_MESSAGES/django.po b/core/locale/ro_RO/LC_MESSAGES/django.po index 8fa3e9ff..908019ec 100644 --- a/core/locale/ro_RO/LC_MESSAGES/django.po +++ b/core/locale/ro_RO/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -2655,6 +2655,10 @@ msgstr "Cele mai bune salutări,
    echipa %(project_name)s" msgid "key" msgstr "Cheie" +#: 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 msgid "promocode granted" diff --git a/core/locale/ru_RU/LC_MESSAGES/django.mo b/core/locale/ru_RU/LC_MESSAGES/django.mo index 723b3944d1750b6477d40f82ae0882c46b840ccc..fcc5a124ee9bd04a141083859d262223218c12d3 100644 GIT binary patch delta 12678 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 D-^|l3 delta 12621 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 H+TZ^JNZ7(0 diff --git a/core/locale/ru_RU/LC_MESSAGES/django.po b/core/locale/ru_RU/LC_MESSAGES/django.po index 745ab34d..298fb489 100644 --- a/core/locale/ru_RU/LC_MESSAGES/django.po +++ b/core/locale/ru_RU/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -2642,6 +2642,10 @@ msgstr "С наилучшими пожеланиями,
    команда %(pro msgid "key" msgstr "Ключ" +#: 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 msgid "promocode granted" diff --git a/core/locale/sv_SE/LC_MESSAGES/django.mo b/core/locale/sv_SE/LC_MESSAGES/django.mo index bb340ca4b0a56e9dace3a36ecaf3a3f32d86a17d..0c99465d913e2e0411f52e6d14de6ce74b320e12 100644 GIT binary patch delta 12658 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 nf5Q8e#o~CRi77`~*FIt>>9DOoR7>}59Z_S$\n" "Language-Team: BRITISH ENGLISH \n" @@ -2617,6 +2617,10 @@ msgstr "Bästa hälsningar,
    teamet %(project_name)s" msgid "key" msgstr "Nyckel" +#: 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 msgid "promocode granted" diff --git a/core/locale/th_TH/LC_MESSAGES/django.mo b/core/locale/th_TH/LC_MESSAGES/django.mo index f11e5dccc9b6c060ddadc9d6aa1aa6d2c0512241..4dbb5873c114fb8af47f57c79a02d62f42d0a0fc 100644 GIT binary patch delta 12675 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 Cu}-T1 diff --git a/core/locale/th_TH/LC_MESSAGES/django.po b/core/locale/th_TH/LC_MESSAGES/django.po index 460a22cd..03fd88cc 100644 --- a/core/locale/th_TH/LC_MESSAGES/django.po +++ b/core/locale/th_TH/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -2584,6 +2584,10 @@ msgstr "ขอแสดงความนับถือ
    ทีมงาน % msgid "key" msgstr "คีย์" +#: 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 msgid "promocode granted" diff --git a/core/locale/tr_TR/LC_MESSAGES/django.mo b/core/locale/tr_TR/LC_MESSAGES/django.mo index b9863b1338a701b154ea60a7f47668a642009676..1d537405145d7497ad689b8180bb440ec05941aa 100644 GIT binary patch delta 12656 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 McK`qY diff --git a/core/locale/tr_TR/LC_MESSAGES/django.po b/core/locale/tr_TR/LC_MESSAGES/django.po index b9987f02..6b2897d7 100644 --- a/core/locale/tr_TR/LC_MESSAGES/django.po +++ b/core/locale/tr_TR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -2628,6 +2628,10 @@ msgstr "Saygılarımla,
    the %(project_name)s team" msgid "key" msgstr "Anahtar" +#: 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 msgid "promocode granted" diff --git a/core/locale/vi_VN/LC_MESSAGES/django.mo b/core/locale/vi_VN/LC_MESSAGES/django.mo index c5aeeb339d63817eb3a9a2e5529860a1a76ab87f..6ac0d9d684ee4ff6c7354d6367d738b1c7254a93 100644 GIT binary patch delta 12654 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 delta 12621 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 E1G&gZz5oCK diff --git a/core/locale/vi_VN/LC_MESSAGES/django.po b/core/locale/vi_VN/LC_MESSAGES/django.po index 5e062ffd..967cb096 100644 --- a/core/locale/vi_VN/LC_MESSAGES/django.po +++ b/core/locale/vi_VN/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -2641,6 +2641,10 @@ msgstr "Trân trọng,
    Đội ngũ %(project_name)s" msgid "key" msgstr "Chìa khóa" +#: 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 msgid "promocode granted" diff --git a/core/locale/zh_Hans/LC_MESSAGES/django.mo b/core/locale/zh_Hans/LC_MESSAGES/django.mo index f69d1af0e2535b52064ea671b00edbca1874fbdd..cc8d86d04e6293eb01d5a7133beada83988a50e8 100644 GIT binary patch delta 12639 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 delta 12621 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -2437,6 +2437,10 @@ msgstr "致以最诚挚的问候,
    %(project_name)s_团队" msgid "key" msgstr "钥匙" +#: 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 msgid "promocode granted" diff --git a/core/templates/json_table_widget.html b/core/templates/json_table_widget.html index 6d43c684..0c72cdc9 100644 --- a/core/templates/json_table_widget.html +++ b/core/templates/json_table_widget.html @@ -6,38 +6,38 @@ {% blocktrans %}value{% endblocktrans %} - - {% for idx, item in widget.value.items %} - + + {% for key, value in widget.value.items %} + - {% if item.1 is list %} + {% if value is list %} {% else %} {% endif %} {% endfor %} - + \ No newline at end of file + diff --git a/evibes/locale/ar_AR/LC_MESSAGES/django.po b/evibes/locale/ar_AR/LC_MESSAGES/django.po index 0fcd97c6..4173eba6 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" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -105,31 +105,31 @@ msgstr "وكيل HTTP" msgid "Disable buy functionality" msgstr "تعطيل وظيفة الشراء" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:45 msgid "An entity for storing advertisiment data" msgstr "كيان لتخزين بيانات الإعلانات" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:46 msgid "An entity for storing analytics data" msgstr "كيان لتخزين بيانات التحليلات" -#: evibes/settings/constance.py:55 +#: evibes/settings/constance.py:52 msgid "General Options" msgstr "الخيارات العامة" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:60 msgid "Email Options" msgstr "خيارات البريد الإلكتروني" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:69 msgid "Payment Gateway Options" msgstr "خيارات بوابة الدفع" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:76 msgid "Features Options" msgstr "خيارات الميزات" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:83 msgid "SEO Options" msgstr "خيارات تحسين محركات البحث" diff --git a/evibes/locale/cs_CZ/LC_MESSAGES/django.po b/evibes/locale/cs_CZ/LC_MESSAGES/django.po index c4714a1b..185a8354 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" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -105,31 +105,31 @@ msgstr "Proxy server HTTP" msgid "Disable buy functionality" msgstr "Zakázat funkci nákupu" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:45 msgid "An entity for storing advertisiment data" msgstr "Subjekt pro ukládání dat inzerátů" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:46 msgid "An entity for storing analytics data" msgstr "Subjekt pro ukládání analytických dat" -#: evibes/settings/constance.py:55 +#: evibes/settings/constance.py:52 msgid "General Options" msgstr "Obecné možnosti" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:60 msgid "Email Options" msgstr "Možnosti e-mailu" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:69 msgid "Payment Gateway Options" msgstr "Možnosti platební brány" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:76 msgid "Features Options" msgstr "Možnosti funkcí" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:83 msgid "SEO Options" msgstr "Možnosti SEO" diff --git a/evibes/locale/da_DK/LC_MESSAGES/django.po b/evibes/locale/da_DK/LC_MESSAGES/django.po index 6fc55b3a..0eca1e0f 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" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -105,31 +105,31 @@ msgstr "HTTP-proxy" msgid "Disable buy functionality" msgstr "Deaktiver købsfunktionalitet" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:45 msgid "An entity for storing advertisiment data" msgstr "En enhed til lagring af annonceringsdata" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:46 msgid "An entity for storing analytics data" msgstr "En enhed til lagring af analysedata" -#: evibes/settings/constance.py:55 +#: evibes/settings/constance.py:52 msgid "General Options" msgstr "Generelle indstillinger" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:60 msgid "Email Options" msgstr "Indstillinger for e-mail" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:69 msgid "Payment Gateway Options" msgstr "Muligheder for betalingsgateway" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:76 msgid "Features Options" msgstr "Funktioner Indstillinger" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:83 msgid "SEO Options" msgstr "SEO-muligheder" diff --git a/evibes/locale/de_DE/LC_MESSAGES/django.po b/evibes/locale/de_DE/LC_MESSAGES/django.po index b50ae3a8..ad83d24d 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" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -105,31 +105,31 @@ msgstr "HTTP-Proxy" msgid "Disable buy functionality" msgstr "Kauffunktionalität deaktivieren" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:45 msgid "An entity for storing advertisiment data" msgstr "Eine Einheit zur Speicherung von Werbedaten" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:46 msgid "An entity for storing analytics data" msgstr "Eine Einheit zur Speicherung von Analysedaten" -#: evibes/settings/constance.py:55 +#: evibes/settings/constance.py:52 msgid "General Options" msgstr "Allgemeine Optionen" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:60 msgid "Email Options" msgstr "E-Mail-Optionen" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:69 msgid "Payment Gateway Options" msgstr "Zahlungs-Gateway-Optionen" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:76 msgid "Features Options" msgstr "Merkmale Optionen" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:83 msgid "SEO Options" msgstr "SEO-Optionen" diff --git a/evibes/locale/en_GB/LC_MESSAGES/django.po b/evibes/locale/en_GB/LC_MESSAGES/django.po index 90950c9c..6c4fe8c7 100644 --- a/evibes/locale/en_GB/LC_MESSAGES/django.po +++ b/evibes/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" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -109,31 +109,31 @@ msgstr "HTTP Proxy" msgid "Disable buy functionality" msgstr "Disable buy functionality" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:45 msgid "An entity for storing advertisiment data" msgstr "An entity for storing advertisiment data" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:46 msgid "An entity for storing analytics data" msgstr "An entity for storing analytics data" -#: evibes/settings/constance.py:55 +#: evibes/settings/constance.py:52 msgid "General Options" msgstr "General Options" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:60 msgid "Email Options" msgstr "Email Options" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:69 msgid "Payment Gateway Options" msgstr "Payment Gateway Options" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:76 msgid "Features Options" msgstr "Features Options" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:83 msgid "SEO Options" msgstr "SEO Options" diff --git a/evibes/locale/en_US/LC_MESSAGES/django.po b/evibes/locale/en_US/LC_MESSAGES/django.po index 81eb3f10..9af5534f 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" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -105,31 +105,31 @@ msgstr "HTTP Proxy" msgid "Disable buy functionality" msgstr "Disable buy functionality" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:45 msgid "An entity for storing advertisiment data" msgstr "An entity for storing advertisiment data" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:46 msgid "An entity for storing analytics data" msgstr "An entity for storing analytics data" -#: evibes/settings/constance.py:55 +#: evibes/settings/constance.py:52 msgid "General Options" msgstr "General Options" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:60 msgid "Email Options" msgstr "Email Options" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:69 msgid "Payment Gateway Options" msgstr "Payment Gateway Options" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:76 msgid "Features Options" msgstr "Features Options" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:83 msgid "SEO Options" msgstr "SEO Options" diff --git a/evibes/locale/es_ES/LC_MESSAGES/django.po b/evibes/locale/es_ES/LC_MESSAGES/django.po index f13cfd5e..139fc1ee 100644 --- a/evibes/locale/es_ES/LC_MESSAGES/django.po +++ b/evibes/locale/es_ES/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -105,31 +105,31 @@ msgstr "Proxy HTTP" msgid "Disable buy functionality" msgstr "Desactivar la función de compra" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:45 msgid "An entity for storing advertisiment data" msgstr "Una entidad para almacenar datos publicitarios" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:46 msgid "An entity for storing analytics data" msgstr "Una entidad para almacenar datos analíticos" -#: evibes/settings/constance.py:55 +#: evibes/settings/constance.py:52 msgid "General Options" msgstr "Opciones generales" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:60 msgid "Email Options" msgstr "Opciones de correo electrónico" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:69 msgid "Payment Gateway Options" msgstr "Opciones de pasarela de pago" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:76 msgid "Features Options" msgstr "Características Opciones" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:83 msgid "SEO Options" msgstr "Opciones SEO" diff --git a/evibes/locale/fa_IR/LC_MESSAGES/django.po b/evibes/locale/fa_IR/LC_MESSAGES/django.po index a55e8d62..4f089d97 100644 --- a/evibes/locale/fa_IR/LC_MESSAGES/django.po +++ b/evibes/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-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -108,31 +108,31 @@ msgstr "" msgid "Disable buy functionality" msgstr "" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:45 msgid "An entity for storing advertisiment data" msgstr "" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:46 msgid "An entity for storing analytics data" msgstr "" -#: evibes/settings/constance.py:55 +#: evibes/settings/constance.py:52 msgid "General Options" msgstr "" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:60 msgid "Email Options" msgstr "" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:69 msgid "Payment Gateway Options" msgstr "" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:76 msgid "Features Options" msgstr "" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:83 msgid "SEO Options" msgstr "" diff --git a/evibes/locale/fr_FR/LC_MESSAGES/django.po b/evibes/locale/fr_FR/LC_MESSAGES/django.po index 4dc43e1e..9d2c39a9 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" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -105,31 +105,31 @@ msgstr "HTTP Proxy" msgid "Disable buy functionality" msgstr "Désactiver la fonctionnalité d'achat" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:45 msgid "An entity for storing advertisiment data" msgstr "Une entité pour stocker des données publicitaires" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:46 msgid "An entity for storing analytics data" msgstr "Une entité pour stocker des données analytiques" -#: evibes/settings/constance.py:55 +#: evibes/settings/constance.py:52 msgid "General Options" msgstr "Options générales" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:60 msgid "Email Options" msgstr "Options de courrier électronique" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:69 msgid "Payment Gateway Options" msgstr "Options de passerelle de paiement" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:76 msgid "Features Options" msgstr "Caractéristiques Options" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:83 msgid "SEO Options" msgstr "Options de référencement" diff --git a/evibes/locale/he_IL/LC_MESSAGES/django.po b/evibes/locale/he_IL/LC_MESSAGES/django.po index 8250f216..d1ed5731 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" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -105,31 +105,31 @@ msgstr "פרוקסי HTTP" msgid "Disable buy functionality" msgstr "השבת פונקציונליות הרכישה" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:45 msgid "An entity for storing advertisiment data" msgstr "ישות לאחסון נתוני פרסום" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:46 msgid "An entity for storing analytics data" msgstr "ישות לאחסון נתוני ניתוח" -#: evibes/settings/constance.py:55 +#: evibes/settings/constance.py:52 msgid "General Options" msgstr "אפשרויות כלליות" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:60 msgid "Email Options" msgstr "אפשרויות דוא\"ל" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:69 msgid "Payment Gateway Options" msgstr "אפשרויות שער תשלום" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:76 msgid "Features Options" msgstr "אפשרויות תכונות" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:83 msgid "SEO Options" msgstr "אפשרויות SEO" diff --git a/evibes/locale/hi_IN/LC_MESSAGES/django.po b/evibes/locale/hi_IN/LC_MESSAGES/django.po index 056b67af..663652a1 100644 --- a/evibes/locale/hi_IN/LC_MESSAGES/django.po +++ b/evibes/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" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -108,31 +108,31 @@ msgstr "" msgid "Disable buy functionality" msgstr "" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:45 msgid "An entity for storing advertisiment data" msgstr "" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:46 msgid "An entity for storing analytics data" msgstr "" -#: evibes/settings/constance.py:55 +#: evibes/settings/constance.py:52 msgid "General Options" msgstr "" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:60 msgid "Email Options" msgstr "" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:69 msgid "Payment Gateway Options" msgstr "" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:76 msgid "Features Options" msgstr "" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:83 msgid "SEO Options" msgstr "" diff --git a/evibes/locale/hr_HR/LC_MESSAGES/django.po b/evibes/locale/hr_HR/LC_MESSAGES/django.po index a55e8d62..4f089d97 100644 --- a/evibes/locale/hr_HR/LC_MESSAGES/django.po +++ b/evibes/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-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -108,31 +108,31 @@ msgstr "" msgid "Disable buy functionality" msgstr "" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:45 msgid "An entity for storing advertisiment data" msgstr "" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:46 msgid "An entity for storing analytics data" msgstr "" -#: evibes/settings/constance.py:55 +#: evibes/settings/constance.py:52 msgid "General Options" msgstr "" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:60 msgid "Email Options" msgstr "" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:69 msgid "Payment Gateway Options" msgstr "" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:76 msgid "Features Options" msgstr "" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:83 msgid "SEO Options" msgstr "" diff --git a/evibes/locale/id_ID/LC_MESSAGES/django.po b/evibes/locale/id_ID/LC_MESSAGES/django.po index 0c0c6823..6e1cadeb 100644 --- a/evibes/locale/id_ID/LC_MESSAGES/django.po +++ b/evibes/locale/id_ID/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -105,31 +105,31 @@ msgstr "Proksi HTTP" msgid "Disable buy functionality" msgstr "Menonaktifkan fungsionalitas beli" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:45 msgid "An entity for storing advertisiment data" msgstr "Entitas untuk menyimpan data iklan" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:46 msgid "An entity for storing analytics data" msgstr "Entitas untuk menyimpan data analitik" -#: evibes/settings/constance.py:55 +#: evibes/settings/constance.py:52 msgid "General Options" msgstr "Opsi Umum" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:60 msgid "Email Options" msgstr "Opsi Email" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:69 msgid "Payment Gateway Options" msgstr "Opsi Gerbang Pembayaran" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:76 msgid "Features Options" msgstr "Opsi Fitur" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:83 msgid "SEO Options" msgstr "Opsi SEO" diff --git a/evibes/locale/it_IT/LC_MESSAGES/django.po b/evibes/locale/it_IT/LC_MESSAGES/django.po index 77111329..e4041432 100644 --- a/evibes/locale/it_IT/LC_MESSAGES/django.po +++ b/evibes/locale/it_IT/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -105,31 +105,31 @@ msgstr "Proxy HTTP" msgid "Disable buy functionality" msgstr "Disattivare la funzionalità di acquisto" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:45 msgid "An entity for storing advertisiment data" msgstr "Un'entità per la memorizzazione dei dati pubblicitari" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:46 msgid "An entity for storing analytics data" msgstr "Un'entità per la memorizzazione dei dati analitici" -#: evibes/settings/constance.py:55 +#: evibes/settings/constance.py:52 msgid "General Options" msgstr "Opzioni generali" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:60 msgid "Email Options" msgstr "Opzioni e-mail" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:69 msgid "Payment Gateway Options" msgstr "Opzioni di gateway di pagamento" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:76 msgid "Features Options" msgstr "Caratteristiche Opzioni" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:83 msgid "SEO Options" msgstr "Opzioni SEO" diff --git a/evibes/locale/ja_JP/LC_MESSAGES/django.po b/evibes/locale/ja_JP/LC_MESSAGES/django.po index 210694db..443b7de8 100644 --- a/evibes/locale/ja_JP/LC_MESSAGES/django.po +++ b/evibes/locale/ja_JP/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -105,31 +105,31 @@ msgstr "HTTPプロキシ" msgid "Disable buy functionality" msgstr "購入機能を無効にする" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:45 msgid "An entity for storing advertisiment data" msgstr "広告データを保存するエンティティ" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:46 msgid "An entity for storing analytics data" msgstr "分析データを保存するエンティティ" -#: evibes/settings/constance.py:55 +#: evibes/settings/constance.py:52 msgid "General Options" msgstr "一般オプション" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:60 msgid "Email Options" msgstr "Eメールオプション" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:69 msgid "Payment Gateway Options" msgstr "ペイメントゲートウェイオプション" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:76 msgid "Features Options" msgstr "機能オプション" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:83 msgid "SEO Options" msgstr "SEOオプション" diff --git a/evibes/locale/kk_KZ/LC_MESSAGES/django.po b/evibes/locale/kk_KZ/LC_MESSAGES/django.po index 056b67af..663652a1 100644 --- a/evibes/locale/kk_KZ/LC_MESSAGES/django.po +++ b/evibes/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" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -108,31 +108,31 @@ msgstr "" msgid "Disable buy functionality" msgstr "" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:45 msgid "An entity for storing advertisiment data" msgstr "" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:46 msgid "An entity for storing analytics data" msgstr "" -#: evibes/settings/constance.py:55 +#: evibes/settings/constance.py:52 msgid "General Options" msgstr "" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:60 msgid "Email Options" msgstr "" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:69 msgid "Payment Gateway Options" msgstr "" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:76 msgid "Features Options" msgstr "" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:83 msgid "SEO Options" msgstr "" diff --git a/evibes/locale/ko_KR/LC_MESSAGES/django.po b/evibes/locale/ko_KR/LC_MESSAGES/django.po index c1a09c8c..726a6f19 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" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -105,31 +105,31 @@ msgstr "HTTP 프록시" msgid "Disable buy functionality" msgstr "구매 기능 비활성화" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:45 msgid "An entity for storing advertisiment data" msgstr "광고 데이터를 저장하는 엔티티" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:46 msgid "An entity for storing analytics data" msgstr "분석 데이터를 저장하는 엔티티" -#: evibes/settings/constance.py:55 +#: evibes/settings/constance.py:52 msgid "General Options" msgstr "일반 옵션" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:60 msgid "Email Options" msgstr "이메일 옵션" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:69 msgid "Payment Gateway Options" msgstr "결제 게이트웨이 옵션" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:76 msgid "Features Options" msgstr "기능 옵션" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:83 msgid "SEO Options" msgstr "SEO 옵션" diff --git a/evibes/locale/nl_NL/LC_MESSAGES/django.po b/evibes/locale/nl_NL/LC_MESSAGES/django.po index 5ba16f80..50d20daa 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" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -105,31 +105,31 @@ msgstr "HTTP-proxy" msgid "Disable buy functionality" msgstr "Koopfunctie uitschakelen" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:45 msgid "An entity for storing advertisiment data" msgstr "Een entiteit voor het opslaan van adverteerdersgegevens" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:46 msgid "An entity for storing analytics data" msgstr "Een entiteit voor het opslaan van analytische gegevens" -#: evibes/settings/constance.py:55 +#: evibes/settings/constance.py:52 msgid "General Options" msgstr "Algemene opties" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:60 msgid "Email Options" msgstr "E-mailopties" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:69 msgid "Payment Gateway Options" msgstr "Opties voor betalingsgateways" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:76 msgid "Features Options" msgstr "Functies Opties" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:83 msgid "SEO Options" msgstr "SEO Opties" diff --git a/evibes/locale/no_NO/LC_MESSAGES/django.po b/evibes/locale/no_NO/LC_MESSAGES/django.po index 4d66b392..2c7db91d 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" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -105,31 +105,31 @@ msgstr "HTTP-proxy" msgid "Disable buy functionality" msgstr "Deaktiver kjøpsfunksjonalitet" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:45 msgid "An entity for storing advertisiment data" msgstr "En enhet for lagring av annonseringsdata" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:46 msgid "An entity for storing analytics data" msgstr "En enhet for lagring av analysedata" -#: evibes/settings/constance.py:55 +#: evibes/settings/constance.py:52 msgid "General Options" msgstr "Generelle alternativer" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:60 msgid "Email Options" msgstr "E-postalternativer" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:69 msgid "Payment Gateway Options" msgstr "Alternativer for betalingsgateway" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:76 msgid "Features Options" msgstr "Funksjoner Alternativer" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:83 msgid "SEO Options" msgstr "SEO-alternativer" diff --git a/evibes/locale/pl_PL/LC_MESSAGES/django.po b/evibes/locale/pl_PL/LC_MESSAGES/django.po index b5975d8a..3337b784 100644 --- a/evibes/locale/pl_PL/LC_MESSAGES/django.po +++ b/evibes/locale/pl_PL/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -105,31 +105,31 @@ msgstr "Serwer proxy HTTP" msgid "Disable buy functionality" msgstr "Wyłączenie funkcji kupowania" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:45 msgid "An entity for storing advertisiment data" msgstr "Jednostka do przechowywania danych reklamowych" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:46 msgid "An entity for storing analytics data" msgstr "Jednostka do przechowywania danych analitycznych" -#: evibes/settings/constance.py:55 +#: evibes/settings/constance.py:52 msgid "General Options" msgstr "Opcje ogólne" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:60 msgid "Email Options" msgstr "Opcje e-mail" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:69 msgid "Payment Gateway Options" msgstr "Opcje bramki płatności" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:76 msgid "Features Options" msgstr "Opcje funkcji" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:83 msgid "SEO Options" msgstr "Opcje SEO" diff --git a/evibes/locale/pt_BR/LC_MESSAGES/django.po b/evibes/locale/pt_BR/LC_MESSAGES/django.po index 92b895f7..99915002 100644 --- a/evibes/locale/pt_BR/LC_MESSAGES/django.po +++ b/evibes/locale/pt_BR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -105,31 +105,31 @@ msgstr "Proxy HTTP" msgid "Disable buy functionality" msgstr "Desativar a funcionalidade de compra" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:45 msgid "An entity for storing advertisiment data" msgstr "Uma entidade para armazenar dados de propaganda" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:46 msgid "An entity for storing analytics data" msgstr "Uma entidade para armazenar dados analíticos" -#: evibes/settings/constance.py:55 +#: evibes/settings/constance.py:52 msgid "General Options" msgstr "Opções gerais" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:60 msgid "Email Options" msgstr "Opções de e-mail" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:69 msgid "Payment Gateway Options" msgstr "Opções de gateway de pagamento" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:76 msgid "Features Options" msgstr "Opções de recursos" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:83 msgid "SEO Options" msgstr "Opções de SEO" diff --git a/evibes/locale/ro_RO/LC_MESSAGES/django.po b/evibes/locale/ro_RO/LC_MESSAGES/django.po index 3dfc7701..30ad9ddf 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" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -105,31 +105,31 @@ msgstr "Proxy HTTP" msgid "Disable buy functionality" msgstr "Dezactivați funcționalitatea de cumpărare" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:45 msgid "An entity for storing advertisiment data" msgstr "O entitate pentru stocarea datelor privind publicitatea" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:46 msgid "An entity for storing analytics data" msgstr "O entitate pentru stocarea datelor analitice" -#: evibes/settings/constance.py:55 +#: evibes/settings/constance.py:52 msgid "General Options" msgstr "Opțiuni generale" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:60 msgid "Email Options" msgstr "Opțiuni de e-mail" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:69 msgid "Payment Gateway Options" msgstr "Opțiuni pentru portalul de plăți" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:76 msgid "Features Options" msgstr "Caracteristici Opțiuni" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:83 msgid "SEO Options" msgstr "Opțiuni SEO" diff --git a/evibes/locale/ru_RU/LC_MESSAGES/django.po b/evibes/locale/ru_RU/LC_MESSAGES/django.po index ea99d78a..0ce4c881 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" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -105,31 +105,31 @@ msgstr "HTTP-прокси" msgid "Disable buy functionality" msgstr "Отключить функцию покупки" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:45 msgid "An entity for storing advertisiment data" msgstr "Устройство для хранения данных о рекламе" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:46 msgid "An entity for storing analytics data" msgstr "Сущность для хранения аналитических данных" -#: evibes/settings/constance.py:55 +#: evibes/settings/constance.py:52 msgid "General Options" msgstr "Общие параметры" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:60 msgid "Email Options" msgstr "Параметры электронной почты" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:69 msgid "Payment Gateway Options" msgstr "Варианты платежных шлюзов" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:76 msgid "Features Options" msgstr "Особенности Опции" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:83 msgid "SEO Options" msgstr "Параметры SEO" diff --git a/evibes/locale/sv_SE/LC_MESSAGES/django.po b/evibes/locale/sv_SE/LC_MESSAGES/django.po index 64072b48..b2186398 100644 --- a/evibes/locale/sv_SE/LC_MESSAGES/django.po +++ b/evibes/locale/sv_SE/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -105,31 +105,31 @@ msgstr "HTTP-proxy" msgid "Disable buy functionality" msgstr "Inaktivera köpfunktionalitet" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:45 msgid "An entity for storing advertisiment data" msgstr "En enhet för lagring av annonseringsdata" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:46 msgid "An entity for storing analytics data" msgstr "En enhet för lagring av analysdata" -#: evibes/settings/constance.py:55 +#: evibes/settings/constance.py:52 msgid "General Options" msgstr "Allmänna alternativ" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:60 msgid "Email Options" msgstr "Alternativ för e-post" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:69 msgid "Payment Gateway Options" msgstr "Alternativ för betalningsgateway" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:76 msgid "Features Options" msgstr "Funktioner Alternativ" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:83 msgid "SEO Options" msgstr "SEO-alternativ" diff --git a/evibes/locale/th_TH/LC_MESSAGES/django.po b/evibes/locale/th_TH/LC_MESSAGES/django.po index 1f78ab4e..84879c10 100644 --- a/evibes/locale/th_TH/LC_MESSAGES/django.po +++ b/evibes/locale/th_TH/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -105,31 +105,31 @@ msgstr "HTTP พร็อกซี" msgid "Disable buy functionality" msgstr "ปิดการใช้งานฟังก์ชันการซื้อ" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:45 msgid "An entity for storing advertisiment data" msgstr "หน่วยงานสำหรับเก็บข้อมูลโฆษณา" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:46 msgid "An entity for storing analytics data" msgstr "หน่วยงานสำหรับเก็บข้อมูลการวิเคราะห์" -#: evibes/settings/constance.py:55 +#: evibes/settings/constance.py:52 msgid "General Options" msgstr "ตัวเลือกทั่วไป" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:60 msgid "Email Options" msgstr "ตัวเลือกอีเมล" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:69 msgid "Payment Gateway Options" msgstr "ตัวเลือกเกตเวย์การชำระเงิน" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:76 msgid "Features Options" msgstr "คุณสมบัติ ตัวเลือก" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:83 msgid "SEO Options" msgstr "ตัวเลือก SEO" diff --git a/evibes/locale/tr_TR/LC_MESSAGES/django.po b/evibes/locale/tr_TR/LC_MESSAGES/django.po index f3d5e85a..229995b7 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" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -105,31 +105,31 @@ msgstr "HTTP Proxy" msgid "Disable buy functionality" msgstr "Satın alma işlevini devre dışı bırakın" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:45 msgid "An entity for storing advertisiment data" msgstr "Reklam verilerini depolamak için bir varlık" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:46 msgid "An entity for storing analytics data" msgstr "Analitik verileri depolamak için bir varlık" -#: evibes/settings/constance.py:55 +#: evibes/settings/constance.py:52 msgid "General Options" msgstr "Genel Seçenekler" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:60 msgid "Email Options" msgstr "E-posta Seçenekleri" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:69 msgid "Payment Gateway Options" msgstr "Ödeme Geçidi Seçenekleri" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:76 msgid "Features Options" msgstr "Özellikler Seçenekler" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:83 msgid "SEO Options" msgstr "SEO Seçenekleri" diff --git a/evibes/locale/vi_VN/LC_MESSAGES/django.po b/evibes/locale/vi_VN/LC_MESSAGES/django.po index bb9e3110..2429ce45 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" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -105,31 +105,31 @@ msgstr "Proxy HTTP" msgid "Disable buy functionality" msgstr "Vô hiệu hóa chức năng mua hàng" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:45 msgid "An entity for storing advertisiment data" msgstr "Một thực thể dùng để lưu trữ dữ liệu quảng cáo" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:46 msgid "An entity for storing analytics data" msgstr "Một thực thể dùng để lưu trữ dữ liệu phân tích." -#: evibes/settings/constance.py:55 +#: evibes/settings/constance.py:52 msgid "General Options" msgstr "Tùy chọn chung" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:60 msgid "Email Options" msgstr "Tùy chọn email" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:69 msgid "Payment Gateway Options" msgstr "Các tùy chọn cổng thanh toán" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:76 msgid "Features Options" msgstr "Tính năng và tùy chọn" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:83 msgid "SEO Options" msgstr "Các tùy chọn SEO" diff --git a/evibes/locale/zh_Hans/LC_MESSAGES/django.po b/evibes/locale/zh_Hans/LC_MESSAGES/django.po index dc363da0..78e3511a 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" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-07 15:47+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -105,31 +105,31 @@ msgstr "HTTP 代理服务器" msgid "Disable buy functionality" msgstr "禁用购买功能" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:45 msgid "An entity for storing advertisiment data" msgstr "存储广告数据的实体" -#: evibes/settings/constance.py:49 +#: evibes/settings/constance.py:46 msgid "An entity for storing analytics data" msgstr "存储分析数据的实体" -#: evibes/settings/constance.py:55 +#: evibes/settings/constance.py:52 msgid "General Options" msgstr "一般选项" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:60 msgid "Email Options" msgstr "电子邮件选项" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:69 msgid "Payment Gateway Options" msgstr "支付网关选项" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:76 msgid "Features Options" msgstr "功能选项" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:83 msgid "SEO Options" msgstr "搜索引擎优化选项" diff --git a/evibes/settings/constance.py b/evibes/settings/constance.py index 69b12293..1cec8f38 100644 --- a/evibes/settings/constance.py +++ b/evibes/settings/constance.py @@ -42,11 +42,8 @@ CONSTANCE_CONFIG = OrderedDict( ("ABSTRACT_API_KEY", (getenv("ABSTRACT_API_KEY", "example key"), _("Abstract API Key"))), ("HTTP_PROXY", (getenv("DJANGO_HTTP_PROXY", "http://username:password@proxy_address:port"), _("HTTP Proxy"))), ("DISABLED_COMMERCE", (getenv("DISABLED_COMMERCE", False), _("Disable buy functionality"))), - ( - "ADVERTISEMENT_DATA", - (getenv("EVIBES_ADVERTISEMENT_DATA", ""), _("An entity for storing advertisiment data"), "json"), - ), - ("ANALYTICS_DATA", (getenv("EVIBES_ANALYTICS_DATA", ""), _("An entity for storing analytics data"), "json")), + ("ADVERTSIMENT", (getenv("EVIBES_ADVERTISIMENT", ""), _("An entity for storing advertisiment data"), "json")), + ("ANALYTICS", (getenv("EVIBES_ANALYTICS", ""), _("An entity for storing analytics data"), "json")), ] ) @@ -84,8 +81,8 @@ CONSTANCE_CONFIG_FIELDSETS = OrderedDict( "HTTP_PROXY", ), gettext_noop("SEO Options"): ( - "ADVERTISEMENT_DATA", - "ANALYTICS_DATA", + "ADVERTSIMENT", + "ANALYTICS", ), } ) @@ -100,6 +97,6 @@ EXPOSABLE_KEYS = [ "EMAIL_FROM", "PAYMENT_GATEWAY_MINIMUM", "PAYMENT_GATEWAY_MAXIMUM", - "ADVERTISEMENT_DATA", - "ANALYTICS_DATA", + "ADVERTSIMENT", + "ANALYTICS", ]

    - {% blocktrans %}reset - password{% endblocktrans %} + {% blocktrans %}reset password{% endblocktrans %}

  • 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 delta 12688 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 m_EmKQGn##V(=TIx_GbYZnU@0ma(JTBuY6xT\n" "Language-Team: BRITISH ENGLISH \n" @@ -90,11 +90,11 @@ msgid "selected items have been deactivated." msgstr "Выбранные сущности были деактивированы!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:712 core/models.py:720 +#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 msgid "attribute value" msgstr "Значение атрибута" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:721 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 msgid "attribute values" msgstr "Значения атрибутов" @@ -106,7 +106,7 @@ msgstr "Изображение" msgid "images" msgstr "Изображения" -#: core/admin.py:155 core/models.py:457 +#: core/admin.py:155 core/models.py:445 msgid "stock" msgstr "Наличие" @@ -114,11 +114,11 @@ msgstr "Наличие" msgid "stocks" msgstr "Наличия" -#: core/admin.py:166 core/models.py:1735 +#: core/admin.py:166 core/models.py:1609 msgid "order product" msgstr "Заказанный товар" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1736 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 msgid "order products" msgstr "Заказанные товары" @@ -334,7 +334,7 @@ msgstr "" "Переписать некоторые поля существующей категории с сохранением " "нередактируемых полей" -#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:553 +#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:487 #: core/graphene/object_types.py:117 core/graphene/object_types.py:207 #: core/graphene/object_types.py:509 msgid "SEO Meta snapshot" @@ -608,47 +608,7 @@ msgstr "Список всех продуктов (простой вид)" msgid "(exact) Product UUID" msgstr "(точный) UUID продукта" -#: core/docs/drf/viewsets.py:384 -msgid "(icontains) Product name" -msgstr "(иконки) Название продукта" - -#: core/docs/drf/viewsets.py:390 -msgid "(list) Category names, case-insensitive" -msgstr "(список) Названия категорий, без учета регистра" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Category UUID" -msgstr "(точный) UUID категории" - -#: core/docs/drf/viewsets.py:402 -msgid "(list) Tag names, case-insensitive" -msgstr "(список) Имена тегов, нечувствительные к регистру" - -#: core/docs/drf/viewsets.py:408 -msgid "(gte) Minimum stock price" -msgstr "(gte) Минимальная цена акции" - -#: core/docs/drf/viewsets.py:414 -msgid "(lte) Maximum stock price" -msgstr "(lte) Максимальная цена акции" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Only active products" -msgstr "(точно) Только активные продукты" - -#: core/docs/drf/viewsets.py:426 -msgid "(iexact) Brand name" -msgstr "(iexact) Торговое название" - -#: core/docs/drf/viewsets.py:438 -msgid "(gt) Minimum stock quantity" -msgstr "(gt) Минимальное количество на складе" - -#: core/docs/drf/viewsets.py:444 -msgid "(exact) Digital vs. physical" -msgstr "(точно) Цифровые и физические" - -#: core/docs/drf/viewsets.py:451 +#: core/docs/drf/viewsets.py:385 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -656,253 +616,257 @@ msgstr "" "Список полей для сортировки, разделенных запятыми. Для сортировки по убыванию используйте префикс `-`. \n" "**Разрешенные:** uuid, рейтинг, название, slug, created, modified, price, random" -#: core/docs/drf/viewsets.py:465 core/docs/drf/viewsets.py:466 +#: core/docs/drf/viewsets.py:399 core/docs/drf/viewsets.py:400 msgid "retrieve a single product (detailed view)" msgstr "Получение одного продукта (подробный просмотр)" -#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:495 -#: core/docs/drf/viewsets.py:511 core/docs/drf/viewsets.py:527 -#: core/docs/drf/viewsets.py:543 core/docs/drf/viewsets.py:559 +#: core/docs/drf/viewsets.py:405 core/docs/drf/viewsets.py:429 +#: core/docs/drf/viewsets.py:445 core/docs/drf/viewsets.py:461 +#: core/docs/drf/viewsets.py:477 core/docs/drf/viewsets.py:493 msgid "Product UUID or slug" msgstr "UUID или Slug продукта" -#: core/docs/drf/viewsets.py:481 core/docs/drf/viewsets.py:482 +#: core/docs/drf/viewsets.py:415 core/docs/drf/viewsets.py:416 msgid "create a product" msgstr "Создать продукт" -#: core/docs/drf/viewsets.py:489 core/docs/drf/viewsets.py:490 +#: core/docs/drf/viewsets.py:423 core/docs/drf/viewsets.py:424 msgid "rewrite an existing product, preserving non-editable fields" msgstr "Переписать существующий продукт, сохранив нередактируемые поля" -#: core/docs/drf/viewsets.py:505 core/docs/drf/viewsets.py:506 +#: core/docs/drf/viewsets.py:439 core/docs/drf/viewsets.py:440 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" "Обновление некоторых полей существующего продукта с сохранением " "нередактируемых полей" -#: core/docs/drf/viewsets.py:521 core/docs/drf/viewsets.py:522 +#: core/docs/drf/viewsets.py:455 core/docs/drf/viewsets.py:456 msgid "delete a product" msgstr "Удалить продукт" -#: core/docs/drf/viewsets.py:537 core/docs/drf/viewsets.py:538 +#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:472 msgid "lists all permitted feedbacks for a product" msgstr "список всех разрешенных отзывов о продукте" -#: core/docs/drf/viewsets.py:554 +#: core/docs/drf/viewsets.py:488 msgid "returns a snapshot of the product's SEO meta data" msgstr "Возвращает снимок метаданных SEO продукта." -#: core/docs/drf/viewsets.py:572 +#: core/docs/drf/viewsets.py:506 msgid "list all addresses" msgstr "Перечислите все адреса" -#: core/docs/drf/viewsets.py:579 +#: core/docs/drf/viewsets.py:513 msgid "retrieve a single address" msgstr "Получение одного адреса" -#: core/docs/drf/viewsets.py:586 +#: core/docs/drf/viewsets.py:520 msgid "create a new address" msgstr "Создайте новый адрес" -#: core/docs/drf/viewsets.py:594 +#: core/docs/drf/viewsets.py:528 msgid "delete an address" msgstr "Удалить адрес" -#: core/docs/drf/viewsets.py:601 +#: core/docs/drf/viewsets.py:535 msgid "update an entire address" msgstr "Обновление всего адреса" -#: core/docs/drf/viewsets.py:609 +#: core/docs/drf/viewsets.py:543 msgid "partially update an address" msgstr "Частичное обновление адреса" -#: core/docs/drf/viewsets.py:617 +#: core/docs/drf/viewsets.py:551 msgid "autocomplete address suggestions" msgstr "Автозаполнение ввода адреса" -#: core/docs/drf/viewsets.py:622 +#: core/docs/drf/viewsets.py:556 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" "Строка запроса сырых данных, пожалуйста, дополните ее данными с конечной " "точки geo-IP" -#: core/docs/drf/viewsets.py:628 +#: core/docs/drf/viewsets.py:562 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "ограничивает количество результатов, 1 < limit < 10, по умолчанию: 5" -#: core/docs/drf/viewsets.py:641 +#: core/docs/drf/viewsets.py:575 msgid "list all feedbacks (simple view)" msgstr "список всех отзывов (простой вид)" -#: core/docs/drf/viewsets.py:645 +#: core/docs/drf/viewsets.py:579 msgid "retrieve a single feedback (detailed view)" msgstr "получить один отзыв (подробный просмотр)" -#: core/docs/drf/viewsets.py:649 +#: core/docs/drf/viewsets.py:583 msgid "create a feedback" msgstr "создать отзыв" -#: core/docs/drf/viewsets.py:653 +#: core/docs/drf/viewsets.py:587 msgid "delete a feedback" msgstr "удалить отзыв" -#: core/docs/drf/viewsets.py:657 +#: core/docs/drf/viewsets.py:591 msgid "rewrite an existing feedback saving non-editables" msgstr "" "Переписать существующую категорию с сохранением нередактируемых объектов" -#: core/docs/drf/viewsets.py:661 +#: core/docs/drf/viewsets.py:595 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" "Переписать некоторые поля существующей категории с сохранением " "нередактируемых полей" -#: core/docs/drf/viewsets.py:668 +#: core/docs/drf/viewsets.py:602 msgid "list all order–product relations (simple view)" msgstr "список всех отношений \"заказ-продукт\" (простой вид)" -#: core/docs/drf/viewsets.py:675 +#: core/docs/drf/viewsets.py:609 msgid "retrieve a single order–product relation (detailed view)" msgstr "получить одно отношение \"заказ-продукт\" (подробный просмотр)" -#: core/docs/drf/viewsets.py:682 +#: core/docs/drf/viewsets.py:616 msgid "create a new order–product relation" msgstr "создать новое отношение \"заказ-продукт" -#: core/docs/drf/viewsets.py:689 +#: core/docs/drf/viewsets.py:623 msgid "replace an existing order–product relation" msgstr "заменить существующее отношение \"заказ-продукт" -#: core/docs/drf/viewsets.py:696 +#: core/docs/drf/viewsets.py:630 msgid "partially update an existing order–product relation" msgstr "частично обновить существующее отношение \"заказ-продукт" -#: core/docs/drf/viewsets.py:703 +#: core/docs/drf/viewsets.py:637 msgid "delete an order–product relation" msgstr "удалить отношение \"заказ-продукт" -#: core/docs/drf/viewsets.py:710 +#: core/docs/drf/viewsets.py:644 msgid "add or remove feedback on an order–product relation" msgstr "добавлять или удалять отзывы о связи заказ-продукт" -#: core/elasticsearch/__init__.py:105 +#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 msgid "no search term provided." msgstr "Поисковый запрос не предоставлен." -#: core/filters.py:64 core/filters.py:594 core/filters.py:623 +#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +msgid "Search" +msgstr "Поиск" + +#: core/filters.py:66 core/filters.py:554 core/filters.py:583 msgid "UUID" msgstr "UUID" -#: core/filters.py:65 core/filters.py:429 core/filters.py:560 +#: core/filters.py:67 core/filters.py:399 core/filters.py:526 msgid "Name" msgstr "Имя" -#: core/filters.py:66 core/filters.py:562 +#: core/filters.py:68 core/filters.py:528 msgid "Categories" msgstr "Категории" -#: core/filters.py:68 +#: core/filters.py:70 msgid "Categories Slugs" msgstr "Категории Слизни" -#: core/filters.py:69 core/filters.py:437 +#: core/filters.py:71 core/filters.py:407 msgid "Tags" msgstr "Теги" -#: core/filters.py:70 +#: core/filters.py:72 msgid "Min Price" msgstr "Мин. цена" -#: core/filters.py:71 +#: core/filters.py:73 msgid "Max Price" msgstr "Максимальная цена" -#: core/filters.py:72 +#: core/filters.py:74 msgid "Is Active" msgstr "Активен" -#: core/filters.py:73 +#: core/filters.py:75 msgid "Brand" msgstr "Бренд" -#: core/filters.py:74 +#: core/filters.py:76 msgid "Attributes" msgstr "Атрибуты" -#: core/filters.py:75 +#: core/filters.py:77 msgid "Quantity" msgstr "Количество" -#: core/filters.py:76 core/filters.py:431 core/filters.py:561 -#: core/models.py:287 core/models.py:381 core/models.py:534 +#: core/filters.py:78 core/filters.py:401 core/filters.py:527 +#: core/models.py:287 core/models.py:369 core/models.py:522 msgid "Slug" msgstr "Слаг" -#: core/filters.py:77 +#: core/filters.py:79 msgid "Is Digital" msgstr "Цифровой" -#: core/filters.py:78 +#: core/filters.py:80 msgid "Include sub-categories" msgstr "Включите подкатегории" -#: core/filters.py:81 +#: core/filters.py:83 msgid "Include personal ordered" msgstr "Включите продукты, заказанные лично" -#: core/filters.py:83 core/models.py:538 +#: core/filters.py:85 core/models.py:526 msgid "SKU" msgstr "Артикул" -#: core/filters.py:166 +#: core/filters.py:161 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" "Для использования флага include_subcategories должен быть указан " "category_uuid." -#: core/filters.py:356 +#: core/filters.py:324 msgid "Search (ID, product name or part number)" msgstr "Поиск (идентификатор, название продукта или номер детали)" -#: core/filters.py:359 +#: core/filters.py:327 msgid "Bought after (inclusive)" msgstr "Куплено после (включительно)" -#: core/filters.py:360 +#: core/filters.py:328 msgid "Bought before (inclusive)" msgstr "Куплено ранее (включительно)" -#: core/filters.py:363 core/filters.py:410 core/filters.py:625 +#: core/filters.py:331 core/filters.py:378 core/filters.py:585 msgid "User email" msgstr "Электронная почта пользователя" -#: core/filters.py:364 core/filters.py:411 core/filters.py:603 -#: core/filters.py:624 +#: core/filters.py:332 core/filters.py:379 core/filters.py:563 +#: core/filters.py:584 msgid "User UUID" msgstr "UUID пользователя" -#: core/filters.py:365 +#: core/filters.py:333 msgid "Status" msgstr "Статус" -#: core/filters.py:369 +#: core/filters.py:337 msgid "Human Readable ID" msgstr "Человекочитаемый идентификатор" -#: core/filters.py:430 +#: core/filters.py:400 msgid "Parent" msgstr "Родитель" -#: core/filters.py:434 +#: core/filters.py:404 msgid "Whole category(has at least 1 product or not)" msgstr "Вся категория (есть хотя бы 1 продукт или нет)" -#: core/filters.py:438 +#: core/filters.py:408 msgid "Level" msgstr "Уровень" -#: core/filters.py:598 +#: core/filters.py:558 msgid "Product UUID" msgstr "UUID продукта" @@ -959,7 +923,7 @@ msgstr "" "варианты!" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:821 +#: core/graphene/mutations.py:527 core/viewsets.py:839 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Неправильный тип получен из метода order.buy(): {type(instance)!s}" @@ -1022,37 +986,37 @@ msgstr "" msgid "add or delete a feedback for orderproduct" msgstr "Добавить или удалить отзыв для продукта заказа" -#: core/graphene/mutations.py:555 +#: core/graphene/mutations.py:556 msgid "action must be either `add` or `remove`" msgstr "Действие должно быть либо `add`, либо `remove`!" -#: core/graphene/mutations.py:558 +#: core/graphene/mutations.py:559 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Заказ товара {order_product_uuid} не найден!" -#: core/graphene/mutations.py:621 +#: core/graphene/mutations.py:622 msgid "original address string provided by the user" msgstr "Оригинальная строка адреса, предоставленная пользователем" -#: core/graphene/mutations.py:655 core/models.py:896 core/models.py:909 -#: core/models.py:1348 core/models.py:1377 core/models.py:1402 -#: core/viewsets.py:824 +#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 +#: core/models.py:1234 core/models.py:1263 core/models.py:1288 +#: core/viewsets.py:842 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} не существует: {uuid}!" -#: core/graphene/mutations.py:668 +#: core/graphene/mutations.py:669 msgid "limit must be between 1 and 10" msgstr "Предел должен быть от 1 до 10" -#: core/graphene/mutations.py:713 +#: core/graphene/mutations.py:714 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - работает как шарм" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:666 core/models.py:1234 -#: core/models.py:1809 +#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 +#: core/models.py:1686 msgid "attributes" msgstr "Атрибуты" @@ -1065,11 +1029,11 @@ msgid "groups of attributes" msgstr "Группы атрибутов" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:620 +#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:612 msgid "categories" msgstr "Категории" -#: core/graphene/object_types.py:124 core/models.py:395 +#: core/graphene/object_types.py:124 core/models.py:383 msgid "brands" msgstr "Бренды" @@ -1128,7 +1092,7 @@ msgid "represents feedback from a user." msgstr "Представляет собой отзыв пользователя." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1228 +#: core/models.py:1110 msgid "notifications" msgstr "Уведомления" @@ -1136,7 +1100,7 @@ msgstr "Уведомления" msgid "download url for this order product if applicable" msgstr "Если применимо, загрузите url для этого продукта заказа" -#: core/graphene/object_types.py:400 core/models.py:1938 +#: core/graphene/object_types.py:400 core/models.py:1791 msgid "feedback" msgstr "Обратная связь" @@ -1144,7 +1108,7 @@ msgstr "Обратная связь" msgid "a list of order products in this order" msgstr "Список товаров, заказанных в этом заказе" -#: core/graphene/object_types.py:436 core/models.py:1198 +#: core/graphene/object_types.py:436 core/models.py:1080 msgid "billing address" msgstr "Адрес для выставления счетов" @@ -1172,7 +1136,7 @@ msgstr "Все ли товары в заказе представлены в ц msgid "transactions for this order" msgstr "Операции для этого заказа" -#: core/graphene/object_types.py:465 core/models.py:1262 +#: core/graphene/object_types.py:465 core/models.py:1144 msgid "orders" msgstr "Заказы" @@ -1184,15 +1148,15 @@ msgstr "URL-адрес изображения" msgid "product's images" msgstr "Изображения товара" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:477 +#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 msgid "category" msgstr "Категория" -#: core/graphene/object_types.py:502 core/models.py:1939 +#: core/graphene/object_types.py:502 core/models.py:1792 msgid "feedbacks" msgstr "Отзывы" -#: core/graphene/object_types.py:503 core/models.py:394 core/models.py:486 +#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 msgid "brand" msgstr "Бренд" @@ -1224,7 +1188,7 @@ msgstr "Количество отзывов" msgid "only available for personal orders" msgstr "Продукты доступны только для личных заказов" -#: core/graphene/object_types.py:534 core/models.py:548 +#: core/graphene/object_types.py:534 core/models.py:536 msgid "products" msgstr "Товары" @@ -1236,7 +1200,7 @@ msgstr "Промокоды" msgid "products on sale" msgstr "Продукты в продаже" -#: core/graphene/object_types.py:651 core/models.py:843 +#: core/graphene/object_types.py:651 core/models.py:784 msgid "promotions" msgstr "Промоакции" @@ -1244,7 +1208,7 @@ msgstr "Промоакции" msgid "vendor" msgstr "Поставщик" -#: core/graphene/object_types.py:656 core/models.py:547 +#: core/graphene/object_types.py:656 core/models.py:535 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1252,11 +1216,11 @@ msgstr "Поставщик" msgid "product" msgstr "Товар" -#: core/graphene/object_types.py:667 core/models.py:868 +#: core/graphene/object_types.py:667 core/models.py:807 msgid "wishlisted products" msgstr "Продукты из списка желаний" -#: core/graphene/object_types.py:673 core/models.py:885 +#: core/graphene/object_types.py:673 core/models.py:824 msgid "wishlists" msgstr "Списки желаний" @@ -1264,7 +1228,7 @@ msgstr "Списки желаний" msgid "tagged products" msgstr "Tagged products" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:492 +#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 msgid "product tags" msgstr "Теги товара" @@ -1376,7 +1340,7 @@ msgstr "Родительская группа атрибутов" msgid "attribute group's name" msgstr "Имя группы атрибутов" -#: core/models.py:100 core/models.py:628 +#: core/models.py:100 core/models.py:620 msgid "attribute group" msgstr "Группа атрибутов" @@ -1541,51 +1505,64 @@ msgstr "Описание категории" msgid "tags that help describe or group this category" msgstr "теги, которые помогают описать или сгруппировать эту категорию" -#: core/models.py:299 core/models.py:387 +#: core/models.py:299 core/models.py:375 msgid "priority" msgstr "Приоритет" -#: core/models.py:340 +#: core/models.py:318 +msgid "" +"Represents a Brand object in the system. This class handles information and " +"attributes related to a brand, including its name, logos, description, " +"associated categories, a unique slug, and priority order. It allows for the " +"organization and representation of brand-related data within the " +"application." +msgstr "" +"Представляет объект Brand в системе. Этот класс обрабатывает информацию и " +"атрибуты, связанные с брендом, включая его название, логотипы, описание, " +"связанные категории, уникальную метку и порядок приоритетов. Он позволяет " +"организовать и представить данные, связанные с брендом, в приложении." + +#: core/models.py:328 msgid "name of this brand" msgstr "Название этой марки" -#: core/models.py:341 +#: core/models.py:329 msgid "brand name" msgstr "Название бренда" -#: core/models.py:348 +#: core/models.py:336 msgid "upload a logo representing this brand" msgstr "Загрузите логотип, представляющий этот бренд" -#: core/models.py:350 +#: core/models.py:338 msgid "brand small image" msgstr "Маленький образ бренда" -#: core/models.py:356 +#: core/models.py:344 msgid "upload a big logo representing this brand" msgstr "Загрузите большой логотип, представляющий этот бренд" -#: core/models.py:358 +#: core/models.py:346 msgid "brand big image" msgstr "Большой имидж бренда" -#: core/models.py:363 +#: core/models.py:351 msgid "add a detailed description of the brand" msgstr "Добавьте подробное описание бренда" -#: core/models.py:364 +#: core/models.py:352 msgid "brand description" msgstr "Описание бренда" -#: core/models.py:369 +#: core/models.py:357 msgid "optional categories that this brand is associated with" msgstr "Дополнительные категории, с которыми ассоциируется этот бренд" -#: core/models.py:370 +#: core/models.py:358 msgid "associated categories" msgstr "Категории" -#: core/models.py:400 +#: core/models.py:388 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1601,68 +1578,68 @@ msgstr "" "активы. Он является частью системы управления запасами, позволяющей " "отслеживать и оценивать продукты, доступные у различных поставщиков." -#: core/models.py:412 +#: core/models.py:400 msgid "the vendor supplying this product stock" msgstr "Поставщик, поставляющий данный товар на склад" -#: core/models.py:413 +#: core/models.py:401 msgid "associated vendor" msgstr "Ассоциированный поставщик" -#: core/models.py:417 +#: core/models.py:405 msgid "final price to the customer after markups" msgstr "Окончательная цена для покупателя после наценок" -#: core/models.py:418 +#: core/models.py:406 msgid "selling price" msgstr "Цена продажи" -#: core/models.py:423 +#: core/models.py:411 msgid "the product associated with this stock entry" msgstr "Продукт, связанный с этой складской записью" -#: core/models.py:424 core/models.py:708 core/models.py:765 -#: core/models.py:1709 +#: core/models.py:412 core/models.py:683 core/models.py:730 +#: core/models.py:1583 msgid "associated product" msgstr "Сопутствующий товар" -#: core/models.py:431 +#: core/models.py:419 msgid "the price paid to the vendor for this product" msgstr "Цена, уплаченная продавцу за этот продукт" -#: core/models.py:432 +#: core/models.py:420 msgid "vendor purchase price" msgstr "Цена покупки у поставщика" -#: core/models.py:436 +#: core/models.py:424 msgid "available quantity of the product in stock" msgstr "Доступное количество продукта на складе" -#: core/models.py:437 +#: core/models.py:425 msgid "quantity in stock" msgstr "Количество на складе" -#: core/models.py:441 +#: core/models.py:429 msgid "vendor-assigned SKU for identifying the product" msgstr "Присвоенный поставщиком SKU для идентификации продукта" -#: core/models.py:442 +#: core/models.py:430 msgid "vendor sku" msgstr "Артикул поставщика" -#: core/models.py:448 +#: core/models.py:436 msgid "digital file associated with this stock if applicable" msgstr "Цифровой файл, связанный с этой акцией, если применимо" -#: core/models.py:449 +#: core/models.py:437 msgid "digital file" msgstr "Цифровой файл" -#: core/models.py:458 +#: core/models.py:446 msgid "stock entries" msgstr "Наличия" -#: core/models.py:463 +#: core/models.py:451 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1683,55 +1660,55 @@ msgstr "" "повышения производительности. Он используется для определения и " "манипулирования данными о товаре и связанной с ним информацией в приложении." -#: core/models.py:476 +#: core/models.py:464 msgid "category this product belongs to" msgstr "Категория, к которой относится этот продукт" -#: core/models.py:485 +#: core/models.py:473 msgid "optionally associate this product with a brand" msgstr "По желанию ассоциируйте этот продукт с брендом" -#: core/models.py:491 +#: core/models.py:479 msgid "tags that help describe or group this product" msgstr "Теги, которые помогают описать или сгруппировать этот продукт" -#: core/models.py:496 +#: core/models.py:484 msgid "indicates whether this product is digitally delivered" msgstr "Указывает, поставляется ли этот продукт в цифровом виде" -#: core/models.py:497 +#: core/models.py:485 msgid "is product digital" msgstr "Является ли продукт цифровым" -#: core/models.py:503 +#: core/models.py:491 msgid "provide a clear identifying name for the product" msgstr "Обеспечьте четкое идентификационное название продукта" -#: core/models.py:504 +#: core/models.py:492 msgid "product name" msgstr "Название продукта" -#: core/models.py:509 core/models.py:831 +#: core/models.py:497 core/models.py:772 msgid "add a detailed description of the product" msgstr "Добавьте подробное описание продукта" -#: core/models.py:510 +#: core/models.py:498 msgid "product description" msgstr "Описание товара" -#: core/models.py:517 +#: core/models.py:505 msgid "part number for this product" msgstr "Парт. номер для данного товара" -#: core/models.py:518 +#: core/models.py:506 msgid "part number" msgstr "Парт. номер" -#: core/models.py:537 +#: core/models.py:525 msgid "stock keeping unit for this product" msgstr "Единица складского учета для данного продукта" -#: core/models.py:607 +#: core/models.py:599 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 " @@ -1748,294 +1725,401 @@ msgstr "" "плавающую форму, булевую форму, массив и объект. Это позволяет динамично и " "гибко структурировать данные." -#: core/models.py:619 +#: core/models.py:611 msgid "category of this attribute" msgstr "Категория этого атрибута" -#: core/models.py:627 +#: core/models.py:619 msgid "group of this attribute" msgstr "Группа этого атрибута" -#: core/models.py:633 +#: core/models.py:625 msgid "string" msgstr "Строка" -#: core/models.py:634 +#: core/models.py:626 msgid "integer" msgstr "Целое число" -#: core/models.py:635 +#: core/models.py:627 msgid "float" msgstr "Поплавок" -#: core/models.py:636 +#: core/models.py:628 msgid "boolean" msgstr "Булево" -#: core/models.py:637 +#: core/models.py:629 msgid "array" msgstr "Массив" -#: core/models.py:638 +#: core/models.py:630 msgid "object" msgstr "Объект" -#: core/models.py:640 +#: core/models.py:632 msgid "type of the attribute's value" msgstr "Тип значения атрибута" -#: core/models.py:641 +#: core/models.py:633 msgid "value type" msgstr "Тип значения" -#: core/models.py:646 +#: core/models.py:638 msgid "name of this attribute" msgstr "Имя этого атрибута" -#: core/models.py:647 +#: core/models.py:639 msgid "attribute's name" msgstr "Имя атрибута" -#: core/models.py:653 +#: core/models.py:645 msgid "is filterable" msgstr "поддается фильтрации" -#: core/models.py:654 +#: core/models.py:646 msgid "designates whether this attribute can be used for filtering or not" msgstr "" "Какие атрибуты и значения можно использовать для фильтрации этой категории." -#: core/models.py:665 core/models.py:700 +#: core/models.py:657 core/models.py:675 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Атрибут" -#: core/models.py:699 +#: core/models.py:663 +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:674 msgid "attribute of this value" msgstr "Атрибут этого значения" -#: core/models.py:707 +#: core/models.py:682 msgid "the specific product associated with this attribute's value" msgstr "Конкретный продукт, связанный со значением этого атрибута" -#: core/models.py:713 +#: core/models.py:688 msgid "the specific value for this attribute" msgstr "Конкретное значение для этого атрибута" -#: core/models.py:747 +#: core/models.py:701 +msgid "" +"Represents a product image associated with a product in the system. This " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " +"determining their display order. It also includes an accessibility feature " +"with alternative text for the images." +msgstr "" +"Представляет изображение продукта, связанное с продуктом в системе. Этот " +"класс предназначен для управления изображениями товаров, включая " +"функциональность для загрузки файлов изображений, их привязки к конкретным " +"товарам и определения порядка их отображения. Он также включает функцию " +"доступности с альтернативным текстом для изображений." + +#: core/models.py:712 msgid "provide alternative text for the image for accessibility" msgstr "" "Предоставьте альтернативный текст для изображения, чтобы обеспечить " "доступность" -#: core/models.py:748 +#: core/models.py:713 msgid "image alt text" msgstr "Альтовый текст изображения" -#: core/models.py:751 +#: core/models.py:716 msgid "upload the image file for this product" msgstr "Загрузите файл изображения для этого продукта" -#: core/models.py:752 core/models.py:777 +#: core/models.py:717 core/models.py:742 msgid "product image" msgstr "Изображение продукта" -#: core/models.py:758 +#: core/models.py:723 msgid "determines the order in which images are displayed" msgstr "Определяет порядок отображения изображений" -#: core/models.py:759 +#: core/models.py:724 msgid "display priority" msgstr "Приоритет отображения" -#: core/models.py:764 +#: core/models.py:729 msgid "the product that this image represents" msgstr "Продукт, который представлен на этом изображении" -#: core/models.py:778 +#: core/models.py:743 msgid "product images" msgstr "Изображения товаров" -#: core/models.py:819 +#: core/models.py:748 +msgid "" +"Represents a promotional campaign for products with a discount. This class " +"is used to define and manage promotional campaigns that offer a percentage-" +"based discount for products. The class includes attributes for setting the " +"discount rate, providing details about the promotion, and linking it to the " +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." +msgstr "" +"Представляет рекламную кампанию для товаров со скидкой. Этот класс " +"используется для определения и управления рекламными кампаниями, " +"предлагающими скидку на продукты в процентах. Класс включает атрибуты для " +"установки размера скидки, предоставления подробной информации о рекламной " +"акции и привязки ее к соответствующим товарам. Он интегрируется с каталогом " +"товаров для определения товаров, на которые распространяется акция." + +#: core/models.py:760 msgid "percentage discount for the selected products" msgstr "Процентная скидка на выбранные продукты" -#: core/models.py:820 +#: core/models.py:761 msgid "discount percentage" msgstr "Процент скидки" -#: core/models.py:825 +#: core/models.py:766 msgid "provide a unique name for this promotion" msgstr "Укажите уникальное имя для этой акции" -#: core/models.py:826 +#: core/models.py:767 msgid "promotion name" msgstr "Название акции" -#: core/models.py:832 +#: core/models.py:773 msgid "promotion description" msgstr "Описание акции" -#: core/models.py:837 +#: core/models.py:778 msgid "select which products are included in this promotion" msgstr "Выберите, какие продукты участвуют в этой акции" -#: core/models.py:838 +#: core/models.py:779 msgid "included products" msgstr "Включенные продукты" -#: core/models.py:842 +#: core/models.py:783 msgid "promotion" msgstr "Продвижение" -#: core/models.py:867 +#: core/models.py:794 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"class provides functionality to manage a collection of products, supporting " +"operations such as adding and removing products, as well as supporting " +"operations for adding and removing multiple products at once." +msgstr "" +"Представляет собой список желаний пользователя для хранения и управления " +"желаемыми товарами. Класс предоставляет функциональность для управления " +"коллекцией товаров, поддерживая такие операции, как добавление и удаление " +"товаров, а также поддерживая операции добавления и удаления нескольких " +"товаров одновременно." + +#: core/models.py:806 msgid "products that the user has marked as wanted" msgstr "Продукты, которые пользователь отметил как желаемые" -#: core/models.py:875 +#: core/models.py:814 msgid "user who owns this wishlist" msgstr "Пользователь, владеющий этим списком желаний" -#: core/models.py:876 +#: core/models.py:815 msgid "wishlist owner" msgstr "Владелец вишлиста" -#: core/models.py:884 +#: core/models.py:823 msgid "wishlist" msgstr "Список желаний" -#: core/models.py:951 +#: core/models.py:865 +msgid "" +"Represents a documentary record tied to a product. This class is used to " +"store information about documentaries related to specific products, " +"including file uploads and their metadata. It contains methods and " +"properties to handle the file type and storage path for the documentary " +"files. It extends functionality from specific mixins and provides additional" +" custom features." +msgstr "" +"Представляет документальную запись, связанную с продуктом. Этот класс " +"используется для хранения информации о документальных записях, связанных с " +"конкретными продуктами, включая загруженные файлы и их метаданные. Он " +"содержит методы и свойства для обработки типа файла и пути хранения " +"документальных файлов. Он расширяет функциональность определенных миксинов и" +" предоставляет дополнительные пользовательские возможности." + +#: core/models.py:878 msgid "documentary" msgstr "Документальный фильм" -#: core/models.py:952 +#: core/models.py:879 msgid "documentaries" msgstr "Документальные фильмы" -#: core/models.py:962 +#: core/models.py:889 msgid "unresolved" msgstr "Неразрешенные" -#: core/models.py:1008 +#: core/models.py:894 +msgid "" +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." +msgstr "" +"Представляет адресную сущность, включающую сведения о местоположении и " +"ассоциации с пользователем. Обеспечивает функциональность для хранения " +"географических и адресных данных, а также интеграцию с сервисами " +"геокодирования. Этот класс предназначен для хранения подробной адресной " +"информации, включая такие компоненты, как улица, город, регион, страна, а " +"также геолокация (долгота и широта). Он поддерживает интеграцию с API " +"геокодирования, позволяя хранить необработанные ответы API для дальнейшей " +"обработки или проверки. Класс также позволяет ассоциировать адрес с " +"пользователем, что облегчает работу с персонализированными данными." + +#: core/models.py:909 msgid "address line for the customer" msgstr "Адресная строка для клиента" -#: core/models.py:1009 +#: core/models.py:910 msgid "address line" msgstr "Адресная строка" -#: core/models.py:1011 +#: core/models.py:912 msgid "street" msgstr "Улица" -#: core/models.py:1012 +#: core/models.py:913 msgid "district" msgstr "Округ" -#: core/models.py:1013 +#: core/models.py:914 msgid "city" msgstr "Город" -#: core/models.py:1014 +#: core/models.py:915 msgid "region" msgstr "Регион" -#: core/models.py:1015 +#: core/models.py:916 msgid "postal code" msgstr "Почтовый индекс" -#: core/models.py:1016 +#: core/models.py:917 msgid "country" msgstr "Страна" -#: core/models.py:1023 +#: core/models.py:924 msgid "geolocation point: (longitude, latitude)" msgstr "Геолокационная точка(долгота, широта)" -#: core/models.py:1026 +#: core/models.py:927 msgid "full JSON response from geocoder for this address" msgstr "Полный JSON-ответ от геокодера для этого адреса" -#: core/models.py:1031 +#: core/models.py:932 msgid "stored JSON response from the geocoding service" msgstr "Сохраненный JSON-ответ от сервиса геокодирования" -#: core/models.py:1039 +#: core/models.py:940 msgid "address" msgstr "Адрес" -#: core/models.py:1040 +#: core/models.py:941 msgid "addresses" msgstr "Адреса" -#: core/models.py:1085 +#: core/models.py:953 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" +"Представляет промокод, который можно использовать для получения скидки, " +"управляя его сроком действия, типом скидки и применением. Класс PromoCode " +"хранит информацию о промокоде, включая его уникальный идентификатор, " +"свойства скидки (размер или процент), срок действия, связанного пользователя" +" (если таковой имеется) и статус его использования. Он включает в себя " +"функциональность для проверки и применения промокода к заказу, обеспечивая " +"при этом соблюдение ограничений." + +#: core/models.py:967 msgid "unique code used by a user to redeem a discount" msgstr "Уникальный код, используемый пользователем для получения скидки" -#: core/models.py:1086 +#: core/models.py:968 msgid "promo code identifier" msgstr "Идентификатор промо-кода" -#: core/models.py:1093 +#: core/models.py:975 msgid "fixed discount amount applied if percent is not used" msgstr "Фиксированная сумма скидки, применяемая, если процент не используется" -#: core/models.py:1094 +#: core/models.py:976 msgid "fixed discount amount" msgstr "Фиксированная сумма скидки" -#: core/models.py:1100 +#: core/models.py:982 msgid "percentage discount applied if fixed amount is not used" msgstr "" "Процентная скидка, применяемая, если фиксированная сумма не используется" -#: core/models.py:1101 +#: core/models.py:983 msgid "percentage discount" msgstr "Процентная скидка" -#: core/models.py:1106 +#: core/models.py:988 msgid "timestamp when the promocode expires" msgstr "Временная метка, когда истекает срок действия промокода" -#: core/models.py:1107 +#: core/models.py:989 msgid "end validity time" msgstr "Время окончания срока действия" -#: core/models.py:1112 +#: core/models.py:994 msgid "timestamp from which this promocode is valid" msgstr "Время, с которого действует этот промокод" -#: core/models.py:1113 +#: core/models.py:995 msgid "start validity time" msgstr "Время начала действия" -#: core/models.py:1118 +#: core/models.py:1000 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Временная метка, когда был использован промокод, пустая, если он еще не " "использовался" -#: core/models.py:1119 +#: core/models.py:1001 msgid "usage timestamp" msgstr "Временная метка использования" -#: core/models.py:1124 +#: core/models.py:1006 msgid "user assigned to this promocode if applicable" msgstr "Пользователь, назначенный на этот промокод, если применимо" -#: core/models.py:1125 +#: core/models.py:1007 msgid "assigned user" msgstr "Назначенный пользователь" -#: core/models.py:1132 +#: core/models.py:1014 msgid "promo code" msgstr "Промокод" -#: core/models.py:1133 +#: core/models.py:1015 msgid "promo codes" msgstr "Промокоды" -#: core/models.py:1140 +#: core/models.py:1022 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2043,16 +2127,16 @@ msgstr "" "Следует определить только один тип скидки (сумма или процент), но не оба или" " ни один из них." -#: core/models.py:1155 +#: core/models.py:1037 msgid "promocode already used" msgstr "Промокоды" -#: core/models.py:1171 +#: core/models.py:1053 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Неверный тип скидки для промокода {self.uuid}!" -#: core/models.py:1180 +#: core/models.py:1062 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 " @@ -2069,138 +2153,138 @@ msgstr "" "доставке или выставлении счета. Кроме того, функциональность поддерживает " "управление продуктами в жизненном цикле заказа." -#: core/models.py:1197 +#: core/models.py:1079 msgid "the billing address used for this order" msgstr "Адрес для выставления счетов, используемый для данного заказа" -#: core/models.py:1205 +#: core/models.py:1087 msgid "optional promo code applied to this order" msgstr "Дополнительный промокод, применяемый к этому заказу" -#: core/models.py:1206 +#: core/models.py:1088 msgid "applied promo code" msgstr "Примененный промокод" -#: core/models.py:1214 +#: core/models.py:1096 msgid "the shipping address used for this order" msgstr "Адрес доставки, используемый для данного заказа" -#: core/models.py:1215 +#: core/models.py:1097 msgid "shipping address" msgstr "Адрес доставки" -#: core/models.py:1221 +#: core/models.py:1103 msgid "current status of the order in its lifecycle" msgstr "Текущий статус заказа в его жизненном цикле" -#: core/models.py:1222 +#: core/models.py:1104 msgid "order status" msgstr "Статус заказа" -#: core/models.py:1227 core/models.py:1686 +#: core/models.py:1109 core/models.py:1560 msgid "json structure of notifications to display to users" msgstr "" "JSON-структура уведомлений для отображения пользователям, в административном" " интерфейсе используется табличный вид" -#: core/models.py:1233 +#: core/models.py:1115 msgid "json representation of order attributes for this order" msgstr "JSON-представление атрибутов заказа для этого заказа" -#: core/models.py:1239 +#: core/models.py:1121 msgid "the user who placed the order" msgstr "Пользователь, разместивший заказ" -#: core/models.py:1240 +#: core/models.py:1122 msgid "user" msgstr "Пользователь" -#: core/models.py:1246 +#: core/models.py:1128 msgid "the timestamp when the order was finalized" msgstr "Временная метка, когда заказ был завершен" -#: core/models.py:1247 +#: core/models.py:1129 msgid "buy time" msgstr "Время покупки" -#: core/models.py:1254 +#: core/models.py:1136 msgid "a human-readable identifier for the order" msgstr "Человекочитаемый идентификатор для заказа" -#: core/models.py:1255 +#: core/models.py:1137 msgid "human readable id" msgstr "человекочитаемый идентификатор" -#: core/models.py:1261 +#: core/models.py:1143 msgid "order" msgstr "Заказ" -#: core/models.py:1282 +#: core/models.py:1168 msgid "a user must have only one pending order at a time" msgstr "Пользователь может одновременно иметь только один отложенный ордер!" -#: core/models.py:1316 +#: core/models.py:1202 msgid "you cannot add products to an order that is not a pending one" msgstr "Вы не можете добавить товары в заказ, который не является отложенным." -#: core/models.py:1321 +#: core/models.py:1207 msgid "you cannot add inactive products to order" msgstr "Вы не можете добавить неактивные товары в заказ" -#: core/models.py:1338 +#: core/models.py:1224 msgid "you cannot add more products than available in stock" msgstr "Вы не можете добавить больше товаров, чем есть на складе" -#: core/models.py:1360 core/models.py:1385 core/models.py:1393 +#: core/models.py:1246 core/models.py:1271 core/models.py:1279 msgid "you cannot remove products from an order that is not a pending one" msgstr "" "Вы не можете удалить товары из заказа, который не является отложенным." -#: core/models.py:1381 +#: core/models.py:1267 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} не существует с запросом <{query}>!" -#: core/models.py:1413 +#: core/models.py:1299 msgid "promocode does not exist" msgstr "Промокод не существует" -#: core/models.py:1419 +#: core/models.py:1305 msgid "you can only buy physical products with shipping address specified" msgstr "" "Вы можете купить физические товары только с указанным адресом доставки!" -#: core/models.py:1438 +#: core/models.py:1324 msgid "address does not exist" msgstr "Адрес не существует" -#: core/models.py:1459 core/models.py:1528 +#: core/models.py:1345 core/models.py:1414 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "В данный момент вы не можете совершить покупку, пожалуйста, повторите " "попытку через несколько минут." -#: core/models.py:1462 core/models.py:1524 +#: core/models.py:1348 core/models.py:1410 msgid "invalid force value" msgstr "Недопустимое значение силы" -#: core/models.py:1468 core/models.py:1531 +#: core/models.py:1354 core/models.py:1417 msgid "you cannot purchase an empty order!" msgstr "Вы не можете приобрести пустой заказ!" -#: core/models.py:1487 +#: core/models.py:1373 msgid "you cannot buy an order without a user" msgstr "Вы не можете купить заказ без пользователя!" -#: core/models.py:1501 +#: core/models.py:1387 msgid "a user without a balance cannot buy with balance" msgstr "Пользователь без баланса не может покупать с балансом!" -#: core/models.py:1506 +#: core/models.py:1392 msgid "insufficient funds to complete the order" msgstr "Недостаточно средств для выполнения заказа" -#: core/models.py:1540 +#: core/models.py:1426 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2208,150 +2292,203 @@ msgstr "" "Вы не можете купить без регистрации, пожалуйста, предоставьте следующую " "информацию: имя клиента, электронная почта клиента, номер телефона клиента" -#: core/models.py:1549 +#: core/models.py:1435 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "Неверный способ оплаты: {payment_method} от {available_payment_methods}!" -#: core/models.py:1674 +#: core/models.py:1533 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" +"Представляет продукты, связанные с заказами, и их атрибуты. Модель " +"OrderProduct хранит информацию о продукте, который является частью заказа, " +"включая такие детали, как цена покупки, количество, атрибуты продукта и " +"статус. Она управляет уведомлениями для пользователя и администраторов и " +"обрабатывает такие операции, как возврат остатка товара или добавление " +"отзывов. Эта модель также предоставляет методы и свойства, поддерживающие " +"бизнес-логику, например расчет общей цены или генерацию URL-адреса загрузки " +"для цифровых продуктов. Модель интегрируется с моделями Order и Product и " +"хранит ссылки на них." + +#: core/models.py:1548 msgid "the price paid by the customer for this product at purchase time" msgstr "Цена, уплаченная клиентом за данный продукт на момент покупки" -#: core/models.py:1675 +#: core/models.py:1549 msgid "purchase price at order time" msgstr "Покупная цена на момент заказа" -#: core/models.py:1680 +#: core/models.py:1554 msgid "internal comments for admins about this ordered product" msgstr "" "Внутренние комментарии для администраторов об этом заказанном продукте" -#: core/models.py:1681 +#: core/models.py:1555 msgid "internal comments" msgstr "Внутренние комментарии" -#: core/models.py:1687 +#: core/models.py:1561 msgid "user notifications" msgstr "Уведомления пользователей" -#: core/models.py:1692 +#: core/models.py:1566 msgid "json representation of this item's attributes" msgstr "JSON-представление атрибутов этого элемента" -#: core/models.py:1693 +#: core/models.py:1567 msgid "ordered product attributes" msgstr "Атрибуты заказанного продукта" -#: core/models.py:1698 +#: core/models.py:1572 msgid "reference to the parent order that contains this product" msgstr "Ссылка на родительский заказ, содержащий данный продукт" -#: core/models.py:1699 +#: core/models.py:1573 msgid "parent order" msgstr "Родительский приказ" -#: core/models.py:1708 +#: core/models.py:1582 msgid "the specific product associated with this order line" msgstr "Конкретный продукт, связанный с этой линией заказа" -#: core/models.py:1715 +#: core/models.py:1589 msgid "quantity of this specific product in the order" msgstr "Количество данного товара в заказе" -#: core/models.py:1716 +#: core/models.py:1590 msgid "product quantity" msgstr "Количество продукта" -#: core/models.py:1723 +#: core/models.py:1597 msgid "current status of this product in the order" msgstr "Текущий статус этого продукта в заказе" -#: core/models.py:1724 +#: core/models.py:1598 msgid "product line status" msgstr "Состояние продуктовой линейки" -#: core/models.py:1784 +#: core/models.py:1661 msgid "order product must have an order" msgstr "У заказанного продукта должен быть связанный с ним заказ!" -#: core/models.py:1786 +#: core/models.py:1663 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Для обратной связи указано неверное действие: {action}!" -#: core/models.py:1800 +#: core/models.py:1677 msgid "you cannot feedback an order which is not received" msgstr "Вы не можете отозвать заказ, который не был получен" -#: core/models.py:1806 +#: core/models.py:1683 msgid "name" msgstr "Имя" -#: core/models.py:1807 +#: core/models.py:1684 msgid "URL of the integration" msgstr "URL-адрес интеграции" -#: core/models.py:1808 +#: core/models.py:1685 msgid "authentication credentials" msgstr "Учетные данные для аутентификации" -#: core/models.py:1822 +#: core/models.py:1699 msgid "you can only have one default CRM provider" msgstr "У вас может быть только один поставщик CRM по умолчанию" -#: core/models.py:1826 +#: core/models.py:1703 msgid "CRM" msgstr "CRM" -#: core/models.py:1827 +#: core/models.py:1704 msgid "CRMs" msgstr "CRM" -#: core/models.py:1839 +#: core/models.py:1716 msgid "order CRM link" msgstr "Ссылка на CRM заказа" -#: core/models.py:1840 +#: core/models.py:1717 msgid "orders CRM links" msgstr "Ссылки на CRM заказов" -#: core/models.py:1874 +#: core/models.py:1722 +msgid "" +"Represents the downloading functionality for digital assets associated with " +"orders. The DigitalAssetDownload class provides the ability to manage and " +"access downloads related to order products. It maintains information about " +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." +msgstr "" +"Представляет функциональность загрузки цифровых активов, связанных с " +"заказами. Класс DigitalAssetDownload предоставляет возможность управления и " +"доступа к загрузкам, связанным с продуктами заказа. Он хранит информацию о " +"связанном с заказом продукте, количестве загрузок и о том, является ли актив" +" общедоступным. Он включает метод для генерации URL-адреса для загрузки " +"актива, когда связанный заказ находится в состоянии завершения." + +#: core/models.py:1736 msgid "download" msgstr "Скачать" -#: core/models.py:1875 +#: core/models.py:1737 msgid "downloads" msgstr "Скачать" -#: core/models.py:1883 +#: core/models.py:1745 msgid "you can not download a digital asset for a non-finished order" msgstr "Вы не можете загрузить цифровой актив для незавершенного заказа" -#: core/models.py:1913 +#: core/models.py:1754 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." +msgstr "" +"Управление отзывами пользователей о товарах. Этот класс предназначен для " +"сбора и хранения отзывов пользователей о конкретных товарах, которые они " +"приобрели. Он содержит атрибуты для хранения комментариев пользователей, " +"ссылку на соответствующий товар в заказе и оценку, присвоенную " +"пользователем. Класс использует поля базы данных для эффективного " +"моделирования и управления данными отзывов." + +#: core/models.py:1766 msgid "user-provided comments about their experience with the product" msgstr "Комментарии пользователей об их опыте использования продукта" -#: core/models.py:1914 +#: core/models.py:1767 msgid "feedback comments" msgstr "Комментарии к отзывам" -#: core/models.py:1921 +#: core/models.py:1774 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Ссылка на конкретный продукт в заказе, о котором идет речь в этом отзыве" -#: core/models.py:1922 +#: core/models.py:1775 msgid "related order product" msgstr "Сопутствующий товар для заказа" -#: core/models.py:1927 +#: core/models.py:1780 msgid "user-assigned rating for the product" msgstr "Присвоенный пользователем рейтинг продукта" -#: core/models.py:1928 +#: core/models.py:1781 msgid "product rating" msgstr "Рейтинг продукции" @@ -2571,17 +2708,17 @@ msgstr "" msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | свяжитесь с нами по инициативе" -#: core/utils/emailing.py:64 +#: core/utils/emailing.py:74 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Подтверждение заказа" -#: core/utils/emailing.py:99 +#: core/utils/emailing.py:109 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Заказ доставлен" -#: core/utils/emailing.py:187 +#: core/utils/emailing.py:197 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | Промокод предоставлен" @@ -2605,15 +2742,15 @@ msgstr "" msgid "invalid phone number format" msgstr "Неверный формат телефонного номера" -#: core/views.py:481 +#: core/views.py:489 msgid "you can only download the digital asset once" msgstr "Вы можете загрузить цифровой актив только один раз" -#: core/views.py:539 +#: core/views.py:547 msgid "favicon not found" msgstr "favicon не найден" -#: core/viewsets.py:1319 +#: core/viewsets.py:1357 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Ошибка геокодирования: {e}" diff --git a/core/locale/sv_SE/LC_MESSAGES/django.mo b/core/locale/sv_SE/LC_MESSAGES/django.mo index 8814225da4c3b5574acfe3209f7dd67f84a39586..4a83b96ca5a2870414dcfd9797113674874736f7 100644 GIT binary patch delta 20571 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 delta 12600 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -88,11 +88,11 @@ msgid "selected items have been deactivated." msgstr "Valda objekt har avaktiverats!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:712 core/models.py:720 +#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 msgid "attribute value" msgstr "Attributvärde" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:721 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 msgid "attribute values" msgstr "Attributets värden" @@ -104,7 +104,7 @@ msgstr "Bild" msgid "images" msgstr "Bilder" -#: core/admin.py:155 core/models.py:457 +#: core/admin.py:155 core/models.py:445 msgid "stock" msgstr "Stock" @@ -112,11 +112,11 @@ msgstr "Stock" msgid "stocks" msgstr "Stocks" -#: core/admin.py:166 core/models.py:1735 +#: core/admin.py:166 core/models.py:1609 msgid "order product" msgstr "Beställ produkt" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1736 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 msgid "order products" msgstr "Beställ produkter" @@ -325,7 +325,7 @@ msgstr "Skriva om en befintlig kategori som sparar icke-redigerbara" 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:155 core/docs/drf/viewsets.py:553 +#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:487 #: core/graphene/object_types.py:117 core/graphene/object_types.py:207 #: core/graphene/object_types.py:509 msgid "SEO Meta snapshot" @@ -595,47 +595,7 @@ msgstr "Lista alla produkter (enkel vy)" msgid "(exact) Product UUID" msgstr "(exakt) UUID för produkt" -#: core/docs/drf/viewsets.py:384 -msgid "(icontains) Product name" -msgstr "(i containrar) Produktnamn" - -#: core/docs/drf/viewsets.py:390 -msgid "(list) Category names, case-insensitive" -msgstr "(list) Kategorinamn, skiftlägesokänsliga" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Category UUID" -msgstr "(exakt) Kategori UUID" - -#: core/docs/drf/viewsets.py:402 -msgid "(list) Tag names, case-insensitive" -msgstr "(list) Namn på taggar, skiftlägesokänsliga" - -#: core/docs/drf/viewsets.py:408 -msgid "(gte) Minimum stock price" -msgstr "(gte) Lägsta aktiekurs" - -#: core/docs/drf/viewsets.py:414 -msgid "(lte) Maximum stock price" -msgstr "(lte) Maximum stock price" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Only active products" -msgstr "(exakt) Endast aktiva produkter" - -#: core/docs/drf/viewsets.py:426 -msgid "(iexact) Brand name" -msgstr "(iexact) Varumärke" - -#: core/docs/drf/viewsets.py:438 -msgid "(gt) Minimum stock quantity" -msgstr "(gt) Minsta lagerkvantitet" - -#: core/docs/drf/viewsets.py:444 -msgid "(exact) Digital vs. physical" -msgstr "(exakt) Digital vs. fysisk" - -#: core/docs/drf/viewsets.py:451 +#: core/docs/drf/viewsets.py:385 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -643,248 +603,252 @@ 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:465 core/docs/drf/viewsets.py:466 +#: core/docs/drf/viewsets.py:399 core/docs/drf/viewsets.py:400 msgid "retrieve a single product (detailed view)" msgstr "Hämta en enskild produkt (detaljerad vy)" -#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:495 -#: core/docs/drf/viewsets.py:511 core/docs/drf/viewsets.py:527 -#: core/docs/drf/viewsets.py:543 core/docs/drf/viewsets.py:559 +#: core/docs/drf/viewsets.py:405 core/docs/drf/viewsets.py:429 +#: core/docs/drf/viewsets.py:445 core/docs/drf/viewsets.py:461 +#: core/docs/drf/viewsets.py:477 core/docs/drf/viewsets.py:493 msgid "Product UUID or slug" msgstr "Produkt UUID eller Slug" -#: core/docs/drf/viewsets.py:481 core/docs/drf/viewsets.py:482 +#: core/docs/drf/viewsets.py:415 core/docs/drf/viewsets.py:416 msgid "create a product" msgstr "Skapa en produkt" -#: core/docs/drf/viewsets.py:489 core/docs/drf/viewsets.py:490 +#: core/docs/drf/viewsets.py:423 core/docs/drf/viewsets.py:424 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:505 core/docs/drf/viewsets.py:506 +#: core/docs/drf/viewsets.py:439 core/docs/drf/viewsets.py:440 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:521 core/docs/drf/viewsets.py:522 +#: core/docs/drf/viewsets.py:455 core/docs/drf/viewsets.py:456 msgid "delete a product" msgstr "Ta bort en produkt" -#: core/docs/drf/viewsets.py:537 core/docs/drf/viewsets.py:538 +#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:472 msgid "lists all permitted feedbacks for a product" msgstr "listar alla tillåtna återkopplingar för en produkt" -#: core/docs/drf/viewsets.py:554 +#: core/docs/drf/viewsets.py:488 msgid "returns a snapshot of the product's SEO meta data" msgstr "Returnerar en ögonblicksbild av produktens SEO-metadata" -#: core/docs/drf/viewsets.py:572 +#: core/docs/drf/viewsets.py:506 msgid "list all addresses" msgstr "Lista alla adresser" -#: core/docs/drf/viewsets.py:579 +#: core/docs/drf/viewsets.py:513 msgid "retrieve a single address" msgstr "Hämta en enskild adress" -#: core/docs/drf/viewsets.py:586 +#: core/docs/drf/viewsets.py:520 msgid "create a new address" msgstr "Skapa en ny adress" -#: core/docs/drf/viewsets.py:594 +#: core/docs/drf/viewsets.py:528 msgid "delete an address" msgstr "Ta bort en adress" -#: core/docs/drf/viewsets.py:601 +#: core/docs/drf/viewsets.py:535 msgid "update an entire address" msgstr "Uppdatera en hel adress" -#: core/docs/drf/viewsets.py:609 +#: core/docs/drf/viewsets.py:543 msgid "partially update an address" msgstr "Delvis uppdatera en adress" -#: core/docs/drf/viewsets.py:617 +#: core/docs/drf/viewsets.py:551 msgid "autocomplete address suggestions" msgstr "Autokomplettering av adressinmatning" -#: core/docs/drf/viewsets.py:622 +#: core/docs/drf/viewsets.py:556 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:628 +#: core/docs/drf/viewsets.py:562 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:641 +#: core/docs/drf/viewsets.py:575 msgid "list all feedbacks (simple view)" msgstr "lista alla återkopplingar (enkel vy)" -#: core/docs/drf/viewsets.py:645 +#: core/docs/drf/viewsets.py:579 msgid "retrieve a single feedback (detailed view)" msgstr "hämta en enskild feedback (detaljerad vy)" -#: core/docs/drf/viewsets.py:649 +#: core/docs/drf/viewsets.py:583 msgid "create a feedback" msgstr "skapa en återkoppling" -#: core/docs/drf/viewsets.py:653 +#: core/docs/drf/viewsets.py:587 msgid "delete a feedback" msgstr "ta bort en återkoppling" -#: core/docs/drf/viewsets.py:657 +#: core/docs/drf/viewsets.py:591 msgid "rewrite an existing feedback saving non-editables" msgstr "skriva om en befintlig feedback och spara icke-redigerbara filer" -#: core/docs/drf/viewsets.py:661 +#: core/docs/drf/viewsets.py:595 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:668 +#: core/docs/drf/viewsets.py:602 msgid "list all order–product relations (simple view)" msgstr "lista alla order-produktrelationer (enkel vy)" -#: core/docs/drf/viewsets.py:675 +#: core/docs/drf/viewsets.py:609 msgid "retrieve a single order–product relation (detailed view)" msgstr "hämta en enskild order-produktrelation (detaljerad vy)" -#: core/docs/drf/viewsets.py:682 +#: core/docs/drf/viewsets.py:616 msgid "create a new order–product relation" msgstr "skapa en ny relation mellan order och produkt" -#: core/docs/drf/viewsets.py:689 +#: core/docs/drf/viewsets.py:623 msgid "replace an existing order–product relation" msgstr "ersätta en befintlig order-produktrelation" -#: core/docs/drf/viewsets.py:696 +#: core/docs/drf/viewsets.py:630 msgid "partially update an existing order–product relation" msgstr "delvis uppdatera en befintlig order-produktrelation" -#: core/docs/drf/viewsets.py:703 +#: core/docs/drf/viewsets.py:637 msgid "delete an order–product relation" msgstr "ta bort en order-produktrelation" -#: core/docs/drf/viewsets.py:710 +#: core/docs/drf/viewsets.py:644 msgid "add or remove feedback on an order–product relation" msgstr "lägga till eller ta bort feedback om en order-produktrelation" -#: core/elasticsearch/__init__.py:105 +#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 msgid "no search term provided." msgstr "Ingen sökterm angavs." -#: core/filters.py:64 core/filters.py:594 core/filters.py:623 +#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +msgid "Search" +msgstr "Sök" + +#: core/filters.py:66 core/filters.py:554 core/filters.py:583 msgid "UUID" msgstr "UUID" -#: core/filters.py:65 core/filters.py:429 core/filters.py:560 +#: core/filters.py:67 core/filters.py:399 core/filters.py:526 msgid "Name" msgstr "Namn" -#: core/filters.py:66 core/filters.py:562 +#: core/filters.py:68 core/filters.py:528 msgid "Categories" msgstr "Kategorier" -#: core/filters.py:68 +#: core/filters.py:70 msgid "Categories Slugs" msgstr "Kategorier Sniglar" -#: core/filters.py:69 core/filters.py:437 +#: core/filters.py:71 core/filters.py:407 msgid "Tags" msgstr "Etiketter" -#: core/filters.py:70 +#: core/filters.py:72 msgid "Min Price" msgstr "Min pris" -#: core/filters.py:71 +#: core/filters.py:73 msgid "Max Price" msgstr "Max pris" -#: core/filters.py:72 +#: core/filters.py:74 msgid "Is Active" msgstr "Är aktiv" -#: core/filters.py:73 +#: core/filters.py:75 msgid "Brand" msgstr "Varumärke" -#: core/filters.py:74 +#: core/filters.py:76 msgid "Attributes" msgstr "Attribut" -#: core/filters.py:75 +#: core/filters.py:77 msgid "Quantity" msgstr "Kvantitet" -#: core/filters.py:76 core/filters.py:431 core/filters.py:561 -#: core/models.py:287 core/models.py:381 core/models.py:534 +#: core/filters.py:78 core/filters.py:401 core/filters.py:527 +#: core/models.py:287 core/models.py:369 core/models.py:522 msgid "Slug" msgstr "Snigel" -#: core/filters.py:77 +#: core/filters.py:79 msgid "Is Digital" msgstr "Är digital" -#: core/filters.py:78 +#: core/filters.py:80 msgid "Include sub-categories" msgstr "Inkludera underkategorier" -#: core/filters.py:81 +#: core/filters.py:83 msgid "Include personal ordered" msgstr "Inkludera personligt beställda produkter" -#: core/filters.py:83 core/models.py:538 +#: core/filters.py:85 core/models.py:526 msgid "SKU" msgstr "SKU" -#: core/filters.py:166 +#: core/filters.py:161 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:356 +#: core/filters.py:324 msgid "Search (ID, product name or part number)" msgstr "Sök (ID, produktnamn eller artikelnummer)" -#: core/filters.py:359 +#: core/filters.py:327 msgid "Bought after (inclusive)" msgstr "Köpt efter (inklusive)" -#: core/filters.py:360 +#: core/filters.py:328 msgid "Bought before (inclusive)" msgstr "Köpt tidigare (inklusive)" -#: core/filters.py:363 core/filters.py:410 core/filters.py:625 +#: core/filters.py:331 core/filters.py:378 core/filters.py:585 msgid "User email" msgstr "Användarens e-post" -#: core/filters.py:364 core/filters.py:411 core/filters.py:603 -#: core/filters.py:624 +#: core/filters.py:332 core/filters.py:379 core/filters.py:563 +#: core/filters.py:584 msgid "User UUID" msgstr "Användarens UUID" -#: core/filters.py:365 +#: core/filters.py:333 msgid "Status" msgstr "Status" -#: core/filters.py:369 +#: core/filters.py:337 msgid "Human Readable ID" msgstr "Human Readable ID" -#: core/filters.py:430 +#: core/filters.py:400 msgid "Parent" msgstr "Förälder" -#: core/filters.py:434 +#: core/filters.py:404 msgid "Whole category(has at least 1 product or not)" msgstr "Hela kategorin (har minst 1 produkt eller inte)" -#: core/filters.py:438 +#: core/filters.py:408 msgid "Level" msgstr "Nivå" -#: core/filters.py:598 +#: core/filters.py:558 msgid "Product UUID" msgstr "Produktens UUID" @@ -941,7 +905,7 @@ msgstr "" "uteslutande!" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:821 +#: core/graphene/mutations.py:527 core/viewsets.py:839 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Fel typ kom från order.buy()-metoden: {type(instance)!s}" @@ -1003,37 +967,37 @@ msgstr "" msgid "add or delete a feedback for orderproduct" msgstr "Lägg till eller ta bort en feedback för orderprodukten" -#: core/graphene/mutations.py:555 +#: core/graphene/mutations.py:556 msgid "action must be either `add` or `remove`" msgstr "Åtgärden måste vara antingen `add` eller `remove`!" -#: core/graphene/mutations.py:558 +#: core/graphene/mutations.py:559 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderprodukt {order_product_uuid} hittades inte!" -#: core/graphene/mutations.py:621 +#: core/graphene/mutations.py:622 msgid "original address string provided by the user" msgstr "Originaladresssträng som tillhandahålls av användaren" -#: core/graphene/mutations.py:655 core/models.py:896 core/models.py:909 -#: core/models.py:1348 core/models.py:1377 core/models.py:1402 -#: core/viewsets.py:824 +#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 +#: core/models.py:1234 core/models.py:1263 core/models.py:1288 +#: core/viewsets.py:842 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} existerar inte: {uuid}!" -#: core/graphene/mutations.py:668 +#: core/graphene/mutations.py:669 msgid "limit must be between 1 and 10" msgstr "Gränsen måste vara mellan 1 och 10" -#: core/graphene/mutations.py:713 +#: core/graphene/mutations.py:714 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - fungerar som en smäck" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:666 core/models.py:1234 -#: core/models.py:1809 +#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 +#: core/models.py:1686 msgid "attributes" msgstr "Attribut" @@ -1046,11 +1010,11 @@ 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:224 core/models.py:312 core/models.py:620 +#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:612 msgid "categories" msgstr "Kategorier" -#: core/graphene/object_types.py:124 core/models.py:395 +#: core/graphene/object_types.py:124 core/models.py:383 msgid "brands" msgstr "Brands" @@ -1107,7 +1071,7 @@ msgid "represents feedback from a user." msgstr "Representerar feedback från en användare." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1228 +#: core/models.py:1110 msgid "notifications" msgstr "Meddelanden" @@ -1115,7 +1079,7 @@ msgstr "Meddelanden" msgid "download url for this order product if applicable" msgstr "Nedladdningsadress för denna orderprodukt om tillämpligt" -#: core/graphene/object_types.py:400 core/models.py:1938 +#: core/graphene/object_types.py:400 core/models.py:1791 msgid "feedback" msgstr "Återkoppling" @@ -1123,7 +1087,7 @@ msgstr "Återkoppling" msgid "a list of order products in this order" msgstr "En lista över orderprodukter i den här ordern" -#: core/graphene/object_types.py:436 core/models.py:1198 +#: core/graphene/object_types.py:436 core/models.py:1080 msgid "billing address" msgstr "Faktureringsadress" @@ -1151,7 +1115,7 @@ msgstr "Är alla produkter i beställningen digitala" msgid "transactions for this order" msgstr "Transaktioner för denna order" -#: core/graphene/object_types.py:465 core/models.py:1262 +#: core/graphene/object_types.py:465 core/models.py:1144 msgid "orders" msgstr "Beställningar" @@ -1163,15 +1127,15 @@ msgstr "URL för bild" msgid "product's images" msgstr "Produktens bilder" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:477 +#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 msgid "category" msgstr "Kategori" -#: core/graphene/object_types.py:502 core/models.py:1939 +#: core/graphene/object_types.py:502 core/models.py:1792 msgid "feedbacks" msgstr "Återkoppling" -#: core/graphene/object_types.py:503 core/models.py:394 core/models.py:486 +#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 msgid "brand" msgstr "Varumärke" @@ -1203,7 +1167,7 @@ msgstr "Antal återkopplingar" msgid "only available for personal orders" msgstr "Produkter endast tillgängliga för personliga beställningar" -#: core/graphene/object_types.py:534 core/models.py:548 +#: core/graphene/object_types.py:534 core/models.py:536 msgid "products" msgstr "Produkter" @@ -1215,7 +1179,7 @@ msgstr "Promokoder" msgid "products on sale" msgstr "Produkter på rea" -#: core/graphene/object_types.py:651 core/models.py:843 +#: core/graphene/object_types.py:651 core/models.py:784 msgid "promotions" msgstr "Kampanjer" @@ -1223,7 +1187,7 @@ msgstr "Kampanjer" msgid "vendor" msgstr "Leverantör" -#: core/graphene/object_types.py:656 core/models.py:547 +#: core/graphene/object_types.py:656 core/models.py:535 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1231,11 +1195,11 @@ msgstr "Leverantör" msgid "product" msgstr "Produkt" -#: core/graphene/object_types.py:667 core/models.py:868 +#: core/graphene/object_types.py:667 core/models.py:807 msgid "wishlisted products" msgstr "Önskelistade produkter" -#: core/graphene/object_types.py:673 core/models.py:885 +#: core/graphene/object_types.py:673 core/models.py:824 msgid "wishlists" msgstr "Önskelistor" @@ -1243,7 +1207,7 @@ msgstr "Önskelistor" msgid "tagged products" msgstr "Taggade produkter" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:492 +#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 msgid "product tags" msgstr "Produkttaggar" @@ -1353,7 +1317,7 @@ msgstr "Överordnad attributgrupp" msgid "attribute group's name" msgstr "Attributgruppens namn" -#: core/models.py:100 core/models.py:628 +#: core/models.py:100 core/models.py:620 msgid "attribute group" msgstr "Attributgrupp" @@ -1519,51 +1483,65 @@ msgstr "Beskrivning av kategori" msgid "tags that help describe or group this category" msgstr "taggar som hjälper till att beskriva eller gruppera denna kategori" -#: core/models.py:299 core/models.py:387 +#: core/models.py:299 core/models.py:375 msgid "priority" msgstr "Prioritet" -#: core/models.py:340 +#: core/models.py:318 +msgid "" +"Represents a Brand object in the system. This class handles information and " +"attributes related to a brand, including its name, logos, description, " +"associated categories, a unique slug, and priority order. It allows for the " +"organization and representation of brand-related data within the " +"application." +msgstr "" +"Representerar ett Brand-objekt i systemet. Klassen hanterar information och " +"attribut som är relaterade till ett varumärke, inklusive dess namn, " +"logotyper, beskrivning, associerade kategorier, en unik slug och " +"prioritetsordning. Den gör det möjligt att organisera och representera " +"varumärkesrelaterade data i applikationen." + +#: core/models.py:328 msgid "name of this brand" msgstr "Namn på detta varumärke" -#: core/models.py:341 +#: core/models.py:329 msgid "brand name" msgstr "Varumärke" -#: core/models.py:348 +#: core/models.py:336 msgid "upload a logo representing this brand" msgstr "Ladda upp en logotyp som representerar detta varumärke" -#: core/models.py:350 +#: core/models.py:338 msgid "brand small image" msgstr "Varumärke liten image" -#: core/models.py:356 +#: core/models.py:344 msgid "upload a big logo representing this brand" msgstr "Ladda upp en stor logotyp som representerar detta varumärke" -#: core/models.py:358 +#: core/models.py:346 msgid "brand big image" msgstr "Varumärke med stor image" -#: core/models.py:363 +#: core/models.py:351 msgid "add a detailed description of the brand" msgstr "Lägg till en detaljerad beskrivning av varumärket" -#: core/models.py:364 +#: core/models.py:352 msgid "brand description" msgstr "Varumärkesbeskrivning" -#: core/models.py:369 +#: core/models.py:357 msgid "optional categories that this brand is associated with" msgstr "Valfria kategorier som detta varumärke är förknippat med" -#: core/models.py:370 +#: core/models.py:358 msgid "associated categories" msgstr "Kategorier" -#: core/models.py:400 +#: core/models.py:388 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1579,68 +1557,68 @@ 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:412 +#: core/models.py:400 msgid "the vendor supplying this product stock" msgstr "Leverantören som levererar denna produkt lager" -#: core/models.py:413 +#: core/models.py:401 msgid "associated vendor" msgstr "Associerad leverantör" -#: core/models.py:417 +#: core/models.py:405 msgid "final price to the customer after markups" msgstr "Slutligt pris till kunden efter påslag" -#: core/models.py:418 +#: core/models.py:406 msgid "selling price" msgstr "Försäljningspris" -#: core/models.py:423 +#: core/models.py:411 msgid "the product associated with this stock entry" msgstr "Produkten som är associerad med denna lagerpost" -#: core/models.py:424 core/models.py:708 core/models.py:765 -#: core/models.py:1709 +#: core/models.py:412 core/models.py:683 core/models.py:730 +#: core/models.py:1583 msgid "associated product" msgstr "Tillhörande produkt" -#: core/models.py:431 +#: core/models.py:419 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:432 +#: core/models.py:420 msgid "vendor purchase price" msgstr "Leverantörens inköpspris" -#: core/models.py:436 +#: core/models.py:424 msgid "available quantity of the product in stock" msgstr "Tillgänglig kvantitet av produkten i lager" -#: core/models.py:437 +#: core/models.py:425 msgid "quantity in stock" msgstr "Antal i lager" -#: core/models.py:441 +#: core/models.py:429 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU som tilldelats av leverantören för identifiering av produkten" -#: core/models.py:442 +#: core/models.py:430 msgid "vendor sku" msgstr "Leverantörens SKU" -#: core/models.py:448 +#: core/models.py:436 msgid "digital file associated with this stock if applicable" msgstr "Digital fil associerad med detta lager om tillämpligt" -#: core/models.py:449 +#: core/models.py:437 msgid "digital file" msgstr "Digital fil" -#: core/models.py:458 +#: core/models.py:446 msgid "stock entries" msgstr "Lagerposter" -#: core/models.py:463 +#: core/models.py:451 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1661,55 +1639,55 @@ msgstr "" "för att definiera och manipulera produktdata och tillhörande information i " "en applikation." -#: core/models.py:476 +#: core/models.py:464 msgid "category this product belongs to" msgstr "Kategori som denna produkt tillhör" -#: core/models.py:485 +#: core/models.py:473 msgid "optionally associate this product with a brand" msgstr "Möjlighet att associera produkten med ett varumärke" -#: core/models.py:491 +#: core/models.py:479 msgid "tags that help describe or group this product" msgstr "Taggar som hjälper till att beskriva eller gruppera denna produkt" -#: core/models.py:496 +#: core/models.py:484 msgid "indicates whether this product is digitally delivered" msgstr "Anger om denna produkt levereras digitalt" -#: core/models.py:497 +#: core/models.py:485 msgid "is product digital" msgstr "Är produkten digital" -#: core/models.py:503 +#: core/models.py:491 msgid "provide a clear identifying name for the product" msgstr "Tillhandahålla ett tydligt identifierande namn för produkten" -#: core/models.py:504 +#: core/models.py:492 msgid "product name" msgstr "Produktens namn" -#: core/models.py:509 core/models.py:831 +#: core/models.py:497 core/models.py:772 msgid "add a detailed description of the product" msgstr "Lägg till en detaljerad beskrivning av produkten" -#: core/models.py:510 +#: core/models.py:498 msgid "product description" msgstr "Produktbeskrivning" -#: core/models.py:517 +#: core/models.py:505 msgid "part number for this product" msgstr "Artikelnummer för denna produkt" -#: core/models.py:518 +#: core/models.py:506 msgid "part number" msgstr "Artikelnummer" -#: core/models.py:537 +#: core/models.py:525 msgid "stock keeping unit for this product" msgstr "Lagerhållningsenhet för denna produkt" -#: core/models.py:607 +#: core/models.py:599 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 " @@ -1725,290 +1703,398 @@ msgstr "" "sträng, heltal, flottör, boolean, array och objekt. Detta ger möjlighet till" " dynamisk och flexibel datastrukturering." -#: core/models.py:619 +#: core/models.py:611 msgid "category of this attribute" msgstr "Kategori för detta attribut" -#: core/models.py:627 +#: core/models.py:619 msgid "group of this attribute" msgstr "Grupp av detta attribut" -#: core/models.py:633 +#: core/models.py:625 msgid "string" msgstr "Sträng" -#: core/models.py:634 +#: core/models.py:626 msgid "integer" msgstr "Heltal" -#: core/models.py:635 +#: core/models.py:627 msgid "float" msgstr "Flottör" -#: core/models.py:636 +#: core/models.py:628 msgid "boolean" msgstr "Boolean" -#: core/models.py:637 +#: core/models.py:629 msgid "array" msgstr "Array" -#: core/models.py:638 +#: core/models.py:630 msgid "object" msgstr "Objekt" -#: core/models.py:640 +#: core/models.py:632 msgid "type of the attribute's value" msgstr "Typ av attributets värde" -#: core/models.py:641 +#: core/models.py:633 msgid "value type" msgstr "Typ av värde" -#: core/models.py:646 +#: core/models.py:638 msgid "name of this attribute" msgstr "Namn på detta attribut" -#: core/models.py:647 +#: core/models.py:639 msgid "attribute's name" msgstr "Attributets namn" -#: core/models.py:653 +#: core/models.py:645 msgid "is filterable" msgstr "är filtrerbar" -#: core/models.py:654 +#: core/models.py:646 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:665 core/models.py:700 +#: core/models.py:657 core/models.py:675 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attribut" -#: core/models.py:699 +#: core/models.py:663 +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 "" +"Representerar ett specifikt värde för ett attribut som är kopplat till en " +"produkt. Det kopplar \"attributet\" till ett unikt \"värde\", vilket " +"möjliggör bättre organisation och dynamisk representation av " +"produktegenskaper." + +#: core/models.py:674 msgid "attribute of this value" msgstr "Attribut för detta värde" -#: core/models.py:707 +#: core/models.py:682 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:713 +#: core/models.py:688 msgid "the specific value for this attribute" msgstr "Det specifika värdet för detta attribut" -#: core/models.py:747 +#: core/models.py:701 +msgid "" +"Represents a product image associated with a product in the system. This " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " +"determining their display order. It also includes an accessibility feature " +"with alternative text for the images." +msgstr "" +"Representerar en produktbild som är associerad med en produkt i systemet. " +"Klassen är utformad för att hantera bilder för produkter, inklusive " +"funktioner för att ladda upp bildfiler, associera dem med specifika " +"produkter och bestämma deras visningsordning. Den innehåller också en " +"tillgänglighetsfunktion med alternativ text för bilderna." + +#: core/models.py:712 msgid "provide alternative text for the image for accessibility" msgstr "Tillhandahåll alternativ text för bilden för tillgänglighet" -#: core/models.py:748 +#: core/models.py:713 msgid "image alt text" msgstr "Alt-text för bild" -#: core/models.py:751 +#: core/models.py:716 msgid "upload the image file for this product" msgstr "Ladda upp bildfilen för den här produkten" -#: core/models.py:752 core/models.py:777 +#: core/models.py:717 core/models.py:742 msgid "product image" msgstr "Produktbild" -#: core/models.py:758 +#: core/models.py:723 msgid "determines the order in which images are displayed" msgstr "Bestämmer i vilken ordning bilderna ska visas" -#: core/models.py:759 +#: core/models.py:724 msgid "display priority" msgstr "Prioritet för visning" -#: core/models.py:764 +#: core/models.py:729 msgid "the product that this image represents" msgstr "Den produkt som denna bild representerar" -#: core/models.py:778 +#: core/models.py:743 msgid "product images" msgstr "Produktbilder" -#: core/models.py:819 +#: core/models.py:748 +msgid "" +"Represents a promotional campaign for products with a discount. This class " +"is used to define and manage promotional campaigns that offer a percentage-" +"based discount for products. The class includes attributes for setting the " +"discount rate, providing details about the promotion, and linking it to the " +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." +msgstr "" +"Representerar en kampanj för produkter med rabatt. Den här klassen används " +"för att definiera och hantera kampanjer som erbjuder en procentbaserad " +"rabatt för produkter. Klassen innehåller attribut för att ställa in " +"rabattsatsen, tillhandahålla information om kampanjen och länka den till de " +"tillämpliga produkterna. Den integreras med produktkatalogen för att " +"fastställa vilka artiklar som påverkas av kampanjen." + +#: core/models.py:760 msgid "percentage discount for the selected products" msgstr "Procentuell rabatt för de valda produkterna" -#: core/models.py:820 +#: core/models.py:761 msgid "discount percentage" msgstr "Rabattprocent" -#: core/models.py:825 +#: core/models.py:766 msgid "provide a unique name for this promotion" msgstr "Ange ett unikt namn för denna kampanj" -#: core/models.py:826 +#: core/models.py:767 msgid "promotion name" msgstr "Kampanjens namn" -#: core/models.py:832 +#: core/models.py:773 msgid "promotion description" msgstr "Beskrivning av kampanjen" -#: core/models.py:837 +#: core/models.py:778 msgid "select which products are included in this promotion" msgstr "Välj vilka produkter som ingår i denna kampanj" -#: core/models.py:838 +#: core/models.py:779 msgid "included products" msgstr "Inkluderade produkter" -#: core/models.py:842 +#: core/models.py:783 msgid "promotion" msgstr "Marknadsföring" -#: core/models.py:867 +#: core/models.py:794 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"class provides functionality to manage a collection of products, supporting " +"operations such as adding and removing products, as well as supporting " +"operations for adding and removing multiple products at once." +msgstr "" +"Representerar en användares önskelista för lagring och hantering av önskade " +"produkter. Klassen tillhandahåller funktionalitet för att hantera en samling" +" produkter, med stöd för operationer som att lägga till och ta bort " +"produkter, samt stöd för operationer för att lägga till och ta bort flera " +"produkter samtidigt." + +#: core/models.py:806 msgid "products that the user has marked as wanted" msgstr "Produkter som användaren har markerat som önskade" -#: core/models.py:875 +#: core/models.py:814 msgid "user who owns this wishlist" msgstr "Användare som äger denna önskelista" -#: core/models.py:876 +#: core/models.py:815 msgid "wishlist owner" msgstr "Wishlist's ägare" -#: core/models.py:884 +#: core/models.py:823 msgid "wishlist" msgstr "Önskelista" -#: core/models.py:951 +#: core/models.py:865 +msgid "" +"Represents a documentary record tied to a product. This class is used to " +"store information about documentaries related to specific products, " +"including file uploads and their metadata. It contains methods and " +"properties to handle the file type and storage path for the documentary " +"files. It extends functionality from specific mixins and provides additional" +" custom features." +msgstr "" +"Representerar en dokumentärpost som är knuten till en produkt. Denna klass " +"används för att lagra information om dokumentärer som är relaterade till " +"specifika produkter, inklusive filuppladdningar och deras metadata. Den " +"innehåller metoder och egenskaper för att hantera filtyp och lagringssökväg " +"för dokumentärfilerna. Den utökar funktionaliteten från specifika mixins och" +" tillhandahåller ytterligare anpassade funktioner." + +#: core/models.py:878 msgid "documentary" msgstr "Dokumentärfilm" -#: core/models.py:952 +#: core/models.py:879 msgid "documentaries" msgstr "Dokumentärer" -#: core/models.py:962 +#: core/models.py:889 msgid "unresolved" msgstr "Olöst" -#: core/models.py:1008 +#: core/models.py:894 +msgid "" +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." +msgstr "" +"Representerar en adressentitet som innehåller platsinformation och " +"associationer med en användare. Tillhandahåller funktionalitet för lagring " +"av geografiska data och adressdata samt integration med geokodningstjänster." +" Denna klass är utformad för att lagra detaljerad adressinformation " +"inklusive komponenter som gata, stad, region, land och geolokalisering " +"(longitud och latitud). Den stöder integration med API:er för geokodning, " +"vilket möjliggör lagring av råa API-svar för vidare bearbetning eller " +"inspektion. Klassen gör det också möjligt att associera en adress med en " +"användare, vilket underlättar personlig datahantering." + +#: core/models.py:909 msgid "address line for the customer" msgstr "Adressrad till kunden" -#: core/models.py:1009 +#: core/models.py:910 msgid "address line" msgstr "Adresslinje" -#: core/models.py:1011 +#: core/models.py:912 msgid "street" msgstr "Gata" -#: core/models.py:1012 +#: core/models.py:913 msgid "district" msgstr "Distrikt" -#: core/models.py:1013 +#: core/models.py:914 msgid "city" msgstr "Stad" -#: core/models.py:1014 +#: core/models.py:915 msgid "region" msgstr "Region" -#: core/models.py:1015 +#: core/models.py:916 msgid "postal code" msgstr "Postnummer" -#: core/models.py:1016 +#: core/models.py:917 msgid "country" msgstr "Land" -#: core/models.py:1023 +#: core/models.py:924 msgid "geolocation point: (longitude, latitude)" msgstr "Geolokaliseringspunkt (longitud, latitud)" -#: core/models.py:1026 +#: core/models.py:927 msgid "full JSON response from geocoder for this address" msgstr "Fullständigt JSON-svar från geokodaren för denna adress" -#: core/models.py:1031 +#: core/models.py:932 msgid "stored JSON response from the geocoding service" msgstr "Lagrad JSON-svar från geokodningstjänsten" -#: core/models.py:1039 +#: core/models.py:940 msgid "address" msgstr "Adress" -#: core/models.py:1040 +#: core/models.py:941 msgid "addresses" msgstr "Adresser" -#: core/models.py:1085 +#: core/models.py:953 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" +"Representerar en kampanjkod som kan användas för rabatter och hanterar dess " +"giltighet, typ av rabatt och tillämpning. Klassen PromoCode lagrar " +"information om en kampanjkod, inklusive dess unika identifierare, " +"rabattegenskaper (belopp eller procent), giltighetsperiod, associerad " +"användare (om någon) och status för dess användning. Den innehåller " +"funktioner för att validera och tillämpa kampanjkoden på en order och " +"samtidigt säkerställa att begränsningarna uppfylls." + +#: core/models.py:967 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:1086 +#: core/models.py:968 msgid "promo code identifier" msgstr "Identifierare för kampanjkod" -#: core/models.py:1093 +#: core/models.py:975 msgid "fixed discount amount applied if percent is not used" msgstr "Fast rabattbelopp tillämpas om procent inte används" -#: core/models.py:1094 +#: core/models.py:976 msgid "fixed discount amount" msgstr "Fast diskonteringsbelopp" -#: core/models.py:1100 +#: core/models.py:982 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:1101 +#: core/models.py:983 msgid "percentage discount" msgstr "Procentuell rabatt" -#: core/models.py:1106 +#: core/models.py:988 msgid "timestamp when the promocode expires" msgstr "Tidsstämpel när kampanjkoden upphör att gälla" -#: core/models.py:1107 +#: core/models.py:989 msgid "end validity time" msgstr "Slutgiltig giltighetstid" -#: core/models.py:1112 +#: core/models.py:994 msgid "timestamp from which this promocode is valid" msgstr "Tidsstämpel från vilken denna promokod är giltig" -#: core/models.py:1113 +#: core/models.py:995 msgid "start validity time" msgstr "Start giltighetstid" -#: core/models.py:1118 +#: core/models.py:1000 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:1119 +#: core/models.py:1001 msgid "usage timestamp" msgstr "Tidsstämpel för användning" -#: core/models.py:1124 +#: core/models.py:1006 msgid "user assigned to this promocode if applicable" msgstr "Användare som tilldelats denna promokod om tillämpligt" -#: core/models.py:1125 +#: core/models.py:1007 msgid "assigned user" msgstr "Tilldelad användare" -#: core/models.py:1132 +#: core/models.py:1014 msgid "promo code" msgstr "Kampanjkod" -#: core/models.py:1133 +#: core/models.py:1015 msgid "promo codes" msgstr "Kampanjkoder" -#: core/models.py:1140 +#: core/models.py:1022 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2016,16 +2102,16 @@ msgstr "" "Endast en typ av rabatt ska definieras (belopp eller procent), men inte båda" " eller ingendera." -#: core/models.py:1155 +#: core/models.py:1037 msgid "promocode already used" msgstr "Promokoden har redan använts" -#: core/models.py:1171 +#: core/models.py:1053 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Ogiltig rabattyp för promokod {self.uuid}!" -#: core/models.py:1180 +#: core/models.py:1062 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 " @@ -2042,136 +2128,136 @@ msgstr "" "faktureringsuppgifter kan uppdateras. På samma sätt stöder funktionaliteten " "hanteringen av produkterna i orderns livscykel." -#: core/models.py:1197 +#: core/models.py:1079 msgid "the billing address used for this order" msgstr "Den faktureringsadress som används för denna order" -#: core/models.py:1205 +#: core/models.py:1087 msgid "optional promo code applied to this order" msgstr "Valfri kampanjkod tillämpas på denna beställning" -#: core/models.py:1206 +#: core/models.py:1088 msgid "applied promo code" msgstr "Tillämpad kampanjkod" -#: core/models.py:1214 +#: core/models.py:1096 msgid "the shipping address used for this order" msgstr "Den leveransadress som används för denna order" -#: core/models.py:1215 +#: core/models.py:1097 msgid "shipping address" msgstr "Leveransadress" -#: core/models.py:1221 +#: core/models.py:1103 msgid "current status of the order in its lifecycle" msgstr "Aktuell status för ordern i dess livscykel" -#: core/models.py:1222 +#: core/models.py:1104 msgid "order status" msgstr "Orderstatus" -#: core/models.py:1227 core/models.py:1686 +#: core/models.py:1109 core/models.py:1560 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:1233 +#: core/models.py:1115 msgid "json representation of order attributes for this order" msgstr "JSON-representation av orderattribut för denna order" -#: core/models.py:1239 +#: core/models.py:1121 msgid "the user who placed the order" msgstr "Användaren som gjorde beställningen" -#: core/models.py:1240 +#: core/models.py:1122 msgid "user" msgstr "Användare" -#: core/models.py:1246 +#: core/models.py:1128 msgid "the timestamp when the order was finalized" msgstr "Tidsstämpel när ordern slutfördes" -#: core/models.py:1247 +#: core/models.py:1129 msgid "buy time" msgstr "Köp tid" -#: core/models.py:1254 +#: core/models.py:1136 msgid "a human-readable identifier for the order" msgstr "En mänskligt läsbar identifierare för ordern" -#: core/models.py:1255 +#: core/models.py:1137 msgid "human readable id" msgstr "mänskligt läsbart ID" -#: core/models.py:1261 +#: core/models.py:1143 msgid "order" msgstr "Beställning" -#: core/models.py:1282 +#: core/models.py:1168 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:1316 +#: core/models.py:1202 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:1321 +#: core/models.py:1207 msgid "you cannot add inactive products to order" msgstr "Du kan inte lägga till inaktiva produkter i ordern" -#: core/models.py:1338 +#: core/models.py:1224 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:1360 core/models.py:1385 core/models.py:1393 +#: core/models.py:1246 core/models.py:1271 core/models.py:1279 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:1381 +#: core/models.py:1267 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} finns inte med frågan <{query}>!" -#: core/models.py:1413 +#: core/models.py:1299 msgid "promocode does not exist" msgstr "Promokoden finns inte" -#: core/models.py:1419 +#: core/models.py:1305 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:1438 +#: core/models.py:1324 msgid "address does not exist" msgstr "Adressen finns inte" -#: core/models.py:1459 core/models.py:1528 +#: core/models.py:1345 core/models.py:1414 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:1462 core/models.py:1524 +#: core/models.py:1348 core/models.py:1410 msgid "invalid force value" msgstr "Ogiltigt kraftvärde" -#: core/models.py:1468 core/models.py:1531 +#: core/models.py:1354 core/models.py:1417 msgid "you cannot purchase an empty order!" msgstr "Du kan inte köpa en tom order!" -#: core/models.py:1487 +#: core/models.py:1373 msgid "you cannot buy an order without a user" msgstr "Du kan inte köpa en order utan en användare!" -#: core/models.py:1501 +#: core/models.py:1387 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:1506 +#: core/models.py:1392 msgid "insufficient funds to complete the order" msgstr "Otillräckliga medel för att slutföra ordern" -#: core/models.py:1540 +#: core/models.py:1426 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2179,150 +2265,204 @@ msgstr "" "du kan inte köpa utan registrering, vänligen ange följande information: " "kundens namn, kundens e-post, kundens telefonnummer" -#: core/models.py:1549 +#: core/models.py:1435 #, 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:1674 +#: core/models.py:1533 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" +"Representerar produkter som är kopplade till order och deras attribut. " +"OrderProduct-modellen innehåller information om en produkt som ingår i en " +"order, inklusive detaljer som inköpspris, kvantitet, produktattribut och " +"status. Den hanterar meddelanden till användaren och administratörer och " +"hanterar åtgärder som att returnera produktsaldot eller lägga till feedback." +" Modellen innehåller också metoder och egenskaper som stöder affärslogik, " +"t.ex. beräkning av totalpriset eller generering av en URL för nedladdning av" +" digitala produkter. Modellen integreras med Order- och Product-modellerna " +"och lagrar en referens till dem." + +#: core/models.py:1548 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:1675 +#: core/models.py:1549 msgid "purchase price at order time" msgstr "Inköpspris vid ordertillfället" -#: core/models.py:1680 +#: core/models.py:1554 msgid "internal comments for admins about this ordered product" msgstr "Interna kommentarer för administratörer om denna beställda produkt" -#: core/models.py:1681 +#: core/models.py:1555 msgid "internal comments" msgstr "Interna kommentarer" -#: core/models.py:1687 +#: core/models.py:1561 msgid "user notifications" msgstr "Meddelanden till användare" -#: core/models.py:1692 +#: core/models.py:1566 msgid "json representation of this item's attributes" msgstr "JSON-representation av detta objekts attribut" -#: core/models.py:1693 +#: core/models.py:1567 msgid "ordered product attributes" msgstr "Sorterade produktattribut" -#: core/models.py:1698 +#: core/models.py:1572 msgid "reference to the parent order that contains this product" msgstr "Referens till den överordnade order som innehåller denna produkt" -#: core/models.py:1699 +#: core/models.py:1573 msgid "parent order" msgstr "Föräldraorder" -#: core/models.py:1708 +#: core/models.py:1582 msgid "the specific product associated with this order line" msgstr "Den specifika produkt som är kopplad till denna orderrad" -#: core/models.py:1715 +#: core/models.py:1589 msgid "quantity of this specific product in the order" msgstr "Antal av denna specifika produkt i ordern" -#: core/models.py:1716 +#: core/models.py:1590 msgid "product quantity" msgstr "Produktens kvantitet" -#: core/models.py:1723 +#: core/models.py:1597 msgid "current status of this product in the order" msgstr "Aktuell status för denna produkt i ordern" -#: core/models.py:1724 +#: core/models.py:1598 msgid "product line status" msgstr "Status för produktlinje" -#: core/models.py:1784 +#: core/models.py:1661 msgid "order product must have an order" msgstr "Orderprodukt måste ha en tillhörande order!" -#: core/models.py:1786 +#: core/models.py:1663 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Fel åtgärd angiven för återkoppling: {action}!" -#: core/models.py:1800 +#: core/models.py:1677 msgid "you cannot feedback an order which is not received" msgstr "du kan inte återkoppla en order som inte mottagits" -#: core/models.py:1806 +#: core/models.py:1683 msgid "name" msgstr "Namn" -#: core/models.py:1807 +#: core/models.py:1684 msgid "URL of the integration" msgstr "URL för integrationen" -#: core/models.py:1808 +#: core/models.py:1685 msgid "authentication credentials" msgstr "Autentiseringsuppgifter" -#: core/models.py:1822 +#: core/models.py:1699 msgid "you can only have one default CRM provider" msgstr "Du kan bara ha en CRM-leverantör som standard" -#: core/models.py:1826 +#: core/models.py:1703 msgid "CRM" msgstr "CRM" -#: core/models.py:1827 +#: core/models.py:1704 msgid "CRMs" msgstr "CRM-system" -#: core/models.py:1839 +#: core/models.py:1716 msgid "order CRM link" msgstr "Beställningens CRM-länk" -#: core/models.py:1840 +#: core/models.py:1717 msgid "orders CRM links" msgstr "Beställningarnas CRM-länkar" -#: core/models.py:1874 +#: core/models.py:1722 +msgid "" +"Represents the downloading functionality for digital assets associated with " +"orders. The DigitalAssetDownload class provides the ability to manage and " +"access downloads related to order products. It maintains information about " +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." +msgstr "" +"Representerar nedladdningsfunktionen för digitala tillgångar som är kopplade" +" till order. Klassen DigitalAssetDownload ger möjlighet att hantera och " +"komma åt nedladdningar som är relaterade till orderprodukter. Den " +"upprätthåller information om den associerade orderprodukten, antalet " +"nedladdningar och om tillgången är offentligt synlig. Den innehåller en " +"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:1736 msgid "download" msgstr "Nedladdningar" -#: core/models.py:1875 +#: core/models.py:1737 msgid "downloads" msgstr "Nedladdningar" -#: core/models.py:1883 +#: core/models.py:1745 msgid "you can not download a digital asset for a non-finished order" msgstr "Du kan inte ladda ner en digital tillgång för en oavslutad order" -#: core/models.py:1913 +#: core/models.py:1754 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." +msgstr "" +"Hanterar feedback från användare för produkter. Den här klassen är utformad " +"för att fånga upp och lagra feedback från användare om specifika produkter " +"som de har köpt. Den innehåller attribut för att lagra användarkommentarer, " +"en referens till den relaterade produkten i ordern och ett användartilldelat" +" betyg. Klassen använder databasfält för att effektivt modellera och hantera" +" feedbackdata." + +#: core/models.py:1766 msgid "user-provided comments about their experience with the product" msgstr "Kommentarer från användare om deras erfarenhet av produkten" -#: core/models.py:1914 +#: core/models.py:1767 msgid "feedback comments" msgstr "Återkoppling av kommentarer" -#: core/models.py:1921 +#: core/models.py:1774 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:1922 +#: core/models.py:1775 msgid "related order product" msgstr "Relaterad order produkt" -#: core/models.py:1927 +#: core/models.py:1780 msgid "user-assigned rating for the product" msgstr "Användartilldelat betyg för produkten" -#: core/models.py:1928 +#: core/models.py:1781 msgid "product rating" msgstr "Produktbetyg" @@ -2541,17 +2681,17 @@ msgstr "Ogiltigt timeout-värde, det måste vara mellan 0 och 216000 sekunder" msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | kontakta oss initierad" -#: core/utils/emailing.py:64 +#: core/utils/emailing.py:74 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Orderbekräftelse" -#: core/utils/emailing.py:99 +#: core/utils/emailing.py:109 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Beställning levererad" -#: core/utils/emailing.py:187 +#: core/utils/emailing.py:197 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | promocode beviljad" @@ -2573,15 +2713,15 @@ msgstr "Bildmåtten får inte överstiga w{max_width} x h{max_height} pixlar!" msgid "invalid phone number format" msgstr "Ogiltigt format på telefonnumret" -#: core/views.py:481 +#: core/views.py:489 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:539 +#: core/views.py:547 msgid "favicon not found" msgstr "favicon hittades inte" -#: core/viewsets.py:1319 +#: core/viewsets.py:1357 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Fel i geokodningen: {e}" diff --git a/core/locale/th_TH/LC_MESSAGES/django.mo b/core/locale/th_TH/LC_MESSAGES/django.mo index f2bf3d4863f7627032cff8b41af44719af4cb23e..d09cc8bd2032b245f21575cbf39e5bed27f75eff 100644 GIT binary patch delta 20324 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�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\n" "Language-Team: BRITISH ENGLISH \n" @@ -88,11 +88,11 @@ msgid "selected items have been deactivated." msgstr "รายการที่เลือกถูกยกเลิกการใช้งานแล้ว!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:712 core/models.py:720 +#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 msgid "attribute value" msgstr "ค่าคุณสมบัติ" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:721 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 msgid "attribute values" msgstr "ค่าของแอตทริบิวต์" @@ -104,7 +104,7 @@ msgstr "ภาพ" msgid "images" msgstr "รูปภาพ" -#: core/admin.py:155 core/models.py:457 +#: core/admin.py:155 core/models.py:445 msgid "stock" msgstr "สต็อก" @@ -112,11 +112,11 @@ msgstr "สต็อก" msgid "stocks" msgstr "หุ้น" -#: core/admin.py:166 core/models.py:1735 +#: core/admin.py:166 core/models.py:1609 msgid "order product" msgstr "สั่งซื้อสินค้า" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1736 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 msgid "order products" msgstr "สั่งซื้อสินค้า" @@ -327,7 +327,7 @@ msgstr "" "เขียนฟิลด์บางส่วนของหมวดหมู่ที่มีอยู่แล้วใหม่ " "โดยบันทึกเฉพาะข้อมูลที่ไม่สามารถแก้ไขได้" -#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:553 +#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:487 #: core/graphene/object_types.py:117 core/graphene/object_types.py:207 #: core/graphene/object_types.py:509 msgid "SEO Meta snapshot" @@ -585,47 +585,7 @@ msgstr "รายการสินค้าทั้งหมด (มุมม msgid "(exact) Product UUID" msgstr "(exact) รหัส UUID ของผลิตภัณฑ์" -#: core/docs/drf/viewsets.py:384 -msgid "(icontains) Product name" -msgstr "(icontains) ชื่อผลิตภัณฑ์" - -#: core/docs/drf/viewsets.py:390 -msgid "(list) Category names, case-insensitive" -msgstr "(รายการ) ชื่อหมวดหมู่, ไม่คำนึงถึงตัวพิมพ์ใหญ่หรือเล็ก" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Category UUID" -msgstr "(เฉพาะ) UUID หมวดหมู่" - -#: core/docs/drf/viewsets.py:402 -msgid "(list) Tag names, case-insensitive" -msgstr "(รายการ) ชื่อแท็ก, ไม่คำนึงถึงตัวพิมพ์ใหญ่หรือเล็ก" - -#: core/docs/drf/viewsets.py:408 -msgid "(gte) Minimum stock price" -msgstr "(gte) ราคาหุ้นขั้นต่ำ" - -#: core/docs/drf/viewsets.py:414 -msgid "(lte) Maximum stock price" -msgstr "(ลที) ราคาหุ้นสูงสุด" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Only active products" -msgstr "(เฉพาะ) ผลิตภัณฑ์ที่ใช้งานอยู่เท่านั้น" - -#: core/docs/drf/viewsets.py:426 -msgid "(iexact) Brand name" -msgstr "(ไม่ระบุ) ชื่อแบรนด์" - -#: core/docs/drf/viewsets.py:438 -msgid "(gt) Minimum stock quantity" -msgstr "(gt) ปริมาณสต็อกขั้นต่ำ" - -#: core/docs/drf/viewsets.py:444 -msgid "(exact) Digital vs. physical" -msgstr "(ตรงตัว) ดิจิทัล vs. วัตถุ" - -#: core/docs/drf/viewsets.py:451 +#: core/docs/drf/viewsets.py:385 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -634,250 +594,254 @@ msgstr "" " สำหรับการเรียงลำดับจากน้อยไปมาก **ที่อนุญาต:** uuid, rating, name, slug, " "created, modified, price, random" -#: core/docs/drf/viewsets.py:465 core/docs/drf/viewsets.py:466 +#: core/docs/drf/viewsets.py:399 core/docs/drf/viewsets.py:400 msgid "retrieve a single product (detailed view)" msgstr "ดึงข้อมูลสินค้าเพียงรายการเดียว (มุมมองรายละเอียด)" -#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:495 -#: core/docs/drf/viewsets.py:511 core/docs/drf/viewsets.py:527 -#: core/docs/drf/viewsets.py:543 core/docs/drf/viewsets.py:559 +#: core/docs/drf/viewsets.py:405 core/docs/drf/viewsets.py:429 +#: core/docs/drf/viewsets.py:445 core/docs/drf/viewsets.py:461 +#: core/docs/drf/viewsets.py:477 core/docs/drf/viewsets.py:493 msgid "Product UUID or slug" msgstr "รหัส UUID ของผลิตภัณฑ์ หรือชื่อเรียก" -#: core/docs/drf/viewsets.py:481 core/docs/drf/viewsets.py:482 +#: core/docs/drf/viewsets.py:415 core/docs/drf/viewsets.py:416 msgid "create a product" msgstr "สร้างผลิตภัณฑ์" -#: core/docs/drf/viewsets.py:489 core/docs/drf/viewsets.py:490 +#: core/docs/drf/viewsets.py:423 core/docs/drf/viewsets.py:424 msgid "rewrite an existing product, preserving non-editable fields" msgstr "เขียนใหม่ผลิตภัณฑ์ที่มีอยู่ โดยรักษาฟิลด์ที่ไม่สามารถแก้ไขได้" -#: core/docs/drf/viewsets.py:505 core/docs/drf/viewsets.py:506 +#: core/docs/drf/viewsets.py:439 core/docs/drf/viewsets.py:440 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" "อัปเดตบางฟิลด์ของสินค้าที่มีอยู่แล้ว โดยคงฟิลด์ที่ไม่สามารถแก้ไขได้ไว้" -#: core/docs/drf/viewsets.py:521 core/docs/drf/viewsets.py:522 +#: core/docs/drf/viewsets.py:455 core/docs/drf/viewsets.py:456 msgid "delete a product" msgstr "ลบผลิตภัณฑ์" -#: core/docs/drf/viewsets.py:537 core/docs/drf/viewsets.py:538 +#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:472 msgid "lists all permitted feedbacks for a product" msgstr "แสดงรายการข้อเสนอแนะที่ได้รับอนุญาตทั้งหมดสำหรับผลิตภัณฑ์" -#: core/docs/drf/viewsets.py:554 +#: core/docs/drf/viewsets.py:488 msgid "returns a snapshot of the product's SEO meta data" msgstr "ส่งคืนภาพรวมของข้อมูลเมตา SEO ของผลิตภัณฑ์" -#: core/docs/drf/viewsets.py:572 +#: core/docs/drf/viewsets.py:506 msgid "list all addresses" msgstr "รายการที่อยู่ทั้งหมด" -#: core/docs/drf/viewsets.py:579 +#: core/docs/drf/viewsets.py:513 msgid "retrieve a single address" msgstr "ดึงที่อยู่เดียว" -#: core/docs/drf/viewsets.py:586 +#: core/docs/drf/viewsets.py:520 msgid "create a new address" msgstr "สร้างที่อยู่ใหม่" -#: core/docs/drf/viewsets.py:594 +#: core/docs/drf/viewsets.py:528 msgid "delete an address" msgstr "ลบที่อยู่" -#: core/docs/drf/viewsets.py:601 +#: core/docs/drf/viewsets.py:535 msgid "update an entire address" msgstr "อัปเดตที่อยู่ทั้งหมด" -#: core/docs/drf/viewsets.py:609 +#: core/docs/drf/viewsets.py:543 msgid "partially update an address" msgstr "อัปเดตที่อยู่บางส่วน" -#: core/docs/drf/viewsets.py:617 +#: core/docs/drf/viewsets.py:551 msgid "autocomplete address suggestions" msgstr "การเติมที่อยู่โดยอัตโนมัติ" -#: core/docs/drf/viewsets.py:622 +#: core/docs/drf/viewsets.py:556 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "ข้อมูลดิบสำหรับคำค้นหา กรุณาเพิ่มข้อมูลจากจุดสิ้นสุด geo-IP" -#: core/docs/drf/viewsets.py:628 +#: core/docs/drf/viewsets.py:562 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "จำกัดจำนวนผลลัพธ์, 1 < limit < 10, ค่าเริ่มต้น: 5" -#: core/docs/drf/viewsets.py:641 +#: core/docs/drf/viewsets.py:575 msgid "list all feedbacks (simple view)" msgstr "แสดงความคิดเห็นทั้งหมด (มุมมองแบบง่าย)" -#: core/docs/drf/viewsets.py:645 +#: core/docs/drf/viewsets.py:579 msgid "retrieve a single feedback (detailed view)" msgstr "ดึงข้อมูลความคิดเห็นหนึ่งรายการ (มุมมองแบบละเอียด)" -#: core/docs/drf/viewsets.py:649 +#: core/docs/drf/viewsets.py:583 msgid "create a feedback" msgstr "สร้างข้อเสนอแนะ" -#: core/docs/drf/viewsets.py:653 +#: core/docs/drf/viewsets.py:587 msgid "delete a feedback" msgstr "ลบความคิดเห็น" -#: core/docs/drf/viewsets.py:657 +#: core/docs/drf/viewsets.py:591 msgid "rewrite an existing feedback saving non-editables" msgstr "เขียนใหม่ข้อเสนอแนะที่มีอยู่โดยไม่แก้ไขส่วนที่ไม่สามารถแก้ไขได้" -#: core/docs/drf/viewsets.py:661 +#: core/docs/drf/viewsets.py:595 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" "เขียนข้อมูลบางส่วนของฟิลด์ในข้อเสนอแนะที่มีอยู่ใหม่ " "โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้" -#: core/docs/drf/viewsets.py:668 +#: core/docs/drf/viewsets.py:602 msgid "list all order–product relations (simple view)" msgstr "แสดงความสัมพันธ์ระหว่างคำสั่งซื้อและผลิตภัณฑ์ทั้งหมด (มุมมองแบบง่าย)" -#: core/docs/drf/viewsets.py:675 +#: core/docs/drf/viewsets.py:609 msgid "retrieve a single order–product relation (detailed view)" msgstr "" "ดึงความสัมพันธ์ระหว่างคำสั่งซื้อและผลิตภัณฑ์เพียงรายการเดียว " "(มุมมองรายละเอียด)" -#: core/docs/drf/viewsets.py:682 +#: core/docs/drf/viewsets.py:616 msgid "create a new order–product relation" msgstr "สร้างความสัมพันธ์ระหว่างคำสั่งซื้อและผลิตภัณฑ์ใหม่" -#: core/docs/drf/viewsets.py:689 +#: core/docs/drf/viewsets.py:623 msgid "replace an existing order–product relation" msgstr "แทนที่ความสัมพันธ์ระหว่างคำสั่งซื้อและผลิตภัณฑ์ที่มีอยู่" -#: core/docs/drf/viewsets.py:696 +#: core/docs/drf/viewsets.py:630 msgid "partially update an existing order–product relation" msgstr "อัปเดตบางส่วนของความสัมพันธ์ระหว่างคำสั่งซื้อและผลิตภัณฑ์ที่มีอยู่" -#: core/docs/drf/viewsets.py:703 +#: core/docs/drf/viewsets.py:637 msgid "delete an order–product relation" msgstr "ลบความสัมพันธ์ระหว่างคำสั่งซื้อและสินค้า" -#: core/docs/drf/viewsets.py:710 +#: core/docs/drf/viewsets.py:644 msgid "add or remove feedback on an order–product relation" msgstr "" "เพิ่มหรือลบความคิดเห็นเกี่ยวกับความสัมพันธ์ระหว่างคำสั่งซื้อและผลิตภัณฑ์" -#: core/elasticsearch/__init__.py:105 +#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 msgid "no search term provided." msgstr "ไม่พบคำค้นหา" -#: core/filters.py:64 core/filters.py:594 core/filters.py:623 +#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +msgid "Search" +msgstr "ค้นหา" + +#: core/filters.py:66 core/filters.py:554 core/filters.py:583 msgid "UUID" msgstr "ยูไอไอดี" -#: core/filters.py:65 core/filters.py:429 core/filters.py:560 +#: core/filters.py:67 core/filters.py:399 core/filters.py:526 msgid "Name" msgstr "ชื่อ" -#: core/filters.py:66 core/filters.py:562 +#: core/filters.py:68 core/filters.py:528 msgid "Categories" msgstr "หมวดหมู่" -#: core/filters.py:68 +#: core/filters.py:70 msgid "Categories Slugs" msgstr "หมวดหมู่ slug" -#: core/filters.py:69 core/filters.py:437 +#: core/filters.py:71 core/filters.py:407 msgid "Tags" msgstr "แท็ก" -#: core/filters.py:70 +#: core/filters.py:72 msgid "Min Price" msgstr "ราคาต่ำสุด" -#: core/filters.py:71 +#: core/filters.py:73 msgid "Max Price" msgstr "ราคาสูงสุด" -#: core/filters.py:72 +#: core/filters.py:74 msgid "Is Active" msgstr "กำลังใช้งานอยู่" -#: core/filters.py:73 +#: core/filters.py:75 msgid "Brand" msgstr "แบรนด์" -#: core/filters.py:74 +#: core/filters.py:76 msgid "Attributes" msgstr "คุณลักษณะ" -#: core/filters.py:75 +#: core/filters.py:77 msgid "Quantity" msgstr "ปริมาณ" -#: core/filters.py:76 core/filters.py:431 core/filters.py:561 -#: core/models.py:287 core/models.py:381 core/models.py:534 +#: core/filters.py:78 core/filters.py:401 core/filters.py:527 +#: core/models.py:287 core/models.py:369 core/models.py:522 msgid "Slug" msgstr "ทาก" -#: core/filters.py:77 +#: core/filters.py:79 msgid "Is Digital" msgstr "คือ ดิจิทัล" -#: core/filters.py:78 +#: core/filters.py:80 msgid "Include sub-categories" msgstr "รวมหมวดหมู่ย่อย" -#: core/filters.py:81 +#: core/filters.py:83 msgid "Include personal ordered" msgstr "รวมสินค้าสั่งทำส่วนตัว" -#: core/filters.py:83 core/models.py:538 +#: core/filters.py:85 core/models.py:526 msgid "SKU" msgstr "SKU" -#: core/filters.py:166 +#: core/filters.py:161 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "ต้องมี category_uuid เพื่อใช้แฟล็ก include_subcategories" -#: core/filters.py:356 +#: core/filters.py:324 msgid "Search (ID, product name or part number)" msgstr "ค้นหา (รหัส, ชื่อผลิตภัณฑ์ หรือหมายเลขชิ้นส่วน)" -#: core/filters.py:359 +#: core/filters.py:327 msgid "Bought after (inclusive)" msgstr "ซื้อหลังจาก (รวมแล้ว)" -#: core/filters.py:360 +#: core/filters.py:328 msgid "Bought before (inclusive)" msgstr "ซื้อมาก่อน (รวมแล้ว)" -#: core/filters.py:363 core/filters.py:410 core/filters.py:625 +#: core/filters.py:331 core/filters.py:378 core/filters.py:585 msgid "User email" msgstr "อีเมลผู้ใช้" -#: core/filters.py:364 core/filters.py:411 core/filters.py:603 -#: core/filters.py:624 +#: core/filters.py:332 core/filters.py:379 core/filters.py:563 +#: core/filters.py:584 msgid "User UUID" msgstr "รหัสผู้ใช้ UUID" -#: core/filters.py:365 +#: core/filters.py:333 msgid "Status" msgstr "สถานะ" -#: core/filters.py:369 +#: core/filters.py:337 msgid "Human Readable ID" msgstr "รหัสที่มนุษย์อ่านได้" -#: core/filters.py:430 +#: core/filters.py:400 msgid "Parent" msgstr "ผู้ปกครอง" -#: core/filters.py:434 +#: core/filters.py:404 msgid "Whole category(has at least 1 product or not)" msgstr "หมวดหมู่ทั้งหมด (มีอย่างน้อย 1 ผลิตภัณฑ์หรือไม่)" -#: core/filters.py:438 +#: core/filters.py:408 msgid "Level" msgstr "ระดับ" -#: core/filters.py:598 +#: core/filters.py:558 msgid "Product UUID" msgstr "รหัส UUID ของผลิตภัณฑ์" @@ -933,7 +897,7 @@ msgstr "" "กรุณาให้ order_uuid หรือ order_hr_id - ต้องเลือกอย่างใดอย่างหนึ่งเท่านั้น!" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:821 +#: core/graphene/mutations.py:527 core/viewsets.py:839 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "ประเภทไม่ถูกต้องมาจากเมธอด order.buy(): {type(instance)!s}" @@ -995,37 +959,37 @@ msgstr "" msgid "add or delete a feedback for orderproduct" msgstr "เพิ่มหรือลบความคิดเห็นสำหรับสินค้าที่สั่งซื้อ" -#: core/graphene/mutations.py:555 +#: core/graphene/mutations.py:556 msgid "action must be either `add` or `remove`" msgstr "การกระทำต้องเป็น `add` หรือ `remove` เท่านั้น!" -#: core/graphene/mutations.py:558 +#: core/graphene/mutations.py:559 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "ไม่พบคำสั่งซื้อสินค้า {order_product_uuid}!" -#: core/graphene/mutations.py:621 +#: core/graphene/mutations.py:622 msgid "original address string provided by the user" msgstr "สตริงที่อยู่ต้นฉบับที่ผู้ใช้ให้มา" -#: core/graphene/mutations.py:655 core/models.py:896 core/models.py:909 -#: core/models.py:1348 core/models.py:1377 core/models.py:1402 -#: core/viewsets.py:824 +#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 +#: core/models.py:1234 core/models.py:1263 core/models.py:1288 +#: core/viewsets.py:842 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} ไม่พบ: {uuid}!" -#: core/graphene/mutations.py:668 +#: core/graphene/mutations.py:669 msgid "limit must be between 1 and 10" msgstr "ต้องอยู่ระหว่าง 1 ถึง 10" -#: core/graphene/mutations.py:713 +#: core/graphene/mutations.py:714 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - ทำงานได้อย่างยอดเยี่ยม" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:666 core/models.py:1234 -#: core/models.py:1809 +#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 +#: core/models.py:1686 msgid "attributes" msgstr "คุณลักษณะ" @@ -1038,11 +1002,11 @@ msgid "groups of attributes" msgstr "กลุ่มของลักษณะ" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:620 +#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:612 msgid "categories" msgstr "หมวดหมู่" -#: core/graphene/object_types.py:124 core/models.py:395 +#: core/graphene/object_types.py:124 core/models.py:383 msgid "brands" msgstr "แบรนด์" @@ -1097,7 +1061,7 @@ msgid "represents feedback from a user." msgstr "แสดงความคิดเห็นจากผู้ใช้" #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1228 +#: core/models.py:1110 msgid "notifications" msgstr "การแจ้งเตือน" @@ -1105,7 +1069,7 @@ msgstr "การแจ้งเตือน" msgid "download url for this order product if applicable" msgstr "ดาวน์โหลด url สำหรับคำสั่งซื้อสินค้านี้ หากมี" -#: core/graphene/object_types.py:400 core/models.py:1938 +#: core/graphene/object_types.py:400 core/models.py:1791 msgid "feedback" msgstr "ข้อเสนอแนะ" @@ -1113,7 +1077,7 @@ msgstr "ข้อเสนอแนะ" msgid "a list of order products in this order" msgstr "รายการสินค้าที่สั่งซื้อในคำสั่งซื้อนี้" -#: core/graphene/object_types.py:436 core/models.py:1198 +#: core/graphene/object_types.py:436 core/models.py:1080 msgid "billing address" msgstr "ที่อยู่สำหรับออกใบแจ้งหนี้" @@ -1141,7 +1105,7 @@ msgstr "สินค้าทั้งหมดในคำสั่งซื้ msgid "transactions for this order" msgstr "รายการธุรกรรมสำหรับคำสั่งนี้" -#: core/graphene/object_types.py:465 core/models.py:1262 +#: core/graphene/object_types.py:465 core/models.py:1144 msgid "orders" msgstr "คำสั่ง" @@ -1153,15 +1117,15 @@ msgstr "URL ของรูปภาพ" msgid "product's images" msgstr "รูปภาพของสินค้า" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:477 +#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 msgid "category" msgstr "หมวดหมู่" -#: core/graphene/object_types.py:502 core/models.py:1939 +#: core/graphene/object_types.py:502 core/models.py:1792 msgid "feedbacks" msgstr "ข้อเสนอแนะ" -#: core/graphene/object_types.py:503 core/models.py:394 core/models.py:486 +#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 msgid "brand" msgstr "แบรนด์" @@ -1193,7 +1157,7 @@ msgstr "จำนวนความคิดเห็น" msgid "only available for personal orders" msgstr "สินค้าที่มีจำหน่ายเฉพาะการสั่งซื้อส่วนบุคคลเท่านั้น" -#: core/graphene/object_types.py:534 core/models.py:548 +#: core/graphene/object_types.py:534 core/models.py:536 msgid "products" msgstr "ผลิตภัณฑ์" @@ -1205,7 +1169,7 @@ msgstr "รหัสส่งเสริมการขาย" msgid "products on sale" msgstr "สินค้าลดราคา" -#: core/graphene/object_types.py:651 core/models.py:843 +#: core/graphene/object_types.py:651 core/models.py:784 msgid "promotions" msgstr "โปรโมชั่น" @@ -1213,7 +1177,7 @@ msgstr "โปรโมชั่น" msgid "vendor" msgstr "ผู้ขาย" -#: core/graphene/object_types.py:656 core/models.py:547 +#: core/graphene/object_types.py:656 core/models.py:535 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1221,11 +1185,11 @@ msgstr "ผู้ขาย" msgid "product" msgstr "สินค้า" -#: core/graphene/object_types.py:667 core/models.py:868 +#: core/graphene/object_types.py:667 core/models.py:807 msgid "wishlisted products" msgstr "สินค้าที่อยู่ในรายการต้องการ" -#: core/graphene/object_types.py:673 core/models.py:885 +#: core/graphene/object_types.py:673 core/models.py:824 msgid "wishlists" msgstr "รายการสิ่งที่ต้องการ" @@ -1233,7 +1197,7 @@ msgstr "รายการสิ่งที่ต้องการ" msgid "tagged products" msgstr "สินค้าที่ติดแท็ก" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:492 +#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 msgid "product tags" msgstr "แท็กสินค้า" @@ -1342,7 +1306,7 @@ msgstr "กลุ่มแอตทริบิวต์ของพ่อแม msgid "attribute group's name" msgstr "ชื่อกลุ่มคุณสมบัติ" -#: core/models.py:100 core/models.py:628 +#: core/models.py:100 core/models.py:620 msgid "attribute group" msgstr "กลุ่มคุณลักษณะ" @@ -1499,51 +1463,63 @@ msgstr "หมวดหมู่คำอธิบาย" msgid "tags that help describe or group this category" msgstr "แท็กที่ช่วยอธิบายหรือจัดกลุ่มหมวดหมู่นี้" -#: core/models.py:299 core/models.py:387 +#: core/models.py:299 core/models.py:375 msgid "priority" msgstr "ลำดับความสำคัญ" -#: core/models.py:340 +#: core/models.py:318 +msgid "" +"Represents a Brand object in the system. This class handles information and " +"attributes related to a brand, including its name, logos, description, " +"associated categories, a unique slug, and priority order. It allows for the " +"organization and representation of brand-related data within the " +"application." +msgstr "" +"แทนวัตถุแบรนด์ในระบบ คลาสนี้จัดการข้อมูลและคุณลักษณะที่เกี่ยวข้องกับแบรนด์ " +"รวมถึงชื่อ โลโก้ คำอธิบาย หมวดหมู่ที่เกี่ยวข้อง สลักเฉพาะ และลำดับความสำคัญ " +"ช่วยให้สามารถจัดระเบียบและแสดงข้อมูลที่เกี่ยวข้องกับแบรนด์ภายในแอปพลิเคชันได้" + +#: core/models.py:328 msgid "name of this brand" msgstr "ชื่อของแบรนด์นี้" -#: core/models.py:341 +#: core/models.py:329 msgid "brand name" msgstr "ชื่อแบรนด์" -#: core/models.py:348 +#: core/models.py:336 msgid "upload a logo representing this brand" msgstr "อัปโหลดโลโก้ที่เป็นตัวแทนของแบรนด์นี้" -#: core/models.py:350 +#: core/models.py:338 msgid "brand small image" msgstr "แบรนด์รูปภาพขนาดเล็ก" -#: core/models.py:356 +#: core/models.py:344 msgid "upload a big logo representing this brand" msgstr "อัปโหลดโลโก้ขนาดใหญ่ที่เป็นตัวแทนของแบรนด์นี้" -#: core/models.py:358 +#: core/models.py:346 msgid "brand big image" msgstr "แบรนด์ภาพใหญ่" -#: core/models.py:363 +#: core/models.py:351 msgid "add a detailed description of the brand" msgstr "เพิ่มคำอธิบายรายละเอียดของแบรนด์" -#: core/models.py:364 +#: core/models.py:352 msgid "brand description" msgstr "คำอธิบายแบรนด์" -#: core/models.py:369 +#: core/models.py:357 msgid "optional categories that this brand is associated with" msgstr "หมวดหมู่เพิ่มเติมที่แบรนด์นี้เกี่ยวข้อง" -#: core/models.py:370 +#: core/models.py:358 msgid "associated categories" msgstr "หมวดหมู่" -#: core/models.py:400 +#: core/models.py:388 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1559,68 +1535,68 @@ msgstr "" "เป็นส่วนหนึ่งของระบบการจัดการสินค้าคงคลังเพื่อให้สามารถติดตามและประเมินสินค้าที่มีจากผู้จำหน่ายต่างๆ" " ได้" -#: core/models.py:412 +#: core/models.py:400 msgid "the vendor supplying this product stock" msgstr "ผู้จัดจำหน่ายที่จัดหาสินค้าคงคลังนี้" -#: core/models.py:413 +#: core/models.py:401 msgid "associated vendor" msgstr "ผู้ขายที่เกี่ยวข้อง" -#: core/models.py:417 +#: core/models.py:405 msgid "final price to the customer after markups" msgstr "ราคาสุดท้ายที่ลูกค้าต้องชำระหลังจากการบวกกำไร" -#: core/models.py:418 +#: core/models.py:406 msgid "selling price" msgstr "ราคาขาย" -#: core/models.py:423 +#: core/models.py:411 msgid "the product associated with this stock entry" msgstr "สินค้าที่เกี่ยวข้องกับรายการสินค้าคงคลังนี้" -#: core/models.py:424 core/models.py:708 core/models.py:765 -#: core/models.py:1709 +#: core/models.py:412 core/models.py:683 core/models.py:730 +#: core/models.py:1583 msgid "associated product" msgstr "ผลิตภัณฑ์ที่เกี่ยวข้อง" -#: core/models.py:431 +#: core/models.py:419 msgid "the price paid to the vendor for this product" msgstr "ราคาที่จ่ายให้กับผู้ขายสำหรับสินค้านี้" -#: core/models.py:432 +#: core/models.py:420 msgid "vendor purchase price" msgstr "ราคาซื้อจากผู้ขาย" -#: core/models.py:436 +#: core/models.py:424 msgid "available quantity of the product in stock" msgstr "จำนวนสินค้าที่มีในสต็อก" -#: core/models.py:437 +#: core/models.py:425 msgid "quantity in stock" msgstr "จำนวนในสต็อก" -#: core/models.py:441 +#: core/models.py:429 msgid "vendor-assigned SKU for identifying the product" msgstr "รหัสสินค้าที่ผู้ขายกำหนดเพื่อระบุตัวผลิตภัณฑ์" -#: core/models.py:442 +#: core/models.py:430 msgid "vendor sku" msgstr "รหัสสินค้าของผู้ขาย" -#: core/models.py:448 +#: core/models.py:436 msgid "digital file associated with this stock if applicable" msgstr "ไฟล์ดิจิทัลที่เกี่ยวข้องกับสต็อกนี้ หากมี" -#: core/models.py:449 +#: core/models.py:437 msgid "digital file" msgstr "ไฟล์ดิจิทัล" -#: core/models.py:458 +#: core/models.py:446 msgid "stock entries" msgstr "รายการสินค้าคงคลัง" -#: core/models.py:463 +#: core/models.py:451 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1640,55 +1616,55 @@ msgstr "" " " "และจัดการการแคชสำหรับคุณสมบัติที่เข้าถึงบ่อยเพื่อปรับปรุงประสิทธิภาพใช้เพื่อกำหนดและจัดการข้อมูลผลิตภัณฑ์และข้อมูลที่เกี่ยวข้องภายในแอปพลิเคชัน" -#: core/models.py:476 +#: core/models.py:464 msgid "category this product belongs to" msgstr "หมวดหมู่ที่สินค้านี้จัดอยู่ใน" -#: core/models.py:485 +#: core/models.py:473 msgid "optionally associate this product with a brand" msgstr "เลือกเชื่อมโยงผลิตภัณฑ์นี้กับแบรนด์" -#: core/models.py:491 +#: core/models.py:479 msgid "tags that help describe or group this product" msgstr "แท็กที่ช่วยอธิบายหรือจัดกลุ่มผลิตภัณฑ์นี้" -#: core/models.py:496 +#: core/models.py:484 msgid "indicates whether this product is digitally delivered" msgstr "บ่งชี้ว่าสินค้านี้จัดส่งในรูปแบบดิจิทัลหรือไม่" -#: core/models.py:497 +#: core/models.py:485 msgid "is product digital" msgstr "สินค้าเป็นดิจิทัล" -#: core/models.py:503 +#: core/models.py:491 msgid "provide a clear identifying name for the product" msgstr "ระบุชื่อที่ชัดเจนสำหรับผลิตภัณฑ์" -#: core/models.py:504 +#: core/models.py:492 msgid "product name" msgstr "ชื่อสินค้า" -#: core/models.py:509 core/models.py:831 +#: core/models.py:497 core/models.py:772 msgid "add a detailed description of the product" msgstr "เพิ่มคำอธิบายรายละเอียดของสินค้า" -#: core/models.py:510 +#: core/models.py:498 msgid "product description" msgstr "รายละเอียดสินค้า" -#: core/models.py:517 +#: core/models.py:505 msgid "part number for this product" msgstr "หมายเลขชิ้นส่วนสำหรับสินค้านี้" -#: core/models.py:518 +#: core/models.py:506 msgid "part number" msgstr "หมายเลขชิ้นส่วน" -#: core/models.py:537 +#: core/models.py:525 msgid "stock keeping unit for this product" msgstr "หน่วยเก็บสินค้าสำหรับสินค้านี้" -#: core/models.py:607 +#: core/models.py:599 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 " @@ -1704,288 +1680,394 @@ msgstr "" "อาร์เรย์, และออบเจ็กต์. " "ซึ่งช่วยให้สามารถจัดโครงสร้างข้อมูลได้ไดนามิกและยืดหยุ่น." -#: core/models.py:619 +#: core/models.py:611 msgid "category of this attribute" msgstr "หมวดหมู่ของแอตทริบิวต์นี้" -#: core/models.py:627 +#: core/models.py:619 msgid "group of this attribute" msgstr "กลุ่มของแอตทริบิวต์นี้" -#: core/models.py:633 +#: core/models.py:625 msgid "string" msgstr "สตริง" -#: core/models.py:634 +#: core/models.py:626 msgid "integer" msgstr "ความซื่อสัตย์" -#: core/models.py:635 +#: core/models.py:627 msgid "float" msgstr "ลอย" -#: core/models.py:636 +#: core/models.py:628 msgid "boolean" msgstr "บูลีน" -#: core/models.py:637 +#: core/models.py:629 msgid "array" msgstr "อาร์เรย์" -#: core/models.py:638 +#: core/models.py:630 msgid "object" msgstr "วัตถุ" -#: core/models.py:640 +#: core/models.py:632 msgid "type of the attribute's value" msgstr "ประเภทของค่าของแอตทริบิวต์" -#: core/models.py:641 +#: core/models.py:633 msgid "value type" msgstr "ประเภทของค่า" -#: core/models.py:646 +#: core/models.py:638 msgid "name of this attribute" msgstr "ชื่อของแอตทริบิวต์นี้" -#: core/models.py:647 +#: core/models.py:639 msgid "attribute's name" msgstr "ชื่อของแอตทริบิวต์" -#: core/models.py:653 +#: core/models.py:645 msgid "is filterable" msgstr "สามารถกรองได้" -#: core/models.py:654 +#: core/models.py:646 msgid "designates whether this attribute can be used for filtering or not" msgstr "กำหนดว่าแอตทริบิวต์นี้สามารถใช้สำหรับการกรองหรือไม่" -#: core/models.py:665 core/models.py:700 +#: core/models.py:657 core/models.py:675 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "คุณสมบัติ" -#: core/models.py:699 +#: core/models.py:663 +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:674 msgid "attribute of this value" msgstr "คุณลักษณะของค่านี้" -#: core/models.py:707 +#: core/models.py:682 msgid "the specific product associated with this attribute's value" msgstr "ผลิตภัณฑ์เฉพาะที่เกี่ยวข้องกับค่าของแอตทริบิวต์นี้" -#: core/models.py:713 +#: core/models.py:688 msgid "the specific value for this attribute" msgstr "ค่าเฉพาะสำหรับคุณสมบัตินี้" -#: core/models.py:747 +#: core/models.py:701 +msgid "" +"Represents a product image associated with a product in the system. This " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " +"determining their display order. It also includes an accessibility feature " +"with alternative text for the images." +msgstr "" +"แสดงภาพสินค้าที่เกี่ยวข้องกับสินค้าในระบบ. " +"คลาสนี้ออกแบบมาเพื่อจัดการภาพสำหรับสินค้า " +"รวมถึงฟังก์ชันสำหรับการอัปโหลดไฟล์ภาพ, การเชื่อมโยงกับสินค้าเฉพาะ, " +"และการกำหนดลำดับการแสดงผล. " +"นอกจากนี้ยังมีคุณสมบัติการเข้าถึงสำหรับผู้ใช้ที่มีความต้องการพิเศษ " +"โดยให้ข้อความทางเลือกสำหรับภาพ." + +#: core/models.py:712 msgid "provide alternative text for the image for accessibility" msgstr "ให้ข้อความทางเลือกสำหรับภาพเพื่อการเข้าถึง" -#: core/models.py:748 +#: core/models.py:713 msgid "image alt text" msgstr "ข้อความแสดงแทนภาพ" -#: core/models.py:751 +#: core/models.py:716 msgid "upload the image file for this product" msgstr "อัปโหลดไฟล์รูปภาพสำหรับสินค้านี้" -#: core/models.py:752 core/models.py:777 +#: core/models.py:717 core/models.py:742 msgid "product image" msgstr "รูปภาพสินค้า" -#: core/models.py:758 +#: core/models.py:723 msgid "determines the order in which images are displayed" msgstr "กำหนดลำดับการแสดงผลของภาพ" -#: core/models.py:759 +#: core/models.py:724 msgid "display priority" msgstr "ลำดับความสำคัญในการแสดงผล" -#: core/models.py:764 +#: core/models.py:729 msgid "the product that this image represents" msgstr "สินค้าที่ภาพนี้แทน" -#: core/models.py:778 +#: core/models.py:743 msgid "product images" msgstr "รูปภาพสินค้า" -#: core/models.py:819 +#: core/models.py:748 +msgid "" +"Represents a promotional campaign for products with a discount. This class " +"is used to define and manage promotional campaigns that offer a percentage-" +"based discount for products. The class includes attributes for setting the " +"discount rate, providing details about the promotion, and linking it to the " +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." +msgstr "" +"แสดงถึงแคมเปญส่งเสริมการขายสำหรับสินค้าที่มีส่วนลด. " +"คลาสนี้ใช้เพื่อกำหนดและจัดการแคมเปญส่งเสริมการขายที่มอบส่วนลดเป็นเปอร์เซ็นต์สำหรับสินค้า." +" คลาสนี้ประกอบด้วยคุณสมบัติสำหรับการตั้งค่าอัตราส่วนลด, " +"ให้รายละเอียดเกี่ยวกับโปรโมชั่น, และเชื่อมโยงกับสินค้าที่เกี่ยวข้อง. " +"คลาสนี้ผสานการทำงานกับแคตตาล็อกสินค้าเพื่อกำหนดสินค้าที่ได้รับผลกระทบในแคมเปญ." + +#: core/models.py:760 msgid "percentage discount for the selected products" msgstr "เปอร์เซ็นต์ส่วนลดสำหรับสินค้าที่เลือก" -#: core/models.py:820 +#: core/models.py:761 msgid "discount percentage" msgstr "เปอร์เซ็นต์ส่วนลด" -#: core/models.py:825 +#: core/models.py:766 msgid "provide a unique name for this promotion" msgstr "กรุณาตั้งชื่อที่ไม่ซ้ำกันสำหรับการส่งเสริมการขายนี้" -#: core/models.py:826 +#: core/models.py:767 msgid "promotion name" msgstr "ชื่อโปรโมชั่น" -#: core/models.py:832 +#: core/models.py:773 msgid "promotion description" msgstr "รายละเอียดโปรโมชั่น" -#: core/models.py:837 +#: core/models.py:778 msgid "select which products are included in this promotion" msgstr "เลือกผลิตภัณฑ์ที่รวมอยู่ในโปรโมชั่นนี้" -#: core/models.py:838 +#: core/models.py:779 msgid "included products" msgstr "สินค้าที่รวมอยู่" -#: core/models.py:842 +#: core/models.py:783 msgid "promotion" msgstr "โปรโมชั่น" -#: core/models.py:867 +#: core/models.py:794 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"class provides functionality to manage a collection of products, supporting " +"operations such as adding and removing products, as well as supporting " +"operations for adding and removing multiple products at once." +msgstr "" +"แสดงรายการสินค้าที่ผู้ใช้ต้องการเก็บไว้เพื่อจัดการและค้นหาสินค้าที่ต้องการในอนาคต" +" คลาสนี้ให้บริการฟังก์ชันสำหรับการจัดการคอลเลกชันของสินค้า " +"ซึ่งรวมถึงการเพิ่มและลบสินค้าออกจากคอลเลกชัน " +"ตลอดจนการเพิ่มและลบสินค้าหลายรายการพร้อมกัน" + +#: core/models.py:806 msgid "products that the user has marked as wanted" msgstr "สินค้าที่ผู้ใช้ได้ทำเครื่องหมายว่าต้องการ" -#: core/models.py:875 +#: core/models.py:814 msgid "user who owns this wishlist" msgstr "ผู้ใช้ที่เป็นเจ้าของรายการความปรารถนา" -#: core/models.py:876 +#: core/models.py:815 msgid "wishlist owner" msgstr "เจ้าของรายการที่อยากได้" -#: core/models.py:884 +#: core/models.py:823 msgid "wishlist" msgstr "รายการสิ่งที่ต้องการ" -#: core/models.py:951 +#: core/models.py:865 +msgid "" +"Represents a documentary record tied to a product. This class is used to " +"store information about documentaries related to specific products, " +"including file uploads and their metadata. It contains methods and " +"properties to handle the file type and storage path for the documentary " +"files. It extends functionality from specific mixins and provides additional" +" custom features." +msgstr "" +"แทนเอกสารบันทึกที่เกี่ยวข้องกับผลิตภัณฑ์. " +"คลาสนี้ใช้เพื่อเก็บข้อมูลเกี่ยวกับเอกสารที่เกี่ยวข้องกับผลิตภัณฑ์เฉพาะ " +"รวมถึงการอัปโหลดไฟล์และข้อมูลเมตาของไฟล์. " +"คลาสนี้มีเมธอดและคุณสมบัติเพื่อจัดการกับประเภทไฟล์และเส้นทางจัดเก็บสำหรับไฟล์เอกสาร." +" คลาสนี้ขยายฟังก์ชันการทำงานจากมิกซ์อินเฉพาะ " +"และให้คุณสมบัติเพิ่มเติมตามความต้องการ." + +#: core/models.py:878 msgid "documentary" msgstr "สารคดี" -#: core/models.py:952 +#: core/models.py:879 msgid "documentaries" msgstr "สารคดี" -#: core/models.py:962 +#: core/models.py:889 msgid "unresolved" msgstr "ยังไม่ได้รับการแก้ไข" -#: core/models.py:1008 +#: core/models.py:894 +msgid "" +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." +msgstr "" +"แทนที่หน่วยงานที่อยู่ซึ่งรวมถึงรายละเอียดตำแหน่งและความสัมพันธ์กับผู้ใช้ " +"ให้ฟังก์ชันสำหรับการจัดเก็บข้อมูลทางภูมิศาสตร์และที่อยู่ " +"รวมถึงการผสานรวมกับบริการการเข้ารหัสทางภูมิศาสตร์ " +"คลาสนี้ถูกออกแบบมาเพื่อจัดเก็บข้อมูลที่อยู่โดยละเอียด รวมถึงองค์ประกอบเช่น " +"ถนน เมือง ภูมิภาค ประเทศ และตำแหน่งทางภูมิศาสตร์ (ลองจิจูดและละติจูด) " +"รองรับการผสานรวมกับ API การเข้ารหัสทางภูมิศาสตร์ " +"ทำให้สามารถจัดเก็บการตอบสนองของ API " +"ดิบเพื่อการประมวลผลหรือตรวจสอบเพิ่มเติมได้คลาสนี้ยังอนุญาตให้เชื่อมโยงที่อยู่กับผู้ใช้ได้" +" ซึ่งช่วยให้การจัดการข้อมูลส่วนบุคคลเป็นไปอย่างสะดวก" + +#: core/models.py:909 msgid "address line for the customer" msgstr "ที่อยู่สำหรับลูกค้า" -#: core/models.py:1009 +#: core/models.py:910 msgid "address line" msgstr "บรรทัดที่อยู่" -#: core/models.py:1011 +#: core/models.py:912 msgid "street" msgstr "ถนน" -#: core/models.py:1012 +#: core/models.py:913 msgid "district" msgstr "เขต" -#: core/models.py:1013 +#: core/models.py:914 msgid "city" msgstr "เมือง" -#: core/models.py:1014 +#: core/models.py:915 msgid "region" msgstr "ภูมิภาค" -#: core/models.py:1015 +#: core/models.py:916 msgid "postal code" msgstr "รหัสไปรษณีย์" -#: core/models.py:1016 +#: core/models.py:917 msgid "country" msgstr "ประเทศ" -#: core/models.py:1023 +#: core/models.py:924 msgid "geolocation point: (longitude, latitude)" msgstr "จุดพิกัดภูมิศาสตร์ (ลองจิจูด, ละติจูด)" -#: core/models.py:1026 +#: core/models.py:927 msgid "full JSON response from geocoder for this address" msgstr "การตอบกลับ JSON แบบเต็มจากตัวแปลงที่อยู่ทางภูมิศาสตร์สำหรับที่อยู่นี้" -#: core/models.py:1031 +#: core/models.py:932 msgid "stored JSON response from the geocoding service" msgstr "เก็บคำตอบ JSON จากบริการการแปลงที่อยู่ทางภูมิศาสตร์" -#: core/models.py:1039 +#: core/models.py:940 msgid "address" msgstr "ที่อยู่" -#: core/models.py:1040 +#: core/models.py:941 msgid "addresses" msgstr "ที่อยู่" -#: core/models.py:1085 +#: core/models.py:953 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" +"แสดงรหัสโปรโมชั่นที่สามารถใช้เพื่อรับส่วนลด การจัดการความถูกต้อง " +"ประเภทของส่วนลด และการใช้งาน คลาส PromoCode " +"จัดเก็บรายละเอียดเกี่ยวกับรหัสโปรโมชั่น รวมถึงตัวระบุที่ไม่ซ้ำกัน " +"คุณสมบัติของส่วนลด (จำนวนหรือเปอร์เซ็นต์) ระยะเวลาการใช้งาน " +"ผู้ใช้ที่เกี่ยวข้อง (ถ้ามี) และสถานะการใช้งาน " +"รวมถึงฟังก์ชันการทำงานเพื่อตรวจสอบและใช้รหัสโปรโมชั่นกับคำสั่งซื้อในขณะที่ตรวจสอบให้แน่ใจว่าข้อจำกัดต่างๆ" +" ได้รับการปฏิบัติตาม" + +#: core/models.py:967 msgid "unique code used by a user to redeem a discount" msgstr "รหัสเฉพาะที่ผู้ใช้ใช้เพื่อแลกรับส่วนลด" -#: core/models.py:1086 +#: core/models.py:968 msgid "promo code identifier" msgstr "รหัสโปรโมชั่น" -#: core/models.py:1093 +#: core/models.py:975 msgid "fixed discount amount applied if percent is not used" msgstr "จำนวนส่วนลดคงที่ที่ใช้หากไม่ได้ใช้เปอร์เซ็นต์" -#: core/models.py:1094 +#: core/models.py:976 msgid "fixed discount amount" msgstr "จำนวนส่วนลดคงที่" -#: core/models.py:1100 +#: core/models.py:982 msgid "percentage discount applied if fixed amount is not used" msgstr "ส่วนลดเป็นเปอร์เซ็นต์ที่ใช้เมื่อไม่ได้ใช้จำนวนเงินคงที่" -#: core/models.py:1101 +#: core/models.py:983 msgid "percentage discount" msgstr "เปอร์เซ็นต์ส่วนลด" -#: core/models.py:1106 +#: core/models.py:988 msgid "timestamp when the promocode expires" msgstr "เวลาที่โค้ดโปรโมชั่นหมดอายุ" -#: core/models.py:1107 +#: core/models.py:989 msgid "end validity time" msgstr "เวลาสิ้นสุดความถูกต้อง" -#: core/models.py:1112 +#: core/models.py:994 msgid "timestamp from which this promocode is valid" msgstr "เวลาที่ตราไว้ซึ่งรหัสโปรโมชั่นนี้ใช้ได้" -#: core/models.py:1113 +#: core/models.py:995 msgid "start validity time" msgstr "เวลาเริ่มต้นความถูกต้อง" -#: core/models.py:1118 +#: core/models.py:1000 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "เวลาที่ตราประทับเมื่อใช้รหัสโปรโมชั่น, ว่างเปล่าหากยังไม่ได้ใช้" -#: core/models.py:1119 +#: core/models.py:1001 msgid "usage timestamp" msgstr "เวลาการใช้งาน" -#: core/models.py:1124 +#: core/models.py:1006 msgid "user assigned to this promocode if applicable" msgstr "ผู้ใช้ที่ได้รับมอบหมายให้ใช้รหัสโปรโมชั่นนี้ หากมี" -#: core/models.py:1125 +#: core/models.py:1007 msgid "assigned user" msgstr "ผู้ใช้ที่ได้รับมอบหมาย" -#: core/models.py:1132 +#: core/models.py:1014 msgid "promo code" msgstr "รหัสโปรโมชั่น" -#: core/models.py:1133 +#: core/models.py:1015 msgid "promo codes" msgstr "รหัสส่งเสริมการขาย" -#: core/models.py:1140 +#: core/models.py:1022 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -1993,16 +2075,16 @@ msgstr "" "ควรกำหนดประเภทส่วนลดเพียงประเภทเดียว (จำนวนเงินหรือเปอร์เซ็นต์) เท่านั้น " "ไม่ควรกำหนดทั้งสองประเภทหรือไม่ได้กำหนดเลย" -#: core/models.py:1155 +#: core/models.py:1037 msgid "promocode already used" msgstr "รหัสโปรโมชั่นถูกใช้ไปแล้ว" -#: core/models.py:1171 +#: core/models.py:1053 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "ประเภทส่วนลดไม่ถูกต้องสำหรับรหัสโปรโมชั่น {self.uuid}!" -#: core/models.py:1180 +#: core/models.py:1062 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 " @@ -2020,138 +2102,138 @@ msgstr "" "และรายละเอียดการจัดส่งหรือการเรียกเก็บเงินสามารถอัปเดตได้เช่นกัน นอกจากนี้ " "ฟังก์ชันการทำงานยังรองรับการจัดการสินค้าในวงจรชีวิตของคำสั่งซื้อ" -#: core/models.py:1197 +#: core/models.py:1079 msgid "the billing address used for this order" msgstr "ที่อยู่สำหรับเรียกเก็บเงินที่ใช้สำหรับคำสั่งซื้อนี้" -#: core/models.py:1205 +#: core/models.py:1087 msgid "optional promo code applied to this order" msgstr "รหัสโปรโมชั่นเสริมใช้กับคำสั่งซื้อนี้แล้ว" -#: core/models.py:1206 +#: core/models.py:1088 msgid "applied promo code" msgstr "ใช้รหัสโปรโมชั่น" -#: core/models.py:1214 +#: core/models.py:1096 msgid "the shipping address used for this order" msgstr "ที่อยู่สำหรับจัดส่งที่ใช้สำหรับคำสั่งซื้อนี้" -#: core/models.py:1215 +#: core/models.py:1097 msgid "shipping address" msgstr "ที่อยู่สำหรับจัดส่ง" -#: core/models.py:1221 +#: core/models.py:1103 msgid "current status of the order in its lifecycle" msgstr "สถานะปัจจุบันของคำสั่งซื้อในวงจรชีวิต" -#: core/models.py:1222 +#: core/models.py:1104 msgid "order status" msgstr "สถานะการสั่งซื้อ" -#: core/models.py:1227 core/models.py:1686 +#: core/models.py:1109 core/models.py:1560 msgid "json structure of notifications to display to users" msgstr "" "โครงสร้าง JSON ของการแจ้งเตือนที่จะแสดงให้ผู้ใช้เห็น ใน UI " "ของผู้ดูแลระบบจะใช้การแสดงผลแบบตาราง" -#: core/models.py:1233 +#: core/models.py:1115 msgid "json representation of order attributes for this order" msgstr "การแสดงผล JSON ของคุณลักษณะคำสั่งซื้อสำหรับคำสั่งซื้อนี้" -#: core/models.py:1239 +#: core/models.py:1121 msgid "the user who placed the order" msgstr "ผู้ใช้ที่ทำการสั่งซื้อ" -#: core/models.py:1240 +#: core/models.py:1122 msgid "user" msgstr "ผู้ใช้" -#: core/models.py:1246 +#: core/models.py:1128 msgid "the timestamp when the order was finalized" msgstr "เวลาที่คำสั่งซื้อได้รับการยืนยัน" -#: core/models.py:1247 +#: core/models.py:1129 msgid "buy time" msgstr "ซื้อเวลา" -#: core/models.py:1254 +#: core/models.py:1136 msgid "a human-readable identifier for the order" msgstr "ตัวระบุที่มนุษย์อ่านได้สำหรับคำสั่ง" -#: core/models.py:1255 +#: core/models.py:1137 msgid "human readable id" msgstr "รหัสที่สามารถอ่านได้โดยมนุษย์" -#: core/models.py:1261 +#: core/models.py:1143 msgid "order" msgstr "คำสั่ง" -#: core/models.py:1282 +#: core/models.py:1168 msgid "a user must have only one pending order at a time" msgstr "" "ผู้ใช้ต้องมีคำสั่งซื้อที่รอดำเนินการเพียงหนึ่งรายการเท่านั้นในแต่ละครั้ง!" -#: core/models.py:1316 +#: core/models.py:1202 msgid "you cannot add products to an order that is not a pending one" msgstr "" "คุณไม่สามารถเพิ่มสินค้าในคำสั่งซื้อที่ไม่ใช่คำสั่งซื้อที่รอดำเนินการได้" -#: core/models.py:1321 +#: core/models.py:1207 msgid "you cannot add inactive products to order" msgstr "คุณไม่สามารถเพิ่มสินค้าที่ไม่ใช้งานในคำสั่งซื้อได้" -#: core/models.py:1338 +#: core/models.py:1224 msgid "you cannot add more products than available in stock" msgstr "คุณไม่สามารถเพิ่มสินค้าได้มากกว่าที่มีในสต็อก" -#: core/models.py:1360 core/models.py:1385 core/models.py:1393 +#: core/models.py:1246 core/models.py:1271 core/models.py:1279 msgid "you cannot remove products from an order that is not a pending one" msgstr "" "คุณไม่สามารถลบสินค้าออกจากคำสั่งซื้อที่ไม่ใช่คำสั่งซื้อที่อยู่ในสถานะรอดำเนินการได้" -#: core/models.py:1381 +#: core/models.py:1267 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} ไม่มีอยู่จริงกับคำค้นหา <{query}>!" -#: core/models.py:1413 +#: core/models.py:1299 msgid "promocode does not exist" msgstr "รหัสโปรโมชั่นไม่มีอยู่" -#: core/models.py:1419 +#: core/models.py:1305 msgid "you can only buy physical products with shipping address specified" msgstr "" "คุณสามารถซื้อได้เฉพาะสินค้าทางกายภาพที่มีที่อยู่สำหรับจัดส่งระบุไว้เท่านั้น!" -#: core/models.py:1438 +#: core/models.py:1324 msgid "address does not exist" msgstr "ไม่มีที่อยู่" -#: core/models.py:1459 core/models.py:1528 +#: core/models.py:1345 core/models.py:1414 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "ขณะนี้คุณไม่สามารถซื้อได้ กรุณาลองใหม่อีกครั้งในอีกไม่กี่นาที" -#: core/models.py:1462 core/models.py:1524 +#: core/models.py:1348 core/models.py:1410 msgid "invalid force value" msgstr "ค่าแรงบังคับไม่ถูกต้อง" -#: core/models.py:1468 core/models.py:1531 +#: core/models.py:1354 core/models.py:1417 msgid "you cannot purchase an empty order!" msgstr "คุณไม่สามารถซื้อคำสั่งซื้อที่ว่างเปล่าได้!" -#: core/models.py:1487 +#: core/models.py:1373 msgid "you cannot buy an order without a user" msgstr "คุณไม่สามารถซื้อคำสั่งซื้อได้หากไม่มีผู้ใช้!" -#: core/models.py:1501 +#: core/models.py:1387 msgid "a user without a balance cannot buy with balance" msgstr "ผู้ใช้ที่ไม่มียอดคงเหลือไม่สามารถซื้อด้วยยอดคงเหลือได้!" -#: core/models.py:1506 +#: core/models.py:1392 msgid "insufficient funds to complete the order" msgstr "เงินไม่เพียงพอในการทำรายการให้เสร็จสมบูรณ์" -#: core/models.py:1540 +#: core/models.py:1426 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2159,149 +2241,201 @@ msgstr "" "คุณไม่สามารถซื้อได้หากไม่มีการลงทะเบียน กรุณาให้ข้อมูลต่อไปนี้: ชื่อลูกค้า, " "อีเมลลูกค้า, หมายเลขโทรศัพท์ลูกค้า" -#: core/models.py:1549 +#: core/models.py:1435 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "วิธีการชำระเงินไม่ถูกต้อง: {payment_method} จาก {available_payment_methods}!" -#: core/models.py:1674 +#: core/models.py:1533 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" +"แสดงผลิตภัณฑ์ที่เกี่ยวข้องกับคำสั่งซื้อและคุณลักษณะของผลิตภัณฑ์โมเดล " +"OrderProduct ดูแลข้อมูลเกี่ยวกับสินค้าที่เป็นส่วนหนึ่งของคำสั่งซื้อ " +"รวมถึงรายละเอียดเช่น ราคาซื้อ จำนวน คุณสมบัติของสินค้า และสถานะ " +"โมเดลนี้จัดการการแจ้งเตือนสำหรับผู้ใช้และผู้ดูแลระบบ " +"และจัดการการดำเนินการเช่น การคืนสินค้าคงเหลือหรือการเพิ่มความคิดเห็น " +"โมเดลนี้ยังมีวิธีการและคุณสมบัติที่สนับสนุนตรรกะทางธุรกิจ เช่น " +"การคำนวณราคารวมหรือการสร้าง URL สำหรับดาวน์โหลดสินค้าดิจิทัล " +"โมเดลนี้ผสานรวมกับโมเดล Order และ Product " +"และเก็บการอ้างอิงถึงโมเดลเหล่านี้ไว้" + +#: core/models.py:1548 msgid "the price paid by the customer for this product at purchase time" msgstr "ราคาที่ลูกค้าชำระสำหรับสินค้านี้ ณ เวลาที่ซื้อ" -#: core/models.py:1675 +#: core/models.py:1549 msgid "purchase price at order time" msgstr "ราคาซื้อ ณ เวลาที่สั่งซื้อ" -#: core/models.py:1680 +#: core/models.py:1554 msgid "internal comments for admins about this ordered product" msgstr "ความคิดเห็นภายในสำหรับผู้ดูแลระบบเกี่ยวกับสินค้าที่สั่งซื้อ" -#: core/models.py:1681 +#: core/models.py:1555 msgid "internal comments" msgstr "ความคิดเห็นภายใน" -#: core/models.py:1687 +#: core/models.py:1561 msgid "user notifications" msgstr "การแจ้งเตือนผู้ใช้" -#: core/models.py:1692 +#: core/models.py:1566 msgid "json representation of this item's attributes" msgstr "การแสดงผล JSON ของคุณลักษณะของรายการนี้" -#: core/models.py:1693 +#: core/models.py:1567 msgid "ordered product attributes" msgstr "จัดเรียงคุณลักษณะของสินค้า" -#: core/models.py:1698 +#: core/models.py:1572 msgid "reference to the parent order that contains this product" msgstr "การอ้างอิงถึงคำสั่งซื้อหลักที่มีสินค้านี้อยู่" -#: core/models.py:1699 +#: core/models.py:1573 msgid "parent order" msgstr "ลำดับของผู้ปกครอง" -#: core/models.py:1708 +#: core/models.py:1582 msgid "the specific product associated with this order line" msgstr "สินค้าเฉพาะที่เกี่ยวข้องกับรายการคำสั่งซื้อนี้" -#: core/models.py:1715 +#: core/models.py:1589 msgid "quantity of this specific product in the order" msgstr "ปริมาณของสินค้าชนิดนี้ในคำสั่งซื้อ" -#: core/models.py:1716 +#: core/models.py:1590 msgid "product quantity" msgstr "จำนวนสินค้า" -#: core/models.py:1723 +#: core/models.py:1597 msgid "current status of this product in the order" msgstr "สถานะปัจจุบันของสินค้านี้ในคำสั่งซื้อ" -#: core/models.py:1724 +#: core/models.py:1598 msgid "product line status" msgstr "สถานะสายผลิตภัณฑ์" -#: core/models.py:1784 +#: core/models.py:1661 msgid "order product must have an order" msgstr "Orderproduct ต้องมีการสั่งซื้อที่เกี่ยวข้อง!" -#: core/models.py:1786 +#: core/models.py:1663 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "ระบุการกระทำที่ไม่ถูกต้องสำหรับข้อเสนอแนะ: {action}!" -#: core/models.py:1800 +#: core/models.py:1677 msgid "you cannot feedback an order which is not received" msgstr "คุณไม่สามารถให้ข้อเสนอแนะเกี่ยวกับคำสั่งซื้อที่ไม่ได้รับ" -#: core/models.py:1806 +#: core/models.py:1683 msgid "name" msgstr "ชื่อ" -#: core/models.py:1807 +#: core/models.py:1684 msgid "URL of the integration" msgstr "URL ของการผสานรวม" -#: core/models.py:1808 +#: core/models.py:1685 msgid "authentication credentials" msgstr "ข้อมูลประจำตัวสำหรับการยืนยันตัวตน" -#: core/models.py:1822 +#: core/models.py:1699 msgid "you can only have one default CRM provider" msgstr "คุณสามารถมีผู้ให้บริการ CRM เริ่มต้นได้เพียงรายเดียวเท่านั้น" -#: core/models.py:1826 +#: core/models.py:1703 msgid "CRM" msgstr "ระบบบริหารความสัมพันธ์ลูกค้า" -#: core/models.py:1827 +#: core/models.py:1704 msgid "CRMs" msgstr "ระบบบริหารความสัมพันธ์ลูกค้า" -#: core/models.py:1839 +#: core/models.py:1716 msgid "order CRM link" msgstr "ลิงก์ CRM ของคำสั่ง" -#: core/models.py:1840 +#: core/models.py:1717 msgid "orders CRM links" msgstr "ลิงก์ CRM ของคำสั่งซื้อ" -#: core/models.py:1874 +#: core/models.py:1722 +msgid "" +"Represents the downloading functionality for digital assets associated with " +"orders. The DigitalAssetDownload class provides the ability to manage and " +"access downloads related to order products. It maintains information about " +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." +msgstr "" +"แสดงถึงฟังก์ชันการดาวน์โหลดสำหรับสินทรัพย์ดิจิทัลที่เกี่ยวข้องกับคำสั่งซื้อ " +"คลาส DigitalAssetDownload " +"ให้ความสามารถในการจัดการและเข้าถึงการดาวน์โหลดที่เกี่ยวข้องกับผลิตภัณฑ์ในคำสั่งซื้อ" +" มันเก็บข้อมูลเกี่ยวกับผลิตภัณฑ์ในคำสั่งซื้อที่เกี่ยวข้อง จำนวนการดาวน์โหลด " +"และว่าสินทรัพย์นั้นสามารถมองเห็นได้สาธารณะหรือไม่ รวมถึงวิธีการสร้าง URL " +"สำหรับการดาวน์โหลดสินทรัพย์เมื่อคำสั่งซื้อที่เกี่ยวข้องอยู่ในสถานะเสร็จสมบูรณ์" + +#: core/models.py:1736 msgid "download" msgstr "ดาวน์โหลด" -#: core/models.py:1875 +#: core/models.py:1737 msgid "downloads" msgstr "ดาวน์โหลด" -#: core/models.py:1883 +#: core/models.py:1745 msgid "you can not download a digital asset for a non-finished order" msgstr "" "คุณไม่สามารถดาวน์โหลดสินทรัพย์ดิจิทัลสำหรับคำสั่งซื้อที่ยังไม่เสร็จสมบูรณ์ได้" -#: core/models.py:1913 +#: core/models.py:1754 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." +msgstr "" +"จัดการข้อเสนอแนะของผู้ใช้สำหรับผลิตภัณฑ์ " +"คลาสนี้ถูกออกแบบมาเพื่อรวบรวมและจัดเก็บข้อมูลข้อเสนอแนะของผู้ใช้สำหรับผลิตภัณฑ์เฉพาะที่พวกเขาได้ซื้อ" +" ประกอบด้วยแอตทริบิวต์สำหรับจัดเก็บความคิดเห็นของผู้ใช้ " +"การอ้างอิงถึงผลิตภัณฑ์ที่เกี่ยวข้องในคำสั่งซื้อ และคะแนนที่ผู้ใช้กำหนด " +"คลาสนี้ใช้ฟิลด์ในฐานข้อมูลเพื่อสร้างแบบจำลองและจัดการข้อมูลข้อเสนอแนะอย่างมีประสิทธิภาพ" + +#: core/models.py:1766 msgid "user-provided comments about their experience with the product" msgstr "ความคิดเห็นที่ผู้ใช้ให้ไว้เกี่ยวกับประสบการณ์ของพวกเขาต่อผลิตภัณฑ์" -#: core/models.py:1914 +#: core/models.py:1767 msgid "feedback comments" msgstr "ความคิดเห็นจากผู้ตอบแบบสอบถาม" -#: core/models.py:1921 +#: core/models.py:1774 msgid "" "references the specific product in an order that this feedback is about" msgstr "อ้างอิงถึงผลิตภัณฑ์เฉพาะในคำสั่งซื้อที่ความคิดเห็นนี้เกี่ยวข้อง" -#: core/models.py:1922 +#: core/models.py:1775 msgid "related order product" msgstr "สินค้าที่เกี่ยวข้อง" -#: core/models.py:1927 +#: core/models.py:1780 msgid "user-assigned rating for the product" msgstr "คะแนนที่ผู้ใช้กำหนดให้กับผลิตภัณฑ์" -#: core/models.py:1928 +#: core/models.py:1781 msgid "product rating" msgstr "การให้คะแนนสินค้า" @@ -2511,17 +2645,17 @@ msgstr "ค่าหมดเวลาไม่ถูกต้อง ต้อ msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | ติดต่อเรา เริ่มต้น" -#: core/utils/emailing.py:64 +#: core/utils/emailing.py:74 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | ยืนยันการสั่งซื้อ" -#: core/utils/emailing.py:99 +#: core/utils/emailing.py:109 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | จัดส่งเรียบร้อย" -#: core/utils/emailing.py:187 +#: core/utils/emailing.py:197 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | รหัสโปรโมชั่นได้รับแล้ว" @@ -2543,15 +2677,15 @@ msgstr "ขนาดของภาพไม่ควรเกิน w{max_width msgid "invalid phone number format" msgstr "หมายเลขโทรศัพท์ไม่ถูกต้อง" -#: core/views.py:481 +#: core/views.py:489 msgid "you can only download the digital asset once" msgstr "คุณสามารถดาวน์โหลดสินทรัพย์ดิจิทัลได้เพียงครั้งเดียวเท่านั้น" -#: core/views.py:539 +#: core/views.py:547 msgid "favicon not found" msgstr "ไม่พบไอคอนเว็บไซต์" -#: core/viewsets.py:1319 +#: core/viewsets.py:1357 #, python-brace-format msgid "Geocoding error: {e}" msgstr "ข้อผิดพลาดในการแปลงพิกัดภูมิศาสตร์: {e}" diff --git a/core/locale/tr_TR/LC_MESSAGES/django.mo b/core/locale/tr_TR/LC_MESSAGES/django.mo index 6e387d4ce656b8260189d202049055c3bf9890d9..204ac6e746d76cdb442d7eda93483b02339a8f3a 100644 GIT binary patch delta 20737 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 aLr8a(_$w>kJn4pOuYb9uq4LJH2mBwjqC~;~ delta 12614 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 R`e&9nc+)R4@bK0a{|DK^WJ~}6 diff --git a/core/locale/tr_TR/LC_MESSAGES/django.po b/core/locale/tr_TR/LC_MESSAGES/django.po index b5afacfa..a7974b00 100644 --- a/core/locale/tr_TR/LC_MESSAGES/django.po +++ b/core/locale/tr_TR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:52+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -90,11 +90,11 @@ msgid "selected items have been deactivated." msgstr "Seçilen öğeler devre dışı bırakıldı!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:712 core/models.py:720 +#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 msgid "attribute value" msgstr "Öznitelik Değeri" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:721 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 msgid "attribute values" msgstr "Öznitelik Değerleri" @@ -106,7 +106,7 @@ msgstr "Resim" msgid "images" msgstr "Görüntüler" -#: core/admin.py:155 core/models.py:457 +#: core/admin.py:155 core/models.py:445 msgid "stock" msgstr "Stok" @@ -114,11 +114,11 @@ msgstr "Stok" msgid "stocks" msgstr "Stoklar" -#: core/admin.py:166 core/models.py:1735 +#: core/admin.py:166 core/models.py:1609 msgid "order product" msgstr "Ürün Siparişi" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1736 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 msgid "order products" msgstr "Sipariş Ürünleri" @@ -331,7 +331,7 @@ msgstr "" "Mevcut bir kategorinin bazı alanlarını düzenlenemez olarak kaydederek " "yeniden yazın" -#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:553 +#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:487 #: core/graphene/object_types.py:117 core/graphene/object_types.py:207 #: core/graphene/object_types.py:509 msgid "SEO Meta snapshot" @@ -607,47 +607,7 @@ msgstr "Tüm ürünleri listele (basit görünüm)" msgid "(exact) Product UUID" msgstr "(tam) Ürün UUID'si" -#: core/docs/drf/viewsets.py:384 -msgid "(icontains) Product name" -msgstr "(icontains) Ürün adı" - -#: core/docs/drf/viewsets.py:390 -msgid "(list) Category names, case-insensitive" -msgstr "(liste) Kategori adları, büyük/küçük harfe duyarlı olmayan" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Category UUID" -msgstr "(tam) Kategori UUID'si" - -#: core/docs/drf/viewsets.py:402 -msgid "(list) Tag names, case-insensitive" -msgstr "(liste) Etiket adları, büyük/küçük harfe duyarlı olmayan" - -#: core/docs/drf/viewsets.py:408 -msgid "(gte) Minimum stock price" -msgstr "(gte) Minimum hisse senedi fiyatı" - -#: core/docs/drf/viewsets.py:414 -msgid "(lte) Maximum stock price" -msgstr "(lte) Maksimum hisse senedi fiyatı" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Only active products" -msgstr "(tam) Sadece aktif ürünler" - -#: core/docs/drf/viewsets.py:426 -msgid "(iexact) Brand name" -msgstr "(iexact) Marka adı" - -#: core/docs/drf/viewsets.py:438 -msgid "(gt) Minimum stock quantity" -msgstr "(gt) Minimum stok miktarı" - -#: core/docs/drf/viewsets.py:444 -msgid "(exact) Digital vs. physical" -msgstr "(tam olarak) Dijital vs fiziksel" - -#: core/docs/drf/viewsets.py:451 +#: core/docs/drf/viewsets.py:385 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -655,250 +615,254 @@ 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:465 core/docs/drf/viewsets.py:466 +#: core/docs/drf/viewsets.py:399 core/docs/drf/viewsets.py:400 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:471 core/docs/drf/viewsets.py:495 -#: core/docs/drf/viewsets.py:511 core/docs/drf/viewsets.py:527 -#: core/docs/drf/viewsets.py:543 core/docs/drf/viewsets.py:559 +#: core/docs/drf/viewsets.py:405 core/docs/drf/viewsets.py:429 +#: core/docs/drf/viewsets.py:445 core/docs/drf/viewsets.py:461 +#: core/docs/drf/viewsets.py:477 core/docs/drf/viewsets.py:493 msgid "Product UUID or slug" msgstr "Ürün UUID'si veya Slug" -#: core/docs/drf/viewsets.py:481 core/docs/drf/viewsets.py:482 +#: core/docs/drf/viewsets.py:415 core/docs/drf/viewsets.py:416 msgid "create a product" msgstr "Bir ürün oluşturun" -#: core/docs/drf/viewsets.py:489 core/docs/drf/viewsets.py:490 +#: core/docs/drf/viewsets.py:423 core/docs/drf/viewsets.py:424 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:505 core/docs/drf/viewsets.py:506 +#: core/docs/drf/viewsets.py:439 core/docs/drf/viewsets.py:440 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:521 core/docs/drf/viewsets.py:522 +#: core/docs/drf/viewsets.py:455 core/docs/drf/viewsets.py:456 msgid "delete a product" msgstr "Ürün silme" -#: core/docs/drf/viewsets.py:537 core/docs/drf/viewsets.py:538 +#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:472 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:554 +#: core/docs/drf/viewsets.py:488 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:572 +#: core/docs/drf/viewsets.py:506 msgid "list all addresses" msgstr "Tüm adresleri listeleyin" -#: core/docs/drf/viewsets.py:579 +#: core/docs/drf/viewsets.py:513 msgid "retrieve a single address" msgstr "Tek bir adres alma" -#: core/docs/drf/viewsets.py:586 +#: core/docs/drf/viewsets.py:520 msgid "create a new address" msgstr "Yeni bir adres oluşturun" -#: core/docs/drf/viewsets.py:594 +#: core/docs/drf/viewsets.py:528 msgid "delete an address" msgstr "Adres silme" -#: core/docs/drf/viewsets.py:601 +#: core/docs/drf/viewsets.py:535 msgid "update an entire address" msgstr "Adresin tamamını güncelleme" -#: core/docs/drf/viewsets.py:609 +#: core/docs/drf/viewsets.py:543 msgid "partially update an address" msgstr "Bir adresi kısmen güncelleme" -#: core/docs/drf/viewsets.py:617 +#: core/docs/drf/viewsets.py:551 msgid "autocomplete address suggestions" msgstr "Otomatik tamamlanan adres girişi" -#: core/docs/drf/viewsets.py:622 +#: core/docs/drf/viewsets.py:556 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:628 +#: core/docs/drf/viewsets.py:562 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:641 +#: core/docs/drf/viewsets.py:575 msgid "list all feedbacks (simple view)" msgstr "tüm geri bildirimleri listele (basit görünüm)" -#: core/docs/drf/viewsets.py:645 +#: core/docs/drf/viewsets.py:579 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:649 +#: core/docs/drf/viewsets.py:583 msgid "create a feedback" msgstr "bir geri bildirim oluşturun" -#: core/docs/drf/viewsets.py:653 +#: core/docs/drf/viewsets.py:587 msgid "delete a feedback" msgstr "bir geri bildirimi silme" -#: core/docs/drf/viewsets.py:657 +#: core/docs/drf/viewsets.py:591 msgid "rewrite an existing feedback saving non-editables" msgstr "düzenlenemeyenleri kaydederek mevcut bir geri bildirimi yeniden yazın" -#: core/docs/drf/viewsets.py:661 +#: core/docs/drf/viewsets.py:595 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:668 +#: core/docs/drf/viewsets.py:602 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:675 +#: core/docs/drf/viewsets.py:609 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:682 +#: core/docs/drf/viewsets.py:616 msgid "create a new order–product relation" msgstr "yeni bir sipariş-ürün ilişkisi oluşturun" -#: core/docs/drf/viewsets.py:689 +#: core/docs/drf/viewsets.py:623 msgid "replace an existing order–product relation" msgstr "mevcut bir sipariş-ürün ilişkisini değiştirir" -#: core/docs/drf/viewsets.py:696 +#: core/docs/drf/viewsets.py:630 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:703 +#: core/docs/drf/viewsets.py:637 msgid "delete an order–product relation" msgstr "sipariş-ürün ilişkisini silme" -#: core/docs/drf/viewsets.py:710 +#: core/docs/drf/viewsets.py:644 msgid "add or remove feedback on an order–product relation" msgstr "sipariş-ürün ilişkisine geri bildirim ekleme veya kaldırma" -#: core/elasticsearch/__init__.py:105 +#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 msgid "no search term provided." msgstr "Arama terimi belirtilmemiştir." -#: core/filters.py:64 core/filters.py:594 core/filters.py:623 +#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +msgid "Search" +msgstr "Arama" + +#: core/filters.py:66 core/filters.py:554 core/filters.py:583 msgid "UUID" msgstr "UUID" -#: core/filters.py:65 core/filters.py:429 core/filters.py:560 +#: core/filters.py:67 core/filters.py:399 core/filters.py:526 msgid "Name" msgstr "İsim" -#: core/filters.py:66 core/filters.py:562 +#: core/filters.py:68 core/filters.py:528 msgid "Categories" msgstr "Kategoriler" -#: core/filters.py:68 +#: core/filters.py:70 msgid "Categories Slugs" msgstr "Kategoriler Sümüklüböcekler" -#: core/filters.py:69 core/filters.py:437 +#: core/filters.py:71 core/filters.py:407 msgid "Tags" msgstr "Etiketler" -#: core/filters.py:70 +#: core/filters.py:72 msgid "Min Price" msgstr "Min Fiyat" -#: core/filters.py:71 +#: core/filters.py:73 msgid "Max Price" msgstr "Maksimum Fiyat" -#: core/filters.py:72 +#: core/filters.py:74 msgid "Is Active" msgstr "Aktif mi" -#: core/filters.py:73 +#: core/filters.py:75 msgid "Brand" msgstr "Marka" -#: core/filters.py:74 +#: core/filters.py:76 msgid "Attributes" msgstr "Nitelikler" -#: core/filters.py:75 +#: core/filters.py:77 msgid "Quantity" msgstr "Miktar" -#: core/filters.py:76 core/filters.py:431 core/filters.py:561 -#: core/models.py:287 core/models.py:381 core/models.py:534 +#: core/filters.py:78 core/filters.py:401 core/filters.py:527 +#: core/models.py:287 core/models.py:369 core/models.py:522 msgid "Slug" msgstr "Sümüklüböcek" -#: core/filters.py:77 +#: core/filters.py:79 msgid "Is Digital" msgstr "Dijital mi" -#: core/filters.py:78 +#: core/filters.py:80 msgid "Include sub-categories" msgstr "Alt kategorileri dahil edin" -#: core/filters.py:81 +#: core/filters.py:83 msgid "Include personal ordered" msgstr "Kişisel sipariş edilen ürünleri dahil edin" -#: core/filters.py:83 core/models.py:538 +#: core/filters.py:85 core/models.py:526 msgid "SKU" msgstr "SKU" -#: core/filters.py:166 +#: core/filters.py:161 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:356 +#: core/filters.py:324 msgid "Search (ID, product name or part number)" msgstr "Arama (ID, ürün adı veya parça numarası)" -#: core/filters.py:359 +#: core/filters.py:327 msgid "Bought after (inclusive)" msgstr "Sonra satın alındı (dahil)" -#: core/filters.py:360 +#: core/filters.py:328 msgid "Bought before (inclusive)" msgstr "Daha önce satın alındı (dahil)" -#: core/filters.py:363 core/filters.py:410 core/filters.py:625 +#: core/filters.py:331 core/filters.py:378 core/filters.py:585 msgid "User email" msgstr "Kullanıcı e-postası" -#: core/filters.py:364 core/filters.py:411 core/filters.py:603 -#: core/filters.py:624 +#: core/filters.py:332 core/filters.py:379 core/filters.py:563 +#: core/filters.py:584 msgid "User UUID" msgstr "Kullanıcı UUID'si" -#: core/filters.py:365 +#: core/filters.py:333 msgid "Status" msgstr "Durum" -#: core/filters.py:369 +#: core/filters.py:337 msgid "Human Readable ID" msgstr "İnsan Tarafından Okunabilir Kimlik" -#: core/filters.py:430 +#: core/filters.py:400 msgid "Parent" msgstr "Ebeveyn" -#: core/filters.py:434 +#: core/filters.py:404 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:438 +#: core/filters.py:408 msgid "Level" msgstr "Seviye" -#: core/filters.py:598 +#: core/filters.py:558 msgid "Product UUID" msgstr "Ürün UUID'si" @@ -955,7 +919,7 @@ msgstr "" " dışlayan bilgiler!" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:821 +#: core/graphene/mutations.py:527 core/viewsets.py:839 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "order.buy() metodundan yanlış tip geldi: {type(instance)!s}" @@ -1018,37 +982,37 @@ msgstr "" msgid "add or delete a feedback for orderproduct" msgstr "Orderproduct için bir geri bildirim ekleme veya silme" -#: core/graphene/mutations.py:555 +#: core/graphene/mutations.py:556 msgid "action must be either `add` or `remove`" msgstr "Eylem ya `ekle` ya da `kaldır` olmalıdır!" -#: core/graphene/mutations.py:558 +#: core/graphene/mutations.py:559 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderproduct {order_product_uuid} bulunamadı!" -#: core/graphene/mutations.py:621 +#: core/graphene/mutations.py:622 msgid "original address string provided by the user" msgstr "Kullanıcı tarafından sağlanan orijinal adres dizesi" -#: core/graphene/mutations.py:655 core/models.py:896 core/models.py:909 -#: core/models.py:1348 core/models.py:1377 core/models.py:1402 -#: core/viewsets.py:824 +#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 +#: core/models.py:1234 core/models.py:1263 core/models.py:1288 +#: core/viewsets.py:842 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} mevcut değil: {uuid}!" -#: core/graphene/mutations.py:668 +#: core/graphene/mutations.py:669 msgid "limit must be between 1 and 10" msgstr "Limit 1 ile 10 arasında olmalıdır" -#: core/graphene/mutations.py:713 +#: core/graphene/mutations.py:714 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - bir cazibe gibi çalışır" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:666 core/models.py:1234 -#: core/models.py:1809 +#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 +#: core/models.py:1686 msgid "attributes" msgstr "Nitelikler" @@ -1061,11 +1025,11 @@ msgid "groups of attributes" msgstr "Nitelik grupları" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:620 +#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:612 msgid "categories" msgstr "Kategoriler" -#: core/graphene/object_types.py:124 core/models.py:395 +#: core/graphene/object_types.py:124 core/models.py:383 msgid "brands" msgstr "Markalar" @@ -1121,7 +1085,7 @@ msgid "represents feedback from a user." msgstr "Bir kullanıcıdan gelen geri bildirimi temsil eder." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1228 +#: core/models.py:1110 msgid "notifications" msgstr "Bildirimler" @@ -1129,7 +1093,7 @@ msgstr "Bildirimler" 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:400 core/models.py:1938 +#: core/graphene/object_types.py:400 core/models.py:1791 msgid "feedback" msgstr "Geri bildirim" @@ -1137,7 +1101,7 @@ msgstr "Geri bildirim" msgid "a list of order products in this order" msgstr "Bu siparişteki sipariş ürünlerinin bir listesi" -#: core/graphene/object_types.py:436 core/models.py:1198 +#: core/graphene/object_types.py:436 core/models.py:1080 msgid "billing address" msgstr "Fatura adresi" @@ -1165,7 +1129,7 @@ msgstr "Siparişteki tüm ürünler dijital mi" msgid "transactions for this order" msgstr "Bu sipariş için işlemler" -#: core/graphene/object_types.py:465 core/models.py:1262 +#: core/graphene/object_types.py:465 core/models.py:1144 msgid "orders" msgstr "Siparişler" @@ -1177,15 +1141,15 @@ msgstr "Resim URL'si" msgid "product's images" msgstr "Ürün görselleri" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:477 +#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 msgid "category" msgstr "Kategori" -#: core/graphene/object_types.py:502 core/models.py:1939 +#: core/graphene/object_types.py:502 core/models.py:1792 msgid "feedbacks" msgstr "Geri Bildirimler" -#: core/graphene/object_types.py:503 core/models.py:394 core/models.py:486 +#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 msgid "brand" msgstr "Marka" @@ -1217,7 +1181,7 @@ msgstr "Geri bildirim sayısı" msgid "only available for personal orders" msgstr "Ürünler sadece kişisel siparişler için mevcuttur" -#: core/graphene/object_types.py:534 core/models.py:548 +#: core/graphene/object_types.py:534 core/models.py:536 msgid "products" msgstr "Ürünler" @@ -1229,7 +1193,7 @@ msgstr "Promosyon Kodları" msgid "products on sale" msgstr "Satıştaki ürünler" -#: core/graphene/object_types.py:651 core/models.py:843 +#: core/graphene/object_types.py:651 core/models.py:784 msgid "promotions" msgstr "Promosyonlar" @@ -1237,7 +1201,7 @@ msgstr "Promosyonlar" msgid "vendor" msgstr "Satıcı" -#: core/graphene/object_types.py:656 core/models.py:547 +#: core/graphene/object_types.py:656 core/models.py:535 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1245,11 +1209,11 @@ msgstr "Satıcı" msgid "product" msgstr "Ürün" -#: core/graphene/object_types.py:667 core/models.py:868 +#: core/graphene/object_types.py:667 core/models.py:807 msgid "wishlisted products" msgstr "İstek listesindeki ürünler" -#: core/graphene/object_types.py:673 core/models.py:885 +#: core/graphene/object_types.py:673 core/models.py:824 msgid "wishlists" msgstr "Dilek Listeleri" @@ -1257,7 +1221,7 @@ msgstr "Dilek Listeleri" msgid "tagged products" msgstr "Etiketlenmiş ürünler" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:492 +#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 msgid "product tags" msgstr "Ürün etiketleri" @@ -1367,7 +1331,7 @@ msgstr "Üst öznitelik grubu" msgid "attribute group's name" msgstr "Öznitelik grubunun adı" -#: core/models.py:100 core/models.py:628 +#: core/models.py:100 core/models.py:620 msgid "attribute group" msgstr "Öznitelik grubu" @@ -1531,51 +1495,65 @@ msgstr "Kategori açıklaması" msgid "tags that help describe or group this category" msgstr "bu kategoriyi tanımlamaya veya gruplandırmaya yardımcı olan etiketler" -#: core/models.py:299 core/models.py:387 +#: core/models.py:299 core/models.py:375 msgid "priority" msgstr "Öncelik" -#: core/models.py:340 +#: core/models.py:318 +msgid "" +"Represents a Brand object in the system. This class handles information and " +"attributes related to a brand, including its name, logos, description, " +"associated categories, a unique slug, and priority order. It allows for the " +"organization and representation of brand-related data within the " +"application." +msgstr "" +"Sistemdeki bir Marka nesnesini temsil eder. Bu sınıf, adı, logoları, " +"açıklaması, ilişkili kategorileri, benzersiz bir slug ve öncelik sırası " +"dahil olmak üzere bir markayla ilgili bilgileri ve öznitelikleri işler. " +"Uygulama içinde markayla ilgili verilerin düzenlenmesini ve temsil " +"edilmesini sağlar." + +#: core/models.py:328 msgid "name of this brand" msgstr "Bu markanın adı" -#: core/models.py:341 +#: core/models.py:329 msgid "brand name" msgstr "Marka adı" -#: core/models.py:348 +#: core/models.py:336 msgid "upload a logo representing this brand" msgstr "Bu markayı temsil eden bir logo yükleyin" -#: core/models.py:350 +#: core/models.py:338 msgid "brand small image" msgstr "Marka küçük imajı" -#: core/models.py:356 +#: core/models.py:344 msgid "upload a big logo representing this brand" msgstr "Bu markayı temsil eden büyük bir logo yükleyin" -#: core/models.py:358 +#: core/models.py:346 msgid "brand big image" msgstr "Marka büyük imaj" -#: core/models.py:363 +#: core/models.py:351 msgid "add a detailed description of the brand" msgstr "Markanın ayrıntılı bir açıklamasını ekleyin" -#: core/models.py:364 +#: core/models.py:352 msgid "brand description" msgstr "Marka açıklaması" -#: core/models.py:369 +#: core/models.py:357 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:370 +#: core/models.py:358 msgid "associated categories" msgstr "Kategoriler" -#: core/models.py:400 +#: core/models.py:388 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1591,68 +1569,68 @@ msgstr "" " ürünlerin izlenmesine ve değerlendirilmesine olanak sağlamak için envanter " "yönetim sisteminin bir parçasıdır." -#: core/models.py:412 +#: core/models.py:400 msgid "the vendor supplying this product stock" msgstr "Bu ürün stokunu tedarik eden satıcı" -#: core/models.py:413 +#: core/models.py:401 msgid "associated vendor" msgstr "İlişkili satıcı" -#: core/models.py:417 +#: core/models.py:405 msgid "final price to the customer after markups" msgstr "Fiyat artışlarından sonra müşteriye verilen nihai fiyat" -#: core/models.py:418 +#: core/models.py:406 msgid "selling price" msgstr "Satış fiyatı" -#: core/models.py:423 +#: core/models.py:411 msgid "the product associated with this stock entry" msgstr "Bu stok girişi ile ilişkili ürün" -#: core/models.py:424 core/models.py:708 core/models.py:765 -#: core/models.py:1709 +#: core/models.py:412 core/models.py:683 core/models.py:730 +#: core/models.py:1583 msgid "associated product" msgstr "İlişkili ürün" -#: core/models.py:431 +#: core/models.py:419 msgid "the price paid to the vendor for this product" msgstr "Bu ürün için satıcıya ödenen fiyat" -#: core/models.py:432 +#: core/models.py:420 msgid "vendor purchase price" msgstr "Satıcı satın alma fiyatı" -#: core/models.py:436 +#: core/models.py:424 msgid "available quantity of the product in stock" msgstr "Stoktaki mevcut ürün miktarı" -#: core/models.py:437 +#: core/models.py:425 msgid "quantity in stock" msgstr "Stoktaki miktar" -#: core/models.py:441 +#: core/models.py:429 msgid "vendor-assigned SKU for identifying the product" msgstr "Ürünü tanımlamak için satıcı tarafından atanan SKU" -#: core/models.py:442 +#: core/models.py:430 msgid "vendor sku" msgstr "Satıcının SKU'su" -#: core/models.py:448 +#: core/models.py:436 msgid "digital file associated with this stock if applicable" msgstr "Varsa bu stokla ilişkili dijital dosya" -#: core/models.py:449 +#: core/models.py:437 msgid "digital file" msgstr "Dijital dosya" -#: core/models.py:458 +#: core/models.py:446 msgid "stock entries" msgstr "Stok girişleri" -#: core/models.py:463 +#: core/models.py:451 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1673,55 +1651,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:476 +#: core/models.py:464 msgid "category this product belongs to" msgstr "Bu ürünün ait olduğu kategori" -#: core/models.py:485 +#: core/models.py:473 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:491 +#: core/models.py:479 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:496 +#: core/models.py:484 msgid "indicates whether this product is digitally delivered" msgstr "Bu ürünün dijital olarak teslim edilip edilmediğini belirtir" -#: core/models.py:497 +#: core/models.py:485 msgid "is product digital" msgstr "Ürün dijital mi" -#: core/models.py:503 +#: core/models.py:491 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:504 +#: core/models.py:492 msgid "product name" msgstr "Ürün adı" -#: core/models.py:509 core/models.py:831 +#: core/models.py:497 core/models.py:772 msgid "add a detailed description of the product" msgstr "Ürünün ayrıntılı bir açıklamasını ekleyin" -#: core/models.py:510 +#: core/models.py:498 msgid "product description" msgstr "Ürün Açıklaması" -#: core/models.py:517 +#: core/models.py:505 msgid "part number for this product" msgstr "Bu ürün için parça numarası" -#: core/models.py:518 +#: core/models.py:506 msgid "part number" msgstr "Parça numarası" -#: core/models.py:537 +#: core/models.py:525 msgid "stock keeping unit for this product" msgstr "Bu ürün için Stok Tutma Birimi" -#: core/models.py:607 +#: core/models.py:599 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 " @@ -1737,292 +1715,397 @@ 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:619 +#: core/models.py:611 msgid "category of this attribute" msgstr "Bu niteliğin kategorisi" -#: core/models.py:627 +#: core/models.py:619 msgid "group of this attribute" msgstr "Bu niteliğin grubu" -#: core/models.py:633 +#: core/models.py:625 msgid "string" msgstr "String" -#: core/models.py:634 +#: core/models.py:626 msgid "integer" msgstr "Tamsayı" -#: core/models.py:635 +#: core/models.py:627 msgid "float" msgstr "Yüzer" -#: core/models.py:636 +#: core/models.py:628 msgid "boolean" msgstr "Boolean" -#: core/models.py:637 +#: core/models.py:629 msgid "array" msgstr "Dizi" -#: core/models.py:638 +#: core/models.py:630 msgid "object" msgstr "Nesne" -#: core/models.py:640 +#: core/models.py:632 msgid "type of the attribute's value" msgstr "Özniteliğin değerinin türü" -#: core/models.py:641 +#: core/models.py:633 msgid "value type" msgstr "Değer türü" -#: core/models.py:646 +#: core/models.py:638 msgid "name of this attribute" msgstr "Bu niteliğin adı" -#: core/models.py:647 +#: core/models.py:639 msgid "attribute's name" msgstr "Özniteliğin adı" -#: core/models.py:653 +#: core/models.py:645 msgid "is filterable" msgstr "filtrelenebilir" -#: core/models.py:654 +#: core/models.py:646 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:665 core/models.py:700 +#: core/models.py:657 core/models.py:675 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Öznitelik" -#: core/models.py:699 +#: core/models.py:663 +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 "" +"Bir ürünle bağlantılı bir nitelik için belirli bir değeri temsil eder. " +"'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:674 msgid "attribute of this value" msgstr "Bu değerin niteliği" -#: core/models.py:707 +#: core/models.py:682 msgid "the specific product associated with this attribute's value" msgstr "Bu özniteliğin değeriyle ilişkili belirli ürün" -#: core/models.py:713 +#: core/models.py:688 msgid "the specific value for this attribute" msgstr "Bu öznitelik için özel değer" -#: core/models.py:747 +#: core/models.py:701 +msgid "" +"Represents a product image associated with a product in the system. This " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " +"determining their display order. It also includes an accessibility feature " +"with alternative text for the images." +msgstr "" +"Sistemdeki bir ürünle ilişkilendirilmiş bir ürün resmini temsil eder. Bu " +"sınıf, görüntü dosyalarını yükleme, bunları belirli ürünlerle ilişkilendirme" +" ve görüntüleme sıralarını belirleme işlevleri dahil olmak üzere ürün " +"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:712 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:748 +#: core/models.py:713 msgid "image alt text" msgstr "Resim alt metni" -#: core/models.py:751 +#: core/models.py:716 msgid "upload the image file for this product" msgstr "Bu ürün için resim dosyasını yükleyin" -#: core/models.py:752 core/models.py:777 +#: core/models.py:717 core/models.py:742 msgid "product image" msgstr "Ürün görseli" -#: core/models.py:758 +#: core/models.py:723 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:759 +#: core/models.py:724 msgid "display priority" msgstr "Ekran önceliği" -#: core/models.py:764 +#: core/models.py:729 msgid "the product that this image represents" msgstr "Bu görselin temsil ettiği ürün" -#: core/models.py:778 +#: core/models.py:743 msgid "product images" msgstr "Ürün görselleri" -#: core/models.py:819 +#: core/models.py:748 +msgid "" +"Represents a promotional campaign for products with a discount. This class " +"is used to define and manage promotional campaigns that offer a percentage-" +"based discount for products. The class includes attributes for setting the " +"discount rate, providing details about the promotion, and linking it to the " +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." +msgstr "" +"İndirimli ürünler için bir promosyon kampanyasını temsil eder. Bu sınıf, " +"ürünler için yüzdeye dayalı bir indirim sunan promosyon kampanyalarını " +"tanımlamak ve yönetmek için kullanılır. Sınıf, indirim oranını ayarlamak, " +"promosyon hakkında ayrıntılar sağlamak ve ilgili ürünlere bağlamak için " +"öznitelikler içerir. Kampanyadaki etkilenen ürünleri belirlemek için ürün " +"kataloğu ile entegre olur." + +#: core/models.py:760 msgid "percentage discount for the selected products" msgstr "Seçilen ürünler için yüzde indirim" -#: core/models.py:820 +#: core/models.py:761 msgid "discount percentage" msgstr "İndirim yüzdesi" -#: core/models.py:825 +#: core/models.py:766 msgid "provide a unique name for this promotion" msgstr "Bu promosyon için benzersiz bir ad girin" -#: core/models.py:826 +#: core/models.py:767 msgid "promotion name" msgstr "Promosyon adı" -#: core/models.py:832 +#: core/models.py:773 msgid "promotion description" msgstr "Promosyon açıklaması" -#: core/models.py:837 +#: core/models.py:778 msgid "select which products are included in this promotion" msgstr "Bu promosyona hangi ürünlerin dahil olduğunu seçin" -#: core/models.py:838 +#: core/models.py:779 msgid "included products" msgstr "Dahil olan ürünler" -#: core/models.py:842 +#: core/models.py:783 msgid "promotion" msgstr "Promosyon" -#: core/models.py:867 +#: core/models.py:794 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"class provides functionality to manage a collection of products, supporting " +"operations such as adding and removing products, as well as supporting " +"operations for adding and removing multiple products at once." +msgstr "" +"İstenen ürünleri depolamak ve yönetmek için bir kullanıcının istek listesini" +" temsil eder. Sınıf, bir ürün koleksiyonunu yönetmek için işlevsellik " +"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:806 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:875 +#: core/models.py:814 msgid "user who owns this wishlist" msgstr "Bu istek listesine sahip olan kullanıcı" -#: core/models.py:876 +#: core/models.py:815 msgid "wishlist owner" msgstr "Dilek Listesi Sahibi" -#: core/models.py:884 +#: core/models.py:823 msgid "wishlist" msgstr "İstek Listesi" -#: core/models.py:951 +#: core/models.py:865 +msgid "" +"Represents a documentary record tied to a product. This class is used to " +"store information about documentaries related to specific products, " +"including file uploads and their metadata. It contains methods and " +"properties to handle the file type and storage path for the documentary " +"files. It extends functionality from specific mixins and provides additional" +" custom features." +msgstr "" +"Bir ürüne bağlı bir belgesel kaydını temsil eder. Bu sınıf, dosya " +"yüklemeleri ve meta verileri dahil olmak üzere belirli ürünlerle ilgili " +"belgeseller hakkında bilgi depolamak için kullanılır. Belgesel dosyalarının " +"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:878 msgid "documentary" msgstr "Belgesel" -#: core/models.py:952 +#: core/models.py:879 msgid "documentaries" msgstr "Belgeseller" -#: core/models.py:962 +#: core/models.py:889 msgid "unresolved" msgstr "Çözümlenmemiş" -#: core/models.py:1008 +#: core/models.py:894 +msgid "" +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." +msgstr "" +"Konum ayrıntılarını ve bir kullanıcıyla ilişkileri içeren bir adres " +"varlığını temsil eder. Coğrafi ve adres verilerinin depolanmasının yanı sıra" +" coğrafi kodlama hizmetleriyle entegrasyon için işlevsellik sağlar. Bu " +"sınıf, sokak, şehir, bölge, ülke ve coğrafi konum (enlem ve boylam) gibi " +"bileşenleri içeren ayrıntılı adres bilgilerini depolamak için " +"tasarlanmıştır. Coğrafi kodlama API'leri ile entegrasyonu destekler ve daha " +"fazla işleme veya inceleme için ham API yanıtlarının depolanmasını sağlar. " +"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:909 msgid "address line for the customer" msgstr "Müşteri için adres satırı" -#: core/models.py:1009 +#: core/models.py:910 msgid "address line" msgstr "Adres hattı" -#: core/models.py:1011 +#: core/models.py:912 msgid "street" msgstr "Sokak" -#: core/models.py:1012 +#: core/models.py:913 msgid "district" msgstr "Bölge" -#: core/models.py:1013 +#: core/models.py:914 msgid "city" msgstr "Şehir" -#: core/models.py:1014 +#: core/models.py:915 msgid "region" msgstr "Bölge" -#: core/models.py:1015 +#: core/models.py:916 msgid "postal code" msgstr "Posta kodu" -#: core/models.py:1016 +#: core/models.py:917 msgid "country" msgstr "Ülke" -#: core/models.py:1023 +#: core/models.py:924 msgid "geolocation point: (longitude, latitude)" msgstr "Coğrafi Konum Noktası(Boylam, Enlem)" -#: core/models.py:1026 +#: core/models.py:927 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:1031 +#: core/models.py:932 msgid "stored JSON response from the geocoding service" msgstr "Coğrafi kodlama hizmetinden depolanan JSON yanıtı" -#: core/models.py:1039 +#: core/models.py:940 msgid "address" msgstr "Adres" -#: core/models.py:1040 +#: core/models.py:941 msgid "addresses" msgstr "Adresler" -#: core/models.py:1085 +#: core/models.py:953 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" +"İndirimler için kullanılabilen, geçerliliğini, indirim türünü ve " +"uygulamasını yöneten bir promosyon kodunu temsil eder. PromoCode sınıfı, " +"benzersiz tanımlayıcısı, indirim özellikleri (tutar veya yüzde), geçerlilik " +"süresi, ilişkili kullanıcı (varsa) ve kullanım durumu dahil olmak üzere bir " +"promosyon kodu hakkındaki ayrıntıları saklar. Kısıtlamaların " +"karşılandığından emin olurken promosyon kodunu doğrulamak ve siparişe " +"uygulamak için işlevsellik içerir." + +#: core/models.py:967 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:1086 +#: core/models.py:968 msgid "promo code identifier" msgstr "Promosyon kodu tanımlayıcı" -#: core/models.py:1093 +#: core/models.py:975 msgid "fixed discount amount applied if percent is not used" msgstr "Yüzde kullanılmazsa uygulanan sabit indirim tutarı" -#: core/models.py:1094 +#: core/models.py:976 msgid "fixed discount amount" msgstr "Sabit iskonto tutarı" -#: core/models.py:1100 +#: core/models.py:982 msgid "percentage discount applied if fixed amount is not used" msgstr "Sabit tutar kullanılmazsa uygulanan yüzde indirimi" -#: core/models.py:1101 +#: core/models.py:983 msgid "percentage discount" msgstr "Yüzde indirim" -#: core/models.py:1106 +#: core/models.py:988 msgid "timestamp when the promocode expires" msgstr "Promosyon kodunun sona erdiği zaman damgası" -#: core/models.py:1107 +#: core/models.py:989 msgid "end validity time" msgstr "Geçerlilik süresi sonu" -#: core/models.py:1112 +#: core/models.py:994 msgid "timestamp from which this promocode is valid" msgstr "Bu promosyon kodunun geçerli olduğu zaman damgası" -#: core/models.py:1113 +#: core/models.py:995 msgid "start validity time" msgstr "Geçerlilik süresini başlat" -#: core/models.py:1118 +#: core/models.py:1000 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:1119 +#: core/models.py:1001 msgid "usage timestamp" msgstr "Kullanım zaman damgası" -#: core/models.py:1124 +#: core/models.py:1006 msgid "user assigned to this promocode if applicable" msgstr "Varsa bu promosyon koduna atanan kullanıcı" -#: core/models.py:1125 +#: core/models.py:1007 msgid "assigned user" msgstr "Atanmış kullanıcı" -#: core/models.py:1132 +#: core/models.py:1014 msgid "promo code" msgstr "Promosyon kodu" -#: core/models.py:1133 +#: core/models.py:1015 msgid "promo codes" msgstr "Promosyon kodları" -#: core/models.py:1140 +#: core/models.py:1022 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2030,16 +2113,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:1155 +#: core/models.py:1037 msgid "promocode already used" msgstr "Promosyon kodu zaten kullanılmış" -#: core/models.py:1171 +#: core/models.py:1053 #, 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:1180 +#: core/models.py:1062 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 " @@ -2056,136 +2139,136 @@ msgstr "" "güncellenebilir. Aynı şekilde işlevsellik, sipariş yaşam döngüsündeki " "ürünlerin yönetilmesini de destekler." -#: core/models.py:1197 +#: core/models.py:1079 msgid "the billing address used for this order" msgstr "Bu sipariş için kullanılan fatura adresi" -#: core/models.py:1205 +#: core/models.py:1087 msgid "optional promo code applied to this order" msgstr "Bu siparişe isteğe bağlı promosyon kodu uygulanır" -#: core/models.py:1206 +#: core/models.py:1088 msgid "applied promo code" msgstr "Uygulanan promosyon kodu" -#: core/models.py:1214 +#: core/models.py:1096 msgid "the shipping address used for this order" msgstr "Bu sipariş için kullanılan gönderim adresi" -#: core/models.py:1215 +#: core/models.py:1097 msgid "shipping address" msgstr "Nakliye adresi" -#: core/models.py:1221 +#: core/models.py:1103 msgid "current status of the order in its lifecycle" msgstr "Siparişin yaşam döngüsündeki mevcut durumu" -#: core/models.py:1222 +#: core/models.py:1104 msgid "order status" msgstr "Sipariş durumu" -#: core/models.py:1227 core/models.py:1686 +#: core/models.py:1109 core/models.py:1560 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:1233 +#: core/models.py:1115 msgid "json representation of order attributes for this order" msgstr "Bu sipariş için sipariş özniteliklerinin JSON gösterimi" -#: core/models.py:1239 +#: core/models.py:1121 msgid "the user who placed the order" msgstr "Siparişi veren kullanıcı" -#: core/models.py:1240 +#: core/models.py:1122 msgid "user" msgstr "Kullanıcı" -#: core/models.py:1246 +#: core/models.py:1128 msgid "the timestamp when the order was finalized" msgstr "Siparişin sonlandırıldığı zaman damgası" -#: core/models.py:1247 +#: core/models.py:1129 msgid "buy time" msgstr "Zaman satın alın" -#: core/models.py:1254 +#: core/models.py:1136 msgid "a human-readable identifier for the order" msgstr "Sipariş için insan tarafından okunabilir bir tanımlayıcı" -#: core/models.py:1255 +#: core/models.py:1137 msgid "human readable id" msgstr "insan tarafından okunabilir kimlik" -#: core/models.py:1261 +#: core/models.py:1143 msgid "order" msgstr "Sipariş" -#: core/models.py:1282 +#: core/models.py:1168 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:1316 +#: core/models.py:1202 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:1321 +#: core/models.py:1207 msgid "you cannot add inactive products to order" msgstr "Aktif olmayan ürünleri siparişe ekleyemezsiniz" -#: core/models.py:1338 +#: core/models.py:1224 msgid "you cannot add more products than available in stock" msgstr "Stokta mevcut olandan daha fazla ürün ekleyemezsiniz" -#: core/models.py:1360 core/models.py:1385 core/models.py:1393 +#: core/models.py:1246 core/models.py:1271 core/models.py:1279 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:1381 +#: core/models.py:1267 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} <{query}> sorgusu ile mevcut değil!" -#: core/models.py:1413 +#: core/models.py:1299 msgid "promocode does not exist" msgstr "Promosyon kodu mevcut değil" -#: core/models.py:1419 +#: core/models.py:1305 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:1438 +#: core/models.py:1324 msgid "address does not exist" msgstr "Adres mevcut değil" -#: core/models.py:1459 core/models.py:1528 +#: core/models.py:1345 core/models.py:1414 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:1462 core/models.py:1524 +#: core/models.py:1348 core/models.py:1410 msgid "invalid force value" msgstr "Geçersiz kuvvet değeri" -#: core/models.py:1468 core/models.py:1531 +#: core/models.py:1354 core/models.py:1417 msgid "you cannot purchase an empty order!" msgstr "Boş bir sipariş satın alamazsınız!" -#: core/models.py:1487 +#: core/models.py:1373 msgid "you cannot buy an order without a user" msgstr "Kullanıcı olmadan sipariş alamazsınız!" -#: core/models.py:1501 +#: core/models.py:1387 msgid "a user without a balance cannot buy with balance" msgstr "Bakiyesi olmayan bir kullanıcı bakiye ile satın alamaz!" -#: core/models.py:1506 +#: core/models.py:1392 msgid "insufficient funds to complete the order" msgstr "Siparişi tamamlamak için yeterli fon yok" -#: core/models.py:1540 +#: core/models.py:1426 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2193,151 +2276,204 @@ 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:1549 +#: core/models.py:1435 #, 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:1674 +#: core/models.py:1533 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" +"Siparişlerle ilişkili ürünleri ve bunların özniteliklerini temsil eder. " +"OrderProduct modeli, satın alma fiyatı, miktar, ürün öznitelikleri ve durum " +"gibi ayrıntılar dahil olmak üzere bir siparişin parçası olan bir ürün " +"hakkındaki bilgileri tutar. Kullanıcı ve yöneticiler için bildirimleri " +"yönetir ve ürün bakiyesini iade etme veya geri bildirim ekleme gibi " +"işlemleri gerçekleştirir. Bu model ayrıca toplam fiyatın hesaplanması veya " +"dijital ürünler için bir indirme URL'si oluşturulması gibi iş mantığını " +"destekleyen yöntemler ve özellikler sağlar. Model, Sipariş ve Ürün " +"modelleriyle entegre olur ve bunlara referans depolar." + +#: core/models.py:1548 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:1675 +#: core/models.py:1549 msgid "purchase price at order time" msgstr "Sipariş anındaki satın alma fiyatı" -#: core/models.py:1680 +#: core/models.py:1554 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:1681 +#: core/models.py:1555 msgid "internal comments" msgstr "Dahili yorumlar" -#: core/models.py:1687 +#: core/models.py:1561 msgid "user notifications" msgstr "Kullanıcı bildirimleri" -#: core/models.py:1692 +#: core/models.py:1566 msgid "json representation of this item's attributes" msgstr "Bu öğenin özniteliklerinin JSON gösterimi" -#: core/models.py:1693 +#: core/models.py:1567 msgid "ordered product attributes" msgstr "Sıralı ürün özellikleri" -#: core/models.py:1698 +#: core/models.py:1572 msgid "reference to the parent order that contains this product" msgstr "Bu ürünü içeren ana siparişe referans" -#: core/models.py:1699 +#: core/models.py:1573 msgid "parent order" msgstr "Ana sipariş" -#: core/models.py:1708 +#: core/models.py:1582 msgid "the specific product associated with this order line" msgstr "Bu sipariş satırıyla ilişkili belirli ürün" -#: core/models.py:1715 +#: core/models.py:1589 msgid "quantity of this specific product in the order" msgstr "Siparişteki bu belirli ürünün miktarı" -#: core/models.py:1716 +#: core/models.py:1590 msgid "product quantity" msgstr "Ürün miktarı" -#: core/models.py:1723 +#: core/models.py:1597 msgid "current status of this product in the order" msgstr "Bu ürünün siparişteki mevcut durumu" -#: core/models.py:1724 +#: core/models.py:1598 msgid "product line status" msgstr "Ürün hattı durumu" -#: core/models.py:1784 +#: core/models.py:1661 msgid "order product must have an order" msgstr "Orderproduct ilişkili bir siparişe sahip olmalıdır!" -#: core/models.py:1786 +#: core/models.py:1663 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Geri bildirim için yanlış eylem belirtildi: {action}!" -#: core/models.py:1800 +#: core/models.py:1677 msgid "you cannot feedback an order which is not received" msgstr "alınmamış bir siparişe geri bildirim yapamazsınız" -#: core/models.py:1806 +#: core/models.py:1683 msgid "name" msgstr "İsim" -#: core/models.py:1807 +#: core/models.py:1684 msgid "URL of the integration" msgstr "Entegrasyonun URL'si" -#: core/models.py:1808 +#: core/models.py:1685 msgid "authentication credentials" msgstr "Kimlik doğrulama bilgileri" -#: core/models.py:1822 +#: core/models.py:1699 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:1826 +#: core/models.py:1703 msgid "CRM" msgstr "CRM" -#: core/models.py:1827 +#: core/models.py:1704 msgid "CRMs" msgstr "CRM'ler" -#: core/models.py:1839 +#: core/models.py:1716 msgid "order CRM link" msgstr "Siparişin CRM bağlantısı" -#: core/models.py:1840 +#: core/models.py:1717 msgid "orders CRM links" msgstr "Siparişlerin CRM bağlantıları" -#: core/models.py:1874 +#: core/models.py:1722 +msgid "" +"Represents the downloading functionality for digital assets associated with " +"orders. The DigitalAssetDownload class provides the ability to manage and " +"access downloads related to order products. It maintains information about " +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." +msgstr "" +"Siparişlerle ilişkili dijital varlıklar için indirme işlevselliğini temsil " +"eder. DigitalAssetDownload sınıfı, sipariş ürünleriyle ilgili indirmeleri " +"yönetme ve bunlara erişme olanağı sağlar. İlişkili sipariş ürünü, indirme " +"sayısı ve varlığın herkese açık olup olmadığı hakkında bilgi tutar. İlişkili" +" sipariş tamamlandı durumundayken varlığın indirilmesi için bir URL " +"oluşturmaya yönelik bir yöntem içerir." + +#: core/models.py:1736 msgid "download" msgstr "İndir" -#: core/models.py:1875 +#: core/models.py:1737 msgid "downloads" msgstr "İndirmeler" -#: core/models.py:1883 +#: core/models.py:1745 msgid "you can not download a digital asset for a non-finished order" msgstr "Tamamlanmamış bir sipariş için dijital varlık indiremezsiniz" -#: core/models.py:1913 +#: core/models.py:1754 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." +msgstr "" +"Ürünler için kullanıcı geri bildirimlerini yönetir. Bu sınıf, satın " +"aldıkları belirli ürünler için kullanıcı geri bildirimlerini yakalamak ve " +"saklamak üzere tasarlanmıştır. Kullanıcı yorumlarını saklamak için " +"öznitelikler, siparişteki ilgili ürüne bir referans ve kullanıcı tarafından " +"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:1766 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:1914 +#: core/models.py:1767 msgid "feedback comments" msgstr "Geri bildirim yorumları" -#: core/models.py:1921 +#: core/models.py:1774 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:1922 +#: core/models.py:1775 msgid "related order product" msgstr "İlgili sipariş ürünü" -#: core/models.py:1927 +#: core/models.py:1780 msgid "user-assigned rating for the product" msgstr "Ürün için kullanıcı tarafından atanan derecelendirme" -#: core/models.py:1928 +#: core/models.py:1781 msgid "product rating" msgstr "Ürün değerlendirmesi" @@ -2556,17 +2692,17 @@ msgstr "Geçersiz zaman aşımı değeri, 0 ile 216000 saniye arasında olmalıd 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:64 +#: core/utils/emailing.py:74 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Sipariş Onayı" -#: core/utils/emailing.py:99 +#: core/utils/emailing.py:109 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Sipariş Teslim Edildi" -#: core/utils/emailing.py:187 +#: core/utils/emailing.py:197 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | verilen promosyon kodu" @@ -2588,15 +2724,15 @@ msgstr "Resim boyutları w{max_width} x h{max_height} pikseli geçmemelidir!" msgid "invalid phone number format" msgstr "Geçersiz telefon numarası biçimi" -#: core/views.py:481 +#: core/views.py:489 msgid "you can only download the digital asset once" msgstr "Dijital varlığı yalnızca bir kez indirebilirsiniz" -#: core/views.py:539 +#: core/views.py:547 msgid "favicon not found" msgstr "favicon bulunamadı" -#: core/viewsets.py:1319 +#: core/viewsets.py:1357 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Coğrafi kodlama hatası: {e}" diff --git a/core/locale/vi_VN/LC_MESSAGES/django.mo b/core/locale/vi_VN/LC_MESSAGES/django.mo index 53aa17b43c2eccdf533378498f43dad6a2844982..74e3f236b8d88bd32e7881e56fd17e5f81a88c8d 100644 GIT binary patch delta 20523 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 K%9ZOYg8vU=46IN9 delta 12652 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 `BGwstHF-C zOzbZ+*-B!2E% zpW#Z*+5NAsk%_t4ue;*-m@7SZ*RmAWBzM>9;jaC&Vp9@aiK)4}mSm9RX1~L~P72Bl zofnyx*$sBRy~)R`Qh!$lS4whaBqrr%zdFj!dsI@+5{+;!=Ss@mwP)17dp)rRJ#*Hi z{MUv5S%}OL=So!y^4w!O!%GZyc{=}d(;=BV-wiA0{O>Lq+(NdeHGs9zy#Ieg;x4mN z=WX)MYP-}cPv+5VzpRrh+W2HuUAM|BYr@8Ad9#jYAJ3Duc<*qZtmlqI=E>T8Y\n" "Language-Team: BRITISH ENGLISH \n" @@ -90,11 +90,11 @@ msgid "selected items have been deactivated." msgstr "Các mục đã chọn đã bị vô hiệu hóa!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:712 core/models.py:720 +#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 msgid "attribute value" msgstr "Giá trị thuộc tính" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:721 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 msgid "attribute values" msgstr "Giá trị thuộc tính" @@ -106,7 +106,7 @@ msgstr "Hình ảnh" msgid "images" msgstr "Hình ảnh" -#: core/admin.py:155 core/models.py:457 +#: core/admin.py:155 core/models.py:445 msgid "stock" msgstr "Cổ phiếu" @@ -114,11 +114,11 @@ msgstr "Cổ phiếu" msgid "stocks" msgstr "Cổ phiếu" -#: core/admin.py:166 core/models.py:1735 +#: core/admin.py:166 core/models.py:1609 msgid "order product" msgstr "Đặt hàng sản phẩm" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1736 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 msgid "order products" msgstr "Đặt hàng sản phẩm" @@ -335,7 +335,7 @@ 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:155 core/docs/drf/viewsets.py:553 +#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:487 #: core/graphene/object_types.py:117 core/graphene/object_types.py:207 #: core/graphene/object_types.py:509 msgid "SEO Meta snapshot" @@ -608,47 +608,7 @@ msgstr "Danh sách tất cả sản phẩm (chế độ xem đơn giản)" 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:384 -msgid "(icontains) Product name" -msgstr "(icontains) Tên sản phẩm" - -#: core/docs/drf/viewsets.py:390 -msgid "(list) Category names, case-insensitive" -msgstr "(danh sách) Tên danh mục, không phân biệt chữ hoa chữ thường" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Category UUID" -msgstr "(chính xác) Mã định danh duy nhất (UUID) của danh mục" - -#: core/docs/drf/viewsets.py:402 -msgid "(list) Tag names, case-insensitive" -msgstr "(danh sách) Tên thẻ, không phân biệt chữ hoa chữ thường" - -#: core/docs/drf/viewsets.py:408 -msgid "(gte) Minimum stock price" -msgstr "(gte) Giá cổ phiếu tối thiểu" - -#: core/docs/drf/viewsets.py:414 -msgid "(lte) Maximum stock price" -msgstr "(lte) Giá cổ phiếu tối đa" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Only active products" -msgstr "(chính xác) Chỉ các sản phẩm đang hoạt động" - -#: core/docs/drf/viewsets.py:426 -msgid "(iexact) Brand name" -msgstr "(iexact) Tên thương hiệu" - -#: core/docs/drf/viewsets.py:438 -msgid "(gt) Minimum stock quantity" -msgstr "(gt) Số lượng hàng tồn kho tối thiểu" - -#: core/docs/drf/viewsets.py:444 -msgid "(exact) Digital vs. physical" -msgstr "(chính xác) Số hóa so với vật lý" - -#: core/docs/drf/viewsets.py:451 +#: core/docs/drf/viewsets.py:385 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -657,253 +617,257 @@ 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:465 core/docs/drf/viewsets.py:466 +#: core/docs/drf/viewsets.py:399 core/docs/drf/viewsets.py:400 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:471 core/docs/drf/viewsets.py:495 -#: core/docs/drf/viewsets.py:511 core/docs/drf/viewsets.py:527 -#: core/docs/drf/viewsets.py:543 core/docs/drf/viewsets.py:559 +#: core/docs/drf/viewsets.py:405 core/docs/drf/viewsets.py:429 +#: core/docs/drf/viewsets.py:445 core/docs/drf/viewsets.py:461 +#: core/docs/drf/viewsets.py:477 core/docs/drf/viewsets.py:493 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:481 core/docs/drf/viewsets.py:482 +#: core/docs/drf/viewsets.py:415 core/docs/drf/viewsets.py:416 msgid "create a product" msgstr "Tạo sản phẩm" -#: core/docs/drf/viewsets.py:489 core/docs/drf/viewsets.py:490 +#: core/docs/drf/viewsets.py:423 core/docs/drf/viewsets.py:424 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:505 core/docs/drf/viewsets.py:506 +#: core/docs/drf/viewsets.py:439 core/docs/drf/viewsets.py:440 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:521 core/docs/drf/viewsets.py:522 +#: core/docs/drf/viewsets.py:455 core/docs/drf/viewsets.py:456 msgid "delete a product" msgstr "Xóa sản phẩm" -#: core/docs/drf/viewsets.py:537 core/docs/drf/viewsets.py:538 +#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:472 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:554 +#: core/docs/drf/viewsets.py:488 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:572 +#: core/docs/drf/viewsets.py:506 msgid "list all addresses" msgstr "Danh sách tất cả các địa chỉ" -#: core/docs/drf/viewsets.py:579 +#: core/docs/drf/viewsets.py:513 msgid "retrieve a single address" msgstr "Lấy một địa chỉ duy nhất" -#: core/docs/drf/viewsets.py:586 +#: core/docs/drf/viewsets.py:520 msgid "create a new address" msgstr "Tạo một địa chỉ mới" -#: core/docs/drf/viewsets.py:594 +#: core/docs/drf/viewsets.py:528 msgid "delete an address" msgstr "Xóa địa chỉ" -#: core/docs/drf/viewsets.py:601 +#: core/docs/drf/viewsets.py:535 msgid "update an entire address" msgstr "Cập nhật toàn bộ địa chỉ" -#: core/docs/drf/viewsets.py:609 +#: core/docs/drf/viewsets.py:543 msgid "partially update an address" msgstr "Cập nhật một phần địa chỉ" -#: core/docs/drf/viewsets.py:617 +#: core/docs/drf/viewsets.py:551 msgid "autocomplete address suggestions" msgstr "Tự động hoàn thành địa chỉ nhập liệu" -#: core/docs/drf/viewsets.py:622 +#: core/docs/drf/viewsets.py:556 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:628 +#: core/docs/drf/viewsets.py:562 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:641 +#: core/docs/drf/viewsets.py:575 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:645 +#: core/docs/drf/viewsets.py:579 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:649 +#: core/docs/drf/viewsets.py:583 msgid "create a feedback" msgstr "Tạo phản hồi" -#: core/docs/drf/viewsets.py:653 +#: core/docs/drf/viewsets.py:587 msgid "delete a feedback" msgstr "Xóa phản hồi" -#: core/docs/drf/viewsets.py:657 +#: core/docs/drf/viewsets.py:591 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:661 +#: core/docs/drf/viewsets.py:595 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:668 +#: core/docs/drf/viewsets.py:602 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:675 +#: core/docs/drf/viewsets.py:609 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:682 +#: core/docs/drf/viewsets.py:616 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:689 +#: core/docs/drf/viewsets.py:623 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:696 +#: core/docs/drf/viewsets.py:630 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:703 +#: core/docs/drf/viewsets.py:637 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:710 +#: core/docs/drf/viewsets.py:644 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/elasticsearch/__init__.py:105 +#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 msgid "no search term provided." msgstr "Không có từ khóa tìm kiếm được cung cấp." -#: core/filters.py:64 core/filters.py:594 core/filters.py:623 +#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +msgid "Search" +msgstr "Tìm kiếm" + +#: core/filters.py:66 core/filters.py:554 core/filters.py:583 msgid "UUID" msgstr "UUID" -#: core/filters.py:65 core/filters.py:429 core/filters.py:560 +#: core/filters.py:67 core/filters.py:399 core/filters.py:526 msgid "Name" msgstr "Tên" -#: core/filters.py:66 core/filters.py:562 +#: core/filters.py:68 core/filters.py:528 msgid "Categories" msgstr "Các danh mục" -#: core/filters.py:68 +#: core/filters.py:70 msgid "Categories Slugs" msgstr "Thể loại Tiêu đề" -#: core/filters.py:69 core/filters.py:437 +#: core/filters.py:71 core/filters.py:407 msgid "Tags" msgstr "Thẻ" -#: core/filters.py:70 +#: core/filters.py:72 msgid "Min Price" msgstr "Giá tối thiểu" -#: core/filters.py:71 +#: core/filters.py:73 msgid "Max Price" msgstr "Giá tối đa" -#: core/filters.py:72 +#: core/filters.py:74 msgid "Is Active" msgstr "Đang hoạt động" -#: core/filters.py:73 +#: core/filters.py:75 msgid "Brand" msgstr "Thương hiệu" -#: core/filters.py:74 +#: core/filters.py:76 msgid "Attributes" msgstr "Thuộc tính" -#: core/filters.py:75 +#: core/filters.py:77 msgid "Quantity" msgstr "Số lượng" -#: core/filters.py:76 core/filters.py:431 core/filters.py:561 -#: core/models.py:287 core/models.py:381 core/models.py:534 +#: core/filters.py:78 core/filters.py:401 core/filters.py:527 +#: core/models.py:287 core/models.py:369 core/models.py:522 msgid "Slug" msgstr "Sên" -#: core/filters.py:77 +#: core/filters.py:79 msgid "Is Digital" msgstr "Is Digital" -#: core/filters.py:78 +#: core/filters.py:80 msgid "Include sub-categories" msgstr "Bao gồm các danh mục con" -#: core/filters.py:81 +#: core/filters.py:83 msgid "Include personal ordered" msgstr "Gồm các sản phẩm đặt hàng cá nhân" -#: core/filters.py:83 core/models.py:538 +#: core/filters.py:85 core/models.py:526 msgid "SKU" msgstr "Mã sản phẩm" -#: core/filters.py:166 +#: core/filters.py:161 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:356 +#: core/filters.py:324 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:359 +#: core/filters.py:327 msgid "Bought after (inclusive)" msgstr "Được mua sau (bao gồm)" -#: core/filters.py:360 +#: core/filters.py:328 msgid "Bought before (inclusive)" msgstr "Đã mua trước đó (bao gồm)" -#: core/filters.py:363 core/filters.py:410 core/filters.py:625 +#: core/filters.py:331 core/filters.py:378 core/filters.py:585 msgid "User email" msgstr "Địa chỉ email của người dùng" -#: core/filters.py:364 core/filters.py:411 core/filters.py:603 -#: core/filters.py:624 +#: core/filters.py:332 core/filters.py:379 core/filters.py:563 +#: core/filters.py:584 msgid "User UUID" msgstr "UUID người dùng" -#: core/filters.py:365 +#: core/filters.py:333 msgid "Status" msgstr "Trạng thái" -#: core/filters.py:369 +#: core/filters.py:337 msgid "Human Readable ID" msgstr "Mã định danh dễ đọc cho con người" -#: core/filters.py:430 +#: core/filters.py:400 msgid "Parent" msgstr "Cha mẹ" -#: core/filters.py:434 +#: core/filters.py:404 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:438 +#: core/filters.py:408 msgid "Level" msgstr "Cấp độ" -#: core/filters.py:598 +#: core/filters.py:558 msgid "Product UUID" msgstr "Mã định danh duy nhất của sản phẩm (UUID)" @@ -961,7 +925,7 @@ msgstr "" "trường này là tương hỗ!" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:821 +#: core/graphene/mutations.py:527 core/viewsets.py:839 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}" @@ -1026,37 +990,37 @@ msgstr "" 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:555 +#: core/graphene/mutations.py:556 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:558 +#: core/graphene/mutations.py:559 #, 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:621 +#: core/graphene/mutations.py:622 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:655 core/models.py:896 core/models.py:909 -#: core/models.py:1348 core/models.py:1377 core/models.py:1402 -#: core/viewsets.py:824 +#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 +#: core/models.py:1234 core/models.py:1263 core/models.py:1288 +#: core/viewsets.py:842 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} không tồn tại: {uuid}!" -#: core/graphene/mutations.py:668 +#: core/graphene/mutations.py:669 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:713 +#: core/graphene/mutations.py:714 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:397 -#: core/graphene/object_types.py:444 core/models.py:666 core/models.py:1234 -#: core/models.py:1809 +#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 +#: core/models.py:1686 msgid "attributes" msgstr "Thuộc tính" @@ -1069,11 +1033,11 @@ 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:224 core/models.py:312 core/models.py:620 +#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:612 msgid "categories" msgstr "Các danh mục" -#: core/graphene/object_types.py:124 core/models.py:395 +#: core/graphene/object_types.py:124 core/models.py:383 msgid "brands" msgstr "Thương hiệu" @@ -1132,7 +1096,7 @@ 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:398 core/graphene/object_types.py:445 -#: core/models.py:1228 +#: core/models.py:1110 msgid "notifications" msgstr "Thông báo" @@ -1140,7 +1104,7 @@ msgstr "Thông báo" 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:400 core/models.py:1938 +#: core/graphene/object_types.py:400 core/models.py:1791 msgid "feedback" msgstr "Phản hồi" @@ -1148,7 +1112,7 @@ msgstr "Phản hồi" 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:436 core/models.py:1198 +#: core/graphene/object_types.py:436 core/models.py:1080 msgid "billing address" msgstr "Địa chỉ thanh toán" @@ -1177,7 +1141,7 @@ msgstr "" msgid "transactions for this order" msgstr "Giao dịch cho đơn hàng này" -#: core/graphene/object_types.py:465 core/models.py:1262 +#: core/graphene/object_types.py:465 core/models.py:1144 msgid "orders" msgstr "Đơn hàng" @@ -1189,15 +1153,15 @@ msgstr "URL hình ảnh" msgid "product's images" msgstr "Hình ảnh sản phẩm" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:477 +#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 msgid "category" msgstr "Thể loại" -#: core/graphene/object_types.py:502 core/models.py:1939 +#: core/graphene/object_types.py:502 core/models.py:1792 msgid "feedbacks" msgstr "Phản hồi" -#: core/graphene/object_types.py:503 core/models.py:394 core/models.py:486 +#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 msgid "brand" msgstr "Thương hiệu" @@ -1229,7 +1193,7 @@ msgstr "Số lượng phản hồi" 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:534 core/models.py:548 +#: core/graphene/object_types.py:534 core/models.py:536 msgid "products" msgstr "Sản phẩm" @@ -1241,7 +1205,7 @@ msgstr "Mã khuyến mãi" msgid "products on sale" msgstr "Sản phẩm đang khuyến mãi" -#: core/graphene/object_types.py:651 core/models.py:843 +#: core/graphene/object_types.py:651 core/models.py:784 msgid "promotions" msgstr "Khuyến mãi" @@ -1249,7 +1213,7 @@ msgstr "Khuyến mãi" msgid "vendor" msgstr "Nhà cung cấp" -#: core/graphene/object_types.py:656 core/models.py:547 +#: core/graphene/object_types.py:656 core/models.py:535 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1257,11 +1221,11 @@ msgstr "Nhà cung cấp" msgid "product" msgstr "Sản phẩm" -#: core/graphene/object_types.py:667 core/models.py:868 +#: core/graphene/object_types.py:667 core/models.py:807 msgid "wishlisted products" msgstr "Sản phẩm đã thêm vào danh sách mong muốn" -#: core/graphene/object_types.py:673 core/models.py:885 +#: core/graphene/object_types.py:673 core/models.py:824 msgid "wishlists" msgstr "Danh sách mong muốn" @@ -1269,7 +1233,7 @@ msgstr "Danh sách mong muốn" msgid "tagged products" msgstr "Sản phẩm được gắn thẻ" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:492 +#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 msgid "product tags" msgstr "Thẻ sản phẩm" @@ -1380,7 +1344,7 @@ msgstr "Nhóm thuộc tính cha" msgid "attribute group's name" msgstr "Tên nhóm thuộc tính" -#: core/models.py:100 core/models.py:628 +#: core/models.py:100 core/models.py:620 msgid "attribute group" msgstr "Nhóm thuộc tính" @@ -1545,51 +1509,64 @@ msgstr "Mô tả danh mục" 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:299 core/models.py:387 +#: core/models.py:299 core/models.py:375 msgid "priority" msgstr "Ưu tiên" -#: core/models.py:340 +#: core/models.py:318 +msgid "" +"Represents a Brand object in the system. This class handles information and " +"attributes related to a brand, including its name, logos, description, " +"associated categories, a unique slug, and priority order. It allows for the " +"organization and representation of brand-related data within the " +"application." +msgstr "" +"Đại diện cho một đối tượng Thương hiệu trong hệ thống. Lớp này quản lý thông" +" tin và thuộc tính liên quan đến một thương hiệu, bao gồm tên, logo, mô tả, " +"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:328 msgid "name of this brand" msgstr "Tên của thương hiệu này" -#: core/models.py:341 +#: core/models.py:329 msgid "brand name" msgstr "Tên thương hiệu" -#: core/models.py:348 +#: core/models.py:336 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:350 +#: core/models.py:338 msgid "brand small image" msgstr "Hình ảnh nhỏ của thương hiệu" -#: core/models.py:356 +#: core/models.py:344 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:358 +#: core/models.py:346 msgid "brand big image" msgstr "Hình ảnh thương hiệu lớn" -#: core/models.py:363 +#: core/models.py:351 msgid "add a detailed description of the brand" msgstr "Thêm mô tả chi tiết về thương hiệu" -#: core/models.py:364 +#: core/models.py:352 msgid "brand description" msgstr "Mô tả thương hiệu" -#: core/models.py:369 +#: core/models.py:357 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:370 +#: core/models.py:358 msgid "associated categories" msgstr "Các danh mục" -#: core/models.py:400 +#: core/models.py:388 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1605,68 +1582,68 @@ 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:412 +#: core/models.py:400 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:413 +#: core/models.py:401 msgid "associated vendor" msgstr "Nhà cung cấp liên kết" -#: core/models.py:417 +#: core/models.py:405 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:418 +#: core/models.py:406 msgid "selling price" msgstr "Giá bán" -#: core/models.py:423 +#: core/models.py:411 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:424 core/models.py:708 core/models.py:765 -#: core/models.py:1709 +#: core/models.py:412 core/models.py:683 core/models.py:730 +#: core/models.py:1583 msgid "associated product" msgstr "Sản phẩm liên quan" -#: core/models.py:431 +#: core/models.py:419 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:432 +#: core/models.py:420 msgid "vendor purchase price" msgstr "Giá mua của nhà cung cấp" -#: core/models.py:436 +#: core/models.py:424 msgid "available quantity of the product in stock" msgstr "Số lượng sản phẩm hiện có trong kho" -#: core/models.py:437 +#: core/models.py:425 msgid "quantity in stock" msgstr "Số lượng hàng tồn kho" -#: core/models.py:441 +#: core/models.py:429 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:442 +#: core/models.py:430 msgid "vendor sku" msgstr "Mã SKU của nhà cung cấp" -#: core/models.py:448 +#: core/models.py:436 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:449 +#: core/models.py:437 msgid "digital file" msgstr "Tệp tin kỹ thuật số" -#: core/models.py:458 +#: core/models.py:446 msgid "stock entries" msgstr "Nhập kho" -#: core/models.py:463 +#: core/models.py:451 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1687,56 +1664,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:476 +#: core/models.py:464 msgid "category this product belongs to" msgstr "Danh mục mà sản phẩm này thuộc về" -#: core/models.py:485 +#: core/models.py:473 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:491 +#: core/models.py:479 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:496 +#: core/models.py:484 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:497 +#: core/models.py:485 msgid "is product digital" msgstr "Sản phẩm có phải là sản phẩm số không?" -#: core/models.py:503 +#: core/models.py:491 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:504 +#: core/models.py:492 msgid "product name" msgstr "Tên sản phẩm" -#: core/models.py:509 core/models.py:831 +#: core/models.py:497 core/models.py:772 msgid "add a detailed description of the product" msgstr "Thêm mô tả chi tiết về sản phẩm" -#: core/models.py:510 +#: core/models.py:498 msgid "product description" msgstr "Mô tả sản phẩm" -#: core/models.py:517 +#: core/models.py:505 msgid "part number for this product" msgstr "Số hiệu sản phẩm cho sản phẩm này" -#: core/models.py:518 +#: core/models.py:506 msgid "part number" msgstr "Số hiệu linh kiện" -#: core/models.py:537 +#: core/models.py:525 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:607 +#: core/models.py:599 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 " @@ -1752,289 +1729,393 @@ 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:619 +#: core/models.py:611 msgid "category of this attribute" msgstr "Loại của thuộc tính này" -#: core/models.py:627 +#: core/models.py:619 msgid "group of this attribute" msgstr "Nhóm có thuộc tính này" -#: core/models.py:633 +#: core/models.py:625 msgid "string" msgstr "Dây" -#: core/models.py:634 +#: core/models.py:626 msgid "integer" msgstr "Chính trực" -#: core/models.py:635 +#: core/models.py:627 msgid "float" msgstr "Nổi" -#: core/models.py:636 +#: core/models.py:628 msgid "boolean" msgstr "Boolean" -#: core/models.py:637 +#: core/models.py:629 msgid "array" msgstr "Mảng" -#: core/models.py:638 +#: core/models.py:630 msgid "object" msgstr "Đối tượng" -#: core/models.py:640 +#: core/models.py:632 msgid "type of the attribute's value" msgstr "Loại giá trị của thuộc tính" -#: core/models.py:641 +#: core/models.py:633 msgid "value type" msgstr "Kiểu giá trị" -#: core/models.py:646 +#: core/models.py:638 msgid "name of this attribute" msgstr "Tên của thuộc tính này" -#: core/models.py:647 +#: core/models.py:639 msgid "attribute's name" msgstr "Tên thuộc tính" -#: core/models.py:653 +#: core/models.py:645 msgid "is filterable" msgstr "có thể lọc được" -#: core/models.py:654 +#: core/models.py:646 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:665 core/models.py:700 +#: core/models.py:657 core/models.py:675 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Thuộc tính" -#: core/models.py:699 +#: core/models.py:663 +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 "" +"Đại diện cho một giá trị cụ thể của một thuộc tính được liên kết với một sản" +" 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:674 msgid "attribute of this value" msgstr "Thuộc tính của giá trị này" -#: core/models.py:707 +#: core/models.py:682 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:713 +#: core/models.py:688 msgid "the specific value for this attribute" msgstr "Giá trị cụ thể cho thuộc tính này" -#: core/models.py:747 +#: core/models.py:701 +msgid "" +"Represents a product image associated with a product in the system. This " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " +"determining their display order. It also includes an accessibility feature " +"with alternative text for the images." +msgstr "" +"Đại diện cho hình ảnh sản phẩm liên quan đến một sản phẩm trong hệ thống. " +"Lớp này được thiết kế để quản lý hình ảnh cho sản phẩm, bao gồm các chức " +"năng tải lên tệp hình ảnh, liên kết chúng với các sản phẩm cụ thể và xác " +"đị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:712 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:748 +#: core/models.py:713 msgid "image alt text" msgstr "Nội dung thay thế cho hình ảnh" -#: core/models.py:751 +#: core/models.py:716 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:752 core/models.py:777 +#: core/models.py:717 core/models.py:742 msgid "product image" msgstr "Hình ảnh sản phẩm" -#: core/models.py:758 +#: core/models.py:723 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:759 +#: core/models.py:724 msgid "display priority" msgstr "Ưu tiên hiển thị" -#: core/models.py:764 +#: core/models.py:729 msgid "the product that this image represents" msgstr "Sản phẩm mà hình ảnh này đại diện" -#: core/models.py:778 +#: core/models.py:743 msgid "product images" msgstr "Hình ảnh sản phẩm" -#: core/models.py:819 +#: core/models.py:748 +msgid "" +"Represents a promotional campaign for products with a discount. This class " +"is used to define and manage promotional campaigns that offer a percentage-" +"based discount for products. The class includes attributes for setting the " +"discount rate, providing details about the promotion, and linking it to the " +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." +msgstr "" +"Đại diện cho một chiến dịch khuyến mãi cho các sản phẩm có giảm giá. Lớp này" +" được sử dụng để định nghĩa và quản lý các chiến dịch khuyến mãi cung cấp " +"giảm giá theo tỷ lệ phần trăm cho các sản phẩm. Lớp này bao gồm các thuộc " +"tính để thiết lập tỷ lệ giảm giá, cung cấp chi tiết về chương trình khuyến " +"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:760 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:820 +#: core/models.py:761 msgid "discount percentage" msgstr "Tỷ lệ giảm giá" -#: core/models.py:825 +#: core/models.py:766 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:826 +#: core/models.py:767 msgid "promotion name" msgstr "Tên chương trình khuyến mãi" -#: core/models.py:832 +#: core/models.py:773 msgid "promotion description" msgstr "Mô tả chương trình khuyến mãi" -#: core/models.py:837 +#: core/models.py:778 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:838 +#: core/models.py:779 msgid "included products" msgstr "Các sản phẩm được bao gồm" -#: core/models.py:842 +#: core/models.py:783 msgid "promotion" msgstr "Khuyến mãi" -#: core/models.py:867 +#: core/models.py:794 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"class provides functionality to manage a collection of products, supporting " +"operations such as adding and removing products, as well as supporting " +"operations for adding and removing multiple products at once." +msgstr "" +"Đại diện cho danh sách mong muốn của người dùng để lưu trữ và quản lý các " +"sản phẩm mong muốn. Lớp này cung cấp các chức năng để quản lý bộ sưu tập sản" +" 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:806 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:875 +#: core/models.py:814 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:876 +#: core/models.py:815 msgid "wishlist owner" msgstr "Chủ sở hữu Danh sách mong muốn" -#: core/models.py:884 +#: core/models.py:823 msgid "wishlist" msgstr "Danh sách mong muốn" -#: core/models.py:951 +#: core/models.py:865 +msgid "" +"Represents a documentary record tied to a product. This class is used to " +"store information about documentaries related to specific products, " +"including file uploads and their metadata. It contains methods and " +"properties to handle the file type and storage path for the documentary " +"files. It extends functionality from specific mixins and provides additional" +" custom features." +msgstr "" +"Đại diện cho một bản ghi tài liệu liên quan đến một sản phẩm. Lớp này được " +"sử dụng để lưu trữ thông tin về các tài liệu liên quan đến các sản phẩm cụ " +"thể, bao gồm việc tải lên tệp và metadata của chúng. Nó chứa các phương thức" +" và thuộc tính để xử lý loại tệp và đường dẫn lưu trữ cho các tệp tài liệu. " +"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:878 msgid "documentary" msgstr "Phim tài liệu" -#: core/models.py:952 +#: core/models.py:879 msgid "documentaries" msgstr "Phim tài liệu" -#: core/models.py:962 +#: core/models.py:889 msgid "unresolved" msgstr "Chưa được giải quyết" -#: core/models.py:1008 +#: core/models.py:894 +msgid "" +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." +msgstr "" +"Đại diện cho một thực thể địa chỉ bao gồm thông tin vị trí và mối quan hệ " +"với người dùng. Cung cấp chức năng lưu trữ dữ liệu địa lý và địa chỉ, cũng " +"như tích hợp với các dịch vụ định vị địa lý. Lớp này được thiết kế để lưu " +"trữ thông tin địa chỉ chi tiết bao gồm các thành phần như đường phố, thành " +"phố, khu vực, quốc gia và vị trí địa lý (kinh độ và vĩ độ). Nó hỗ trợ tích " +"hợp với các API định vị địa lý, cho phép lưu trữ các phản hồi API thô để xử " +"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:909 msgid "address line for the customer" msgstr "Địa chỉ của khách hàng" -#: core/models.py:1009 +#: core/models.py:910 msgid "address line" msgstr "Dòng địa chỉ" -#: core/models.py:1011 +#: core/models.py:912 msgid "street" msgstr "Phố" -#: core/models.py:1012 +#: core/models.py:913 msgid "district" msgstr "Quận" -#: core/models.py:1013 +#: core/models.py:914 msgid "city" msgstr "Thành phố" -#: core/models.py:1014 +#: core/models.py:915 msgid "region" msgstr "Khu vực" -#: core/models.py:1015 +#: core/models.py:916 msgid "postal code" msgstr "Mã bưu chính" -#: core/models.py:1016 +#: core/models.py:917 msgid "country" msgstr "Quốc gia" -#: core/models.py:1023 +#: core/models.py:924 msgid "geolocation point: (longitude, latitude)" msgstr "Điểm định vị địa lý (Kinh độ, Vĩ độ)" -#: core/models.py:1026 +#: core/models.py:927 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:1031 +#: core/models.py:932 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:1039 +#: core/models.py:940 msgid "address" msgstr "Địa chỉ" -#: core/models.py:1040 +#: core/models.py:941 msgid "addresses" msgstr "Địa chỉ" -#: core/models.py:1085 +#: core/models.py:953 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" +"Đại diện cho một mã khuyến mãi có thể được sử dụng để giảm giá, quản lý thời" +" hạn hiệu lực, loại giảm giá và cách áp dụng. Lớp PromoCode lưu trữ thông " +"tin chi tiết về mã khuyến mãi, bao gồm mã định danh duy nhất, thuộc tính " +"giảm giá (số tiền hoặc phần trăm), thời hạn hiệu lực, người dùng liên kết " +"(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:967 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:1086 +#: core/models.py:968 msgid "promo code identifier" msgstr "Mã khuyến mãi" -#: core/models.py:1093 +#: core/models.py:975 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:1094 +#: core/models.py:976 msgid "fixed discount amount" msgstr "Số tiền giảm giá cố định" -#: core/models.py:1100 +#: core/models.py:982 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:1101 +#: core/models.py:983 msgid "percentage discount" msgstr "Giảm giá theo phần trăm" -#: core/models.py:1106 +#: core/models.py:988 msgid "timestamp when the promocode expires" msgstr "Thời gian hết hạn của mã khuyến mãi" -#: core/models.py:1107 +#: core/models.py:989 msgid "end validity time" msgstr "Thời hạn hiệu lực kết thúc" -#: core/models.py:1112 +#: core/models.py:994 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:1113 +#: core/models.py:995 msgid "start validity time" msgstr "Thời gian bắt đầu có hiệu lực" -#: core/models.py:1118 +#: core/models.py:1000 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:1119 +#: core/models.py:1001 msgid "usage timestamp" msgstr "Dấu thời gian sử dụng" -#: core/models.py:1124 +#: core/models.py:1006 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:1125 +#: core/models.py:1007 msgid "assigned user" msgstr "Người dùng được chỉ định" -#: core/models.py:1132 +#: core/models.py:1014 msgid "promo code" msgstr "Mã khuyến mãi" -#: core/models.py:1133 +#: core/models.py:1015 msgid "promo codes" msgstr "Mã khuyến mãi" -#: core/models.py:1140 +#: core/models.py:1022 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2042,16 +2123,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:1155 +#: core/models.py:1037 msgid "promocode already used" msgstr "Mã khuyến mãi đã được sử dụng." -#: core/models.py:1171 +#: core/models.py:1053 #, 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:1180 +#: core/models.py:1062 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 " @@ -2068,140 +2149,140 @@ 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:1197 +#: core/models.py:1079 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:1205 +#: core/models.py:1087 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:1206 +#: core/models.py:1088 msgid "applied promo code" msgstr "Đã áp dụng mã khuyến mãi" -#: core/models.py:1214 +#: core/models.py:1096 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:1215 +#: core/models.py:1097 msgid "shipping address" msgstr "Địa chỉ giao hàng" -#: core/models.py:1221 +#: core/models.py:1103 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:1222 +#: core/models.py:1104 msgid "order status" msgstr "Tình trạng đơn hàng" -#: core/models.py:1227 core/models.py:1686 +#: core/models.py:1109 core/models.py:1560 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:1233 +#: core/models.py:1115 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:1239 +#: core/models.py:1121 msgid "the user who placed the order" msgstr "Người dùng đã đặt đơn hàng" -#: core/models.py:1240 +#: core/models.py:1122 msgid "user" msgstr "Người dùng" -#: core/models.py:1246 +#: core/models.py:1128 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:1247 +#: core/models.py:1129 msgid "buy time" msgstr "Mua thời gian" -#: core/models.py:1254 +#: core/models.py:1136 msgid "a human-readable identifier for the order" msgstr "Một định danh dễ đọc cho đơn hàng" -#: core/models.py:1255 +#: core/models.py:1137 msgid "human readable id" msgstr "ID dễ đọc cho con người" -#: core/models.py:1261 +#: core/models.py:1143 msgid "order" msgstr "Đặt hàng" -#: core/models.py:1282 +#: core/models.py:1168 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:1316 +#: core/models.py:1202 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:1321 +#: core/models.py:1207 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:1338 +#: core/models.py:1224 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:1360 core/models.py:1385 core/models.py:1393 +#: core/models.py:1246 core/models.py:1271 core/models.py:1279 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:1381 +#: core/models.py:1267 #, 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:1413 +#: core/models.py:1299 msgid "promocode does not exist" msgstr "Mã khuyến mãi không tồn tại" -#: core/models.py:1419 +#: core/models.py:1305 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:1438 +#: core/models.py:1324 msgid "address does not exist" msgstr "Địa chỉ không tồn tại" -#: core/models.py:1459 core/models.py:1528 +#: core/models.py:1345 core/models.py:1414 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:1462 core/models.py:1524 +#: core/models.py:1348 core/models.py:1410 msgid "invalid force value" msgstr "Giá trị lực không hợp lệ" -#: core/models.py:1468 core/models.py:1531 +#: core/models.py:1354 core/models.py:1417 msgid "you cannot purchase an empty order!" msgstr "Bạn không thể đặt hàng trống!" -#: core/models.py:1487 +#: core/models.py:1373 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:1501 +#: core/models.py:1387 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:1506 +#: core/models.py:1392 msgid "insufficient funds to complete the order" msgstr "Không đủ số tiền để hoàn tất đơn hàng." -#: core/models.py:1540 +#: core/models.py:1426 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2210,7 +2291,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:1549 +#: core/models.py:1435 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2218,145 +2299,198 @@ msgstr "" "Phương thức thanh toán không hợp lệ: {payment_method} từ " "{available_payment_methods}!" -#: core/models.py:1674 +#: core/models.py:1533 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" +"Đại diện cho các sản phẩm liên quan đến đơn hàng và các thuộc tính của " +"chúng. Mô hình OrderProduct lưu trữ thông tin về một sản phẩm là một phần " +"của đơn hàng, bao gồm các chi tiết như giá mua, số lượng, thuộc tính sản " +"phẩm và trạng thái. Nó quản lý thông báo cho người dùng và quản trị viên, " +"đồng thời xử lý các thao tác như trả lại số dư sản phẩm hoặc thêm phản hồi. " +"Mô hình này cũng cung cấp các phương thức và thuộc tính hỗ trợ logic kinh " +"doanh, chẳng hạn như tính toán tổng giá hoặc tạo URL tải xuống cho sản phẩm " +"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:1548 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:1675 +#: core/models.py:1549 msgid "purchase price at order time" msgstr "Giá mua tại thời điểm đặt hàng" -#: core/models.py:1680 +#: core/models.py:1554 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:1681 +#: core/models.py:1555 msgid "internal comments" msgstr "Nhận xét nội bộ" -#: core/models.py:1687 +#: core/models.py:1561 msgid "user notifications" msgstr "Thông báo cho người dùng" -#: core/models.py:1692 +#: core/models.py:1566 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:1693 +#: core/models.py:1567 msgid "ordered product attributes" msgstr "Thuộc tính sản phẩm đã đặt hàng" -#: core/models.py:1698 +#: core/models.py:1572 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:1699 +#: core/models.py:1573 msgid "parent order" msgstr "Đơn đặt hàng của phụ huynh" -#: core/models.py:1708 +#: core/models.py:1582 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:1715 +#: core/models.py:1589 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:1716 +#: core/models.py:1590 msgid "product quantity" msgstr "Số lượng sản phẩm" -#: core/models.py:1723 +#: core/models.py:1597 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:1724 +#: core/models.py:1598 msgid "product line status" msgstr "Tình trạng dòng sản phẩm" -#: core/models.py:1784 +#: core/models.py:1661 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:1786 +#: core/models.py:1663 #, 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:1800 +#: core/models.py:1677 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:1806 +#: core/models.py:1683 msgid "name" msgstr "Tên" -#: core/models.py:1807 +#: core/models.py:1684 msgid "URL of the integration" msgstr "Đường dẫn URL của tích hợp" -#: core/models.py:1808 +#: core/models.py:1685 msgid "authentication credentials" msgstr "Thông tin xác thực" -#: core/models.py:1822 +#: core/models.py:1699 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:1826 +#: core/models.py:1703 msgid "CRM" msgstr "Hệ thống Quản lý Quan hệ Khách hàng" -#: core/models.py:1827 +#: core/models.py:1704 msgid "CRMs" msgstr "Hệ thống Quản lý Quan hệ Khách hàng (CR" -#: core/models.py:1839 +#: core/models.py:1716 msgid "order CRM link" msgstr "Liên kết CRM của đơn hàng" -#: core/models.py:1840 +#: core/models.py:1717 msgid "orders CRM links" msgstr "Liên kết CRM của đơn hàng" -#: core/models.py:1874 +#: core/models.py:1722 +msgid "" +"Represents the downloading functionality for digital assets associated with " +"orders. The DigitalAssetDownload class provides the ability to manage and " +"access downloads related to order products. It maintains information about " +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." +msgstr "" +"Đại diện cho chức năng tải xuống các tài sản kỹ thuật số liên quan đến đơn " +"hàng. Lớp DigitalAssetDownload cung cấp khả năng quản lý và truy cập các tệp" +" tải xuống liên quan đến sản phẩm trong đơn hàng. Nó lưu trữ thông tin về " +"sản phẩm trong đơn hàng liên quan, số lần tải xuống và liệu tài sản có hiển " +"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:1736 msgid "download" msgstr "Tải xuống" -#: core/models.py:1875 +#: core/models.py:1737 msgid "downloads" msgstr "Tải xuống" -#: core/models.py:1883 +#: core/models.py:1745 msgid "you can not download a digital asset for a non-finished order" msgstr "" "Bạn không thể tải xuống tài sản kỹ thuật số cho một đơn hàng chưa hoàn " "thành." -#: core/models.py:1913 +#: core/models.py:1754 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." +msgstr "" +"Quản lý phản hồi của người dùng về sản phẩm. Lớp này được thiết kế để thu " +"thập và lưu trữ phản hồi của người dùng về các sản phẩm cụ thể mà họ đã mua." +" Nó bao gồm các thuộc tính để lưu trữ bình luận của người dùng, tham chiếu " +"đến sản phẩm liên quan trong đơn hàng và đánh giá do người dùng gán. Lớp này" +" 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:1766 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:1914 +#: core/models.py:1767 msgid "feedback comments" msgstr "Phản hồi" -#: core/models.py:1921 +#: core/models.py:1774 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:1922 +#: core/models.py:1775 msgid "related order product" msgstr "Sản phẩm liên quan đến đơn hàng" -#: core/models.py:1927 +#: core/models.py:1780 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:1928 +#: core/models.py:1781 msgid "product rating" msgstr "Đánh giá sản phẩm" @@ -2573,17 +2707,17 @@ msgstr "" 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:64 +#: core/utils/emailing.py:74 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Xác nhận đơn hàng" -#: core/utils/emailing.py:99 +#: core/utils/emailing.py:109 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Đơn hàng đã được giao" -#: core/utils/emailing.py:187 +#: core/utils/emailing.py:197 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | mã khuyến mãi được cấp" @@ -2606,15 +2740,15 @@ msgstr "" msgid "invalid phone number format" msgstr "Định dạng số điện thoại không hợp lệ" -#: core/views.py:481 +#: core/views.py:489 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:539 +#: core/views.py:547 msgid "favicon not found" msgstr "Biểu tượng trang web không tìm thấy" -#: core/viewsets.py:1319 +#: core/viewsets.py:1357 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Lỗi địa chỉ địa lý: {e}" diff --git a/core/locale/zh_Hans/LC_MESSAGES/django.mo b/core/locale/zh_Hans/LC_MESSAGES/django.mo index d6e812dae8223999c4b849d3dc38f5f9b18508a5..4c62d661a528fb152ca1e3a88310fc833dbe51f2 100644 GIT binary patch delta 19507 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 RsFoEj&uUOsv*Njd{|Ai7qk8}V delta 12579 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -86,11 +86,11 @@ msgid "selected items have been deactivated." msgstr "选定项目已停用!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:712 core/models.py:720 +#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 msgid "attribute value" msgstr "属性值" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:721 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 msgid "attribute values" msgstr "属性值" @@ -102,7 +102,7 @@ msgstr "图片" msgid "images" msgstr "图片" -#: core/admin.py:155 core/models.py:457 +#: core/admin.py:155 core/models.py:445 msgid "stock" msgstr "库存" @@ -110,11 +110,11 @@ msgstr "库存" msgid "stocks" msgstr "股票" -#: core/admin.py:166 core/models.py:1735 +#: core/admin.py:166 core/models.py:1609 msgid "order product" msgstr "订购产品" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1736 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 msgid "order products" msgstr "订购产品" @@ -314,7 +314,7 @@ msgstr "重写现有类别,保存不可编辑内容" msgid "rewrite some fields of an existing category saving non-editables" msgstr "重写现有类别的某些字段,保存不可编辑内容" -#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:553 +#: core/docs/drf/viewsets.py:155 core/docs/drf/viewsets.py:487 #: core/graphene/object_types.py:117 core/graphene/object_types.py:207 #: core/graphene/object_types.py:509 msgid "SEO Meta snapshot" @@ -556,47 +556,7 @@ msgstr "列出所有产品(简单视图)" msgid "(exact) Product UUID" msgstr "(产品 UUID" -#: core/docs/drf/viewsets.py:384 -msgid "(icontains) Product name" -msgstr "(图示) 产品名称" - -#: core/docs/drf/viewsets.py:390 -msgid "(list) Category names, case-insensitive" -msgstr "(列表) 类别名称,不区分大小写" - -#: core/docs/drf/viewsets.py:396 -msgid "(exact) Category UUID" -msgstr "(类别 UUID" - -#: core/docs/drf/viewsets.py:402 -msgid "(list) Tag names, case-insensitive" -msgstr "(标签名称,不区分大小写" - -#: core/docs/drf/viewsets.py:408 -msgid "(gte) Minimum stock price" -msgstr "(gte) 最低股价" - -#: core/docs/drf/viewsets.py:414 -msgid "(lte) Maximum stock price" -msgstr "(lte) 最高股价" - -#: core/docs/drf/viewsets.py:420 -msgid "(exact) Only active products" -msgstr "(准确)只有活性产品" - -#: core/docs/drf/viewsets.py:426 -msgid "(iexact) Brand name" -msgstr "(iexact) 品牌名称" - -#: core/docs/drf/viewsets.py:438 -msgid "(gt) Minimum stock quantity" -msgstr "(gt) 最低库存量" - -#: core/docs/drf/viewsets.py:444 -msgid "(exact) Digital vs. physical" -msgstr "(准确)数字与实物" - -#: core/docs/drf/viewsets.py:451 +#: core/docs/drf/viewsets.py:385 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -604,244 +564,248 @@ msgstr "" "用逗号分隔的要排序的字段列表。前缀为 `-` 表示降序。 \n" "**允许:** uuid、评分、名称、标签、创建、修改、价格、随机" -#: core/docs/drf/viewsets.py:465 core/docs/drf/viewsets.py:466 +#: core/docs/drf/viewsets.py:399 core/docs/drf/viewsets.py:400 msgid "retrieve a single product (detailed view)" msgstr "检索单个产品(详细视图)" -#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:495 -#: core/docs/drf/viewsets.py:511 core/docs/drf/viewsets.py:527 -#: core/docs/drf/viewsets.py:543 core/docs/drf/viewsets.py:559 +#: core/docs/drf/viewsets.py:405 core/docs/drf/viewsets.py:429 +#: core/docs/drf/viewsets.py:445 core/docs/drf/viewsets.py:461 +#: core/docs/drf/viewsets.py:477 core/docs/drf/viewsets.py:493 msgid "Product UUID or slug" msgstr "产品 UUID 或 Slug" -#: core/docs/drf/viewsets.py:481 core/docs/drf/viewsets.py:482 +#: core/docs/drf/viewsets.py:415 core/docs/drf/viewsets.py:416 msgid "create a product" msgstr "创建产品" -#: core/docs/drf/viewsets.py:489 core/docs/drf/viewsets.py:490 +#: core/docs/drf/viewsets.py:423 core/docs/drf/viewsets.py:424 msgid "rewrite an existing product, preserving non-editable fields" msgstr "重写现有产品,保留不可编辑字段" -#: core/docs/drf/viewsets.py:505 core/docs/drf/viewsets.py:506 +#: core/docs/drf/viewsets.py:439 core/docs/drf/viewsets.py:440 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "更新现有产品的某些字段,保留不可编辑的字段" -#: core/docs/drf/viewsets.py:521 core/docs/drf/viewsets.py:522 +#: core/docs/drf/viewsets.py:455 core/docs/drf/viewsets.py:456 msgid "delete a product" msgstr "删除产品" -#: core/docs/drf/viewsets.py:537 core/docs/drf/viewsets.py:538 +#: core/docs/drf/viewsets.py:471 core/docs/drf/viewsets.py:472 msgid "lists all permitted feedbacks for a product" msgstr "列出产品的所有允许反馈" -#: core/docs/drf/viewsets.py:554 +#: core/docs/drf/viewsets.py:488 msgid "returns a snapshot of the product's SEO meta data" msgstr "返回产品的搜索引擎优化元数据快照" -#: core/docs/drf/viewsets.py:572 +#: core/docs/drf/viewsets.py:506 msgid "list all addresses" msgstr "列出所有地址" -#: core/docs/drf/viewsets.py:579 +#: core/docs/drf/viewsets.py:513 msgid "retrieve a single address" msgstr "检索单个地址" -#: core/docs/drf/viewsets.py:586 +#: core/docs/drf/viewsets.py:520 msgid "create a new address" msgstr "创建新地址" -#: core/docs/drf/viewsets.py:594 +#: core/docs/drf/viewsets.py:528 msgid "delete an address" msgstr "删除地址" -#: core/docs/drf/viewsets.py:601 +#: core/docs/drf/viewsets.py:535 msgid "update an entire address" msgstr "更新整个地址" -#: core/docs/drf/viewsets.py:609 +#: core/docs/drf/viewsets.py:543 msgid "partially update an address" msgstr "部分更新地址" -#: core/docs/drf/viewsets.py:617 +#: core/docs/drf/viewsets.py:551 msgid "autocomplete address suggestions" msgstr "自动完成地址输入" -#: core/docs/drf/viewsets.py:622 +#: core/docs/drf/viewsets.py:556 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "原始数据查询字符串,请附加来自地理 IP 端点的数据" -#: core/docs/drf/viewsets.py:628 +#: core/docs/drf/viewsets.py:562 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "限制结果数量,1 < limit < 10,默认:5" -#: core/docs/drf/viewsets.py:641 +#: core/docs/drf/viewsets.py:575 msgid "list all feedbacks (simple view)" msgstr "列出所有反馈(简单视图)" -#: core/docs/drf/viewsets.py:645 +#: core/docs/drf/viewsets.py:579 msgid "retrieve a single feedback (detailed view)" msgstr "检索单个反馈(详细视图)" -#: core/docs/drf/viewsets.py:649 +#: core/docs/drf/viewsets.py:583 msgid "create a feedback" msgstr "创建反馈" -#: core/docs/drf/viewsets.py:653 +#: core/docs/drf/viewsets.py:587 msgid "delete a feedback" msgstr "删除反馈" -#: core/docs/drf/viewsets.py:657 +#: core/docs/drf/viewsets.py:591 msgid "rewrite an existing feedback saving non-editables" msgstr "重写现有的反馈,保存不可编辑的内容" -#: core/docs/drf/viewsets.py:661 +#: core/docs/drf/viewsets.py:595 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "重写现有反馈的某些字段,保存不可编辑的内容" -#: core/docs/drf/viewsets.py:668 +#: core/docs/drf/viewsets.py:602 msgid "list all order–product relations (simple view)" msgstr "列出所有订单-产品关系(简单视图)" -#: core/docs/drf/viewsets.py:675 +#: core/docs/drf/viewsets.py:609 msgid "retrieve a single order–product relation (detailed view)" msgstr "检索单一订单-产品关系(详细视图)" -#: core/docs/drf/viewsets.py:682 +#: core/docs/drf/viewsets.py:616 msgid "create a new order–product relation" msgstr "创建新的订单-产品关系" -#: core/docs/drf/viewsets.py:689 +#: core/docs/drf/viewsets.py:623 msgid "replace an existing order–product relation" msgstr "替换现有的订单-产品关系" -#: core/docs/drf/viewsets.py:696 +#: core/docs/drf/viewsets.py:630 msgid "partially update an existing order–product relation" msgstr "部分更新现有的订单-产品关系" -#: core/docs/drf/viewsets.py:703 +#: core/docs/drf/viewsets.py:637 msgid "delete an order–product relation" msgstr "删除订单-产品关系" -#: core/docs/drf/viewsets.py:710 +#: core/docs/drf/viewsets.py:644 msgid "add or remove feedback on an order–product relation" msgstr "添加或删除订单与产品关系中的反馈信息" -#: core/elasticsearch/__init__.py:105 +#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 msgid "no search term provided." msgstr "未提供搜索条件。" -#: core/filters.py:64 core/filters.py:594 core/filters.py:623 +#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +msgid "Search" +msgstr "搜索" + +#: core/filters.py:66 core/filters.py:554 core/filters.py:583 msgid "UUID" msgstr "UUID" -#: core/filters.py:65 core/filters.py:429 core/filters.py:560 +#: core/filters.py:67 core/filters.py:399 core/filters.py:526 msgid "Name" msgstr "名称" -#: core/filters.py:66 core/filters.py:562 +#: core/filters.py:68 core/filters.py:528 msgid "Categories" msgstr "类别" -#: core/filters.py:68 +#: core/filters.py:70 msgid "Categories Slugs" msgstr "类别 蛞蝓" -#: core/filters.py:69 core/filters.py:437 +#: core/filters.py:71 core/filters.py:407 msgid "Tags" msgstr "标签" -#: core/filters.py:70 +#: core/filters.py:72 msgid "Min Price" msgstr "最低价格" -#: core/filters.py:71 +#: core/filters.py:73 msgid "Max Price" msgstr "最高价格" -#: core/filters.py:72 +#: core/filters.py:74 msgid "Is Active" msgstr "处于活动状态" -#: core/filters.py:73 +#: core/filters.py:75 msgid "Brand" msgstr "品牌" -#: core/filters.py:74 +#: core/filters.py:76 msgid "Attributes" msgstr "属性" -#: core/filters.py:75 +#: core/filters.py:77 msgid "Quantity" msgstr "数量" -#: core/filters.py:76 core/filters.py:431 core/filters.py:561 -#: core/models.py:287 core/models.py:381 core/models.py:534 +#: core/filters.py:78 core/filters.py:401 core/filters.py:527 +#: core/models.py:287 core/models.py:369 core/models.py:522 msgid "Slug" msgstr "蛞蝓" -#: core/filters.py:77 +#: core/filters.py:79 msgid "Is Digital" msgstr "是数字" -#: core/filters.py:78 +#: core/filters.py:80 msgid "Include sub-categories" msgstr "包括子类别" -#: core/filters.py:81 +#: core/filters.py:83 msgid "Include personal ordered" msgstr "包括个人订购的产品" -#: core/filters.py:83 core/models.py:538 +#: core/filters.py:85 core/models.py:526 msgid "SKU" msgstr "商品编号" -#: core/filters.py:166 +#: core/filters.py:161 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "必须有 category_uuid 才能使用 include_subcategories 标志" -#: core/filters.py:356 +#: core/filters.py:324 msgid "Search (ID, product name or part number)" msgstr "搜索(ID、产品名称或零件编号)" -#: core/filters.py:359 +#: core/filters.py:327 msgid "Bought after (inclusive)" msgstr "之后购买(含)" -#: core/filters.py:360 +#: core/filters.py:328 msgid "Bought before (inclusive)" msgstr "之前购买(含)" -#: core/filters.py:363 core/filters.py:410 core/filters.py:625 +#: core/filters.py:331 core/filters.py:378 core/filters.py:585 msgid "User email" msgstr "用户电子邮件" -#: core/filters.py:364 core/filters.py:411 core/filters.py:603 -#: core/filters.py:624 +#: core/filters.py:332 core/filters.py:379 core/filters.py:563 +#: core/filters.py:584 msgid "User UUID" msgstr "用户 UUID" -#: core/filters.py:365 +#: core/filters.py:333 msgid "Status" msgstr "现状" -#: core/filters.py:369 +#: core/filters.py:337 msgid "Human Readable ID" msgstr "人可读 ID" -#: core/filters.py:430 +#: core/filters.py:400 msgid "Parent" msgstr "家长" -#: core/filters.py:434 +#: core/filters.py:404 msgid "Whole category(has at least 1 product or not)" msgstr "整个类别(是否至少有 1 个产品)" -#: core/filters.py:438 +#: core/filters.py:408 msgid "Level" msgstr "级别" -#: core/filters.py:598 +#: core/filters.py:558 msgid "Product UUID" msgstr "产品 UUID" @@ -896,7 +860,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "请提供 order_uuid 或 order_hr_id(互斥)!" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:821 +#: core/graphene/mutations.py:527 core/viewsets.py:839 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "order.buy() 方法中的类型有误:{type(instance)!s}" @@ -957,37 +921,37 @@ msgstr "请以字符串形式发送属性,格式如 attr1=value1,attr2=value2" msgid "add or delete a feedback for orderproduct" msgstr "添加或删除订单产品的反馈信息" -#: core/graphene/mutations.py:555 +#: core/graphene/mutations.py:556 msgid "action must be either `add` or `remove`" msgstr "操作必须是 \"添加 \"或 \"删除\"!" -#: core/graphene/mutations.py:558 +#: core/graphene/mutations.py:559 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "未找到订购产品 {order_product_uuid}!" -#: core/graphene/mutations.py:621 +#: core/graphene/mutations.py:622 msgid "original address string provided by the user" msgstr "用户提供的原始地址字符串" -#: core/graphene/mutations.py:655 core/models.py:896 core/models.py:909 -#: core/models.py:1348 core/models.py:1377 core/models.py:1402 -#: core/viewsets.py:824 +#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 +#: core/models.py:1234 core/models.py:1263 core/models.py:1288 +#: core/viewsets.py:842 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} 不存在:{uuid}!" -#: core/graphene/mutations.py:668 +#: core/graphene/mutations.py:669 msgid "limit must be between 1 and 10" msgstr "限值必须在 1 和 10 之间" -#: core/graphene/mutations.py:713 +#: core/graphene/mutations.py:714 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - 工作起来得心应手" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:666 core/models.py:1234 -#: core/models.py:1809 +#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 +#: core/models.py:1686 msgid "attributes" msgstr "属性" @@ -1000,11 +964,11 @@ msgid "groups of attributes" msgstr "属性组" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:620 +#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:612 msgid "categories" msgstr "类别" -#: core/graphene/object_types.py:124 core/models.py:395 +#: core/graphene/object_types.py:124 core/models.py:383 msgid "brands" msgstr "品牌" @@ -1059,7 +1023,7 @@ msgid "represents feedback from a user." msgstr "代表用户的反馈意见。" #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1228 +#: core/models.py:1110 msgid "notifications" msgstr "通知" @@ -1067,7 +1031,7 @@ msgstr "通知" msgid "download url for this order product if applicable" msgstr "此订单产品的下载网址(如适用" -#: core/graphene/object_types.py:400 core/models.py:1938 +#: core/graphene/object_types.py:400 core/models.py:1791 msgid "feedback" msgstr "反馈意见" @@ -1075,7 +1039,7 @@ msgstr "反馈意见" msgid "a list of order products in this order" msgstr "该订单中的订单产品列表" -#: core/graphene/object_types.py:436 core/models.py:1198 +#: core/graphene/object_types.py:436 core/models.py:1080 msgid "billing address" msgstr "账单地址" @@ -1101,7 +1065,7 @@ msgstr "订单中的所有产品都是数字产品吗?" msgid "transactions for this order" msgstr "此订单的交易" -#: core/graphene/object_types.py:465 core/models.py:1262 +#: core/graphene/object_types.py:465 core/models.py:1144 msgid "orders" msgstr "订单" @@ -1113,15 +1077,15 @@ msgstr "图片 URL" msgid "product's images" msgstr "产品图片" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:477 +#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 msgid "category" msgstr "类别" -#: core/graphene/object_types.py:502 core/models.py:1939 +#: core/graphene/object_types.py:502 core/models.py:1792 msgid "feedbacks" msgstr "反馈意见" -#: core/graphene/object_types.py:503 core/models.py:394 core/models.py:486 +#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 msgid "brand" msgstr "品牌" @@ -1153,7 +1117,7 @@ msgstr "反馈数量" msgid "only available for personal orders" msgstr "仅限个人订购的产品" -#: core/graphene/object_types.py:534 core/models.py:548 +#: core/graphene/object_types.py:534 core/models.py:536 msgid "products" msgstr "产品" @@ -1165,7 +1129,7 @@ msgstr "促销代码" msgid "products on sale" msgstr "销售产品" -#: core/graphene/object_types.py:651 core/models.py:843 +#: core/graphene/object_types.py:651 core/models.py:784 msgid "promotions" msgstr "促销活动" @@ -1173,7 +1137,7 @@ msgstr "促销活动" msgid "vendor" msgstr "供应商" -#: core/graphene/object_types.py:656 core/models.py:547 +#: core/graphene/object_types.py:656 core/models.py:535 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1181,11 +1145,11 @@ msgstr "供应商" msgid "product" msgstr "产品" -#: core/graphene/object_types.py:667 core/models.py:868 +#: core/graphene/object_types.py:667 core/models.py:807 msgid "wishlisted products" msgstr "心愿单上的产品" -#: core/graphene/object_types.py:673 core/models.py:885 +#: core/graphene/object_types.py:673 core/models.py:824 msgid "wishlists" msgstr "愿望清单" @@ -1193,7 +1157,7 @@ msgstr "愿望清单" msgid "tagged products" msgstr "标签产品" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:492 +#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 msgid "product tags" msgstr "产品标签" @@ -1299,7 +1263,7 @@ msgstr "父属性组" msgid "attribute group's name" msgstr "属性组名称" -#: core/models.py:100 core/models.py:628 +#: core/models.py:100 core/models.py:620 msgid "attribute group" msgstr "属性组" @@ -1439,51 +1403,61 @@ msgstr "类别说明" msgid "tags that help describe or group this category" msgstr "有助于描述或归类该类别的标签" -#: core/models.py:299 core/models.py:387 +#: core/models.py:299 core/models.py:375 msgid "priority" msgstr "优先权" -#: core/models.py:340 +#: core/models.py:318 +msgid "" +"Represents a Brand object in the system. This class handles information and " +"attributes related to a brand, including its name, logos, description, " +"associated categories, a unique slug, and priority order. It allows for the " +"organization and representation of brand-related data within the " +"application." +msgstr "" +"代表系统中的品牌对象。该类用于处理与品牌相关的信息和属性,包括名称、徽标、描述、相关类别、唯一标签和优先顺序。它允许在应用程序中组织和表示与品牌相关的数据。" + +#: core/models.py:328 msgid "name of this brand" msgstr "品牌名称" -#: core/models.py:341 +#: core/models.py:329 msgid "brand name" msgstr "品牌名称" -#: core/models.py:348 +#: core/models.py:336 msgid "upload a logo representing this brand" msgstr "上传代表该品牌的徽标" -#: core/models.py:350 +#: core/models.py:338 msgid "brand small image" msgstr "品牌小形象" -#: core/models.py:356 +#: core/models.py:344 msgid "upload a big logo representing this brand" msgstr "上传代表该品牌的大徽标" -#: core/models.py:358 +#: core/models.py:346 msgid "brand big image" msgstr "品牌大形象" -#: core/models.py:363 +#: core/models.py:351 msgid "add a detailed description of the brand" msgstr "添加品牌的详细描述" -#: core/models.py:364 +#: core/models.py:352 msgid "brand description" msgstr "品牌描述" -#: core/models.py:369 +#: core/models.py:357 msgid "optional categories that this brand is associated with" msgstr "与该品牌相关的可选类别" -#: core/models.py:370 +#: core/models.py:358 msgid "associated categories" msgstr "类别" -#: core/models.py:400 +#: core/models.py:388 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1495,68 +1469,68 @@ msgstr "" "代表系统中管理的产品库存。该类提供有关供应商、产品及其库存信息之间关系的详细信息,以及与库存相关的属性,如价格、购买价格、数量、SKU " "和数字资产。它是库存管理系统的一部分,用于跟踪和评估不同供应商提供的产品。" -#: core/models.py:412 +#: core/models.py:400 msgid "the vendor supplying this product stock" msgstr "提供该产品库存的供应商" -#: core/models.py:413 +#: core/models.py:401 msgid "associated vendor" msgstr "相关供应商" -#: core/models.py:417 +#: core/models.py:405 msgid "final price to the customer after markups" msgstr "加价后给客户的最终价格" -#: core/models.py:418 +#: core/models.py:406 msgid "selling price" msgstr "销售价格" -#: core/models.py:423 +#: core/models.py:411 msgid "the product associated with this stock entry" msgstr "与该库存条目相关的产品" -#: core/models.py:424 core/models.py:708 core/models.py:765 -#: core/models.py:1709 +#: core/models.py:412 core/models.py:683 core/models.py:730 +#: core/models.py:1583 msgid "associated product" msgstr "相关产品" -#: core/models.py:431 +#: core/models.py:419 msgid "the price paid to the vendor for this product" msgstr "为该产品支付给供应商的价格" -#: core/models.py:432 +#: core/models.py:420 msgid "vendor purchase price" msgstr "供应商购买价格" -#: core/models.py:436 +#: core/models.py:424 msgid "available quantity of the product in stock" msgstr "产品的可用库存量" -#: core/models.py:437 +#: core/models.py:425 msgid "quantity in stock" msgstr "库存数量" -#: core/models.py:441 +#: core/models.py:429 msgid "vendor-assigned SKU for identifying the product" msgstr "供应商指定的 SKU,用于识别产品" -#: core/models.py:442 +#: core/models.py:430 msgid "vendor sku" msgstr "供应商 SKU" -#: core/models.py:448 +#: core/models.py:436 msgid "digital file associated with this stock if applicable" msgstr "与该库存相关的数字文件(如适用" -#: core/models.py:449 +#: core/models.py:437 msgid "digital file" msgstr "数字文件" -#: core/models.py:458 +#: core/models.py:446 msgid "stock entries" msgstr "库存条目" -#: core/models.py:463 +#: core/models.py:451 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1570,55 +1544,55 @@ msgstr "" "代表产品的属性,如类别、品牌、标签、数字状态、名称、描述、零件编号和标签。提供相关的实用属性,以检索评级、反馈计数、价格、数量和订单总数。设计用于处理电子商务或库存管理的系统。该类可与相关模型(如类别、品牌和" " ProductTag)交互,并对频繁访问的属性进行缓存管理,以提高性能。它用于在应用程序中定义和操作产品数据及其相关信息。" -#: core/models.py:476 +#: core/models.py:464 msgid "category this product belongs to" msgstr "该产品所属类别" -#: core/models.py:485 +#: core/models.py:473 msgid "optionally associate this product with a brand" msgstr "可选择将该产品与某个品牌联系起来" -#: core/models.py:491 +#: core/models.py:479 msgid "tags that help describe or group this product" msgstr "有助于描述或归类该产品的标签" -#: core/models.py:496 +#: core/models.py:484 msgid "indicates whether this product is digitally delivered" msgstr "表示该产品是否以数字方式交付" -#: core/models.py:497 +#: core/models.py:485 msgid "is product digital" msgstr "产品是否数字化" -#: core/models.py:503 +#: core/models.py:491 msgid "provide a clear identifying name for the product" msgstr "为产品提供一个明确的标识名称" -#: core/models.py:504 +#: core/models.py:492 msgid "product name" msgstr "产品名称" -#: core/models.py:509 core/models.py:831 +#: core/models.py:497 core/models.py:772 msgid "add a detailed description of the product" msgstr "添加产品的详细描述" -#: core/models.py:510 +#: core/models.py:498 msgid "product description" msgstr "产品说明" -#: core/models.py:517 +#: core/models.py:505 msgid "part number for this product" msgstr "该产品的零件编号" -#: core/models.py:518 +#: core/models.py:506 msgid "part number" msgstr "部件编号" -#: core/models.py:537 +#: core/models.py:525 msgid "stock keeping unit for this product" msgstr "该产品的库存单位" -#: core/models.py:607 +#: core/models.py:599 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 " @@ -1629,303 +1603,376 @@ msgid "" msgstr "" "代表系统中的一个属性。该类用于定义和管理属性,属性是可与其他实体关联的自定义数据块。属性有相关的类别、组、值类型和名称。该模型支持多种类型的值,包括字符串、整数、浮点数、布尔值、数组和对象。这样就可以实现动态、灵活的数据结构。" -#: core/models.py:619 +#: core/models.py:611 msgid "category of this attribute" msgstr "该属性的类别" -#: core/models.py:627 +#: core/models.py:619 msgid "group of this attribute" msgstr "该属性的组" -#: core/models.py:633 +#: core/models.py:625 msgid "string" msgstr "字符串" -#: core/models.py:634 +#: core/models.py:626 msgid "integer" msgstr "整数" -#: core/models.py:635 +#: core/models.py:627 msgid "float" msgstr "浮动" -#: core/models.py:636 +#: core/models.py:628 msgid "boolean" msgstr "布尔型" -#: core/models.py:637 +#: core/models.py:629 msgid "array" msgstr "阵列" -#: core/models.py:638 +#: core/models.py:630 msgid "object" msgstr "对象" -#: core/models.py:640 +#: core/models.py:632 msgid "type of the attribute's value" msgstr "属性值的类型" -#: core/models.py:641 +#: core/models.py:633 msgid "value type" msgstr "价值类型" -#: core/models.py:646 +#: core/models.py:638 msgid "name of this attribute" msgstr "该属性的名称" -#: core/models.py:647 +#: core/models.py:639 msgid "attribute's name" msgstr "属性名称" -#: core/models.py:653 +#: core/models.py:645 msgid "is filterable" msgstr "可过滤" -#: core/models.py:654 +#: core/models.py:646 msgid "designates whether this attribute can be used for filtering or not" msgstr "指定该属性是否可用于筛选" -#: core/models.py:665 core/models.py:700 +#: core/models.py:657 core/models.py:675 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "属性" -#: core/models.py:699 +#: core/models.py:663 +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:674 msgid "attribute of this value" msgstr "该值的属性" -#: core/models.py:707 +#: core/models.py:682 msgid "the specific product associated with this attribute's value" msgstr "与该属性值相关的特定产品" -#: core/models.py:713 +#: core/models.py:688 msgid "the specific value for this attribute" msgstr "该属性的具体值" -#: core/models.py:747 +#: core/models.py:701 +msgid "" +"Represents a product image associated with a product in the system. This " +"class is designed to manage images for products, including functionality for" +" uploading image files, associating them with specific products, and " +"determining their display order. It also includes an accessibility feature " +"with alternative text for the images." +msgstr "" +"代表与系统中产品相关联的产品图片。该类用于管理产品图片,包括上传图片文件、将图片与特定产品关联以及确定图片显示顺序等功能。它还包括一个为图像提供替代文本的可访问性功能。" + +#: core/models.py:712 msgid "provide alternative text for the image for accessibility" msgstr "为图像提供替代文字,以便于访问" -#: core/models.py:748 +#: core/models.py:713 msgid "image alt text" msgstr "图片 alt 文本" -#: core/models.py:751 +#: core/models.py:716 msgid "upload the image file for this product" msgstr "上传该产品的图片文件" -#: core/models.py:752 core/models.py:777 +#: core/models.py:717 core/models.py:742 msgid "product image" msgstr "产品图片" -#: core/models.py:758 +#: core/models.py:723 msgid "determines the order in which images are displayed" msgstr "确定图像的显示顺序" -#: core/models.py:759 +#: core/models.py:724 msgid "display priority" msgstr "显示优先级" -#: core/models.py:764 +#: core/models.py:729 msgid "the product that this image represents" msgstr "该图片所代表的产品" -#: core/models.py:778 +#: core/models.py:743 msgid "product images" msgstr "产品图片" -#: core/models.py:819 +#: core/models.py:748 +msgid "" +"Represents a promotional campaign for products with a discount. This class " +"is used to define and manage promotional campaigns that offer a percentage-" +"based discount for products. The class includes attributes for setting the " +"discount rate, providing details about the promotion, and linking it to the " +"applicable products. It integrates with the product catalog to determine the" +" affected items in the campaign." +msgstr "" +"代表有折扣的产品促销活动。该类用于定义和管理为产品提供百分比折扣的促销活动。该类包括用于设置折扣率、提供促销详情以及将其链接到适用产品的属性。它与产品目录集成,以确定促销活动中受影响的产品。" + +#: core/models.py:760 msgid "percentage discount for the selected products" msgstr "所选产品的折扣百分比" -#: core/models.py:820 +#: core/models.py:761 msgid "discount percentage" msgstr "折扣百分比" -#: core/models.py:825 +#: core/models.py:766 msgid "provide a unique name for this promotion" msgstr "为该促销活动提供一个独特的名称" -#: core/models.py:826 +#: core/models.py:767 msgid "promotion name" msgstr "推广名称" -#: core/models.py:832 +#: core/models.py:773 msgid "promotion description" msgstr "促销说明" -#: core/models.py:837 +#: core/models.py:778 msgid "select which products are included in this promotion" msgstr "选择促销活动包括哪些产品" -#: core/models.py:838 +#: core/models.py:779 msgid "included products" msgstr "包括产品" -#: core/models.py:842 +#: core/models.py:783 msgid "promotion" msgstr "促销活动" -#: core/models.py:867 +#: core/models.py:794 +msgid "" +"Represents a user's wishlist for storing and managing desired products. The " +"class provides functionality to manage a collection of products, supporting " +"operations such as adding and removing products, as well as supporting " +"operations for adding and removing multiple products at once." +msgstr "代表用户用于存储和管理所需产品的愿望清单。该类提供管理产品集合的功能,支持添加和删除产品等操作,还支持同时添加和删除多个产品的操作。" + +#: core/models.py:806 msgid "products that the user has marked as wanted" msgstr "用户标记为想要的产品" -#: core/models.py:875 +#: core/models.py:814 msgid "user who owns this wishlist" msgstr "拥有此愿望清单的用户" -#: core/models.py:876 +#: core/models.py:815 msgid "wishlist owner" msgstr "心愿单所有者" -#: core/models.py:884 +#: core/models.py:823 msgid "wishlist" msgstr "愿望清单" -#: core/models.py:951 +#: core/models.py:865 +msgid "" +"Represents a documentary record tied to a product. This class is used to " +"store information about documentaries related to specific products, " +"including file uploads and their metadata. It contains methods and " +"properties to handle the file type and storage path for the documentary " +"files. It extends functionality from specific mixins and provides additional" +" custom features." +msgstr "" +"代表与产品相关的文档记录。该类用于存储与特定产品相关的文档信息,包括文件上传及其元数据。它包含处理文件类型和文档文件存储路径的方法和属性。它扩展了特定混合类的功能,并提供了额外的自定义功能。" + +#: core/models.py:878 msgid "documentary" msgstr "纪录片" -#: core/models.py:952 +#: core/models.py:879 msgid "documentaries" msgstr "纪录片" -#: core/models.py:962 +#: core/models.py:889 msgid "unresolved" msgstr "未解决" -#: core/models.py:1008 +#: core/models.py:894 +msgid "" +"Represents an address entity that includes location details and associations" +" with a user. Provides functionality for geographic and address data " +"storage, as well as integration with geocoding services. This class is " +"designed to store detailed address information including components like " +"street, city, region, country, and geolocation (longitude and latitude). It " +"supports integration with geocoding APIs, enabling the storage of raw API " +"responses for further processing or inspection. The class also allows " +"associating an address with a user, facilitating personalized data handling." +msgstr "" +"代表一个地址实体,其中包括位置详情以及与用户的关联。提供地理和地址数据存储功能,以及与地理编码服务集成的功能。该类旨在存储详细的地址信息,包括街道、城市、地区、国家和地理位置(经度和纬度)等组件。它支持与地理编码" +" API 集成,可存储原始 API 响应,以便进一步处理或检查。该类还可以将地址与用户关联起来,方便个性化数据处理。" + +#: core/models.py:909 msgid "address line for the customer" msgstr "客户地址栏" -#: core/models.py:1009 +#: core/models.py:910 msgid "address line" msgstr "地址栏" -#: core/models.py:1011 +#: core/models.py:912 msgid "street" msgstr "街道" -#: core/models.py:1012 +#: core/models.py:913 msgid "district" msgstr "地区" -#: core/models.py:1013 +#: core/models.py:914 msgid "city" msgstr "城市" -#: core/models.py:1014 +#: core/models.py:915 msgid "region" msgstr "地区" -#: core/models.py:1015 +#: core/models.py:916 msgid "postal code" msgstr "邮政编码" -#: core/models.py:1016 +#: core/models.py:917 msgid "country" msgstr "国家" -#: core/models.py:1023 +#: core/models.py:924 msgid "geolocation point: (longitude, latitude)" msgstr "地理位置点(经度、纬度)" -#: core/models.py:1026 +#: core/models.py:927 msgid "full JSON response from geocoder for this address" msgstr "地理编码器对此地址的完整 JSON 响应" -#: core/models.py:1031 +#: core/models.py:932 msgid "stored JSON response from the geocoding service" msgstr "存储的来自地理编码服务的 JSON 响应" -#: core/models.py:1039 +#: core/models.py:940 msgid "address" msgstr "地址" -#: core/models.py:1040 +#: core/models.py:941 msgid "addresses" msgstr "地址" -#: core/models.py:1085 +#: core/models.py:953 +msgid "" +"Represents a promotional code that can be used for discounts, managing its " +"validity, type of discount, and application. The PromoCode class stores " +"details about a promotional code, including its unique identifier, discount " +"properties (amount or percentage), validity period, associated user (if " +"any), and status of its usage. It includes functionality to validate and " +"apply the promo code to an order while ensuring constraints are met." +msgstr "" +"代表可用于折扣的促销代码,管理其有效期、折扣类型和应用。PromoCode " +"类存储促销代码的详细信息,包括其唯一标识符、折扣属性(金额或百分比)、有效期、关联用户(如有)及其使用状态。该类包含验证促销代码并将其应用于订单的功能,同时确保符合约束条件。" + +#: core/models.py:967 msgid "unique code used by a user to redeem a discount" msgstr "用户用于兑换折扣的唯一代码" -#: core/models.py:1086 +#: core/models.py:968 msgid "promo code identifier" msgstr "促销代码标识符" -#: core/models.py:1093 +#: core/models.py:975 msgid "fixed discount amount applied if percent is not used" msgstr "如果不使用百分比,则使用固定折扣额" -#: core/models.py:1094 +#: core/models.py:976 msgid "fixed discount amount" msgstr "固定折扣额" -#: core/models.py:1100 +#: core/models.py:982 msgid "percentage discount applied if fixed amount is not used" msgstr "未使用固定金额时适用的折扣百分比" -#: core/models.py:1101 +#: core/models.py:983 msgid "percentage discount" msgstr "折扣百分比" -#: core/models.py:1106 +#: core/models.py:988 msgid "timestamp when the promocode expires" msgstr "促销代码过期的时间戳" -#: core/models.py:1107 +#: core/models.py:989 msgid "end validity time" msgstr "结束有效时间" -#: core/models.py:1112 +#: core/models.py:994 msgid "timestamp from which this promocode is valid" msgstr "该促销代码有效的时间戳" -#: core/models.py:1113 +#: core/models.py:995 msgid "start validity time" msgstr "开始有效时间" -#: core/models.py:1118 +#: core/models.py:1000 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "使用促销代码的时间戳,如果尚未使用,则留空" -#: core/models.py:1119 +#: core/models.py:1001 msgid "usage timestamp" msgstr "使用时间戳" -#: core/models.py:1124 +#: core/models.py:1006 msgid "user assigned to this promocode if applicable" msgstr "分配给此促销代码的用户(如适用" -#: core/models.py:1125 +#: core/models.py:1007 msgid "assigned user" msgstr "指定用户" -#: core/models.py:1132 +#: core/models.py:1014 msgid "promo code" msgstr "促销代码" -#: core/models.py:1133 +#: core/models.py:1015 msgid "promo codes" msgstr "促销代码" -#: core/models.py:1140 +#: core/models.py:1022 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "只能定义一种折扣类型(金额或百分比),而不能同时定义两种类型或两者都不定义。" -#: core/models.py:1155 +#: core/models.py:1037 msgid "promocode already used" msgstr "促销代码已被使用" -#: core/models.py:1171 +#: core/models.py:1053 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "促销代码 {self.uuid} 的折扣类型无效!" -#: core/models.py:1180 +#: core/models.py:1062 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 " @@ -1936,278 +1983,317 @@ msgid "" msgstr "" "代表用户下达的订单。该类在应用程序中模拟订单,包括订单的各种属性,如账单和发货信息、状态、关联用户、通知和相关操作。订单可以有关联的产品,可以应用促销活动,设置地址,更新发货或账单详情。同样,该功能还支持在订单生命周期中管理产品。" -#: core/models.py:1197 +#: core/models.py:1079 msgid "the billing address used for this order" msgstr "该订单使用的账单地址" -#: core/models.py:1205 +#: core/models.py:1087 msgid "optional promo code applied to this order" msgstr "此订单可选择使用促销代码" -#: core/models.py:1206 +#: core/models.py:1088 msgid "applied promo code" msgstr "应用促销代码" -#: core/models.py:1214 +#: core/models.py:1096 msgid "the shipping address used for this order" msgstr "该订单使用的送货地址" -#: core/models.py:1215 +#: core/models.py:1097 msgid "shipping address" msgstr "送货地址" -#: core/models.py:1221 +#: core/models.py:1103 msgid "current status of the order in its lifecycle" msgstr "订单在其生命周期中的当前状态" -#: core/models.py:1222 +#: core/models.py:1104 msgid "order status" msgstr "订单状态" -#: core/models.py:1227 core/models.py:1686 +#: core/models.py:1109 core/models.py:1560 msgid "json structure of notifications to display to users" msgstr "向用户显示的通知的 JSON 结构,在管理用户界面中使用表格视图" -#: core/models.py:1233 +#: core/models.py:1115 msgid "json representation of order attributes for this order" msgstr "该订单属性的 JSON 表示形式" -#: core/models.py:1239 +#: core/models.py:1121 msgid "the user who placed the order" msgstr "下订单的用户" -#: core/models.py:1240 +#: core/models.py:1122 msgid "user" msgstr "用户" -#: core/models.py:1246 +#: core/models.py:1128 msgid "the timestamp when the order was finalized" msgstr "订单确定的时间戳" -#: core/models.py:1247 +#: core/models.py:1129 msgid "buy time" msgstr "购买时间" -#: core/models.py:1254 +#: core/models.py:1136 msgid "a human-readable identifier for the order" msgstr "订单的人工可读标识符" -#: core/models.py:1255 +#: core/models.py:1137 msgid "human readable id" msgstr "人类可读 ID" -#: core/models.py:1261 +#: core/models.py:1143 msgid "order" msgstr "订购" -#: core/models.py:1282 +#: core/models.py:1168 msgid "a user must have only one pending order at a time" msgstr "用户每次只能有一个挂单!" -#: core/models.py:1316 +#: core/models.py:1202 msgid "you cannot add products to an order that is not a pending one" msgstr "您不能向非待处理订单添加产品" -#: core/models.py:1321 +#: core/models.py:1207 msgid "you cannot add inactive products to order" msgstr "您不能在订单中添加非活动产品" -#: core/models.py:1338 +#: core/models.py:1224 msgid "you cannot add more products than available in stock" msgstr "添加的产品数量不能超过现有库存" -#: core/models.py:1360 core/models.py:1385 core/models.py:1393 +#: core/models.py:1246 core/models.py:1271 core/models.py:1279 msgid "you cannot remove products from an order that is not a pending one" msgstr "您不能从非待处理订单中删除产品" -#: core/models.py:1381 +#: core/models.py:1267 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "查询 <{query}> 时,{name} 不存在!" -#: core/models.py:1413 +#: core/models.py:1299 msgid "promocode does not exist" msgstr "促销代码不存在" -#: core/models.py:1419 +#: core/models.py:1305 msgid "you can only buy physical products with shipping address specified" msgstr "您只能购买指定送货地址的实物产品!" -#: core/models.py:1438 +#: core/models.py:1324 msgid "address does not exist" msgstr "地址不存在" -#: core/models.py:1459 core/models.py:1528 +#: core/models.py:1345 core/models.py:1414 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "您现在无法购买,请稍后再试。" -#: core/models.py:1462 core/models.py:1524 +#: core/models.py:1348 core/models.py:1410 msgid "invalid force value" msgstr "力值无效" -#: core/models.py:1468 core/models.py:1531 +#: core/models.py:1354 core/models.py:1417 msgid "you cannot purchase an empty order!" msgstr "您不能购买空单!" -#: core/models.py:1487 +#: core/models.py:1373 msgid "you cannot buy an order without a user" msgstr "没有用户就无法购买订单!" -#: core/models.py:1501 +#: core/models.py:1387 msgid "a user without a balance cannot buy with balance" msgstr "没有余额的用户不能使用余额购买!" -#: core/models.py:1506 +#: core/models.py:1392 msgid "insufficient funds to complete the order" msgstr "资金不足,无法完成订单" -#: core/models.py:1540 +#: core/models.py:1426 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "未经注册不能购买,请提供以下信息:客户姓名、客户电子邮件、客户电话号码" -#: core/models.py:1549 +#: core/models.py:1435 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "付款方式无效:来自 {available_payment_methods} 的 {payment_method} !" -#: core/models.py:1674 +#: core/models.py:1533 +msgid "" +"Represents products associated with orders and their attributes. The " +"OrderProduct model maintains information about a product that is part of an " +"order, including details such as purchase price, quantity, product " +"attributes, and status. It manages notifications for the user and " +"administrators and handles operations such as returning the product balance " +"or adding feedback. This model also provides methods and properties that " +"support business logic, such as calculating the total price or generating a " +"download URL for digital products. The model integrates with the Order and " +"Product models and stores a reference to them." +msgstr "" +"代表与订单及其属性相关联的产品。OrderProduct " +"模型维护订单中产品的相关信息,包括购买价格、数量、产品属性和状态等详细信息。它为用户和管理员管理通知,并处理返回产品余额或添加反馈等操作。该模型还提供支持业务逻辑的方法和属性,如计算总价或为数字产品生成下载" +" URL。该模型与订单和产品模型集成,并存储对它们的引用。" + +#: core/models.py:1548 msgid "the price paid by the customer for this product at purchase time" msgstr "客户购买该产品时支付的价格" -#: core/models.py:1675 +#: core/models.py:1549 msgid "purchase price at order time" msgstr "订购时的购买价格" -#: core/models.py:1680 +#: core/models.py:1554 msgid "internal comments for admins about this ordered product" msgstr "管理员对该订购产品的内部评论" -#: core/models.py:1681 +#: core/models.py:1555 msgid "internal comments" msgstr "内部意见" -#: core/models.py:1687 +#: core/models.py:1561 msgid "user notifications" msgstr "用户通知" -#: core/models.py:1692 +#: core/models.py:1566 msgid "json representation of this item's attributes" msgstr "该项属性的 JSON 表示形式" -#: core/models.py:1693 +#: core/models.py:1567 msgid "ordered product attributes" msgstr "有序的产品属性" -#: core/models.py:1698 +#: core/models.py:1572 msgid "reference to the parent order that contains this product" msgstr "对包含该产品的父订单的引用" -#: core/models.py:1699 +#: core/models.py:1573 msgid "parent order" msgstr "父顺序" -#: core/models.py:1708 +#: core/models.py:1582 msgid "the specific product associated with this order line" msgstr "与该订单项目相关的具体产品" -#: core/models.py:1715 +#: core/models.py:1589 msgid "quantity of this specific product in the order" msgstr "订单中该特定产品的数量" -#: core/models.py:1716 +#: core/models.py:1590 msgid "product quantity" msgstr "产品数量" -#: core/models.py:1723 +#: core/models.py:1597 msgid "current status of this product in the order" msgstr "订单中该产品的当前状态" -#: core/models.py:1724 +#: core/models.py:1598 msgid "product line status" msgstr "产品系列状态" -#: core/models.py:1784 +#: core/models.py:1661 msgid "order product must have an order" msgstr "订单产品必须有相关的订单!" -#: core/models.py:1786 +#: core/models.py:1663 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "为反馈指定了错误的操作:{action}!" -#: core/models.py:1800 +#: core/models.py:1677 msgid "you cannot feedback an order which is not received" msgstr "您不能反馈未收到的订单" -#: core/models.py:1806 +#: core/models.py:1683 msgid "name" msgstr "名称" -#: core/models.py:1807 +#: core/models.py:1684 msgid "URL of the integration" msgstr "集成的 URL" -#: core/models.py:1808 +#: core/models.py:1685 msgid "authentication credentials" msgstr "认证证书" -#: core/models.py:1822 +#: core/models.py:1699 msgid "you can only have one default CRM provider" msgstr "只能有一个默认 CRM 提供商" -#: core/models.py:1826 +#: core/models.py:1703 msgid "CRM" msgstr "客户关系管理" -#: core/models.py:1827 +#: core/models.py:1704 msgid "CRMs" msgstr "客户关系管理" -#: core/models.py:1839 +#: core/models.py:1716 msgid "order CRM link" msgstr "订单的客户关系管理链接" -#: core/models.py:1840 +#: core/models.py:1717 msgid "orders CRM links" msgstr "订单的客户关系管理链接" -#: core/models.py:1874 +#: core/models.py:1722 +msgid "" +"Represents the downloading functionality for digital assets associated with " +"orders. The DigitalAssetDownload class provides the ability to manage and " +"access downloads related to order products. It maintains information about " +"the associated order product, the number of downloads, and whether the asset" +" is publicly visible. It includes a method to generate a URL for downloading" +" the asset when the associated order is in a completed status." +msgstr "" +"代表与订单相关的数字资产的下载功能。DigitalAssetDownload " +"类提供了管理和访问与订单产品相关的下载的功能。该类维护相关订单产品的信息、下载次数以及资产是否公开可见。当相关订单处于完成状态时,该类包含一个生成用于下载资产的" +" URL 的方法。" + +#: core/models.py:1736 msgid "download" msgstr "下载" -#: core/models.py:1875 +#: core/models.py:1737 msgid "downloads" msgstr "下载" -#: core/models.py:1883 +#: core/models.py:1745 msgid "you can not download a digital asset for a non-finished order" msgstr "您无法下载未完成订单的数字资产" -#: core/models.py:1913 +#: core/models.py:1754 +msgid "" +"Manages user feedback for products. This class is designed to capture and " +"store user feedback for specific products that they have purchased. It " +"contains attributes to store user comments, a reference to the related " +"product in the order, and a user-assigned rating. The class uses database " +"fields to effectively model and manage feedback data." +msgstr "" +"管理产品的用户反馈。该类用于捕获和存储用户对其购买的特定产品的反馈。它包含用于存储用户评论的属性、订单中相关产品的引用以及用户指定的评分。该类使用数据库字段对反馈数据进行有效建模和管理。" + +#: core/models.py:1766 msgid "user-provided comments about their experience with the product" msgstr "用户提供的产品使用体验评论" -#: core/models.py:1914 +#: core/models.py:1767 msgid "feedback comments" msgstr "反馈意见" -#: core/models.py:1921 +#: core/models.py:1774 msgid "" "references the specific product in an order that this feedback is about" msgstr "引用该反馈意见涉及的订单中的具体产品" -#: core/models.py:1922 +#: core/models.py:1775 msgid "related order product" msgstr "相关订购产品" -#: core/models.py:1927 +#: core/models.py:1780 msgid "user-assigned rating for the product" msgstr "用户对产品的评分" -#: core/models.py:1928 +#: core/models.py:1781 msgid "product rating" msgstr "产品评级" @@ -2413,17 +2499,17 @@ msgstr "超时值无效,必须介于 0 和 216000 秒之间" msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME}| 联系我们" -#: core/utils/emailing.py:64 +#: core/utils/emailing.py:74 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME}| 订单确认" -#: core/utils/emailing.py:99 +#: core/utils/emailing.py:109 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | 订单已送达" -#: core/utils/emailing.py:187 +#: core/utils/emailing.py:197 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | 授予的促销代码" @@ -2445,15 +2531,15 @@ msgstr "图像尺寸不应超过 w{max_width} x h{max_height} 像素!" msgid "invalid phone number format" msgstr "电话号码格式无效" -#: core/views.py:481 +#: core/views.py:489 msgid "you can only download the digital asset once" msgstr "您只能下载一次数字资产" -#: core/views.py:539 +#: core/views.py:547 msgid "favicon not found" msgstr "未找到 favicon" -#: core/viewsets.py:1319 +#: core/viewsets.py:1357 #, python-brace-format msgid "Geocoding error: {e}" msgstr "地理编码错误:{e}" diff --git a/core/models.py b/core/models.py index fe3deb77..a263fa47 100644 --- a/core/models.py +++ b/core/models.py @@ -51,9 +51,9 @@ from core.errors import DisabledCommerceError, NotEnoughMoneyError from core.managers import AddressManager, ProductManager from core.utils import ( generate_human_readable_id, + generate_human_readable_token, get_product_uuid_as_path, get_random_code, - generate_human_readable_token, ) from core.utils.db import TweakedAutoSlugField, unicode_slugify_function from core.utils.lists import FAILED_STATUSES @@ -66,7 +66,7 @@ logger = logging.getLogger("django") class AttributeGroup(ExportModelOperationsMixin("attribute_group"), NiceModel): # type: ignore [misc, django-manager-missing] - __doc__ = _( + __doc__ = _( # type: ignore "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 parent group, forming a hierarchical structure." @@ -102,7 +102,7 @@ class AttributeGroup(ExportModelOperationsMixin("attribute_group"), NiceModel): class Vendor(ExportModelOperationsMixin("vendor"), NiceModel): # type: ignore [misc, django-manager-missing] - __doc__ = _( + __doc__ = _( # type: ignore "Represents a vendor entity capable of storing information about external vendors and their interaction requirements." " The Vendor class is used to define and manage information related to an external vendor." " It stores the vendor's name, authentication details required for communication," @@ -159,7 +159,7 @@ class Vendor(ExportModelOperationsMixin("vendor"), NiceModel): # type: ignore [ class ProductTag(ExportModelOperationsMixin("product_tag"), NiceModel): # type: ignore [misc, django-manager-missing] - __doc__ = _( + __doc__ = _( # type: ignore "Represents a product tag used for classifying or identifying products." " The ProductTag class is designed to uniquely identify and classify products through a combination" " of an internal tag identifier and a user-friendly display name." @@ -191,7 +191,7 @@ class ProductTag(ExportModelOperationsMixin("product_tag"), NiceModel): # type: class CategoryTag(ExportModelOperationsMixin("category_tag"), NiceModel): # type: ignore [misc, django-manager-missing] - __doc__ = _( + __doc__ = _( # type: ignore "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." @@ -222,7 +222,7 @@ class CategoryTag(ExportModelOperationsMixin("category_tag"), NiceModel): # typ class Category(ExportModelOperationsMixin("category"), NiceModel, MPTTModel): # type: ignore [misc, django-manager-missing] - __doc__ = _( + __doc__ = _( # type: ignore "Represents a category entity to organize and group related items in a hierarchical structure." " Categories may have hierarchical relationships with other categories, supporting parent-child relationships." " The class includes fields for metadata and visual representation," @@ -314,24 +314,12 @@ class Category(ExportModelOperationsMixin("category"), NiceModel, MPTTModel): # class Brand(ExportModelOperationsMixin("brand"), NiceModel): # type: ignore [misc, django-manager-missing] - """ - Represents a Brand object in the system. - - This class handles information and attributes related to a brand, including its name, logos, - description, associated categories, a unique slug, and priority order. - It allows for the organization and representation of brand-related data within the application. - - Attributes: - is_publicly_visible (bool): Indicates if the brand is visible publicly. - name (str): The name of the brand. - small_logo (ImageField): An optional small logo image file representing the brand. - big_logo (ImageField): An optional large logo image file representing the brand. - description (str): An optional textual description providing details about the brand. - categories (Category): Optional categories associated with this brand. - slug (str): A unique auto-generated slug used for SEO-friendly URLs. - priority (int): Specifies the priority ranking of the brand. - - """ + __doc__ = _( # type: ignore + "Represents a Brand object in the system. " + "This class handles information and attributes related to a brand, including its name, logos, " + "description, associated categories, a unique slug, and priority order. " + "It allows for the organization and representation of brand-related data within the application." + ) is_publicly_visible = True @@ -396,7 +384,7 @@ class Brand(ExportModelOperationsMixin("brand"), NiceModel): # type: ignore [mi class Stock(ExportModelOperationsMixin("stock"), NiceModel): # type: ignore [misc, django-manager-missing] - __doc__ = _( + __doc__ = _( # type: ignore "Represents the stock of a product managed in the system." " This class provides details about the relationship between vendors, products, and their stock information, " "as well as inventory-related properties like price, purchase price, quantity, SKU, and digital assets." @@ -459,7 +447,7 @@ class Stock(ExportModelOperationsMixin("stock"), NiceModel): # type: ignore [mi class Product(ExportModelOperationsMixin("product"), NiceModel): # type: ignore [misc, django-manager-missing] - __doc__ = _( + __doc__ = _( # type: ignore "Represents a product with attributes such as category, brand, tags, digital status, name, description, part number, and slug." " Provides related utility properties to retrieve ratings, feedback counts, price, quantity, and total orders." " Designed for use in a system that handles e-commerce or inventory management." @@ -557,7 +545,7 @@ class Product(ExportModelOperationsMixin("product"), NiceModel): # type: ignore if rating is None: feedbacks = Feedback.objects.filter(order_product__product_id=self.pk) rating = feedbacks.aggregate(Avg("rating"))["rating__avg"] or 0 - cache.set(cache_key, rating, 604800) + cache.set(cache_key, rating, 86400) return round(rating, 2) @rating.setter @@ -607,7 +595,7 @@ class Product(ExportModelOperationsMixin("product"), NiceModel): # type: ignore class Attribute(ExportModelOperationsMixin("attribute"), NiceModel): # type: ignore [misc, django-manager-missing] - __doc__ = _( + __doc__ = _( # type: ignore "Represents an attribute in the system." " This class is used to define and manage attributes," " which are customizable pieces of data that can be associated with other entities." @@ -671,28 +659,11 @@ class Attribute(ExportModelOperationsMixin("attribute"), NiceModel): # type: ig class AttributeValue(ExportModelOperationsMixin("attribute_value"), NiceModel): # type: ignore [misc, django-manager-missing] - """ - Represents a specific value for an attribute that is linked to a product. - - This class serves the purpose of mapping a value to an attribute for a - specific product. It links the 'attribute' to a unique 'value', allowing - better organization and dynamic representation of product characteristics. - It also defines whether the attribute value is public through the - 'is_publicly_visible' attribute. - - Attributes - ---------- - is_publicly_visible - Determines if the attribute value is visible publicly. Defaults to True. - attribute : core.Attribute - The 'Attribute' object this value is linked to. Foreign key relationship - with 'core.Attribute'. - product : core.Product - The specific 'Product' this attribute's value is associated with. - Foreign key relationship with 'core.Product'. - value - Holds the specific value for this attribute as a text field. - """ + __doc__ = _( # type: ignore + "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." + ) is_publicly_visible = True @@ -726,23 +697,13 @@ class AttributeValue(ExportModelOperationsMixin("attribute_value"), NiceModel): class ProductImage(ExportModelOperationsMixin("product_image"), NiceModel): # type: ignore [misc, django-manager-missing] - """ - Represents a product image associated with a product in the system. - - This class is designed to manage images for products, including functionality - for uploading image files, associating them with specific products, and - determining their display order. It also includes an accessibility feature - with alternative text for the images. - - Attributes: - is_publicly_visible (bool): A flag indicating whether the image is - visible publicly. - alt (str): Alternative text for the image to support accessibility. - image (ImageField): The image file associated with the product. - priority (int): The display priority of the image. Images with lower - priority values are displayed first. - product (ForeignKey): The product associated with this image. - """ + __doc__ = _( # type: ignore + "Represents a product image associated with a product in the system. " + "This class is designed to manage images for products, including functionality " + "for uploading image files, associating them with specific products, and " + "determining their display order. It also includes an accessibility feature " + "with alternative text for the images." + ) is_publicly_visible = True @@ -783,38 +744,14 @@ class ProductImage(ExportModelOperationsMixin("product_image"), NiceModel): # t class Promotion(ExportModelOperationsMixin("promotion"), NiceModel): # type: ignore [misc, django-manager-missing] - """ - Represents a promotional campaign for products with a discount. - - This class is used to define and manage promotional campaigns that offer a - percentage-based discount for products. The class includes attributes for - setting the discount rate, providing details about the promotion, and linking - it to the applicable products. It integrates with the product catalog to - determine the affected items in the campaign. - - Attributes: - is_publicly_visible: A class-level attribute indicating whether the promotion - is publicly visible. - discount_percent: IntegerField. Specifies the percentage discount for the - selected products. Must be between 1 and 100 inclusive. - name: CharField. A unique name for the promotion, required for promoting - distinguishable campaigns. The maximum length is 256 characters. - description: TextField, optional. Provides a detailed description of the - promotion. Can be left blank or null. - products. Links the promotion to the products that are included - in its scope. Can be left blank. - - Meta: - verbose_name: The singular name for the promotion in database and UI contexts. - verbose_name_plural: The pluralized name for multiple promotions in database and - UI contexts. - - Methods: - __str__(): - Returns a string representation of the promotion. If the name is - provided, it returns the name; otherwise, it returns the ID of the - promotion as a string. - """ + __doc__ = _( # type: ignore + "Represents a promotional campaign for products with a discount. " + "This class is used to define and manage promotional campaigns that offer a " + "percentage-based discount for products. The class includes attributes for " + "setting the discount rate, providing details about the promotion, and linking " + "it to the applicable products. It integrates with the product catalog to " + "determine the affected items in the campaign." + ) is_publicly_visible = True @@ -853,15 +790,13 @@ class Promotion(ExportModelOperationsMixin("promotion"), NiceModel): # type: ig class Wishlist(ExportModelOperationsMixin("wishlist"), NiceModel): # type: ignore [misc, django-manager-missing] - """ - Represents a user's wishlist for storing and managing desired products. - - The Wishlist class provides functionality to manage a collection of products - that a user wishes to save. It supports operations such as adding products, - removing products, adding multiple products in bulk, and removing multiple - products in bulk. The wishlist is associated with a specific user and is - stored with optional public visibility status. - """ + __doc__ = _( # type: ignore + "Represents a user's wishlist for storing and managing desired products. " + "The class provides functionality to manage a collection of products, " + "supporting operations such as adding and removing products, " + "as well as supporting operations for adding and removing multiple " + "products at once." + ) is_publicly_visible = False @@ -926,25 +861,13 @@ class Wishlist(ExportModelOperationsMixin("wishlist"), NiceModel): # type: igno class Documentary(ExportModelOperationsMixin("attribute_group"), NiceModel): # type: ignore [misc, django-manager-missing] - """ - Model representing a documentary record tied to a product. - - This class is used to store information about documentaries related to specific - products, including file uploads and their metadata. It contains methods and - properties to handle the file type and storage path for the documentary files. - It extends functionality from specific mixins and provides additional custom - features. - - Attributes: - is_publicly_visible: A boolean indicating if the documentary is - publicly visible. - product linking the documentary to a product. - document: FileField used to store the file associated with the documentary. - - Meta: - verbose_name: Singular name for the documentary model. - verbose_name_plural: Plural name for the documentary model. - """ + __doc__ = _( # type: ignore + "Represents a documentary record tied to a product. " + "This class is used to store information about documentaries related to specific " + "products, including file uploads and their metadata. It contains methods and " + "properties to handle the file type and storage path for the documentary files. " + "It extends functionality from specific mixins and provides additional custom features." + ) is_publicly_visible = True @@ -967,42 +890,16 @@ class Documentary(ExportModelOperationsMixin("attribute_group"), NiceModel): # class Address(ExportModelOperationsMixin("address"), NiceModel): # type: ignore [misc, django-manager-missing] - """ - Represents an address entity that includes location details and associations with - a user. Provides functionality for geographic and address data storage, as well - as integration with geocoding services. - - This class is designed to store detailed address information including components - like street, city, region, country, and geolocation (longitude and latitude). - - It supports integration with geocoding APIs, enabling the storage of raw API - responses for further processing or inspection. The class also allows associating - an address with a user, facilitating personalized data handling. - - Attributes: - is_publicly_visible (bool): Indicates whether the address is visible publicly. - address_line (str): A general address line containing information about the - customer's location. Optional. - street (str): The street name or number in the address. Optional. - district (str): The district related to the address. Optional. - city (str): The name of the city where the address is located. Optional. - region (str): The name of the region associated with the address. Optional. - postal_code (str): The postal code corresponding to the address. Optional. - country (str): The country where the address resides. Optional. - location (PointField): A geolocation represented as (longitude, latitude). - Allows geospatial searches. Optional. - raw_data (dict): The full JSON response directly from the geocoding service, - containing detailed information about the address. Optional. - api_response (dict): Stores a processed version or subset of the JSON - response from the geocoding service. Optional. - user (ForeignKey): Reference to a User entity who owns this address. Optional. - - Meta: - verbose_name (str): Human-readable singular name for the address. - verbose_name_plural (str): Human-readable plural name for addresses. - indexes (list): Database indexes defined for improving query performance - on specific fields like 'location'. - """ + __doc__ = _( # type: ignore + "Represents an address entity that includes location details and associations with a user. " + "Provides functionality for geographic and address data storage, as well " + "as integration with geocoding services. " + "This class is designed to store detailed address information including components " + "like street, city, region, country, and geolocation (longitude and latitude). " + "It supports integration with geocoding APIs, enabling the storage of raw API " + "responses for further processing or inspection. The class also allows associating " + "an address with a user, facilitating personalized data handling." + ) is_publicly_visible = False @@ -1052,33 +949,14 @@ class Address(ExportModelOperationsMixin("address"), NiceModel): # type: ignore class PromoCode(ExportModelOperationsMixin("promocode"), NiceModel): # type: ignore [misc, django-manager-missing] - """ - Represents a promotional code that can be used for discounts, managing its validity, - type of discount, and application. - - The PromoCode class stores details about a promotional code, including its unique - identifier, discount properties (amount or percentage), validity period, associated - user (if any), and status of its usage. It includes functionality to validate and - apply the promo code to an order while ensuring constraints are met. - - Attributes: - code (str): The unique identifier for the promo code. - discount_amount (Decimal): The fixed discount amount applied, if defined. - discount_percent (int): The percentage discount applied, if defined. - end_time (datetime): The expiration timestamp of the promo code. - start_time (datetime): The timestamp from when the promo code is valid. - used_on (datetime): The timestamp when the promo code was used (if applicable). - user (ForeignKey): The user associated with the promo code, if any. - - Methods: - save(**kwargs): Ensures only one type of discount (amount or percent) is defined. - __str__(): Returns the promo code identifier as its string representation. - use(order): Applies the promo code to the given order and calculates the final price. - - Meta: - verbose_name: Display name for the promo code model. - verbose_name_plural: Plural display name for the promo code model. - """ + __doc__ = _( # type: ignore + "Represents a promotional code that can be used for discounts, managing its validity, " + "type of discount, and application. " + "The PromoCode class stores details about a promotional code, including its unique " + "identifier, discount properties (amount or percentage), validity period, associated " + "user (if any), and status of its usage. It includes functionality to validate and " + "apply the promo code to an order while ensuring constraints are met." + ) is_publicly_visible = False @@ -1180,7 +1058,7 @@ class PromoCode(ExportModelOperationsMixin("promocode"), NiceModel): # type: ig class Order(ExportModelOperationsMixin("order"), NiceModel): # type: ignore [misc, django-manager-missing] - __doc__ = _( + __doc__ = _( # type: ignore "Represents an order placed by a user." " This class models an order within the application," " including its various attributes such as billing and shipping information," @@ -1651,28 +1529,16 @@ class Order(ExportModelOperationsMixin("order"), NiceModel): # type: ignore [mi class OrderProduct(ExportModelOperationsMixin("order_product"), NiceModel): # type: ignore [misc, django-manager-missing] - """ - Represents a product associated with an order. - - The OrderProduct model maintains information about a product that is part of an order, - including details such as purchase price, quantity, product attributes, and status. It - manages notifications for the user and administrators and handles operations such as - returning the product balance or adding feedback. This model also provides methods and - properties that support business logic, such as calculating the total price or generating - a download URL for digital products. The model integrates with the Order and Product models - and stores a reference to them. - - Attributes: - is_publicly_visible (bool): Indicates whether this model is visible publicly. - buy_price (float): The price paid by the customer for this product at purchase time. - comments (str): Internal comments entered by admins regarding this ordered product. - notifications (dict): JSON structure containing notifications relevant to the product. - attributes (dict): JSON representation of the product's attributes as part of the order. - order (Order): Reference to the parent order that contains this product. - product (Product): Reference to the specific product associated with the order line. - quantity (int): Represents the quantity of this product ordered. - status (str): The current status of the product in the order. - """ + __doc__ = _( # type: ignore + "Represents products associated with orders and their attributes. " + "The OrderProduct model maintains information about a product that is part of an order, " + "including details such as purchase price, quantity, product attributes, and status. It " + "manages notifications for the user and administrators and handles operations such as " + "returning the product balance or adding feedback. This model also provides methods and " + "properties that support business logic, such as calculating the total price or generating " + "a download URL for digital products. The model integrates with the Order and Product models " + "and stores a reference to them." + ) is_publicly_visible = False @@ -1852,29 +1718,14 @@ class OrderCrmLink(ExportModelOperationsMixin("order_crm_link"), NiceModel): # class DigitalAssetDownload(ExportModelOperationsMixin("attribute_group"), NiceModel): # type: ignore [misc, django-manager-missing] - """ - Represents the downloading functionality for digital assets associated - with orders. - - The DigitalAssetDownload class provides the ability to manage and access - downloads related to order products. It maintains information about the - associated order product, the number of downloads, and whether the asset - is publicly visible. It includes a method to generate a URL for downloading - the asset when the associated order is in a completed status. - - Attributes: - is_publicly_visible (bool): Indicates whether the digital asset is - publicly visible. Always set to False for this class. - order_product (OneToOneField): Reference to the associated order product. - It has a one-to-one relationship with the OrderProduct model, and - deleting the OrderProduct will delete the associated download. - num_downloads (int): Indicates the number of times the digital asset - has been downloaded. - - Methods: - url: Property to generate the download URL for the digital asset - if the associated order is in a finished status. - """ + __doc__ = _( # type: ignore + "Represents the downloading functionality for digital assets associated with orders. " + "The DigitalAssetDownload class provides the ability to manage and access " + "downloads related to order products. It maintains information about the " + "associated order product, the number of downloads, and whether the asset " + "is publicly visible. It includes a method to generate a URL for downloading " + "the asset when the associated order is in a completed status." + ) is_publicly_visible = False @@ -1899,22 +1750,13 @@ class DigitalAssetDownload(ExportModelOperationsMixin("attribute_group"), NiceMo class Feedback(ExportModelOperationsMixin("feedback"), NiceModel): # type: ignore [misc, django-manager-missing] - """ - Manages user feedback for products. - - This class is designed to capture and store user feedback for specific products - that they have purchased. It contains attributes to store user comments, - a reference to the related product in the order, and a user-assigned rating. The - class uses database fields to effectively model and manage feedback data. - - Attributes: - is_publicly_visible (bool): Indicates whether the feedback is visible to the public. - comment (str): User-provided comments about their experience with the product. - order_product (OrderProduct): Reference to the specific product in an order that this - feedback is about. - rating (float): User-assigned rating for the product, validated to be within the range - of 0 to 10. - """ + __doc__ = _( # type: ignore + "Manages user feedback for products. " + "This class is designed to capture and store user feedback for specific products " + "that they have purchased. It contains attributes to store user comments, " + "a reference to the related product in the order, and a user-assigned rating. The " + "class uses database fields to effectively model and manage feedback data." + ) is_publicly_visible = True diff --git a/evibes/locale/ar_AR/LC_MESSAGES/django.po b/evibes/locale/ar_AR/LC_MESSAGES/django.po index 847e1d83..0fcd97c6 100644 --- a/evibes/locale/ar_AR/LC_MESSAGES/django.po +++ b/evibes/locale/ar_AR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/evibes/locale/cs_CZ/LC_MESSAGES/django.po b/evibes/locale/cs_CZ/LC_MESSAGES/django.po index 5fc1528b..c4714a1b 100644 --- a/evibes/locale/cs_CZ/LC_MESSAGES/django.po +++ b/evibes/locale/cs_CZ/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/evibes/locale/da_DK/LC_MESSAGES/django.po b/evibes/locale/da_DK/LC_MESSAGES/django.po index b32d67ba..6fc55b3a 100644 --- a/evibes/locale/da_DK/LC_MESSAGES/django.po +++ b/evibes/locale/da_DK/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/evibes/locale/de_DE/LC_MESSAGES/django.po b/evibes/locale/de_DE/LC_MESSAGES/django.po index c04068ad..b50ae3a8 100644 --- a/evibes/locale/de_DE/LC_MESSAGES/django.po +++ b/evibes/locale/de_DE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/evibes/locale/en_GB/LC_MESSAGES/django.po b/evibes/locale/en_GB/LC_MESSAGES/django.po index 0fee5853..90950c9c 100644 --- a/evibes/locale/en_GB/LC_MESSAGES/django.po +++ b/evibes/locale/en_GB/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/evibes/locale/en_US/LC_MESSAGES/django.po b/evibes/locale/en_US/LC_MESSAGES/django.po index 0f3e9ddc..81eb3f10 100644 --- a/evibes/locale/en_US/LC_MESSAGES/django.po +++ b/evibes/locale/en_US/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/evibes/locale/es_ES/LC_MESSAGES/django.po b/evibes/locale/es_ES/LC_MESSAGES/django.po index 6c68d1c7..f13cfd5e 100644 --- a/evibes/locale/es_ES/LC_MESSAGES/django.po +++ b/evibes/locale/es_ES/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/evibes/locale/fa_IR/LC_MESSAGES/django.po b/evibes/locale/fa_IR/LC_MESSAGES/django.po index df4fcff1..a55e8d62 100644 --- a/evibes/locale/fa_IR/LC_MESSAGES/django.po +++ b/evibes/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-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/evibes/locale/fr_FR/LC_MESSAGES/django.po b/evibes/locale/fr_FR/LC_MESSAGES/django.po index a429896c..4dc43e1e 100644 --- a/evibes/locale/fr_FR/LC_MESSAGES/django.po +++ b/evibes/locale/fr_FR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/evibes/locale/he_IL/LC_MESSAGES/django.po b/evibes/locale/he_IL/LC_MESSAGES/django.po index 863a04fa..8250f216 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" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/evibes/locale/hi_IN/LC_MESSAGES/django.po b/evibes/locale/hi_IN/LC_MESSAGES/django.po index 66c86399..056b67af 100644 --- a/evibes/locale/hi_IN/LC_MESSAGES/django.po +++ b/evibes/locale/hi_IN/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/evibes/locale/hr_HR/LC_MESSAGES/django.po b/evibes/locale/hr_HR/LC_MESSAGES/django.po index df4fcff1..a55e8d62 100644 --- a/evibes/locale/hr_HR/LC_MESSAGES/django.po +++ b/evibes/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-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/evibes/locale/id_ID/LC_MESSAGES/django.po b/evibes/locale/id_ID/LC_MESSAGES/django.po index 6d2b11c5..0c0c6823 100644 --- a/evibes/locale/id_ID/LC_MESSAGES/django.po +++ b/evibes/locale/id_ID/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/evibes/locale/it_IT/LC_MESSAGES/django.po b/evibes/locale/it_IT/LC_MESSAGES/django.po index 5bd93a13..77111329 100644 --- a/evibes/locale/it_IT/LC_MESSAGES/django.po +++ b/evibes/locale/it_IT/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/evibes/locale/ja_JP/LC_MESSAGES/django.po b/evibes/locale/ja_JP/LC_MESSAGES/django.po index 4a9ff6a8..210694db 100644 --- a/evibes/locale/ja_JP/LC_MESSAGES/django.po +++ b/evibes/locale/ja_JP/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/evibes/locale/kk_KZ/LC_MESSAGES/django.po b/evibes/locale/kk_KZ/LC_MESSAGES/django.po index 66c86399..056b67af 100644 --- a/evibes/locale/kk_KZ/LC_MESSAGES/django.po +++ b/evibes/locale/kk_KZ/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/evibes/locale/ko_KR/LC_MESSAGES/django.po b/evibes/locale/ko_KR/LC_MESSAGES/django.po index 78656626..c1a09c8c 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" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/evibes/locale/nl_NL/LC_MESSAGES/django.po b/evibes/locale/nl_NL/LC_MESSAGES/django.po index 74998b7a..5ba16f80 100644 --- a/evibes/locale/nl_NL/LC_MESSAGES/django.po +++ b/evibes/locale/nl_NL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/evibes/locale/no_NO/LC_MESSAGES/django.po b/evibes/locale/no_NO/LC_MESSAGES/django.po index 01b59b0b..4d66b392 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" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/evibes/locale/pl_PL/LC_MESSAGES/django.po b/evibes/locale/pl_PL/LC_MESSAGES/django.po index f7f9e523..b5975d8a 100644 --- a/evibes/locale/pl_PL/LC_MESSAGES/django.po +++ b/evibes/locale/pl_PL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/evibes/locale/pt_BR/LC_MESSAGES/django.po b/evibes/locale/pt_BR/LC_MESSAGES/django.po index 2160ea5c..92b895f7 100644 --- a/evibes/locale/pt_BR/LC_MESSAGES/django.po +++ b/evibes/locale/pt_BR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/evibes/locale/ro_RO/LC_MESSAGES/django.po b/evibes/locale/ro_RO/LC_MESSAGES/django.po index 21d34ced..3dfc7701 100644 --- a/evibes/locale/ro_RO/LC_MESSAGES/django.po +++ b/evibes/locale/ro_RO/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/evibes/locale/ru_RU/LC_MESSAGES/django.po b/evibes/locale/ru_RU/LC_MESSAGES/django.po index d15a5990..ea99d78a 100644 --- a/evibes/locale/ru_RU/LC_MESSAGES/django.po +++ b/evibes/locale/ru_RU/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/evibes/locale/sv_SE/LC_MESSAGES/django.po b/evibes/locale/sv_SE/LC_MESSAGES/django.po index e75c982d..64072b48 100644 --- a/evibes/locale/sv_SE/LC_MESSAGES/django.po +++ b/evibes/locale/sv_SE/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/evibes/locale/th_TH/LC_MESSAGES/django.po b/evibes/locale/th_TH/LC_MESSAGES/django.po index 14f25e54..1f78ab4e 100644 --- a/evibes/locale/th_TH/LC_MESSAGES/django.po +++ b/evibes/locale/th_TH/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/evibes/locale/tr_TR/LC_MESSAGES/django.po b/evibes/locale/tr_TR/LC_MESSAGES/django.po index 2c892f8c..f3d5e85a 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" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/evibes/locale/vi_VN/LC_MESSAGES/django.po b/evibes/locale/vi_VN/LC_MESSAGES/django.po index 802e3539..bb9e3110 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" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/evibes/locale/zh_Hans/LC_MESSAGES/django.po b/evibes/locale/zh_Hans/LC_MESSAGES/django.po index e6cc815f..dc363da0 100644 --- a/evibes/locale/zh_Hans/LC_MESSAGES/django.po +++ b/evibes/locale/zh_Hans/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/payments/locale/ar_AR/LC_MESSAGES/django.po b/payments/locale/ar_AR/LC_MESSAGES/django.po index f4eec084..571e716c 100644 --- a/payments/locale/ar_AR/LC_MESSAGES/django.po +++ b/payments/locale/ar_AR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:41 +#: payments/admin.py:15 payments/models.py:45 msgid "transaction" msgstr "المعاملات" -#: payments/admin.py:16 payments/models.py:42 +#: payments/admin.py:16 payments/models.py:46 msgid "transactions" msgstr "المعاملات" @@ -49,7 +49,7 @@ msgstr "طلب المعالجة بعد الدفع" msgid "processing details" msgstr "تفاصيل المعالجة" -#: payments/models.py:37 +#: payments/models.py:41 #, python-brace-format msgid "" "transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." @@ -58,11 +58,11 @@ msgstr "" "يجب أن يتناسب مبلغ المعاملة مع {config.PAYMENT_GATEWAY_MINIMUM}-{config." "PAYMENT_GATEWAY_MAXIMUM}" -#: payments/models.py:59 +#: payments/models.py:63 msgid "balance" msgstr "الرصيد" -#: payments/models.py:60 +#: payments/models.py:64 msgid "balances" msgstr "الموازين" diff --git a/payments/locale/cs_CZ/LC_MESSAGES/django.po b/payments/locale/cs_CZ/LC_MESSAGES/django.po index 43e25a6c..3115ca37 100644 --- a/payments/locale/cs_CZ/LC_MESSAGES/django.po +++ b/payments/locale/cs_CZ/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:41 +#: payments/admin.py:15 payments/models.py:45 msgid "transaction" msgstr "Transakce" -#: payments/admin.py:16 payments/models.py:42 +#: payments/admin.py:16 payments/models.py:46 msgid "transactions" msgstr "Transakce" @@ -49,7 +49,7 @@ msgstr "Objednávka ke zpracování po zaplacení" msgid "processing details" msgstr "Podrobnosti o zpracování" -#: payments/models.py:37 +#: payments/models.py:41 #, python-brace-format msgid "" "transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." @@ -58,11 +58,11 @@ msgstr "" "Částka transakce se musí vejít do rozmezí {config.PAYMENT_GATEWAY_MINIMUM}-" "{config.PAYMENT_GATEWAY_MAXIMUM}." -#: payments/models.py:59 +#: payments/models.py:63 msgid "balance" msgstr "Bilance" -#: payments/models.py:60 +#: payments/models.py:64 msgid "balances" msgstr "Váhy" diff --git a/payments/locale/da_DK/LC_MESSAGES/django.po b/payments/locale/da_DK/LC_MESSAGES/django.po index cbb57010..bf72dd02 100644 --- a/payments/locale/da_DK/LC_MESSAGES/django.po +++ b/payments/locale/da_DK/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:41 +#: payments/admin.py:15 payments/models.py:45 msgid "transaction" msgstr "Transaktion" -#: payments/admin.py:16 payments/models.py:42 +#: payments/admin.py:16 payments/models.py:46 msgid "transactions" msgstr "Transaktioner" @@ -49,7 +49,7 @@ msgstr "Ordre til behandling efter betaling" msgid "processing details" msgstr "Behandling af detaljer" -#: payments/models.py:37 +#: payments/models.py:41 #, python-brace-format msgid "" "transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." @@ -58,11 +58,11 @@ msgstr "" "Transaktionsbeløbet skal passe ind i {config.PAYMENT_GATEWAY_MINIMUM}-" "{config.PAYMENT_GATEWAY_MAXIMUM}." -#: payments/models.py:59 +#: payments/models.py:63 msgid "balance" msgstr "Balance" -#: payments/models.py:60 +#: payments/models.py:64 msgid "balances" msgstr "Vægte" diff --git a/payments/locale/de_DE/LC_MESSAGES/django.po b/payments/locale/de_DE/LC_MESSAGES/django.po index 5ff3d30c..ba46c7f1 100644 --- a/payments/locale/de_DE/LC_MESSAGES/django.po +++ b/payments/locale/de_DE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:41 +#: payments/admin.py:15 payments/models.py:45 msgid "transaction" msgstr "Transaktion" -#: payments/admin.py:16 payments/models.py:42 +#: payments/admin.py:16 payments/models.py:46 msgid "transactions" msgstr "Transaktionen" @@ -49,7 +49,7 @@ msgstr "Auftrag zur Bearbeitung nach Bezahlung" msgid "processing details" msgstr "Details zur Verarbeitung" -#: payments/models.py:37 +#: payments/models.py:41 #, python-brace-format msgid "" "transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." @@ -58,11 +58,11 @@ msgstr "" "Der Transaktionsbetrag muss zwischen {config.PAYMENT_GATEWAY_MINIMUM}-" "{config.PAYMENT_GATEWAY_MAXIMUM} liegen" -#: payments/models.py:59 +#: payments/models.py:63 msgid "balance" msgstr "Waage" -#: payments/models.py:60 +#: payments/models.py:64 msgid "balances" msgstr "Waagen" diff --git a/payments/locale/en_GB/LC_MESSAGES/django.po b/payments/locale/en_GB/LC_MESSAGES/django.po index 3fe595a5..1416b9e5 100644 --- a/payments/locale/en_GB/LC_MESSAGES/django.po +++ b/payments/locale/en_GB/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -17,11 +17,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:41 +#: payments/admin.py:15 payments/models.py:45 msgid "transaction" msgstr "Transaction" -#: payments/admin.py:16 payments/models.py:42 +#: payments/admin.py:16 payments/models.py:46 msgid "transactions" msgstr "Transactions" @@ -53,7 +53,7 @@ msgstr "Order to process after paid" msgid "processing details" msgstr "Processing details" -#: payments/models.py:37 +#: payments/models.py:41 #, python-brace-format msgid "" "transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." @@ -62,11 +62,11 @@ msgstr "" "Transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." "PAYMENT_GATEWAY_MAXIMUM}" -#: payments/models.py:59 +#: payments/models.py:63 msgid "balance" msgstr "Balance" -#: payments/models.py:60 +#: payments/models.py:64 msgid "balances" msgstr "Balances" diff --git a/payments/locale/en_US/LC_MESSAGES/django.po b/payments/locale/en_US/LC_MESSAGES/django.po index 999ef8c9..7b07978c 100644 --- a/payments/locale/en_US/LC_MESSAGES/django.po +++ b/payments/locale/en_US/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:41 +#: payments/admin.py:15 payments/models.py:45 msgid "transaction" msgstr "Transaction" -#: payments/admin.py:16 payments/models.py:42 +#: payments/admin.py:16 payments/models.py:46 msgid "transactions" msgstr "Transactions" @@ -49,7 +49,7 @@ msgstr "Order to process after paid" msgid "processing details" msgstr "Processing details" -#: payments/models.py:37 +#: payments/models.py:41 #, python-brace-format msgid "" "transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." @@ -58,11 +58,11 @@ msgstr "" "Transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." "PAYMENT_GATEWAY_MAXIMUM}" -#: payments/models.py:59 +#: payments/models.py:63 msgid "balance" msgstr "Balance" -#: payments/models.py:60 +#: payments/models.py:64 msgid "balances" msgstr "Scales" diff --git a/payments/locale/es_ES/LC_MESSAGES/django.po b/payments/locale/es_ES/LC_MESSAGES/django.po index 874a9b72..aca2baa6 100644 --- a/payments/locale/es_ES/LC_MESSAGES/django.po +++ b/payments/locale/es_ES/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:41 +#: payments/admin.py:15 payments/models.py:45 msgid "transaction" msgstr "Transacción" -#: payments/admin.py:16 payments/models.py:42 +#: payments/admin.py:16 payments/models.py:46 msgid "transactions" msgstr "Transacciones" @@ -49,7 +49,7 @@ msgstr "Orden a tramitar una vez pagada" msgid "processing details" msgstr "Detalles del proceso" -#: payments/models.py:37 +#: payments/models.py:41 #, python-brace-format msgid "" "transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." @@ -58,11 +58,11 @@ msgstr "" "El importe de la transacción debe ajustarse a {config." "PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" -#: payments/models.py:59 +#: payments/models.py:63 msgid "balance" msgstr "Saldo" -#: payments/models.py:60 +#: payments/models.py:64 msgid "balances" msgstr "Escalas" diff --git a/payments/locale/fa_IR/LC_MESSAGES/django.po b/payments/locale/fa_IR/LC_MESSAGES/django.po index 1c294d91..5d026376 100644 --- a/payments/locale/fa_IR/LC_MESSAGES/django.po +++ b/payments/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-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,11 +16,11 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: payments/admin.py:15 payments/models.py:41 +#: payments/admin.py:15 payments/models.py:45 msgid "transaction" msgstr "" -#: payments/admin.py:16 payments/models.py:42 +#: payments/admin.py:16 payments/models.py:46 msgid "transactions" msgstr "" @@ -52,18 +52,18 @@ msgstr "" msgid "processing details" msgstr "" -#: payments/models.py:37 +#: payments/models.py:41 #, python-brace-format msgid "" "transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." "PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -#: payments/models.py:59 +#: payments/models.py:63 msgid "balance" msgstr "" -#: payments/models.py:60 +#: payments/models.py:64 msgid "balances" msgstr "" diff --git a/payments/locale/fr_FR/LC_MESSAGES/django.po b/payments/locale/fr_FR/LC_MESSAGES/django.po index 97a257a4..b91c13f4 100644 --- a/payments/locale/fr_FR/LC_MESSAGES/django.po +++ b/payments/locale/fr_FR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:41 +#: payments/admin.py:15 payments/models.py:45 msgid "transaction" msgstr "Transaction" -#: payments/admin.py:16 payments/models.py:42 +#: payments/admin.py:16 payments/models.py:46 msgid "transactions" msgstr "Transactions" @@ -49,7 +49,7 @@ msgstr "Commande à traiter après paiement" msgid "processing details" msgstr "Détails du traitement" -#: payments/models.py:37 +#: payments/models.py:41 #, python-brace-format msgid "" "transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." @@ -58,11 +58,11 @@ msgstr "" "Le montant de la transaction doit être compris entre {config." "PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}." -#: payments/models.py:59 +#: payments/models.py:63 msgid "balance" msgstr "Balance" -#: payments/models.py:60 +#: payments/models.py:64 msgid "balances" msgstr "Balances" diff --git a/payments/locale/he_IL/LC_MESSAGES/django.po b/payments/locale/he_IL/LC_MESSAGES/django.po index 1f807c5b..603e8178 100644 --- a/payments/locale/he_IL/LC_MESSAGES/django.po +++ b/payments/locale/he_IL/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:41 +#: payments/admin.py:15 payments/models.py:45 msgid "transaction" msgstr "עסקה" -#: payments/admin.py:16 payments/models.py:42 +#: payments/admin.py:16 payments/models.py:46 msgid "transactions" msgstr "עסקאות" @@ -49,20 +49,20 @@ msgstr "הזמנה לעיבוד לאחר תשלום" msgid "processing details" msgstr "פרטי העיבוד" -#: payments/models.py:37 +#: payments/models.py:41 #, python-brace-format msgid "" -"transaction amount must fit into " -"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." +"PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"סכום העסקה חייב להתאים " -"ל-{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" +"סכום העסקה חייב להתאים ל-{config.PAYMENT_GATEWAY_MINIMUM}-{config." +"PAYMENT_GATEWAY_MAXIMUM}" -#: payments/models.py:59 +#: payments/models.py:63 msgid "balance" msgstr "מאזניים" -#: payments/models.py:60 +#: payments/models.py:64 msgid "balances" msgstr "מאזניים" diff --git a/payments/locale/hi_IN/LC_MESSAGES/django.po b/payments/locale/hi_IN/LC_MESSAGES/django.po index aa94407c..11f0c171 100644 --- a/payments/locale/hi_IN/LC_MESSAGES/django.po +++ b/payments/locale/hi_IN/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -16,11 +16,11 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: payments/admin.py:15 payments/models.py:41 +#: payments/admin.py:15 payments/models.py:45 msgid "transaction" msgstr "" -#: payments/admin.py:16 payments/models.py:42 +#: payments/admin.py:16 payments/models.py:46 msgid "transactions" msgstr "" @@ -52,18 +52,18 @@ msgstr "" msgid "processing details" msgstr "" -#: payments/models.py:37 +#: payments/models.py:41 #, python-brace-format msgid "" "transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." "PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -#: payments/models.py:59 +#: payments/models.py:63 msgid "balance" msgstr "" -#: payments/models.py:60 +#: payments/models.py:64 msgid "balances" msgstr "" diff --git a/payments/locale/hr_HR/LC_MESSAGES/django.po b/payments/locale/hr_HR/LC_MESSAGES/django.po index 1c294d91..5d026376 100644 --- a/payments/locale/hr_HR/LC_MESSAGES/django.po +++ b/payments/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-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,11 +16,11 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: payments/admin.py:15 payments/models.py:41 +#: payments/admin.py:15 payments/models.py:45 msgid "transaction" msgstr "" -#: payments/admin.py:16 payments/models.py:42 +#: payments/admin.py:16 payments/models.py:46 msgid "transactions" msgstr "" @@ -52,18 +52,18 @@ msgstr "" msgid "processing details" msgstr "" -#: payments/models.py:37 +#: payments/models.py:41 #, python-brace-format msgid "" "transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." "PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -#: payments/models.py:59 +#: payments/models.py:63 msgid "balance" msgstr "" -#: payments/models.py:60 +#: payments/models.py:64 msgid "balances" msgstr "" diff --git a/payments/locale/id_ID/LC_MESSAGES/django.po b/payments/locale/id_ID/LC_MESSAGES/django.po index 6626b552..0b1fb91a 100644 --- a/payments/locale/id_ID/LC_MESSAGES/django.po +++ b/payments/locale/id_ID/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:41 +#: payments/admin.py:15 payments/models.py:45 msgid "transaction" msgstr "Transaksi" -#: payments/admin.py:16 payments/models.py:42 +#: payments/admin.py:16 payments/models.py:46 msgid "transactions" msgstr "Transaksi" @@ -49,20 +49,20 @@ msgstr "Pesanan akan diproses setelah dibayar" msgid "processing details" msgstr "Detail pemrosesan" -#: payments/models.py:37 +#: payments/models.py:41 #, python-brace-format msgid "" -"transaction amount must fit into " -"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." +"PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"Jumlah transaksi harus sesuai dengan " -"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" +"Jumlah transaksi harus sesuai dengan {config.PAYMENT_GATEWAY_MINIMUM}-" +"{config.PAYMENT_GATEWAY_MAXIMUM}" -#: payments/models.py:59 +#: payments/models.py:63 msgid "balance" msgstr "Keseimbangan" -#: payments/models.py:60 +#: payments/models.py:64 msgid "balances" msgstr "Timbangan" @@ -86,7 +86,8 @@ msgid "" "we have successfully credited your account with %(amount)s. your current\n" " balance is %(balance)s." msgstr "" -"Kami telah berhasil mengkreditkan akun Anda dengan %(amount)s. Saldo Anda saat ini\n" +"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 @@ -95,7 +96,8 @@ msgid "" "if you have any questions, feel free to contact our support at\n" " %(contact_email)s." msgstr "" -"Jika Anda memiliki pertanyaan, jangan ragu untuk menghubungi tim dukungan kami di\n" +"Jika Anda memiliki pertanyaan, jangan ragu untuk menghubungi tim dukungan " +"kami di\n" " %(contact_email)s." #: payments/templates/balance_deposit_email.html:100 diff --git a/payments/locale/it_IT/LC_MESSAGES/django.po b/payments/locale/it_IT/LC_MESSAGES/django.po index 8f25ed54..eaa74a82 100644 --- a/payments/locale/it_IT/LC_MESSAGES/django.po +++ b/payments/locale/it_IT/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:41 +#: payments/admin.py:15 payments/models.py:45 msgid "transaction" msgstr "Transazione" -#: payments/admin.py:16 payments/models.py:42 +#: payments/admin.py:16 payments/models.py:46 msgid "transactions" msgstr "Transazioni" @@ -49,7 +49,7 @@ msgstr "Ordine da elaborare dopo il pagamento" msgid "processing details" msgstr "Dettagli di elaborazione" -#: payments/models.py:37 +#: payments/models.py:41 #, python-brace-format msgid "" "transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." @@ -58,11 +58,11 @@ msgstr "" "L'importo della transazione deve rientrare in {config." "PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" -#: payments/models.py:59 +#: payments/models.py:63 msgid "balance" msgstr "Equilibrio" -#: payments/models.py:60 +#: payments/models.py:64 msgid "balances" msgstr "Bilance" diff --git a/payments/locale/ja_JP/LC_MESSAGES/django.po b/payments/locale/ja_JP/LC_MESSAGES/django.po index 81577006..01f14680 100644 --- a/payments/locale/ja_JP/LC_MESSAGES/django.po +++ b/payments/locale/ja_JP/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:41 +#: payments/admin.py:15 payments/models.py:45 msgid "transaction" msgstr "トランザクション" -#: payments/admin.py:16 payments/models.py:42 +#: payments/admin.py:16 payments/models.py:46 msgid "transactions" msgstr "トランザクション" @@ -49,7 +49,7 @@ msgstr "支払い後の処理順序" msgid "processing details" msgstr "加工内容" -#: payments/models.py:37 +#: payments/models.py:41 #, python-brace-format msgid "" "transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." @@ -58,11 +58,11 @@ msgstr "" "取引金額は{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}に" "収まる必要があります。" -#: payments/models.py:59 +#: payments/models.py:63 msgid "balance" msgstr "バランス" -#: payments/models.py:60 +#: payments/models.py:64 msgid "balances" msgstr "体重計" diff --git a/payments/locale/kk_KZ/LC_MESSAGES/django.po b/payments/locale/kk_KZ/LC_MESSAGES/django.po index aa94407c..11f0c171 100644 --- a/payments/locale/kk_KZ/LC_MESSAGES/django.po +++ b/payments/locale/kk_KZ/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -16,11 +16,11 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: payments/admin.py:15 payments/models.py:41 +#: payments/admin.py:15 payments/models.py:45 msgid "transaction" msgstr "" -#: payments/admin.py:16 payments/models.py:42 +#: payments/admin.py:16 payments/models.py:46 msgid "transactions" msgstr "" @@ -52,18 +52,18 @@ msgstr "" msgid "processing details" msgstr "" -#: payments/models.py:37 +#: payments/models.py:41 #, python-brace-format msgid "" "transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." "PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -#: payments/models.py:59 +#: payments/models.py:63 msgid "balance" msgstr "" -#: payments/models.py:60 +#: payments/models.py:64 msgid "balances" msgstr "" diff --git a/payments/locale/ko_KR/LC_MESSAGES/django.po b/payments/locale/ko_KR/LC_MESSAGES/django.po index 1fb2049c..deb67489 100644 --- a/payments/locale/ko_KR/LC_MESSAGES/django.po +++ b/payments/locale/ko_KR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:41 +#: payments/admin.py:15 payments/models.py:45 msgid "transaction" msgstr "거래" -#: payments/admin.py:16 payments/models.py:42 +#: payments/admin.py:16 payments/models.py:46 msgid "transactions" msgstr "거래" @@ -49,20 +49,20 @@ msgstr "결제 후 처리할 주문" msgid "processing details" msgstr "처리 세부 정보" -#: payments/models.py:37 +#: payments/models.py:41 #, python-brace-format msgid "" -"transaction amount must fit into " -"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." +"PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"거래 금액은 {config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}에 " -"맞아야 합니다." +"거래 금액은 {config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" +"에 맞아야 합니다." -#: payments/models.py:59 +#: payments/models.py:63 msgid "balance" msgstr "잔액" -#: payments/models.py:60 +#: payments/models.py:64 msgid "balances" msgstr "저울" diff --git a/payments/locale/nl_NL/LC_MESSAGES/django.po b/payments/locale/nl_NL/LC_MESSAGES/django.po index ea8c8fa2..f1157438 100644 --- a/payments/locale/nl_NL/LC_MESSAGES/django.po +++ b/payments/locale/nl_NL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:41 +#: payments/admin.py:15 payments/models.py:45 msgid "transaction" msgstr "Transactie" -#: payments/admin.py:16 payments/models.py:42 +#: payments/admin.py:16 payments/models.py:46 msgid "transactions" msgstr "Transacties" @@ -49,7 +49,7 @@ msgstr "Order te verwerken na betaling" msgid "processing details" msgstr "Verwerkingsdetails" -#: payments/models.py:37 +#: payments/models.py:41 #, python-brace-format msgid "" "transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." @@ -58,11 +58,11 @@ msgstr "" "Het transactiebedrag moet passen binnen {config.PAYMENT_GATEWAY_MINIMUM}-" "{config.PAYMENT_GATEWAY_MAXIMUM}." -#: payments/models.py:59 +#: payments/models.py:63 msgid "balance" msgstr "Saldo" -#: payments/models.py:60 +#: payments/models.py:64 msgid "balances" msgstr "Weegschaal" diff --git a/payments/locale/no_NO/LC_MESSAGES/django.po b/payments/locale/no_NO/LC_MESSAGES/django.po index f08dd74e..19d93e5a 100644 --- a/payments/locale/no_NO/LC_MESSAGES/django.po +++ b/payments/locale/no_NO/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:41 +#: payments/admin.py:15 payments/models.py:45 msgid "transaction" msgstr "Transaksjon" -#: payments/admin.py:16 payments/models.py:42 +#: payments/admin.py:16 payments/models.py:46 msgid "transactions" msgstr "Transaksjoner" @@ -49,20 +49,20 @@ msgstr "Ordre som skal behandles etter betaling" msgid "processing details" msgstr "Detaljer om behandlingen" -#: payments/models.py:37 +#: payments/models.py:41 #, python-brace-format msgid "" -"transaction amount must fit into " -"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." +"PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"Transaksjonsbeløpet må passe inn i " -"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}." +"Transaksjonsbeløpet må passe inn i {config.PAYMENT_GATEWAY_MINIMUM}-{config." +"PAYMENT_GATEWAY_MAXIMUM}." -#: payments/models.py:59 +#: payments/models.py:63 msgid "balance" msgstr "Balanse" -#: payments/models.py:60 +#: payments/models.py:64 msgid "balances" msgstr "Vekt" diff --git a/payments/locale/pl_PL/LC_MESSAGES/django.po b/payments/locale/pl_PL/LC_MESSAGES/django.po index d134bdad..d8a856ad 100644 --- a/payments/locale/pl_PL/LC_MESSAGES/django.po +++ b/payments/locale/pl_PL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:41 +#: payments/admin.py:15 payments/models.py:45 msgid "transaction" msgstr "Transakcja" -#: payments/admin.py:16 payments/models.py:42 +#: payments/admin.py:16 payments/models.py:46 msgid "transactions" msgstr "Transakcje" @@ -49,7 +49,7 @@ msgstr "Zamówienie do przetworzenia po opłaceniu" msgid "processing details" msgstr "Szczegóły przetwarzania" -#: payments/models.py:37 +#: payments/models.py:41 #, python-brace-format msgid "" "transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." @@ -58,11 +58,11 @@ msgstr "" "Kwota transakcji musi mieścić się w przedziale {config." "PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}." -#: payments/models.py:59 +#: payments/models.py:63 msgid "balance" msgstr "Równowaga" -#: payments/models.py:60 +#: payments/models.py:64 msgid "balances" msgstr "Wagi" diff --git a/payments/locale/pt_BR/LC_MESSAGES/django.po b/payments/locale/pt_BR/LC_MESSAGES/django.po index e2c07049..5565b8ed 100644 --- a/payments/locale/pt_BR/LC_MESSAGES/django.po +++ b/payments/locale/pt_BR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:41 +#: payments/admin.py:15 payments/models.py:45 msgid "transaction" msgstr "Transação" -#: payments/admin.py:16 payments/models.py:42 +#: payments/admin.py:16 payments/models.py:46 msgid "transactions" msgstr "Transações" @@ -49,7 +49,7 @@ msgstr "Ordem a ser processada após o pagamento" msgid "processing details" msgstr "Detalhes do processamento" -#: payments/models.py:37 +#: payments/models.py:41 #, python-brace-format msgid "" "transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." @@ -58,11 +58,11 @@ msgstr "" "O valor da transação deve se enquadrar em {config.PAYMENT_GATEWAY_MINIMUM}-" "{config.PAYMENT_GATEWAY_MAXIMUM}" -#: payments/models.py:59 +#: payments/models.py:63 msgid "balance" msgstr "Equilíbrio" -#: payments/models.py:60 +#: payments/models.py:64 msgid "balances" msgstr "Balanças" diff --git a/payments/locale/ro_RO/LC_MESSAGES/django.po b/payments/locale/ro_RO/LC_MESSAGES/django.po index fc566f33..cb015e66 100644 --- a/payments/locale/ro_RO/LC_MESSAGES/django.po +++ b/payments/locale/ro_RO/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:41 +#: payments/admin.py:15 payments/models.py:45 msgid "transaction" msgstr "Tranzacție" -#: payments/admin.py:16 payments/models.py:42 +#: payments/admin.py:16 payments/models.py:46 msgid "transactions" msgstr "Tranzacții" @@ -49,7 +49,7 @@ msgstr "Ordin de procesare după plată" msgid "processing details" msgstr "Detalii de prelucrare" -#: payments/models.py:37 +#: payments/models.py:41 #, python-brace-format msgid "" "transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." @@ -58,11 +58,11 @@ msgstr "" "Valoarea tranzacției trebuie să se încadreze în {config." "PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" -#: payments/models.py:59 +#: payments/models.py:63 msgid "balance" msgstr "Echilibru" -#: payments/models.py:60 +#: payments/models.py:64 msgid "balances" msgstr "Balanță" diff --git a/payments/locale/ru_RU/LC_MESSAGES/django.po b/payments/locale/ru_RU/LC_MESSAGES/django.po index 94c0c0f4..56a3adb6 100644 --- a/payments/locale/ru_RU/LC_MESSAGES/django.po +++ b/payments/locale/ru_RU/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:41 +#: payments/admin.py:15 payments/models.py:45 msgid "transaction" msgstr "Транзакция" -#: payments/admin.py:16 payments/models.py:42 +#: payments/admin.py:16 payments/models.py:46 msgid "transactions" msgstr "Транзакции" @@ -49,7 +49,7 @@ msgstr "Заказ на обработку после оплаты" msgid "processing details" msgstr "Детали обработки" -#: payments/models.py:37 +#: payments/models.py:41 #, python-brace-format msgid "" "transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." @@ -58,11 +58,11 @@ msgstr "" "Сумма транзакции должна вписываться в {config.PAYMENT_GATEWAY_MINIMUM}-" "{config.PAYMENT_GATEWAY_MAXIMUM}" -#: payments/models.py:59 +#: payments/models.py:63 msgid "balance" msgstr "Баланс" -#: payments/models.py:60 +#: payments/models.py:64 msgid "balances" msgstr "Балансы" diff --git a/payments/locale/sv_SE/LC_MESSAGES/django.po b/payments/locale/sv_SE/LC_MESSAGES/django.po index 73b24e60..84e9bfee 100644 --- a/payments/locale/sv_SE/LC_MESSAGES/django.po +++ b/payments/locale/sv_SE/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:41 +#: payments/admin.py:15 payments/models.py:45 msgid "transaction" msgstr "Transaktion" -#: payments/admin.py:16 payments/models.py:42 +#: payments/admin.py:16 payments/models.py:46 msgid "transactions" msgstr "Transaktioner" @@ -49,20 +49,20 @@ msgstr "Order att bearbeta efter betald" msgid "processing details" msgstr "Bearbetning av detaljer" -#: payments/models.py:37 +#: payments/models.py:41 #, python-brace-format msgid "" -"transaction amount must fit into " -"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." +"PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"Transaktionsbeloppet måste rymmas inom " -"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" +"Transaktionsbeloppet måste rymmas inom {config.PAYMENT_GATEWAY_MINIMUM}-" +"{config.PAYMENT_GATEWAY_MAXIMUM}" -#: payments/models.py:59 +#: payments/models.py:63 msgid "balance" msgstr "Balans" -#: payments/models.py:60 +#: payments/models.py:64 msgid "balances" msgstr "Vågskålar" diff --git a/payments/locale/th_TH/LC_MESSAGES/django.po b/payments/locale/th_TH/LC_MESSAGES/django.po index e25cd5c1..e97eec01 100644 --- a/payments/locale/th_TH/LC_MESSAGES/django.po +++ b/payments/locale/th_TH/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:41 +#: payments/admin.py:15 payments/models.py:45 msgid "transaction" msgstr "ธุรกรรม" -#: payments/admin.py:16 payments/models.py:42 +#: payments/admin.py:16 payments/models.py:46 msgid "transactions" msgstr "ธุรกรรม" @@ -49,20 +49,20 @@ msgstr "คำสั่งซื้อเพื่อดำเนินการ msgid "processing details" msgstr "รายละเอียดการประมวลผล" -#: payments/models.py:37 +#: payments/models.py:41 #, python-brace-format msgid "" -"transaction amount must fit into " -"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." +"PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"จำนวนเงินต้องอยู่ในช่วง " -"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" +"จำนวนเงินต้องอยู่ในช่วง {config.PAYMENT_GATEWAY_MINIMUM}-{config." +"PAYMENT_GATEWAY_MAXIMUM}" -#: payments/models.py:59 +#: payments/models.py:63 msgid "balance" msgstr "สมดุล" -#: payments/models.py:60 +#: payments/models.py:64 msgid "balances" msgstr "สเกล" diff --git a/payments/locale/tr_TR/LC_MESSAGES/django.po b/payments/locale/tr_TR/LC_MESSAGES/django.po index 9ced475d..a54c5db5 100644 --- a/payments/locale/tr_TR/LC_MESSAGES/django.po +++ b/payments/locale/tr_TR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:41 +#: payments/admin.py:15 payments/models.py:45 msgid "transaction" msgstr "İşlem" -#: payments/admin.py:16 payments/models.py:42 +#: payments/admin.py:16 payments/models.py:46 msgid "transactions" msgstr "İşlemler" @@ -49,21 +49,20 @@ msgstr "Ödeme yapıldıktan sonra işleme alınacak sipariş" msgid "processing details" msgstr "İşleme ayrıntıları" -#: payments/models.py:37 +#: payments/models.py:41 #, python-brace-format msgid "" -"transaction amount must fit into " -"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." +"PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"İşlem tutarı " -"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM} içine " -"sığmalıdır" +"İşlem tutarı {config.PAYMENT_GATEWAY_MINIMUM}-{config." +"PAYMENT_GATEWAY_MAXIMUM} içine sığmalıdır" -#: payments/models.py:59 +#: payments/models.py:63 msgid "balance" msgstr "Denge" -#: payments/models.py:60 +#: payments/models.py:64 msgid "balances" msgstr "Terazi" @@ -96,7 +95,8 @@ msgid "" "if you have any questions, feel free to contact our support at\n" " %(contact_email)s." msgstr "" -"Herhangi bir sorunuz varsa, destek ekibimizle iletişime geçmekten çekinmeyin\n" +"Herhangi bir sorunuz varsa, destek ekibimizle iletişime geçmekten " +"çekinmeyin\n" " %(contact_email)s." #: payments/templates/balance_deposit_email.html:100 diff --git a/payments/locale/vi_VN/LC_MESSAGES/django.po b/payments/locale/vi_VN/LC_MESSAGES/django.po index d329baa0..f6a0a8ff 100644 --- a/payments/locale/vi_VN/LC_MESSAGES/django.po +++ b/payments/locale/vi_VN/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:41 +#: payments/admin.py:15 payments/models.py:45 msgid "transaction" msgstr "Giao dịch" -#: payments/admin.py:16 payments/models.py:42 +#: payments/admin.py:16 payments/models.py:46 msgid "transactions" msgstr "Giao dịch" @@ -49,20 +49,20 @@ msgstr "Đơn hàng sẽ được xử lý sau khi thanh toán." msgid "processing details" msgstr "Chi tiết xử lý" -#: payments/models.py:37 +#: payments/models.py:41 #, python-brace-format msgid "" -"transaction amount must fit into " -"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." +"PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"Số tiền giao dịch phải nằm trong khoảng " -"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" +"Số tiền giao dịch phải nằm trong khoảng {config.PAYMENT_GATEWAY_MINIMUM}-" +"{config.PAYMENT_GATEWAY_MAXIMUM}" -#: payments/models.py:59 +#: payments/models.py:63 msgid "balance" msgstr "Cân bằng" -#: payments/models.py:60 +#: payments/models.py:64 msgid "balances" msgstr "Cân" @@ -95,8 +95,8 @@ msgid "" "if you have any questions, feel free to contact our support at\n" " %(contact_email)s." 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." +"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 #, python-format diff --git a/payments/locale/zh_Hans/LC_MESSAGES/django.po b/payments/locale/zh_Hans/LC_MESSAGES/django.po index 1412729c..d04f569f 100644 --- a/payments/locale/zh_Hans/LC_MESSAGES/django.po +++ b/payments/locale/zh_Hans/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:41 +#: payments/admin.py:15 payments/models.py:45 msgid "transaction" msgstr "交易" -#: payments/admin.py:16 payments/models.py:42 +#: payments/admin.py:16 payments/models.py:46 msgid "transactions" msgstr "交易" @@ -49,7 +49,7 @@ msgstr "付款后处理订单" msgid "processing details" msgstr "处理细节" -#: payments/models.py:37 +#: payments/models.py:41 #, python-brace-format msgid "" "transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." @@ -58,11 +58,11 @@ msgstr "" "交易金额必须符合 {config.PAYMENT_GATEWAY_MINIMUM}-{config." "PAYMENT_GATEWAY_MAXIMUM} 的规定。" -#: payments/models.py:59 +#: payments/models.py:63 msgid "balance" msgstr "平衡" -#: payments/models.py:60 +#: payments/models.py:64 msgid "balances" msgstr "天平" diff --git a/vibes_auth/locale/ar_AR/LC_MESSAGES/django.po b/vibes_auth/locale/ar_AR/LC_MESSAGES/django.po index d48ae5af..e7268af0 100644 --- a/vibes_auth/locale/ar_AR/LC_MESSAGES/django.po +++ b/vibes_auth/locale/ar_AR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -106,7 +106,7 @@ msgstr "تأكيد إعادة تعيين كلمة مرور المستخدم" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:114 +#: vibes_auth/viewsets.py:115 msgid "passwords do not match" msgstr "كلمات المرور غير متطابقة" @@ -149,8 +149,8 @@ msgstr "رقم هاتف مشوه: {phone_number}!" msgid "Invalid attribute format: {attribute_pair}" msgstr "تنسيق السمة غير صالح: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:157 -#: vibes_auth/viewsets.py:176 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 +#: vibes_auth/viewsets.py:177 msgid "activation link is invalid!" msgstr "رابط التفعيل غير صالح!" @@ -162,7 +162,7 @@ msgstr "تم تفعيل الحساب بالفعل..." msgid "something went wrong: {e!s}" msgstr "حدث خطأ ما: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:125 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 msgid "token is invalid!" msgstr "الرمز غير صالح!" @@ -436,10 +436,10 @@ msgstr "" msgid "the token is invalid" msgstr "الرمز المميز غير صالح" -#: vibes_auth/viewsets.py:129 +#: vibes_auth/viewsets.py:130 msgid "password reset successfully" msgstr "تمت إعادة تعيين كلمة المرور بنجاح!" -#: vibes_auth/viewsets.py:162 +#: vibes_auth/viewsets.py:163 msgid "account already activated!" msgstr "لقد قمت بتفعيل الحساب بالفعل..." diff --git a/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.po b/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.po index 409a370c..854a1488 100644 --- a/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.po +++ b/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -104,7 +104,7 @@ msgstr "Potvrzení obnovení hesla uživatele" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:114 +#: vibes_auth/viewsets.py:115 msgid "passwords do not match" msgstr "Hesla se neshodují" @@ -147,8 +147,8 @@ msgstr "Chybně zadané telefonní číslo: {phone_number}!" msgid "Invalid attribute format: {attribute_pair}" msgstr "Nesprávný formát atributu: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:157 -#: vibes_auth/viewsets.py:176 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 +#: vibes_auth/viewsets.py:177 msgid "activation link is invalid!" msgstr "Aktivační odkaz je neplatný!" @@ -160,7 +160,7 @@ msgstr "Účet byl již aktivován..." msgid "something went wrong: {e!s}" msgstr "Něco se pokazilo: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:125 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 msgid "token is invalid!" msgstr "Token je neplatný!" @@ -436,10 +436,10 @@ msgstr "" msgid "the token is invalid" msgstr "Token je neplatný" -#: vibes_auth/viewsets.py:129 +#: vibes_auth/viewsets.py:130 msgid "password reset successfully" msgstr "Heslo bylo úspěšně resetováno!" -#: vibes_auth/viewsets.py:162 +#: vibes_auth/viewsets.py:163 msgid "account already activated!" msgstr "Účet jste již aktivovali..." diff --git a/vibes_auth/locale/da_DK/LC_MESSAGES/django.po b/vibes_auth/locale/da_DK/LC_MESSAGES/django.po index 6ff950d9..a8cab255 100644 --- a/vibes_auth/locale/da_DK/LC_MESSAGES/django.po +++ b/vibes_auth/locale/da_DK/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -106,7 +106,7 @@ msgstr "Bekræft nulstilling af en brugers adgangskode" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:114 +#: vibes_auth/viewsets.py:115 msgid "passwords do not match" msgstr "Adgangskoderne stemmer ikke overens" @@ -149,8 +149,8 @@ msgstr "Misdannet telefonnummer: {phone_number}!" msgid "Invalid attribute format: {attribute_pair}" msgstr "Ugyldigt attributformat: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:157 -#: vibes_auth/viewsets.py:176 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 +#: vibes_auth/viewsets.py:177 msgid "activation link is invalid!" msgstr "Aktiveringslinket er ugyldigt!" @@ -162,7 +162,7 @@ msgstr "Kontoen er allerede aktiveret..." msgid "something went wrong: {e!s}" msgstr "Noget gik galt: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:125 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 msgid "token is invalid!" msgstr "Token er ugyldig!" @@ -438,10 +438,10 @@ msgstr "" msgid "the token is invalid" msgstr "Tokenet er ugyldigt" -#: vibes_auth/viewsets.py:129 +#: vibes_auth/viewsets.py:130 msgid "password reset successfully" msgstr "Adgangskoden er blevet nulstillet med succes!" -#: vibes_auth/viewsets.py:162 +#: vibes_auth/viewsets.py:163 msgid "account already activated!" msgstr "Du har allerede aktiveret kontoen..." diff --git a/vibes_auth/locale/de_DE/LC_MESSAGES/django.po b/vibes_auth/locale/de_DE/LC_MESSAGES/django.po index 6705525d..9c270d3b 100644 --- a/vibes_auth/locale/de_DE/LC_MESSAGES/django.po +++ b/vibes_auth/locale/de_DE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -107,7 +107,7 @@ msgstr "Bestätigen Sie das Zurücksetzen des Passworts eines Benutzers" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:114 +#: vibes_auth/viewsets.py:115 msgid "passwords do not match" msgstr "Passwörter stimmen nicht überein" @@ -153,8 +153,8 @@ msgstr "Missgebildete Telefonnummer: {phone_number}!" msgid "Invalid attribute format: {attribute_pair}" msgstr "Ungültiges Attributformat: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:157 -#: vibes_auth/viewsets.py:176 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 +#: vibes_auth/viewsets.py:177 msgid "activation link is invalid!" msgstr "Der Aktivierungslink ist ungültig!" @@ -166,7 +166,7 @@ msgstr "Das Konto wurde bereits aktiviert..." msgid "something went wrong: {e!s}" msgstr "Etwas ist schief gelaufen: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:125 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 msgid "token is invalid!" msgstr "Token ist ungültig!" @@ -445,10 +445,10 @@ msgstr "" msgid "the token is invalid" msgstr "Das Token ist ungültig" -#: vibes_auth/viewsets.py:129 +#: vibes_auth/viewsets.py:130 msgid "password reset successfully" msgstr "Das Passwort wurde erfolgreich zurückgesetzt!" -#: vibes_auth/viewsets.py:162 +#: vibes_auth/viewsets.py:163 msgid "account already activated!" msgstr "Sie haben das Konto bereits aktiviert..." diff --git a/vibes_auth/locale/en_GB/LC_MESSAGES/django.po b/vibes_auth/locale/en_GB/LC_MESSAGES/django.po index 6d4f20cb..54005f83 100644 --- a/vibes_auth/locale/en_GB/LC_MESSAGES/django.po +++ b/vibes_auth/locale/en_GB/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -108,7 +108,7 @@ msgstr "Confirm a user's password reset" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:114 +#: vibes_auth/viewsets.py:115 msgid "passwords do not match" msgstr "Passwords do not match" @@ -151,8 +151,8 @@ msgstr "Malformed phone number: {phone_number}!" msgid "Invalid attribute format: {attribute_pair}" msgstr "Invalid attribute format: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:157 -#: vibes_auth/viewsets.py:176 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 +#: vibes_auth/viewsets.py:177 msgid "activation link is invalid!" msgstr "Activation link is invalid!" @@ -164,7 +164,7 @@ msgstr "Account has been already activated..." msgid "something went wrong: {e!s}" msgstr "Something went wrong: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:125 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 msgid "token is invalid!" msgstr "Token is invalid!" @@ -439,10 +439,10 @@ msgstr "" msgid "the token is invalid" msgstr "The token is invalid" -#: vibes_auth/viewsets.py:129 +#: vibes_auth/viewsets.py:130 msgid "password reset successfully" msgstr "Password has been reset successfully!" -#: vibes_auth/viewsets.py:162 +#: vibes_auth/viewsets.py:163 msgid "account already activated!" msgstr "You have already activated the account..." diff --git a/vibes_auth/locale/en_US/LC_MESSAGES/django.po b/vibes_auth/locale/en_US/LC_MESSAGES/django.po index cf80e853..e9af7ede 100644 --- a/vibes_auth/locale/en_US/LC_MESSAGES/django.po +++ b/vibes_auth/locale/en_US/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -104,7 +104,7 @@ msgstr "Confirm a user's password reset" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:114 +#: vibes_auth/viewsets.py:115 msgid "passwords do not match" msgstr "Passwords do not match" @@ -147,8 +147,8 @@ msgstr "Malformed phone number: {phone_number}!" msgid "Invalid attribute format: {attribute_pair}" msgstr "Invalid attribute format: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:157 -#: vibes_auth/viewsets.py:176 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 +#: vibes_auth/viewsets.py:177 msgid "activation link is invalid!" msgstr "Activation link is invalid!" @@ -160,7 +160,7 @@ msgstr "Account has been already activated..." msgid "something went wrong: {e!s}" msgstr "Something went wrong: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:125 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 msgid "token is invalid!" msgstr "Token is invalid!" @@ -435,10 +435,10 @@ msgstr "" msgid "the token is invalid" msgstr "The token is invalid" -#: vibes_auth/viewsets.py:129 +#: vibes_auth/viewsets.py:130 msgid "password reset successfully" msgstr "Password has been reset successfully!" -#: vibes_auth/viewsets.py:162 +#: vibes_auth/viewsets.py:163 msgid "account already activated!" msgstr "You have already activated the account..." diff --git a/vibes_auth/locale/es_ES/LC_MESSAGES/django.po b/vibes_auth/locale/es_ES/LC_MESSAGES/django.po index 286279eb..9c85432a 100644 --- a/vibes_auth/locale/es_ES/LC_MESSAGES/django.po +++ b/vibes_auth/locale/es_ES/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -106,7 +106,7 @@ msgstr "Confirmar el restablecimiento de la contraseña de un usuario" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:114 +#: vibes_auth/viewsets.py:115 msgid "passwords do not match" msgstr "Las contraseñas no coinciden" @@ -150,8 +150,8 @@ msgstr "Número de teléfono malformado: ¡{phone_number}!" msgid "Invalid attribute format: {attribute_pair}" msgstr "Formato de atributo no válido: ¡{attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:157 -#: vibes_auth/viewsets.py:176 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 +#: vibes_auth/viewsets.py:177 msgid "activation link is invalid!" msgstr "El enlace de activación no es válido." @@ -163,7 +163,7 @@ msgstr "La cuenta ya ha sido activada..." msgid "something went wrong: {e!s}" msgstr "Algo salió mal: {e!s}." -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:125 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 msgid "token is invalid!" msgstr "¡La ficha no es válida!" @@ -438,10 +438,10 @@ msgstr "" msgid "the token is invalid" msgstr "El token no es válido" -#: vibes_auth/viewsets.py:129 +#: vibes_auth/viewsets.py:130 msgid "password reset successfully" msgstr "La contraseña se ha restablecido correctamente." -#: vibes_auth/viewsets.py:162 +#: vibes_auth/viewsets.py:163 msgid "account already activated!" msgstr "Ya ha activado la cuenta..." diff --git a/vibes_auth/locale/fa_IR/LC_MESSAGES/django.po b/vibes_auth/locale/fa_IR/LC_MESSAGES/django.po index 191bbad8..c67aa034 100644 --- a/vibes_auth/locale/fa_IR/LC_MESSAGES/django.po +++ b/vibes_auth/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-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -107,7 +107,7 @@ msgstr "" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:114 +#: vibes_auth/viewsets.py:115 msgid "passwords do not match" msgstr "" @@ -150,8 +150,8 @@ msgstr "" msgid "Invalid attribute format: {attribute_pair}" msgstr "" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:157 -#: vibes_auth/viewsets.py:176 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 +#: vibes_auth/viewsets.py:177 msgid "activation link is invalid!" msgstr "" @@ -163,7 +163,7 @@ msgstr "" msgid "something went wrong: {e!s}" msgstr "" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:125 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 msgid "token is invalid!" msgstr "" @@ -422,10 +422,10 @@ msgstr "" msgid "the token is invalid" msgstr "" -#: vibes_auth/viewsets.py:129 +#: vibes_auth/viewsets.py:130 msgid "password reset successfully" msgstr "" -#: vibes_auth/viewsets.py:162 +#: vibes_auth/viewsets.py:163 msgid "account already activated!" msgstr "" diff --git a/vibes_auth/locale/fr_FR/LC_MESSAGES/django.po b/vibes_auth/locale/fr_FR/LC_MESSAGES/django.po index 75c420be..fb7bcc66 100644 --- a/vibes_auth/locale/fr_FR/LC_MESSAGES/django.po +++ b/vibes_auth/locale/fr_FR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -108,7 +108,7 @@ msgstr "Confirmer la réinitialisation du mot de passe d'un utilisateur" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:114 +#: vibes_auth/viewsets.py:115 msgid "passwords do not match" msgstr "Les mots de passe ne correspondent pas" @@ -153,8 +153,8 @@ msgstr "Numéro de téléphone malformé : {phone_number} !" msgid "Invalid attribute format: {attribute_pair}" msgstr "Format d'attribut non valide : {attribute_pair} !" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:157 -#: vibes_auth/viewsets.py:176 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 +#: vibes_auth/viewsets.py:177 msgid "activation link is invalid!" msgstr "Le lien d'activation n'est pas valide !" @@ -166,7 +166,7 @@ msgstr "Le compte a déjà été activé..." msgid "something went wrong: {e!s}" msgstr "Quelque chose a mal tourné : {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:125 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 msgid "token is invalid!" msgstr "Le jeton n'est pas valide !" @@ -448,10 +448,10 @@ msgstr "" msgid "the token is invalid" msgstr "Le jeton n'est pas valide" -#: vibes_auth/viewsets.py:129 +#: vibes_auth/viewsets.py:130 msgid "password reset successfully" msgstr "Le mot de passe a été réinitialisé avec succès !" -#: vibes_auth/viewsets.py:162 +#: vibes_auth/viewsets.py:163 msgid "account already activated!" msgstr "Vous avez déjà activé le compte..." diff --git a/vibes_auth/locale/he_IL/LC_MESSAGES/django.po b/vibes_auth/locale/he_IL/LC_MESSAGES/django.po index 2f222ef8..2018f821 100644 --- a/vibes_auth/locale/he_IL/LC_MESSAGES/django.po +++ b/vibes_auth/locale/he_IL/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -104,7 +104,7 @@ msgstr "אשר את איפוס הסיסמה של המשתמש" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:114 +#: vibes_auth/viewsets.py:115 msgid "passwords do not match" msgstr "הסיסמאות אינן תואמות" @@ -147,8 +147,8 @@ msgstr "מספר טלפון שגוי: {phone_number}!" msgid "Invalid attribute format: {attribute_pair}" msgstr "פורמט תכונה לא חוקי: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:157 -#: vibes_auth/viewsets.py:176 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 +#: vibes_auth/viewsets.py:177 msgid "activation link is invalid!" msgstr "קישור ההפעלה אינו תקף!" @@ -160,14 +160,14 @@ msgstr "החשבון כבר הופעל..." msgid "something went wrong: {e!s}" msgstr "משהו השתבש: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:125 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 msgid "token is invalid!" msgstr "האסימון אינו חוקי!" #: vibes_auth/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:180 @@ -342,11 +342,12 @@ msgstr "שלום %(user_first_name)s," #: vibes_auth/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 msgid "" @@ -426,10 +427,10 @@ msgstr "" msgid "the token is invalid" msgstr "האסימון אינו חוקי" -#: vibes_auth/viewsets.py:129 +#: vibes_auth/viewsets.py:130 msgid "password reset successfully" msgstr "הסיסמה אופסה בהצלחה!" -#: vibes_auth/viewsets.py:162 +#: vibes_auth/viewsets.py:163 msgid "account already activated!" msgstr "כבר הפעלת את החשבון..." diff --git a/vibes_auth/locale/hi_IN/LC_MESSAGES/django.po b/vibes_auth/locale/hi_IN/LC_MESSAGES/django.po index a9f552c5..f846b764 100644 --- a/vibes_auth/locale/hi_IN/LC_MESSAGES/django.po +++ b/vibes_auth/locale/hi_IN/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -107,7 +107,7 @@ msgstr "" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:114 +#: vibes_auth/viewsets.py:115 msgid "passwords do not match" msgstr "" @@ -150,8 +150,8 @@ msgstr "" msgid "Invalid attribute format: {attribute_pair}" msgstr "" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:157 -#: vibes_auth/viewsets.py:176 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 +#: vibes_auth/viewsets.py:177 msgid "activation link is invalid!" msgstr "" @@ -163,7 +163,7 @@ msgstr "" msgid "something went wrong: {e!s}" msgstr "" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:125 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 msgid "token is invalid!" msgstr "" @@ -422,10 +422,10 @@ msgstr "" msgid "the token is invalid" msgstr "" -#: vibes_auth/viewsets.py:129 +#: vibes_auth/viewsets.py:130 msgid "password reset successfully" msgstr "" -#: vibes_auth/viewsets.py:162 +#: vibes_auth/viewsets.py:163 msgid "account already activated!" msgstr "" diff --git a/vibes_auth/locale/hr_HR/LC_MESSAGES/django.po b/vibes_auth/locale/hr_HR/LC_MESSAGES/django.po index 191bbad8..c67aa034 100644 --- a/vibes_auth/locale/hr_HR/LC_MESSAGES/django.po +++ b/vibes_auth/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-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -107,7 +107,7 @@ msgstr "" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:114 +#: vibes_auth/viewsets.py:115 msgid "passwords do not match" msgstr "" @@ -150,8 +150,8 @@ msgstr "" msgid "Invalid attribute format: {attribute_pair}" msgstr "" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:157 -#: vibes_auth/viewsets.py:176 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 +#: vibes_auth/viewsets.py:177 msgid "activation link is invalid!" msgstr "" @@ -163,7 +163,7 @@ msgstr "" msgid "something went wrong: {e!s}" msgstr "" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:125 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 msgid "token is invalid!" msgstr "" @@ -422,10 +422,10 @@ msgstr "" msgid "the token is invalid" msgstr "" -#: vibes_auth/viewsets.py:129 +#: vibes_auth/viewsets.py:130 msgid "password reset successfully" msgstr "" -#: vibes_auth/viewsets.py:162 +#: vibes_auth/viewsets.py:163 msgid "account already activated!" msgstr "" diff --git a/vibes_auth/locale/id_ID/LC_MESSAGES/django.po b/vibes_auth/locale/id_ID/LC_MESSAGES/django.po index 4ec36330..b61970b6 100644 --- a/vibes_auth/locale/id_ID/LC_MESSAGES/django.po +++ b/vibes_auth/locale/id_ID/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -106,7 +106,7 @@ msgstr "Mengonfirmasi pengaturan ulang kata sandi pengguna" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:114 +#: vibes_auth/viewsets.py:115 msgid "passwords do not match" msgstr "Kata sandi tidak cocok" @@ -150,8 +150,8 @@ msgstr "Nomor telepon rusak: {phone_number}!" msgid "Invalid attribute format: {attribute_pair}" msgstr "Format atribut tidak valid: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:157 -#: vibes_auth/viewsets.py:176 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 +#: vibes_auth/viewsets.py:177 msgid "activation link is invalid!" msgstr "Tautan aktivasi tidak valid!" @@ -163,14 +163,14 @@ msgstr "Akun sudah diaktifkan..." msgid "something went wrong: {e!s}" msgstr "Ada yang tidak beres: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:125 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 msgid "token is invalid!" msgstr "Token tidak valid!" #: vibes_auth/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 "" "Produk yang terakhir dilihat pengguna ini (maksimal 48), dalam urutan " "kronologis terbalik." @@ -348,11 +348,12 @@ msgstr "Halo %(user_first_name)s," #: vibes_auth/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 "" -"Kami telah menerima permintaan untuk mengatur ulang kata sandi Anda. Silakan" -" atur ulang kata sandi Anda dengan mengeklik tombol di bawah ini:" +"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 msgid "" @@ -368,7 +369,8 @@ msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" msgstr "" -"Jika tombol di atas tidak berfungsi, silakan salin dan tempelkan URL berikut\n" +"Jika tombol di atas tidak berfungsi, silakan salin dan tempelkan URL " +"berikut\n" " ke dalam peramban web Anda:" #: vibes_auth/templates/user_reset_password_email.html:101 @@ -438,10 +440,10 @@ msgstr "" msgid "the token is invalid" msgstr "Token tidak valid" -#: vibes_auth/viewsets.py:129 +#: vibes_auth/viewsets.py:130 msgid "password reset successfully" msgstr "Kata sandi telah berhasil diatur ulang!" -#: vibes_auth/viewsets.py:162 +#: vibes_auth/viewsets.py:163 msgid "account already activated!" msgstr "Anda telah mengaktifkan akun..." diff --git a/vibes_auth/locale/it_IT/LC_MESSAGES/django.po b/vibes_auth/locale/it_IT/LC_MESSAGES/django.po index 1acd0b25..029b7e53 100644 --- a/vibes_auth/locale/it_IT/LC_MESSAGES/django.po +++ b/vibes_auth/locale/it_IT/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -107,7 +107,7 @@ msgstr "Confermare la reimpostazione della password di un utente" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:114 +#: vibes_auth/viewsets.py:115 msgid "passwords do not match" msgstr "Le password non corrispondono" @@ -150,8 +150,8 @@ msgstr "Numero di telefono malformato: {phone_number}!" msgid "Invalid attribute format: {attribute_pair}" msgstr "Formato attributo non valido: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:157 -#: vibes_auth/viewsets.py:176 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 +#: vibes_auth/viewsets.py:177 msgid "activation link is invalid!" msgstr "Il link di attivazione non è valido!" @@ -163,7 +163,7 @@ msgstr "L'account è già stato attivato..." msgid "something went wrong: {e!s}" msgstr "Qualcosa è andato storto: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:125 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 msgid "token is invalid!" msgstr "Il gettone non è valido!" @@ -442,10 +442,10 @@ msgstr "" msgid "the token is invalid" msgstr "Il token non è valido" -#: vibes_auth/viewsets.py:129 +#: vibes_auth/viewsets.py:130 msgid "password reset successfully" msgstr "La password è stata reimpostata con successo!" -#: vibes_auth/viewsets.py:162 +#: vibes_auth/viewsets.py:163 msgid "account already activated!" msgstr "Avete già attivato l'account..." diff --git a/vibes_auth/locale/ja_JP/LC_MESSAGES/django.po b/vibes_auth/locale/ja_JP/LC_MESSAGES/django.po index 4690c66d..9a9b7318 100644 --- a/vibes_auth/locale/ja_JP/LC_MESSAGES/django.po +++ b/vibes_auth/locale/ja_JP/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -104,7 +104,7 @@ msgstr "ユーザーのパスワード・リセットを確認する" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:114 +#: vibes_auth/viewsets.py:115 msgid "passwords do not match" msgstr "パスワードが一致しない" @@ -149,8 +149,8 @@ msgstr "電話番号が不正です:{phone_number}!" msgid "Invalid attribute format: {attribute_pair}" msgstr "無効な属性形式です:{attribute_pair}です!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:157 -#: vibes_auth/viewsets.py:176 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 +#: vibes_auth/viewsets.py:177 msgid "activation link is invalid!" msgstr "アクティベーションリンクが無効です!" @@ -162,7 +162,7 @@ msgstr "アカウントはすでに有効になっています..." msgid "something went wrong: {e!s}" msgstr "何かが間違っていた:{e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:125 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 msgid "token is invalid!" msgstr "トークンが無効です!" @@ -436,10 +436,10 @@ msgstr "" msgid "the token is invalid" msgstr "トークンが無効" -#: vibes_auth/viewsets.py:129 +#: vibes_auth/viewsets.py:130 msgid "password reset successfully" msgstr "パスワードのリセットに成功しました!" -#: vibes_auth/viewsets.py:162 +#: vibes_auth/viewsets.py:163 msgid "account already activated!" msgstr "あなたはすでにアカウントを有効にしています..." diff --git a/vibes_auth/locale/kk_KZ/LC_MESSAGES/django.po b/vibes_auth/locale/kk_KZ/LC_MESSAGES/django.po index a9f552c5..f846b764 100644 --- a/vibes_auth/locale/kk_KZ/LC_MESSAGES/django.po +++ b/vibes_auth/locale/kk_KZ/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -107,7 +107,7 @@ msgstr "" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:114 +#: vibes_auth/viewsets.py:115 msgid "passwords do not match" msgstr "" @@ -150,8 +150,8 @@ msgstr "" msgid "Invalid attribute format: {attribute_pair}" msgstr "" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:157 -#: vibes_auth/viewsets.py:176 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 +#: vibes_auth/viewsets.py:177 msgid "activation link is invalid!" msgstr "" @@ -163,7 +163,7 @@ msgstr "" msgid "something went wrong: {e!s}" msgstr "" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:125 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 msgid "token is invalid!" msgstr "" @@ -422,10 +422,10 @@ msgstr "" msgid "the token is invalid" msgstr "" -#: vibes_auth/viewsets.py:129 +#: vibes_auth/viewsets.py:130 msgid "password reset successfully" msgstr "" -#: vibes_auth/viewsets.py:162 +#: vibes_auth/viewsets.py:163 msgid "account already activated!" msgstr "" diff --git a/vibes_auth/locale/ko_KR/LC_MESSAGES/django.po b/vibes_auth/locale/ko_KR/LC_MESSAGES/django.po index 82415e7c..134f98e5 100644 --- a/vibes_auth/locale/ko_KR/LC_MESSAGES/django.po +++ b/vibes_auth/locale/ko_KR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -104,7 +104,7 @@ msgstr "사용자의 비밀번호 재설정 확인" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:114 +#: vibes_auth/viewsets.py:115 msgid "passwords do not match" msgstr "비밀번호가 일치하지 않습니다." @@ -147,8 +147,8 @@ msgstr "잘못된 전화 번호입니다: {phone_number}!" msgid "Invalid attribute format: {attribute_pair}" msgstr "잘못된 속성 형식입니다: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:157 -#: vibes_auth/viewsets.py:176 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 +#: vibes_auth/viewsets.py:177 msgid "activation link is invalid!" msgstr "활성화 링크가 유효하지 않습니다!" @@ -160,14 +160,14 @@ msgstr "계정이 이미 활성화되었습니다..." msgid "something went wrong: {e!s}" msgstr "문제가 발생했습니다: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:125 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 msgid "token is invalid!" msgstr "토큰이 유효하지 않습니다!" #: vibes_auth/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:180 @@ -342,9 +342,12 @@ msgstr "안녕하세요 %(user_first_name)s," #: vibes_auth/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 msgid "" @@ -391,7 +394,9 @@ msgstr "계정 활성화" 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 msgid "" @@ -421,17 +426,17 @@ 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:117 msgid "the token is invalid" msgstr "토큰이 유효하지 않습니다." -#: vibes_auth/viewsets.py:129 +#: vibes_auth/viewsets.py:130 msgid "password reset successfully" msgstr "비밀번호가 성공적으로 재설정되었습니다!" -#: vibes_auth/viewsets.py:162 +#: vibes_auth/viewsets.py:163 msgid "account already activated!" msgstr "이미 계정을 활성화하셨습니다..." diff --git a/vibes_auth/locale/nl_NL/LC_MESSAGES/django.po b/vibes_auth/locale/nl_NL/LC_MESSAGES/django.po index 0540a9e0..b290f902 100644 --- a/vibes_auth/locale/nl_NL/LC_MESSAGES/django.po +++ b/vibes_auth/locale/nl_NL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -106,7 +106,7 @@ msgstr "Bevestig het resetten van het wachtwoord van een gebruiker" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:114 +#: vibes_auth/viewsets.py:115 msgid "passwords do not match" msgstr "Wachtwoorden komen niet overeen" @@ -151,8 +151,8 @@ msgstr "Misvormd telefoonnummer: {phone_number}!" msgid "Invalid attribute format: {attribute_pair}" msgstr "Ongeldig attribuutformaat: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:157 -#: vibes_auth/viewsets.py:176 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 +#: vibes_auth/viewsets.py:177 msgid "activation link is invalid!" msgstr "Activeringslink is ongeldig!" @@ -164,7 +164,7 @@ msgstr "Account is al geactiveerd..." msgid "something went wrong: {e!s}" msgstr "Er ging iets mis: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:125 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 msgid "token is invalid!" msgstr "Token is invalid!" @@ -439,10 +439,10 @@ msgstr "" msgid "the token is invalid" msgstr "Het token is ongeldig" -#: vibes_auth/viewsets.py:129 +#: vibes_auth/viewsets.py:130 msgid "password reset successfully" msgstr "Wachtwoord is succesvol gereset!" -#: vibes_auth/viewsets.py:162 +#: vibes_auth/viewsets.py:163 msgid "account already activated!" msgstr "Je hebt de account al geactiveerd..." diff --git a/vibes_auth/locale/no_NO/LC_MESSAGES/django.po b/vibes_auth/locale/no_NO/LC_MESSAGES/django.po index 995b9b20..bc536e04 100644 --- a/vibes_auth/locale/no_NO/LC_MESSAGES/django.po +++ b/vibes_auth/locale/no_NO/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -106,7 +106,7 @@ msgstr "Bekreft tilbakestilling av en brukers passord" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:114 +#: vibes_auth/viewsets.py:115 msgid "passwords do not match" msgstr "Passordene stemmer ikke overens" @@ -149,8 +149,8 @@ msgstr "Feilaktig telefonnummer: {phone_number}!" msgid "Invalid attribute format: {attribute_pair}" msgstr "Ugyldig attributtformat: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:157 -#: vibes_auth/viewsets.py:176 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 +#: vibes_auth/viewsets.py:177 msgid "activation link is invalid!" msgstr "Aktiveringslenken er ugyldig!" @@ -162,14 +162,14 @@ msgstr "Kontoen er allerede aktivert..." msgid "something went wrong: {e!s}" msgstr "Noe gikk galt: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:125 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 msgid "token is invalid!" msgstr "Tokenet er ugyldig!" #: vibes_auth/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." @@ -347,7 +347,8 @@ msgstr "Hallo %(user_first_name)s," #: vibes_auth/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 " @@ -437,10 +438,10 @@ msgstr "" msgid "the token is invalid" msgstr "Tokenet er ugyldig" -#: vibes_auth/viewsets.py:129 +#: vibes_auth/viewsets.py:130 msgid "password reset successfully" msgstr "Passordet har blitt tilbakestilt!" -#: vibes_auth/viewsets.py:162 +#: vibes_auth/viewsets.py:163 msgid "account already activated!" msgstr "Du har allerede aktivert kontoen..." diff --git a/vibes_auth/locale/pl_PL/LC_MESSAGES/django.po b/vibes_auth/locale/pl_PL/LC_MESSAGES/django.po index d886c8ae..101cfb6b 100644 --- a/vibes_auth/locale/pl_PL/LC_MESSAGES/django.po +++ b/vibes_auth/locale/pl_PL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -106,7 +106,7 @@ msgstr "Potwierdzenie zresetowania hasła użytkownika" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:114 +#: vibes_auth/viewsets.py:115 msgid "passwords do not match" msgstr "Hasła nie są zgodne" @@ -151,8 +151,8 @@ msgstr "Zniekształcony numer telefonu: {phone_number}!" msgid "Invalid attribute format: {attribute_pair}" msgstr "Nieprawidłowy format atrybutu: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:157 -#: vibes_auth/viewsets.py:176 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 +#: vibes_auth/viewsets.py:177 msgid "activation link is invalid!" msgstr "Link aktywacyjny jest nieprawidłowy!" @@ -164,7 +164,7 @@ msgstr "Konto zostało już aktywowane..." msgid "something went wrong: {e!s}" msgstr "Coś poszło nie tak: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:125 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 msgid "token is invalid!" msgstr "Token jest nieprawidłowy!" @@ -439,10 +439,10 @@ msgstr "" msgid "the token is invalid" msgstr "Token jest nieprawidłowy" -#: vibes_auth/viewsets.py:129 +#: vibes_auth/viewsets.py:130 msgid "password reset successfully" msgstr "Hasło zostało pomyślnie zresetowane!" -#: vibes_auth/viewsets.py:162 +#: vibes_auth/viewsets.py:163 msgid "account already activated!" msgstr "Konto zostało już aktywowane..." diff --git a/vibes_auth/locale/pt_BR/LC_MESSAGES/django.po b/vibes_auth/locale/pt_BR/LC_MESSAGES/django.po index 9120a33d..85303be7 100644 --- a/vibes_auth/locale/pt_BR/LC_MESSAGES/django.po +++ b/vibes_auth/locale/pt_BR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -105,7 +105,7 @@ msgstr "Confirmar a redefinição de senha de um usuário" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:114 +#: vibes_auth/viewsets.py:115 msgid "passwords do not match" msgstr "As senhas não correspondem" @@ -148,8 +148,8 @@ msgstr "Número de telefone malformado: {phone_number}!" msgid "Invalid attribute format: {attribute_pair}" msgstr "Formato de atributo inválido: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:157 -#: vibes_auth/viewsets.py:176 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 +#: vibes_auth/viewsets.py:177 msgid "activation link is invalid!" msgstr "O link de ativação é inválido!" @@ -161,7 +161,7 @@ msgstr "A conta já foi ativada..." msgid "something went wrong: {e!s}" msgstr "Algo deu errado: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:125 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 msgid "token is invalid!" msgstr "O token é inválido!" @@ -437,10 +437,10 @@ msgstr "" msgid "the token is invalid" msgstr "O token é inválido" -#: vibes_auth/viewsets.py:129 +#: vibes_auth/viewsets.py:130 msgid "password reset successfully" msgstr "A senha foi redefinida com sucesso!" -#: vibes_auth/viewsets.py:162 +#: vibes_auth/viewsets.py:163 msgid "account already activated!" msgstr "Você já ativou a conta..." diff --git a/vibes_auth/locale/ro_RO/LC_MESSAGES/django.po b/vibes_auth/locale/ro_RO/LC_MESSAGES/django.po index fd4acde6..c43a8b69 100644 --- a/vibes_auth/locale/ro_RO/LC_MESSAGES/django.po +++ b/vibes_auth/locale/ro_RO/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -107,7 +107,7 @@ msgstr "Confirmați resetarea parolei unui utilizator" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:114 +#: vibes_auth/viewsets.py:115 msgid "passwords do not match" msgstr "Parolele nu se potrivesc" @@ -151,8 +151,8 @@ msgstr "Număr de telefon malformat: {phone_number}!" msgid "Invalid attribute format: {attribute_pair}" msgstr "Format de atribut invalid: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:157 -#: vibes_auth/viewsets.py:176 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 +#: vibes_auth/viewsets.py:177 msgid "activation link is invalid!" msgstr "Linkul de activare este invalid!" @@ -164,7 +164,7 @@ msgstr "Contul a fost deja activat..." msgid "something went wrong: {e!s}" msgstr "Ceva nu a mers bine: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:125 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 msgid "token is invalid!" msgstr "Token-ul nu este valabil!" @@ -442,10 +442,10 @@ msgstr "" msgid "the token is invalid" msgstr "Jetonul nu este valabil" -#: vibes_auth/viewsets.py:129 +#: vibes_auth/viewsets.py:130 msgid "password reset successfully" msgstr "Parola a fost resetată cu succes!" -#: vibes_auth/viewsets.py:162 +#: vibes_auth/viewsets.py:163 msgid "account already activated!" msgstr "Ați activat deja contul..." diff --git a/vibes_auth/locale/ru_RU/LC_MESSAGES/django.po b/vibes_auth/locale/ru_RU/LC_MESSAGES/django.po index 033459b3..f1890c1d 100644 --- a/vibes_auth/locale/ru_RU/LC_MESSAGES/django.po +++ b/vibes_auth/locale/ru_RU/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -106,7 +106,7 @@ msgstr "Подтверждение сброса пароля пользоват #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:114 +#: vibes_auth/viewsets.py:115 msgid "passwords do not match" msgstr "Пароли не совпадают" @@ -151,8 +151,8 @@ msgstr "Некорректный номер телефона: {phone_number}!" msgid "Invalid attribute format: {attribute_pair}" msgstr "Недопустимый формат атрибута: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:157 -#: vibes_auth/viewsets.py:176 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 +#: vibes_auth/viewsets.py:177 msgid "activation link is invalid!" msgstr "Ссылка на активацию недействительна!" @@ -164,7 +164,7 @@ msgstr "Аккаунт уже активирован..." msgid "something went wrong: {e!s}" msgstr "Что-то пошло не так: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:125 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 msgid "token is invalid!" msgstr "Токен недействителен!" @@ -439,10 +439,10 @@ msgstr "" msgid "the token is invalid" msgstr "Токен недействителен" -#: vibes_auth/viewsets.py:129 +#: vibes_auth/viewsets.py:130 msgid "password reset successfully" msgstr "Пароль был успешно сброшен!" -#: vibes_auth/viewsets.py:162 +#: vibes_auth/viewsets.py:163 msgid "account already activated!" msgstr "Вы уже активировали учетную запись..." diff --git a/vibes_auth/locale/sv_SE/LC_MESSAGES/django.po b/vibes_auth/locale/sv_SE/LC_MESSAGES/django.po index 861aa558..222d029f 100644 --- a/vibes_auth/locale/sv_SE/LC_MESSAGES/django.po +++ b/vibes_auth/locale/sv_SE/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -106,7 +106,7 @@ msgstr "Bekräfta återställning av en användares lösenord" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:114 +#: vibes_auth/viewsets.py:115 msgid "passwords do not match" msgstr "Lösenorden stämmer inte överens" @@ -150,8 +150,8 @@ msgstr "Missbildat telefonnummer: {phone_number}!" msgid "Invalid attribute format: {attribute_pair}" msgstr "Ogiltigt attributformat: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:157 -#: vibes_auth/viewsets.py:176 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 +#: vibes_auth/viewsets.py:177 msgid "activation link is invalid!" msgstr "Aktiveringslänken är ogiltig!" @@ -163,14 +163,14 @@ msgstr "Kontot har redan aktiverats..." msgid "something went wrong: {e!s}" msgstr "Något gick fel: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:125 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 msgid "token is invalid!" msgstr "Token är ogiltig!" #: vibes_auth/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." @@ -347,7 +347,8 @@ msgstr "Hej %(user_first_name)s," #: vibes_auth/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 " @@ -399,8 +400,8 @@ 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 msgid "" @@ -437,10 +438,10 @@ msgstr "" msgid "the token is invalid" msgstr "Token är ogiltig" -#: vibes_auth/viewsets.py:129 +#: vibes_auth/viewsets.py:130 msgid "password reset successfully" msgstr "Lösenordet har återställts framgångsrikt!" -#: vibes_auth/viewsets.py:162 +#: vibes_auth/viewsets.py:163 msgid "account already activated!" msgstr "Du har redan aktiverat kontot..." diff --git a/vibes_auth/locale/th_TH/LC_MESSAGES/django.po b/vibes_auth/locale/th_TH/LC_MESSAGES/django.po index 2e78d278..40c7e568 100644 --- a/vibes_auth/locale/th_TH/LC_MESSAGES/django.po +++ b/vibes_auth/locale/th_TH/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -104,7 +104,7 @@ msgstr "ยืนยันการรีเซ็ตรหัสผ่านข #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:114 +#: vibes_auth/viewsets.py:115 msgid "passwords do not match" msgstr "รหัสผ่านไม่ตรงกัน" @@ -147,8 +147,8 @@ msgstr "หมายเลขโทรศัพท์ไม่ถูกต้อ msgid "Invalid attribute format: {attribute_pair}" msgstr "รูปแบบแอตทริบิวต์ไม่ถูกต้อง: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:157 -#: vibes_auth/viewsets.py:176 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 +#: vibes_auth/viewsets.py:177 msgid "activation link is invalid!" msgstr "ลิงก์การเปิดใช้งานไม่ถูกต้อง!" @@ -160,16 +160,15 @@ msgstr "บัญชีได้รับการเปิดใช้งาน msgid "something went wrong: {e!s}" msgstr "เกิดข้อผิดพลาด: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:125 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 msgid "token is invalid!" msgstr "โทเคนไม่ถูกต้อง!" #: vibes_auth/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:180 msgid "groups" @@ -343,11 +342,11 @@ msgstr "สวัสดีครับ/ค่ะ %(user_first_name)s," #: vibes_auth/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 msgid "" @@ -360,9 +359,7 @@ msgstr "เปิดใช้งานบัญชี" 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:101 msgid "" @@ -391,8 +388,7 @@ 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 msgid "" @@ -420,17 +416,17 @@ 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:117 msgid "the token is invalid" msgstr "โทเค็นไม่ถูกต้อง" -#: vibes_auth/viewsets.py:129 +#: vibes_auth/viewsets.py:130 msgid "password reset successfully" msgstr "รหัสผ่านได้รับการรีเซ็ตเรียบร้อยแล้ว!" -#: vibes_auth/viewsets.py:162 +#: vibes_auth/viewsets.py:163 msgid "account already activated!" msgstr "คุณได้เปิดใช้งานบัญชีเรียบร้อยแล้ว..." diff --git a/vibes_auth/locale/tr_TR/LC_MESSAGES/django.po b/vibes_auth/locale/tr_TR/LC_MESSAGES/django.po index a5176f89..dbd55070 100644 --- a/vibes_auth/locale/tr_TR/LC_MESSAGES/django.po +++ b/vibes_auth/locale/tr_TR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -105,7 +105,7 @@ msgstr "Bir kullanıcının parola sıfırlamasını onaylama" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:114 +#: vibes_auth/viewsets.py:115 msgid "passwords do not match" msgstr "Parolalar eşleşmiyor" @@ -148,8 +148,8 @@ msgstr "Hatalı biçimlendirilmiş telefon numarası: {phone_number}!" msgid "Invalid attribute format: {attribute_pair}" msgstr "Geçersiz öznitelik biçimi: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:157 -#: vibes_auth/viewsets.py:176 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 +#: vibes_auth/viewsets.py:177 msgid "activation link is invalid!" msgstr "Aktivasyon bağlantısı geçersiz!" @@ -161,14 +161,14 @@ msgstr "Hesap zaten etkinleştirildi..." msgid "something went wrong: {e!s}" msgstr "Bir şeyler ters gitti: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:125 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 msgid "token is invalid!" msgstr "Jeton geçersiz!" #: vibes_auth/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." @@ -345,7 +345,8 @@ msgstr "Merhaba %(user_first_name)s," #: vibes_auth/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 " @@ -397,8 +398,8 @@ msgid "" "thank you for signing up for %(project_name)s. please activate your account\n" " by clicking the button below:" 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:" +"%(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 msgid "" @@ -435,10 +436,10 @@ msgstr "" msgid "the token is invalid" msgstr "Belirteç geçersiz" -#: vibes_auth/viewsets.py:129 +#: vibes_auth/viewsets.py:130 msgid "password reset successfully" msgstr "Şifre başarıyla sıfırlandı!" -#: vibes_auth/viewsets.py:162 +#: vibes_auth/viewsets.py:163 msgid "account already activated!" msgstr "Hesabı zaten etkinleştirdiniz..." diff --git a/vibes_auth/locale/vi_VN/LC_MESSAGES/django.po b/vibes_auth/locale/vi_VN/LC_MESSAGES/django.po index 18a7727a..2806e794 100644 --- a/vibes_auth/locale/vi_VN/LC_MESSAGES/django.po +++ b/vibes_auth/locale/vi_VN/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -104,7 +104,7 @@ 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:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:114 +#: vibes_auth/viewsets.py:115 msgid "passwords do not match" msgstr "Mật khẩu không khớp." @@ -124,8 +124,8 @@ msgstr "" #: vibes_auth/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 msgid "password too weak" @@ -150,8 +150,8 @@ msgstr "Số điện thoại không hợp lệ: {phone_number}!" 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:267 vibes_auth/viewsets.py:157 -#: vibes_auth/viewsets.py:176 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 +#: vibes_auth/viewsets.py:177 msgid "activation link is invalid!" msgstr "Liên kết kích hoạt không hợp lệ!" @@ -163,14 +163,14 @@ msgstr "Tài khoản đã được kích hoạt..." msgid "something went wrong: {e!s}" msgstr "Có sự cố xảy ra: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:125 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 msgid "token is invalid!" msgstr "Token không hợp lệ!" #: vibes_auth/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." @@ -347,7 +347,8 @@ msgstr "Xin chào %(user_first_name)s," #: vibes_auth/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 " @@ -395,8 +396,8 @@ 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 msgid "" @@ -424,17 +425,17 @@ 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:117 msgid "the token is invalid" msgstr "Token không hợp lệ" -#: vibes_auth/viewsets.py:129 +#: vibes_auth/viewsets.py:130 msgid "password reset successfully" msgstr "Mật khẩu đã được đặt lại thành công!" -#: vibes_auth/viewsets.py:162 +#: vibes_auth/viewsets.py:163 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.po b/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.po index d5bf8a9c..43511ada 100644 --- a/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.po +++ b/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-19 15:04+0300\n" +"POT-Creation-Date: 2025-10-04 01:50+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -104,7 +104,7 @@ msgstr "确认用户密码重置" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:114 +#: vibes_auth/viewsets.py:115 msgid "passwords do not match" msgstr "密码不匹配" @@ -147,8 +147,8 @@ msgstr "畸形电话号码:{phone_number}!" msgid "Invalid attribute format: {attribute_pair}" msgstr "属性格式无效:{attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:157 -#: vibes_auth/viewsets.py:176 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 +#: vibes_auth/viewsets.py:177 msgid "activation link is invalid!" msgstr "激活链接无效!" @@ -160,7 +160,7 @@ msgstr "帐户已激活..." msgid "something went wrong: {e!s}" msgstr "出了问题:{e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:125 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 msgid "token is invalid!" msgstr "令牌无效!" @@ -428,10 +428,10 @@ msgstr "" msgid "the token is invalid" msgstr "令牌无效" -#: vibes_auth/viewsets.py:129 +#: vibes_auth/viewsets.py:130 msgid "password reset successfully" msgstr "密码已重置成功!" -#: vibes_auth/viewsets.py:162 +#: vibes_auth/viewsets.py:163 msgid "account already activated!" msgstr "您已经激活了账户..." From 64113648eb69a0d094958545c8fdfbb728fc49cb Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Mon, 6 Oct 2025 12:06:33 +0300 Subject: [PATCH 7/9] Features: None; Fixes: None; Extra: 1) Remove `.idea/evibes.iml` file to clean up project-specific configuration. --- .idea/evibes.iml | 35 ----------------------------------- 1 file changed, 35 deletions(-) delete mode 100644 .idea/evibes.iml diff --git a/.idea/evibes.iml b/.idea/evibes.iml deleted file mode 100644 index 307a37b8..00000000 --- a/.idea/evibes.iml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file From 9e40323823c73f92a2d648f2c98f2c5d7a991b42 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Mon, 6 Oct 2025 15:58:30 +0300 Subject: [PATCH 8/9] Features: 1) Update all locale translations for token-related messages; 2) Update all locale translations with read-only Transaction ViewSet description; 3) Update all locale translations for reset password and token validations; Fixes: 1) Correct line references in locale files for consistency; Extra: Improve formatting and alignment of string segments for clarity and maintainability; --- blog/admin.py | 4 +- core/abstract.py | 17 +- core/crm/__init__.py | 2 +- core/crm/amo/gateway.py | 19 +- core/elasticsearch/__init__.py | 19 +- core/locale/ar_AR/LC_MESSAGES/django.mo | Bin 80116 -> 97914 bytes core/locale/ar_AR/LC_MESSAGES/django.po | 833 +++++++++++------ core/locale/cs_CZ/LC_MESSAGES/django.mo | Bin 68618 -> 83586 bytes core/locale/cs_CZ/LC_MESSAGES/django.po | 846 +++++++++++------ core/locale/da_DK/LC_MESSAGES/django.mo | Bin 66977 -> 81933 bytes core/locale/da_DK/LC_MESSAGES/django.po | 851 +++++++++++------ core/locale/de_DE/LC_MESSAGES/django.mo | Bin 71050 -> 86688 bytes core/locale/de_DE/LC_MESSAGES/django.po | 866 ++++++++++++------ core/locale/en_GB/LC_MESSAGES/django.mo | Bin 64701 -> 79043 bytes core/locale/en_GB/LC_MESSAGES/django.po | 846 +++++++++++------ core/locale/en_US/LC_MESSAGES/django.mo | Bin 64692 -> 79034 bytes core/locale/en_US/LC_MESSAGES/django.po | 846 +++++++++++------ core/locale/es_ES/LC_MESSAGES/django.mo | Bin 69354 -> 84811 bytes core/locale/es_ES/LC_MESSAGES/django.po | 861 +++++++++++------ core/locale/fa_IR/LC_MESSAGES/django.po | 751 +++++++++------ core/locale/fr_FR/LC_MESSAGES/django.mo | Bin 71565 -> 87394 bytes core/locale/fr_FR/LC_MESSAGES/django.po | 865 +++++++++++------ core/locale/he_IL/LC_MESSAGES/django.mo | Bin 74231 -> 90780 bytes core/locale/he_IL/LC_MESSAGES/django.po | 825 +++++++++++------ core/locale/hi_IN/LC_MESSAGES/django.po | 751 +++++++++------ core/locale/hr_HR/LC_MESSAGES/django.po | 751 +++++++++------ core/locale/id_ID/LC_MESSAGES/django.mo | Bin 67032 -> 81927 bytes core/locale/id_ID/LC_MESSAGES/django.po | 850 +++++++++++------ core/locale/it_IT/LC_MESSAGES/django.mo | Bin 69560 -> 84954 bytes core/locale/it_IT/LC_MESSAGES/django.po | 859 +++++++++++------ core/locale/ja_JP/LC_MESSAGES/django.mo | Bin 72845 -> 89881 bytes core/locale/ja_JP/LC_MESSAGES/django.po | 798 ++++++++++------ core/locale/kk_KZ/LC_MESSAGES/django.po | 751 +++++++++------ core/locale/ko_KR/LC_MESSAGES/django.mo | Bin 69290 -> 84997 bytes core/locale/ko_KR/LC_MESSAGES/django.po | 803 ++++++++++------ core/locale/nl_NL/LC_MESSAGES/django.mo | Bin 69193 -> 84564 bytes core/locale/nl_NL/LC_MESSAGES/django.po | 862 +++++++++++------ core/locale/no_NO/LC_MESSAGES/django.mo | Bin 67480 -> 82492 bytes core/locale/no_NO/LC_MESSAGES/django.po | 853 +++++++++++------ core/locale/pl_PL/LC_MESSAGES/django.mo | Bin 68924 -> 83945 bytes core/locale/pl_PL/LC_MESSAGES/django.po | 848 +++++++++++------ core/locale/pt_BR/LC_MESSAGES/django.mo | Bin 68982 -> 84470 bytes core/locale/pt_BR/LC_MESSAGES/django.po | 858 +++++++++++------ core/locale/ro_RO/LC_MESSAGES/django.mo | Bin 70408 -> 86166 bytes core/locale/ro_RO/LC_MESSAGES/django.po | 860 +++++++++++------ core/locale/ru_RU/LC_MESSAGES/django.mo | Bin 90551 -> 111599 bytes core/locale/ru_RU/LC_MESSAGES/django.po | 858 +++++++++++------ core/locale/sv_SE/LC_MESSAGES/django.mo | Bin 67601 -> 82581 bytes core/locale/sv_SE/LC_MESSAGES/django.po | 849 +++++++++++------ core/locale/th_TH/LC_MESSAGES/django.mo | Bin 108424 -> 133039 bytes core/locale/th_TH/LC_MESSAGES/django.po | 848 +++++++++++------ core/locale/tr_TR/LC_MESSAGES/django.mo | Bin 69303 -> 84641 bytes core/locale/tr_TR/LC_MESSAGES/django.po | 853 +++++++++++------ core/locale/vi_VN/LC_MESSAGES/django.mo | Bin 77598 -> 94823 bytes core/locale/vi_VN/LC_MESSAGES/django.po | 858 +++++++++++------ core/locale/zh_Hans/LC_MESSAGES/django.mo | Bin 61049 -> 74166 bytes core/locale/zh_Hans/LC_MESSAGES/django.po | 786 ++++++++++------ core/management/commands/__init__.py | 2 +- core/management/commands/translate_fields.py | 5 +- core/models.py | 99 +- core/signals.py | 34 +- core/tasks.py | 11 +- core/templates/json_table_widget.html | 63 +- core/utils/__init__.py | 70 +- core/utils/caching.py | 13 +- core/validators.py | 12 +- core/vendors/__init__.py | 9 +- core/views.py | 300 ++---- core/viewsets.py | 573 +++--------- core/widgets.py | 10 +- docker-compose.yml | 2 - evibes/settings/base.py | 2 +- evibes/urls.py | 4 +- evibes/utils/__init__.py | 5 +- payments/gateways/__init__.py | 4 +- payments/graphene/object_types.py | 3 +- payments/locale/ar_AR/LC_MESSAGES/django.mo | Bin 2633 -> 3498 bytes payments/locale/ar_AR/LC_MESSAGES/django.po | 25 +- payments/locale/cs_CZ/LC_MESSAGES/django.mo | Bin 2399 -> 3134 bytes payments/locale/cs_CZ/LC_MESSAGES/django.po | 26 +- payments/locale/da_DK/LC_MESSAGES/django.mo | Bin 2375 -> 3112 bytes payments/locale/da_DK/LC_MESSAGES/django.po | 27 +- payments/locale/de_DE/LC_MESSAGES/django.mo | Bin 2446 -> 3232 bytes payments/locale/de_DE/LC_MESSAGES/django.po | 27 +- payments/locale/en_GB/LC_MESSAGES/django.mo | Bin 2335 -> 3041 bytes payments/locale/en_GB/LC_MESSAGES/django.po | 26 +- payments/locale/en_US/LC_MESSAGES/django.mo | Bin 2323 -> 3029 bytes payments/locale/en_US/LC_MESSAGES/django.po | 26 +- payments/locale/es_ES/LC_MESSAGES/django.mo | Bin 2414 -> 3165 bytes payments/locale/es_ES/LC_MESSAGES/django.po | 30 +- payments/locale/fa_IR/LC_MESSAGES/django.po | 13 +- payments/locale/fr_FR/LC_MESSAGES/django.mo | Bin 2454 -> 3241 bytes payments/locale/fr_FR/LC_MESSAGES/django.po | 33 +- payments/locale/he_IL/LC_MESSAGES/django.mo | Bin 2457 -> 3298 bytes payments/locale/he_IL/LC_MESSAGES/django.po | 25 +- payments/locale/hi_IN/LC_MESSAGES/django.po | 13 +- payments/locale/hr_HR/LC_MESSAGES/django.po | 13 +- payments/locale/id_ID/LC_MESSAGES/django.mo | Bin 2429 -> 3167 bytes payments/locale/id_ID/LC_MESSAGES/django.po | 32 +- payments/locale/it_IT/LC_MESSAGES/django.mo | Bin 2404 -> 3154 bytes payments/locale/it_IT/LC_MESSAGES/django.po | 30 +- payments/locale/ja_JP/LC_MESSAGES/django.mo | Bin 2515 -> 3380 bytes payments/locale/ja_JP/LC_MESSAGES/django.po | 23 +- payments/locale/kk_KZ/LC_MESSAGES/django.po | 13 +- payments/locale/ko_KR/LC_MESSAGES/django.mo | Bin 2391 -> 3197 bytes payments/locale/ko_KR/LC_MESSAGES/django.po | 24 +- payments/locale/nl_NL/LC_MESSAGES/django.mo | Bin 2369 -> 3136 bytes payments/locale/nl_NL/LC_MESSAGES/django.po | 27 +- payments/locale/no_NO/LC_MESSAGES/django.mo | Bin 2373 -> 3097 bytes payments/locale/no_NO/LC_MESSAGES/django.po | 26 +- payments/locale/pl_PL/LC_MESSAGES/django.mo | Bin 2441 -> 3167 bytes payments/locale/pl_PL/LC_MESSAGES/django.po | 29 +- payments/locale/pt_BR/LC_MESSAGES/django.mo | Bin 2410 -> 3155 bytes payments/locale/pt_BR/LC_MESSAGES/django.po | 26 +- payments/locale/ro_RO/LC_MESSAGES/django.mo | Bin 2399 -> 3169 bytes payments/locale/ro_RO/LC_MESSAGES/django.po | 27 +- payments/locale/ru_RU/LC_MESSAGES/django.mo | Bin 2812 -> 3823 bytes payments/locale/ru_RU/LC_MESSAGES/django.po | 26 +- payments/locale/sv_SE/LC_MESSAGES/django.mo | Bin 2392 -> 3154 bytes payments/locale/sv_SE/LC_MESSAGES/django.po | 27 +- payments/locale/th_TH/LC_MESSAGES/django.mo | Bin 3167 -> 4390 bytes payments/locale/th_TH/LC_MESSAGES/django.po | 26 +- payments/locale/tr_TR/LC_MESSAGES/django.mo | Bin 2386 -> 3121 bytes payments/locale/tr_TR/LC_MESSAGES/django.po | 30 +- payments/locale/vi_VN/LC_MESSAGES/django.mo | Bin 2557 -> 3378 bytes payments/locale/vi_VN/LC_MESSAGES/django.po | 30 +- payments/locale/zh_Hans/LC_MESSAGES/django.mo | Bin 2296 -> 2923 bytes payments/locale/zh_Hans/LC_MESSAGES/django.po | 23 +- payments/utils/__init__.py | 2 +- payments/utils/cbr.py | 2 +- payments/views.py | 5 +- payments/viewsets.py | 25 +- pyproject.toml | 5 +- vibes_auth/locale/ar_AR/LC_MESSAGES/django.mo | Bin 10235 -> 13369 bytes vibes_auth/locale/ar_AR/LC_MESSAGES/django.po | 90 +- vibes_auth/locale/cs_CZ/LC_MESSAGES/django.mo | Bin 8581 -> 11106 bytes vibes_auth/locale/cs_CZ/LC_MESSAGES/django.po | 91 +- vibes_auth/locale/da_DK/LC_MESSAGES/django.mo | Bin 8430 -> 10933 bytes vibes_auth/locale/da_DK/LC_MESSAGES/django.po | 92 +- vibes_auth/locale/de_DE/LC_MESSAGES/django.mo | Bin 9011 -> 11695 bytes vibes_auth/locale/de_DE/LC_MESSAGES/django.po | 102 ++- vibes_auth/locale/en_GB/LC_MESSAGES/django.mo | Bin 8210 -> 10537 bytes vibes_auth/locale/en_GB/LC_MESSAGES/django.po | 87 +- vibes_auth/locale/en_US/LC_MESSAGES/django.mo | Bin 8199 -> 10526 bytes vibes_auth/locale/en_US/LC_MESSAGES/django.po | 87 +- vibes_auth/locale/es_ES/LC_MESSAGES/django.mo | Bin 8823 -> 11477 bytes vibes_auth/locale/es_ES/LC_MESSAGES/django.po | 92 +- vibes_auth/locale/fa_IR/LC_MESSAGES/django.po | 65 +- vibes_auth/locale/fr_FR/LC_MESSAGES/django.mo | Bin 9185 -> 11982 bytes vibes_auth/locale/fr_FR/LC_MESSAGES/django.po | 105 ++- vibes_auth/locale/he_IL/LC_MESSAGES/django.mo | Bin 9142 -> 11944 bytes vibes_auth/locale/he_IL/LC_MESSAGES/django.po | 89 +- vibes_auth/locale/hi_IN/LC_MESSAGES/django.po | 65 +- vibes_auth/locale/hr_HR/LC_MESSAGES/django.po | 65 +- vibes_auth/locale/id_ID/LC_MESSAGES/django.mo | Bin 8488 -> 10962 bytes vibes_auth/locale/id_ID/LC_MESSAGES/django.po | 96 +- vibes_auth/locale/it_IT/LC_MESSAGES/django.mo | Bin 8791 -> 11426 bytes vibes_auth/locale/it_IT/LC_MESSAGES/django.po | 90 +- vibes_auth/locale/ja_JP/LC_MESSAGES/django.mo | Bin 9785 -> 12649 bytes vibes_auth/locale/ja_JP/LC_MESSAGES/django.po | 99 +- vibes_auth/locale/kk_KZ/LC_MESSAGES/django.po | 65 +- vibes_auth/locale/ko_KR/LC_MESSAGES/django.mo | Bin 8980 -> 11610 bytes vibes_auth/locale/ko_KR/LC_MESSAGES/django.po | 93 +- vibes_auth/locale/nl_NL/LC_MESSAGES/django.mo | Bin 8634 -> 11205 bytes vibes_auth/locale/nl_NL/LC_MESSAGES/django.po | 97 +- vibes_auth/locale/no_NO/LC_MESSAGES/django.mo | Bin 8475 -> 10986 bytes vibes_auth/locale/no_NO/LC_MESSAGES/django.po | 89 +- vibes_auth/locale/pl_PL/LC_MESSAGES/django.mo | Bin 8709 -> 11298 bytes vibes_auth/locale/pl_PL/LC_MESSAGES/django.po | 96 +- vibes_auth/locale/pt_BR/LC_MESSAGES/django.mo | Bin 8602 -> 11239 bytes vibes_auth/locale/pt_BR/LC_MESSAGES/django.po | 94 +- vibes_auth/locale/ro_RO/LC_MESSAGES/django.mo | Bin 8867 -> 11599 bytes vibes_auth/locale/ro_RO/LC_MESSAGES/django.po | 94 +- vibes_auth/locale/ru_RU/LC_MESSAGES/django.mo | Bin 11054 -> 14759 bytes vibes_auth/locale/ru_RU/LC_MESSAGES/django.po | 99 +- vibes_auth/locale/sv_SE/LC_MESSAGES/django.mo | Bin 8623 -> 11164 bytes vibes_auth/locale/sv_SE/LC_MESSAGES/django.po | 93 +- vibes_auth/locale/th_TH/LC_MESSAGES/django.mo | Bin 12397 -> 16764 bytes vibes_auth/locale/th_TH/LC_MESSAGES/django.po | 108 ++- vibes_auth/locale/tr_TR/LC_MESSAGES/django.mo | Bin 8823 -> 11405 bytes vibes_auth/locale/tr_TR/LC_MESSAGES/django.po | 89 +- vibes_auth/locale/vi_VN/LC_MESSAGES/django.mo | Bin 9331 -> 12209 bytes vibes_auth/locale/vi_VN/LC_MESSAGES/django.po | 102 ++- .../locale/zh_Hans/LC_MESSAGES/django.mo | Bin 7918 -> 10104 bytes .../locale/zh_Hans/LC_MESSAGES/django.po | 81 +- vibes_auth/serializers.py | 12 +- vibes_auth/tasks.py | 4 +- .../templates/user_reset_password_email.html | 3 +- vibes_auth/validators.py | 6 +- vibes_auth/views.py | 82 +- vibes_auth/viewsets.py | 65 +- 191 files changed, 18567 insertions(+), 9430 deletions(-) diff --git a/blog/admin.py b/blog/admin.py index 7c6bf974..b6dd7447 100644 --- a/blog/admin.py +++ b/blog/admin.py @@ -7,7 +7,7 @@ from .models import Post, PostTag @register(Post) -class PostAdmin(SummernoteModelAdminMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc] +class PostAdmin(SummernoteModelAdminMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] list_display = ("title", "author", "slug", "created", "modified") list_filter = ("author", "tags", "created", "modified") search_fields = ("title", "content", "slug") @@ -34,7 +34,7 @@ class PostAdmin(SummernoteModelAdminMixin, FieldsetsMixin, ActivationActionsMixi @register(PostTag) -class PostTagAdmin(ModelAdmin): +class PostTagAdmin(ModelAdmin): # type: ignore [misc, type-arg] list_display = ("tag_name", "name") search_fields = ("tag_name", "name") ordering = ("tag_name",) diff --git a/core/abstract.py b/core/abstract.py index 65f631e8..b32aa480 100644 --- a/core/abstract.py +++ b/core/abstract.py @@ -1,4 +1,5 @@ import uuid +from typing import Collection from django.db.models import BooleanField, Model, UUIDField from django.utils.translation import gettext_lazy as _ @@ -22,9 +23,19 @@ class NiceModel(Model): created = CreationDateTimeField(_("created"), help_text=_("when the object first appeared on the database")) modified = ModificationDateTimeField(_("modified"), help_text=_("when the object was last modified")) - def save(self, **kwargs): - self.update_modified = kwargs.pop("update_modified", getattr(self, "update_modified", True)) - super().save(**kwargs) + def save( + self, + *, + force_insert: bool = False, + force_update: bool = False, + using: str | None = None, + update_fields: Collection | None = None, + update_modified: bool = True, + ) -> None: + self.update_modified = update_modified + return super().save( + force_insert=force_insert, force_update=force_update, using=using, update_fields=update_fields + ) class Meta: abstract = True diff --git a/core/crm/__init__.py b/core/crm/__init__.py index a628855a..4135da1c 100644 --- a/core/crm/__init__.py +++ b/core/crm/__init__.py @@ -1,5 +1,5 @@ from core.models import CustomerRelationshipManagementProvider -def any_crm_integrations(): +def any_crm_integrations() -> bool: return CustomerRelationshipManagementProvider.objects.exists() diff --git a/core/crm/amo/gateway.py b/core/crm/amo/gateway.py index b9093e90..bb0b5e64 100644 --- a/core/crm/amo/gateway.py +++ b/core/crm/amo/gateway.py @@ -89,15 +89,12 @@ class AmoCRM: if type(order.attributes) is not dict: raise ValueError("order.attributes must be a dict") - business_identificator = ( - order.attributes.get("business_identificator") - or order.attributes.get("businessIdentificator") - or order.user.attributes.get("business_identificator") - or order.user.attributes.get("businessIdentificator") - or "" - ) + if order.user: + if type(order.user.attributes) is not dict: + order.user.attributes = {} + order.user.save() - if not business_identificator: + if not order.business_identificator: return ( order.user.get_full_name() if order.user @@ -109,7 +106,7 @@ class AmoCRM: ) try: r = requests.get( - f"https://api-fns.ru/api/egr?req={business_identificator}&key={self.fns_api_key}", timeout=15 + f"https://api-fns.ru/api/egr?req={order.business_identificator}&key={self.fns_api_key}", timeout=15 ) r.raise_for_status() body = r.json() @@ -122,9 +119,9 @@ class AmoCRM: ip = body.get("ИП") if ul and not ip: - return f"{ul.get('НаимСокрЮЛ')} | {business_identificator}" + return f"{ul.get('НаимСокрЮЛ')} | {order.business_identificator}" if ip and not ul: - return f"ИП {ip.get('ФИОПолн')} | {business_identificator}" + return f"ИП {ip.get('ФИОПолн')} | {order.business_identificator}" return "" diff --git a/core/elasticsearch/__init__.py b/core/elasticsearch/__init__.py index 9316ffdd..eff8e46c 100644 --- a/core/elasticsearch/__init__.py +++ b/core/elasticsearch/__init__.py @@ -1,6 +1,9 @@ import re +from typing import Any +from blib2to3.pgen2.parse import Callable from django.conf import settings +from django.db.models import QuerySet from django.http import Http404 from django.utils.text import slugify from django.utils.translation import gettext_lazy as _ @@ -182,7 +185,7 @@ def process_query( minimum_should_match=1, ) - def build_search(idxs, size): + def build_search(idxs: list[str], size: int) -> Search: return ( Search(index=idxs) .query(query_base) @@ -221,9 +224,9 @@ def process_query( search_products = build_search(["products"], size=44) resp_products = search_products.execute() - results: dict = {"products": [], "categories": [], "brands": [], "posts": []} - uuids_by_index: dict[str, list] = {"products": [], "categories": [], "brands": []} - hit_cache: list = [] + results: dict[str, list[dict[str, Any]]] = {"products": [], "categories": [], "brands": [], "posts": []} + uuids_by_index: dict[str, list[dict[str, Any]]] = {"products": [], "categories": [], "brands": []} + hit_cache: list[Any] = [] for h in ( list(resp_cats.hits[:12] if resp_cats else []) @@ -325,10 +328,10 @@ def _lang_analyzer(lang_code: str) -> str: class ActiveOnlyMixin: - def get_queryset(self): + def get_queryset(self) -> QuerySet[Any]: return super().get_queryset().filter(is_active=True) - def should_index_object(self, obj): + def should_index_object(self, obj) -> bool: return getattr(obj, "is_active", False) @@ -433,7 +436,7 @@ COMMON_ANALYSIS = { } -def add_multilang_fields(cls): +def add_multilang_fields(cls) -> None: for code, _lang in settings.LANGUAGES: lc = code.replace("-", "_").lower() name_field = f"name_{lc}" @@ -453,7 +456,7 @@ def add_multilang_fields(cls): ), ) - def make_prepare(attr): + def make_prepare(attr: str) -> Callable[[Any, Any], str]: return lambda self, instance: getattr(instance, attr, "") or "" setattr(cls, f"prepare_{name_field}", make_prepare(name_field)) diff --git a/core/locale/ar_AR/LC_MESSAGES/django.mo b/core/locale/ar_AR/LC_MESSAGES/django.mo index 788c8e8ea3860580c06ac6f6dd38bbb166fce770..37e75d3690a35746bc1cdbea75e6c92f7e95b7ef 100644 GIT binary patch delta 27926 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 KGBDDx{{I2Jmsb7& delta 12313 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 u%+8$Q_MYhjDrUMfHf9_U-V\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,38 +13,38 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: core/abstract.py:11 +#: core/abstract.py:12 msgid "unique id" msgstr "المعرف الفريد" -#: core/abstract.py:12 +#: core/abstract.py:13 msgid "unique id is used to surely identify any database object" msgstr "يستخدم المعرف الفريد لتحديد أي كائن قاعدة بيانات بالتأكيد" -#: core/abstract.py:19 +#: core/abstract.py:20 msgid "is active" msgstr "نشط" -#: core/abstract.py:20 +#: core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" msgstr "" "إذا تم تعيينه على خطأ، لا يمكن للمستخدمين رؤية هذا الكائن دون الحاجة إلى إذن" -#: core/abstract.py:22 core/choices.py:18 +#: core/abstract.py:23 core/choices.py:18 msgid "created" msgstr "تم إنشاؤها" -#: core/abstract.py:22 +#: core/abstract.py:23 msgid "when the object first appeared on the database" msgstr "عندما ظهر الكائن لأول مرة في قاعدة البيانات" -#: core/abstract.py:23 +#: core/abstract.py:24 msgid "modified" msgstr "تم التعديل" -#: core/abstract.py:23 +#: core/abstract.py:24 msgid "when the object was last modified" msgstr "متى تم تحرير الكائن آخر مرة" @@ -87,11 +87,11 @@ msgid "selected items have been deactivated." msgstr "تم إلغاء تنشيط العناصر المحددة!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 +#: core/graphene/object_types.py:616 core/models.py:701 core/models.py:709 msgid "attribute value" msgstr "قيمة السمة" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 msgid "attribute values" msgstr "قيم السمات" @@ -103,7 +103,7 @@ msgstr "الصورة" msgid "images" msgstr "الصور" -#: core/admin.py:155 core/models.py:445 +#: core/admin.py:155 core/models.py:459 msgid "stock" msgstr "المخزون" @@ -111,11 +111,11 @@ msgstr "المخزون" msgid "stocks" msgstr "الأسهم" -#: core/admin.py:166 core/models.py:1609 +#: core/admin.py:166 core/models.py:1667 msgid "order product" msgstr "طلب المنتج" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 msgid "order products" msgstr "اطلب المنتجات" @@ -707,7 +707,7 @@ msgstr "حذف علاقة الطلب-المنتج" msgid "add or remove feedback on an order–product relation" msgstr "إضافة أو إزالة الملاحظات على العلاقة بين الطلب والمنتج" -#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 msgid "no search term provided." msgstr "لم يتم توفير مصطلح بحث." @@ -760,7 +760,7 @@ msgid "Quantity" msgstr "الكمية" #: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:287 core/models.py:369 core/models.py:522 +#: core/models.py:301 core/models.py:383 core/models.py:536 msgid "Slug" msgstr "سبيكة" @@ -776,7 +776,7 @@ msgstr "تضمين الفئات الفرعية" msgid "Include personal ordered" msgstr "تضمين المنتجات المطلوبة شخصيًا" -#: core/filters.py:85 core/models.py:526 +#: core/filters.py:85 core/models.py:540 msgid "SKU" msgstr "وحدة التخزين" @@ -850,7 +850,7 @@ msgstr "البيانات المخزنة مؤقتاً" msgid "camelized JSON data from the requested URL" msgstr "بيانات JSON مجمّلة من عنوان URL المطلوب" -#: core/graphene/mutations.py:65 core/views.py:360 +#: core/graphene/mutations.py:65 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "يُسمح فقط بعناوين URL التي تبدأ ب http(s)://" @@ -881,7 +881,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "يرجى تقديم إما Order_uuid أو order_uid_hr_hr_id - متنافيان!" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:839 +#: core/graphene/mutations.py:527 core/viewsets.py:679 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "جاء نوع خاطئ من طريقة order.buy(): {type(instance)!s}" @@ -955,9 +955,9 @@ msgstr "طلب المنتج {order_product_uuid} غير موجود!" msgid "original address string provided by the user" msgstr "سلسلة العنوان الأصلي المقدمة من المستخدم" -#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 -#: core/models.py:1234 core/models.py:1263 core/models.py:1288 -#: core/viewsets.py:842 +#: core/graphene/mutations.py:656 core/models.py:849 core/models.py:862 +#: core/models.py:1281 core/models.py:1310 core/models.py:1335 +#: core/viewsets.py:682 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} غير موجود: {uuid}!" @@ -971,8 +971,8 @@ msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - يعمل مثل السحر" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 -#: core/models.py:1686 +#: core/graphene/object_types.py:444 core/models.py:672 core/models.py:1144 +#: core/models.py:1744 msgid "attributes" msgstr "السمات" @@ -985,11 +985,11 @@ msgid "groups of attributes" msgstr "مجموعات السمات" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:612 +#: core/graphene/object_types.py:224 core/models.py:326 core/models.py:626 msgid "categories" msgstr "الفئات" -#: core/graphene/object_types.py:124 core/models.py:383 +#: core/graphene/object_types.py:124 core/models.py:397 msgid "brands" msgstr "العلامات التجارية" @@ -998,7 +998,7 @@ msgid "category image url" msgstr "الفئات" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:249 +#: core/models.py:263 msgid "markup percentage" msgstr "النسبة المئوية للترميز" @@ -1020,7 +1020,7 @@ msgstr "العلامات الخاصة بهذه الفئة" msgid "products in this category" msgstr "المنتجات في هذه الفئة" -#: core/graphene/object_types.py:351 core/models.py:155 +#: core/graphene/object_types.py:351 core/models.py:169 msgid "vendors" msgstr "البائعون" @@ -1045,7 +1045,7 @@ msgid "represents feedback from a user." msgstr "يمثل ملاحظات من المستخدم." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1110 +#: core/models.py:1138 msgid "notifications" msgstr "الإشعارات" @@ -1053,7 +1053,7 @@ msgstr "الإشعارات" msgid "download url for this order product if applicable" msgstr "تحميل الرابط الخاص بمنتج الطلب هذا إن أمكن" -#: core/graphene/object_types.py:400 core/models.py:1791 +#: core/graphene/object_types.py:400 core/models.py:1860 msgid "feedback" msgstr "الملاحظات" @@ -1061,7 +1061,7 @@ msgstr "الملاحظات" msgid "a list of order products in this order" msgstr "قائمة بطلب المنتجات بهذا الترتيب" -#: core/graphene/object_types.py:436 core/models.py:1080 +#: core/graphene/object_types.py:436 core/models.py:1108 msgid "billing address" msgstr "عنوان إرسال الفواتير" @@ -1089,7 +1089,7 @@ msgstr "هل جميع المنتجات في الطلب رقمي" msgid "transactions for this order" msgstr "المعاملات الخاصة بهذا الطلب" -#: core/graphene/object_types.py:465 core/models.py:1144 +#: core/graphene/object_types.py:465 core/models.py:1172 msgid "orders" msgstr "الطلبات" @@ -1101,15 +1101,15 @@ msgstr "رابط الصورة" msgid "product's images" msgstr "صور المنتج" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 +#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 msgid "category" msgstr "الفئة" -#: core/graphene/object_types.py:502 core/models.py:1792 +#: core/graphene/object_types.py:502 core/models.py:1861 msgid "feedbacks" msgstr "الملاحظات" -#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 +#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 msgid "brand" msgstr "العلامة التجارية" @@ -1141,7 +1141,7 @@ msgstr "عدد الملاحظات" msgid "only available for personal orders" msgstr "المنتجات متاحة للطلبات الشخصية فقط" -#: core/graphene/object_types.py:534 core/models.py:536 +#: core/graphene/object_types.py:534 core/models.py:550 msgid "products" msgstr "المنتجات" @@ -1153,15 +1153,15 @@ msgstr "الرموز الترويجية" msgid "products on sale" msgstr "المنتجات المعروضة للبيع" -#: core/graphene/object_types.py:651 core/models.py:784 +#: core/graphene/object_types.py:651 core/models.py:798 msgid "promotions" msgstr "العروض الترويجية" -#: core/graphene/object_types.py:655 core/models.py:154 +#: core/graphene/object_types.py:655 core/models.py:168 msgid "vendor" msgstr "البائع" -#: core/graphene/object_types.py:656 core/models.py:535 +#: core/graphene/object_types.py:656 core/models.py:549 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1169,11 +1169,11 @@ msgstr "البائع" msgid "product" msgstr "المنتج" -#: core/graphene/object_types.py:667 core/models.py:807 +#: core/graphene/object_types.py:667 core/models.py:821 msgid "wishlisted products" msgstr "المنتجات المفضلة" -#: core/graphene/object_types.py:673 core/models.py:824 +#: core/graphene/object_types.py:673 core/models.py:838 msgid "wishlists" msgstr "قوائم التمنيات" @@ -1181,7 +1181,7 @@ msgstr "قوائم التمنيات" msgid "tagged products" msgstr "المنتجات الموسومة" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 +#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 msgid "product tags" msgstr "علامات المنتج" @@ -1292,7 +1292,7 @@ msgstr "مجموعة السمات الرئيسية" msgid "attribute group's name" msgstr "اسم مجموعة السمات" -#: core/models.py:100 core/models.py:620 +#: core/models.py:100 core/models.py:634 msgid "attribute group" msgstr "مجموعة السمات" @@ -1339,7 +1339,7 @@ msgstr "اسم هذا البائع" msgid "vendor name" msgstr "اسم البائع" -#: core/models.py:163 +#: core/models.py:177 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1352,27 +1352,27 @@ msgstr "" "عرض سهل الاستخدام. وهي تدعم العمليات التي يتم تصديرها من خلال mixins وتوفر " "تخصيص البيانات الوصفية لأغراض إدارية." -#: core/models.py:175 core/models.py:206 +#: core/models.py:189 core/models.py:220 msgid "internal tag identifier for the product tag" msgstr "معرّف العلامة الداخلي لعلامة المنتج" -#: core/models.py:176 core/models.py:207 +#: core/models.py:190 core/models.py:221 msgid "tag name" msgstr "اسم العلامة" -#: core/models.py:180 core/models.py:211 +#: core/models.py:194 core/models.py:225 msgid "user-friendly name for the product tag" msgstr "اسم سهل الاستخدام لعلامة المنتج" -#: core/models.py:181 core/models.py:212 +#: core/models.py:195 core/models.py:226 msgid "tag display name" msgstr "اسم عرض العلامة" -#: core/models.py:189 +#: core/models.py:203 msgid "product tag" msgstr "علامة المنتج" -#: core/models.py:195 +#: core/models.py:209 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 " @@ -1381,15 +1381,15 @@ msgstr "" "يمثل علامة فئة تستخدم للمنتجات. تمثل هذه الفئة علامة فئة يمكن استخدامها لربط" " المنتجات وتصنيفها. وهي تتضمن سمات لمعرف علامة داخلي واسم عرض سهل الاستخدام." -#: core/models.py:220 +#: core/models.py:234 msgid "category tag" msgstr "علامة الفئة" -#: core/models.py:221 core/models.py:293 +#: core/models.py:235 core/models.py:307 msgid "category tags" msgstr "علامات الفئة" -#: core/models.py:226 +#: core/models.py:240 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1409,51 +1409,51 @@ msgstr "" " الفئات ووصفها وتسلسلها الهرمي، بالإضافة إلى تعيين سمات مثل الصور أو " "العلامات أو الأولوية." -#: core/models.py:240 +#: core/models.py:254 msgid "upload an image representing this category" msgstr "تحميل صورة تمثل هذه الفئة" -#: core/models.py:243 +#: core/models.py:257 msgid "category image" msgstr "صورة الفئة" -#: core/models.py:248 +#: core/models.py:262 msgid "define a markup percentage for products in this category" msgstr "تحديد نسبة ترميز للمنتجات في هذه الفئة" -#: core/models.py:257 +#: core/models.py:271 msgid "parent of this category to form a hierarchical structure" msgstr "أصل هذه الفئة لتكوين بنية هرمية" -#: core/models.py:258 +#: core/models.py:272 msgid "parent category" msgstr "الفئة الرئيسية" -#: core/models.py:263 +#: core/models.py:277 msgid "category name" msgstr "اسم الفئة" -#: core/models.py:264 +#: core/models.py:278 msgid "provide a name for this category" msgstr "تقديم اسم لهذه الفئة" -#: core/models.py:271 +#: core/models.py:285 msgid "add a detailed description for this category" msgstr "إضافة وصف تفصيلي لهذه الفئة" -#: core/models.py:272 +#: core/models.py:286 msgid "category description" msgstr "وصف الفئة" -#: core/models.py:292 +#: core/models.py:306 msgid "tags that help describe or group this category" msgstr "العلامات التي تساعد في وصف هذه الفئة أو تجميعها" -#: core/models.py:299 core/models.py:375 +#: core/models.py:313 core/models.py:389 msgid "priority" msgstr "الأولوية" -#: core/models.py:318 +#: core/models.py:332 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1466,47 +1466,47 @@ msgstr "" "المرتبطة بها وسبيكة فريدة وترتيب الأولوية. يسمح بتنظيم وتمثيل البيانات " "المتعلقة بالعلامة التجارية داخل التطبيق." -#: core/models.py:328 +#: core/models.py:342 msgid "name of this brand" msgstr "اسم هذه العلامة التجارية" -#: core/models.py:329 +#: core/models.py:343 msgid "brand name" msgstr "اسم العلامة التجارية" -#: core/models.py:336 +#: core/models.py:350 msgid "upload a logo representing this brand" msgstr "تحميل شعار يمثل هذه العلامة التجارية" -#: core/models.py:338 +#: core/models.py:352 msgid "brand small image" msgstr "صورة العلامة التجارية الصغيرة" -#: core/models.py:344 +#: core/models.py:358 msgid "upload a big logo representing this brand" msgstr "رفع شعار كبير يمثل هذه العلامة التجارية" -#: core/models.py:346 +#: core/models.py:360 msgid "brand big image" msgstr "صورة كبيرة للعلامة التجارية" -#: core/models.py:351 +#: core/models.py:365 msgid "add a detailed description of the brand" msgstr "إضافة وصف تفصيلي للعلامة التجارية" -#: core/models.py:352 +#: core/models.py:366 msgid "brand description" msgstr "وصف العلامة التجارية" -#: core/models.py:357 +#: core/models.py:371 msgid "optional categories that this brand is associated with" msgstr "الفئات الاختيارية التي ترتبط بها هذه العلامة التجارية" -#: core/models.py:358 +#: core/models.py:372 msgid "associated categories" msgstr "الفئات" -#: core/models.py:388 +#: core/models.py:402 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1521,68 +1521,68 @@ msgstr "" "والأصول الرقمية. وهي جزء من نظام إدارة المخزون للسماح بتتبع وتقييم المنتجات " "المتاحة من مختلف البائعين." -#: core/models.py:400 +#: core/models.py:414 msgid "the vendor supplying this product stock" msgstr "البائع الذي يورد هذا المنتج المخزون" -#: core/models.py:401 +#: core/models.py:415 msgid "associated vendor" msgstr "البائع المرتبط" -#: core/models.py:405 +#: core/models.py:419 msgid "final price to the customer after markups" msgstr "السعر النهائي للعميل بعد هوامش الربح" -#: core/models.py:406 +#: core/models.py:420 msgid "selling price" msgstr "سعر البيع" -#: core/models.py:411 +#: core/models.py:425 msgid "the product associated with this stock entry" msgstr "المنتج المرتبط بإدخال المخزون هذا" -#: core/models.py:412 core/models.py:683 core/models.py:730 -#: core/models.py:1583 +#: core/models.py:426 core/models.py:697 core/models.py:744 +#: core/models.py:1641 msgid "associated product" msgstr "المنتج المرتبط" -#: core/models.py:419 +#: core/models.py:433 msgid "the price paid to the vendor for this product" msgstr "السعر المدفوع للبائع مقابل هذا المنتج" -#: core/models.py:420 +#: core/models.py:434 msgid "vendor purchase price" msgstr "سعر الشراء من البائع" -#: core/models.py:424 +#: core/models.py:438 msgid "available quantity of the product in stock" msgstr "الكمية المتوفرة من المنتج في المخزون" -#: core/models.py:425 +#: core/models.py:439 msgid "quantity in stock" msgstr "الكمية في المخزون" -#: core/models.py:429 +#: core/models.py:443 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU المعين من قبل البائع لتحديد المنتج" -#: core/models.py:430 +#: core/models.py:444 msgid "vendor sku" msgstr "وحدة تخزين البائع" -#: core/models.py:436 +#: core/models.py:450 msgid "digital file associated with this stock if applicable" msgstr "الملف الرقمي المرتبط بهذا المخزون إن أمكن" -#: core/models.py:437 +#: core/models.py:451 msgid "digital file" msgstr "ملف رقمي" -#: core/models.py:446 +#: core/models.py:460 msgid "stock entries" msgstr "إدخالات المخزون" -#: core/models.py:451 +#: core/models.py:465 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1602,55 +1602,55 @@ msgstr "" "للخصائص التي يتم الوصول إليها بشكل متكرر لتحسين الأداء. يتم استخدامه لتعريف " "ومعالجة بيانات المنتج والمعلومات المرتبطة به داخل التطبيق." -#: core/models.py:464 +#: core/models.py:478 msgid "category this product belongs to" msgstr "الفئة التي ينتمي إليها هذا المنتج" -#: core/models.py:473 +#: core/models.py:487 msgid "optionally associate this product with a brand" msgstr "ربط هذا المنتج اختياريًا بعلامة تجارية" -#: core/models.py:479 +#: core/models.py:493 msgid "tags that help describe or group this product" msgstr "العلامات التي تساعد في وصف أو تجميع هذا المنتج" -#: core/models.py:484 +#: core/models.py:498 msgid "indicates whether this product is digitally delivered" msgstr "يشير إلى ما إذا كان هذا المنتج يتم تسليمه رقميًا أم لا" -#: core/models.py:485 +#: core/models.py:499 msgid "is product digital" msgstr "هل المنتج رقمي" -#: core/models.py:491 +#: core/models.py:505 msgid "provide a clear identifying name for the product" msgstr "توفير اسم تعريفي واضح للمنتج" -#: core/models.py:492 +#: core/models.py:506 msgid "product name" msgstr "اسم المنتج" -#: core/models.py:497 core/models.py:772 +#: core/models.py:511 core/models.py:786 msgid "add a detailed description of the product" msgstr "إضافة وصف تفصيلي للمنتج" -#: core/models.py:498 +#: core/models.py:512 msgid "product description" msgstr "وصف المنتج" -#: core/models.py:505 +#: core/models.py:519 msgid "part number for this product" msgstr "رقم الجزء لهذا المنتج" -#: core/models.py:506 +#: core/models.py:520 msgid "part number" msgstr "رقم الجزء" -#: core/models.py:525 +#: core/models.py:539 msgid "stock keeping unit for this product" msgstr "وحدة حفظ المخزون لهذا المنتج" -#: core/models.py:599 +#: core/models.py:613 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 " @@ -1665,68 +1665,68 @@ msgstr "" "من القيم، بما في ذلك السلسلة، والعدد الصحيح، والعائم، والمنطقي، والصفيف، " "والكائن. وهذا يسمح بهيكلة ديناميكية ومرنة للبيانات." -#: core/models.py:611 +#: core/models.py:625 msgid "category of this attribute" msgstr "فئة هذه السمة" -#: core/models.py:619 +#: core/models.py:633 msgid "group of this attribute" msgstr "مجموعة هذه السمة" -#: core/models.py:625 +#: core/models.py:639 msgid "string" msgstr "الخيط" -#: core/models.py:626 +#: core/models.py:640 msgid "integer" msgstr "عدد صحيح" -#: core/models.py:627 +#: core/models.py:641 msgid "float" msgstr "تعويم" -#: core/models.py:628 +#: core/models.py:642 msgid "boolean" msgstr "منطقية" -#: core/models.py:629 +#: core/models.py:643 msgid "array" msgstr "المصفوفة" -#: core/models.py:630 +#: core/models.py:644 msgid "object" msgstr "الكائن" -#: core/models.py:632 +#: core/models.py:646 msgid "type of the attribute's value" msgstr "نوع قيمة السمة" -#: core/models.py:633 +#: core/models.py:647 msgid "value type" msgstr "نوع القيمة" -#: core/models.py:638 +#: core/models.py:652 msgid "name of this attribute" msgstr "اسم هذه السمة" -#: core/models.py:639 +#: core/models.py:653 msgid "attribute's name" msgstr "اسم السمة" -#: core/models.py:645 +#: core/models.py:659 msgid "is filterable" msgstr "قابل للتصفية" -#: core/models.py:646 +#: core/models.py:660 msgid "designates whether this attribute can be used for filtering or not" msgstr "يحدد ما إذا كان يمكن استخدام هذه السمة للتصفية أم لا" -#: core/models.py:657 core/models.py:675 +#: core/models.py:671 core/models.py:689 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "السمة" -#: core/models.py:663 +#: core/models.py:677 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" @@ -1735,19 +1735,19 @@ msgstr "" "يمثل قيمة محددة لسمة مرتبطة بمنتج ما. يربط \"السمة\" بـ \"قيمة\" فريدة، مما " "يسمح بتنظيم أفضل وتمثيل ديناميكي لخصائص المنتج." -#: core/models.py:674 +#: core/models.py:688 msgid "attribute of this value" msgstr "سمة هذه القيمة" -#: core/models.py:682 +#: core/models.py:696 msgid "the specific product associated with this attribute's value" msgstr "المنتج المحدد المرتبط بقيمة هذه السمة" -#: core/models.py:688 +#: core/models.py:702 msgid "the specific value for this attribute" msgstr "القيمة المحددة لهذه السمة" -#: core/models.py:701 +#: core/models.py:715 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -1759,39 +1759,39 @@ msgstr "" "بالمنتجات، بما في ذلك وظيفة تحميل ملفات الصور، وربطها بمنتجات معينة، وتحديد " "ترتيب عرضها. وتتضمن أيضًا ميزة إمكانية الوصول مع نص بديل للصور." -#: core/models.py:712 +#: core/models.py:726 msgid "provide alternative text for the image for accessibility" msgstr "توفير نص بديل للصورة لإمكانية الوصول" -#: core/models.py:713 +#: core/models.py:727 msgid "image alt text" msgstr "النص البديل للصورة" -#: core/models.py:716 +#: core/models.py:730 msgid "upload the image file for this product" msgstr "تحميل ملف الصورة لهذا المنتج" -#: core/models.py:717 core/models.py:742 +#: core/models.py:731 core/models.py:756 msgid "product image" msgstr "صورة المنتج" -#: core/models.py:723 +#: core/models.py:737 msgid "determines the order in which images are displayed" msgstr "يحدد الترتيب الذي يتم عرض الصور به" -#: core/models.py:724 +#: core/models.py:738 msgid "display priority" msgstr "أولوية العرض" -#: core/models.py:729 +#: core/models.py:743 msgid "the product that this image represents" msgstr "المنتج الذي تمثله هذه الصورة" -#: core/models.py:743 +#: core/models.py:757 msgid "product images" msgstr "صور المنتج" -#: core/models.py:748 +#: core/models.py:762 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1806,39 +1806,39 @@ msgstr "" "بالمنتجات القابلة للتطبيق. تتكامل مع كتالوج المنتجات لتحديد العناصر المتأثرة" " في الحملة." -#: core/models.py:760 +#: core/models.py:774 msgid "percentage discount for the selected products" msgstr "النسبة المئوية للخصم على المنتجات المختارة" -#: core/models.py:761 +#: core/models.py:775 msgid "discount percentage" msgstr "نسبة الخصم" -#: core/models.py:766 +#: core/models.py:780 msgid "provide a unique name for this promotion" msgstr "تقديم اسم فريد لهذا العرض الترويجي" -#: core/models.py:767 +#: core/models.py:781 msgid "promotion name" msgstr "اسم الترقية" -#: core/models.py:773 +#: core/models.py:787 msgid "promotion description" msgstr "وصف الترقية" -#: core/models.py:778 +#: core/models.py:792 msgid "select which products are included in this promotion" msgstr "حدد المنتجات المشمولة في هذا العرض الترويجي" -#: core/models.py:779 +#: core/models.py:793 msgid "included products" msgstr "المنتجات المشمولة" -#: core/models.py:783 +#: core/models.py:797 msgid "promotion" msgstr "الترقية" -#: core/models.py:794 +#: core/models.py:808 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1849,23 +1849,23 @@ msgstr "" " لإدارة مجموعة من المنتجات، وتدعم عمليات مثل إضافة المنتجات وإزالتها، " "بالإضافة إلى دعم عمليات إضافة وإزالة منتجات متعددة في وقت واحد." -#: core/models.py:806 +#: core/models.py:820 msgid "products that the user has marked as wanted" msgstr "المنتجات التي حددها المستخدم على أنها مطلوبة" -#: core/models.py:814 +#: core/models.py:828 msgid "user who owns this wishlist" msgstr "المستخدم الذي يمتلك قائمة الرغبات هذه" -#: core/models.py:815 +#: core/models.py:829 msgid "wishlist owner" msgstr "مالك قائمة الرغبات" -#: core/models.py:823 +#: core/models.py:837 msgid "wishlist" msgstr "قائمة الرغبات" -#: core/models.py:865 +#: core/models.py:879 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1879,19 +1879,19 @@ msgstr "" "الوصفية. يحتوي على أساليب وخصائص للتعامل مع نوع الملف ومسار التخزين للملفات " "الوثائقية. وهو يوسع الوظائف من مزيج معين ويوفر ميزات مخصصة إضافية." -#: core/models.py:878 +#: core/models.py:892 msgid "documentary" msgstr "فيلم وثائقي" -#: core/models.py:879 +#: core/models.py:893 msgid "documentaries" msgstr "الأفلام الوثائقية" -#: core/models.py:889 +#: core/models.py:903 msgid "unresolved" msgstr "لم يتم حلها" -#: core/models.py:894 +#: core/models.py:908 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1910,59 +1910,59 @@ msgstr "" "يتيح تخزين استجابات واجهة برمجة التطبيقات الخام لمزيد من المعالجة أو الفحص. " "تسمح الفئة أيضًا بربط عنوان مع مستخدم، مما يسهل التعامل مع البيانات الشخصية." -#: core/models.py:909 +#: core/models.py:923 msgid "address line for the customer" msgstr "سطر العنوان للعميل" -#: core/models.py:910 +#: core/models.py:924 msgid "address line" msgstr "سطر العنوان" -#: core/models.py:912 +#: core/models.py:926 msgid "street" msgstr "الشارع" -#: core/models.py:913 +#: core/models.py:927 msgid "district" msgstr "المنطقة" -#: core/models.py:914 +#: core/models.py:928 msgid "city" msgstr "المدينة" -#: core/models.py:915 +#: core/models.py:929 msgid "region" msgstr "المنطقة" -#: core/models.py:916 +#: core/models.py:930 msgid "postal code" msgstr "الرمز البريدي" -#: core/models.py:917 +#: core/models.py:931 msgid "country" msgstr "البلد" -#: core/models.py:924 +#: core/models.py:938 msgid "geolocation point: (longitude, latitude)" msgstr "نقطة تحديد الموقع الجغرافي(خط الطول، خط العرض)" -#: core/models.py:927 +#: core/models.py:941 msgid "full JSON response from geocoder for this address" msgstr "استجابة JSON كاملة من أداة التشفير الجغرافي لهذا العنوان" -#: core/models.py:932 +#: core/models.py:946 msgid "stored JSON response from the geocoding service" msgstr "استجابة JSON مخزّنة من خدمة الترميز الجغرافي" -#: core/models.py:940 +#: core/models.py:954 msgid "address" msgstr "العنوان" -#: core/models.py:941 +#: core/models.py:955 msgid "addresses" msgstr "العناوين" -#: core/models.py:953 +#: core/models.py:967 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -1977,72 +1977,72 @@ msgstr "" "والمستخدم المرتبط به (إن وجد)، وحالة استخدامه. ويتضمن وظيفة للتحقق من صحة " "الرمز الترويجي وتطبيقه على الطلب مع ضمان استيفاء القيود." -#: core/models.py:967 +#: core/models.py:981 msgid "unique code used by a user to redeem a discount" msgstr "الرمز الفريد الذي يستخدمه المستخدم لاسترداد قيمة الخصم" -#: core/models.py:968 +#: core/models.py:982 msgid "promo code identifier" msgstr "معرّف الرمز الترويجي" -#: core/models.py:975 +#: core/models.py:989 msgid "fixed discount amount applied if percent is not used" msgstr "مبلغ الخصم الثابت المطبق في حالة عدم استخدام النسبة المئوية" -#: core/models.py:976 +#: core/models.py:990 msgid "fixed discount amount" msgstr "مبلغ الخصم الثابت" -#: core/models.py:982 +#: core/models.py:996 msgid "percentage discount applied if fixed amount is not used" msgstr "النسبة المئوية للخصم المطبق في حالة عدم استخدام مبلغ ثابت" -#: core/models.py:983 +#: core/models.py:997 msgid "percentage discount" msgstr "النسبة المئوية للخصم" -#: core/models.py:988 +#: core/models.py:1002 msgid "timestamp when the promocode expires" msgstr "الطابع الزمني عند انتهاء صلاحية الرمز الترويجي" -#: core/models.py:989 +#: core/models.py:1003 msgid "end validity time" msgstr "وقت انتهاء الصلاحية" -#: core/models.py:994 +#: core/models.py:1008 msgid "timestamp from which this promocode is valid" msgstr "الطابع الزمني الذي يكون هذا الرمز الترويجي صالحاً منه" -#: core/models.py:995 +#: core/models.py:1009 msgid "start validity time" msgstr "وقت بدء الصلاحية" -#: core/models.py:1000 +#: core/models.py:1014 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "الطابع الزمني عند استخدام الرمز الترويجي، فارغ إذا لم يتم استخدامه بعد" -#: core/models.py:1001 +#: core/models.py:1015 msgid "usage timestamp" msgstr "الطابع الزمني للاستخدام" -#: core/models.py:1006 +#: core/models.py:1020 msgid "user assigned to this promocode if applicable" msgstr "المستخدم المعين لهذا الرمز الترويجي إن أمكن" -#: core/models.py:1007 +#: core/models.py:1021 msgid "assigned user" msgstr "المستخدم المعين" -#: core/models.py:1014 +#: core/models.py:1028 msgid "promo code" msgstr "الرمز الترويجي" -#: core/models.py:1015 +#: core/models.py:1029 msgid "promo codes" msgstr "الرموز الترويجية" -#: core/models.py:1022 +#: core/models.py:1044 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2050,16 +2050,16 @@ msgstr "" "يجب تحديد نوع واحد فقط من الخصم (المبلغ أو النسبة المئوية)، وليس كلا النوعين" " أو لا هذا ولا ذاك." -#: core/models.py:1037 +#: core/models.py:1065 msgid "promocode already used" msgstr "تم استخدام الرمز الترويجي بالفعل" -#: core/models.py:1053 +#: core/models.py:1081 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "نوع الخصم غير صالح للرمز الترويجي {self.uuid}" -#: core/models.py:1062 +#: core/models.py:1090 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 " @@ -2074,134 +2074,134 @@ msgstr "" "مرتبطة، ويمكن تطبيق العروض الترويجية، وتعيين العناوين، وتحديث تفاصيل الشحن " "أو الفوترة. وبالمثل، تدعم الوظيفة إدارة المنتجات في دورة حياة الطلب." -#: core/models.py:1079 +#: core/models.py:1107 msgid "the billing address used for this order" msgstr "عنوان إرسال الفواتير المستخدم لهذا الطلب" -#: core/models.py:1087 +#: core/models.py:1115 msgid "optional promo code applied to this order" msgstr "الرمز الترويجي الاختياري المطبق على هذا الطلب" -#: core/models.py:1088 +#: core/models.py:1116 msgid "applied promo code" msgstr "الرمز الترويجي المطبق" -#: core/models.py:1096 +#: core/models.py:1124 msgid "the shipping address used for this order" msgstr "عنوان الشحن المستخدم لهذا الطلب" -#: core/models.py:1097 +#: core/models.py:1125 msgid "shipping address" msgstr "عنوان الشحن" -#: core/models.py:1103 +#: core/models.py:1131 msgid "current status of the order in its lifecycle" msgstr "الحالة الحالية للطلب في دورة حياته" -#: core/models.py:1104 +#: core/models.py:1132 msgid "order status" msgstr "حالة الطلب" -#: core/models.py:1109 core/models.py:1560 +#: core/models.py:1137 core/models.py:1618 msgid "json structure of notifications to display to users" msgstr "" "بنية JSON للإشعارات التي سيتم عرضها للمستخدمين، في واجهة مستخدم المشرف، يتم " "استخدام عرض الجدول" -#: core/models.py:1115 +#: core/models.py:1143 msgid "json representation of order attributes for this order" msgstr "تمثيل JSON لسمات الطلب لهذا الطلب" -#: core/models.py:1121 +#: core/models.py:1149 msgid "the user who placed the order" msgstr "المستخدم الذي قدم الطلب" -#: core/models.py:1122 +#: core/models.py:1150 msgid "user" msgstr "المستخدم" -#: core/models.py:1128 +#: core/models.py:1156 msgid "the timestamp when the order was finalized" msgstr "الطابع الزمني عند الانتهاء من الطلب" -#: core/models.py:1129 +#: core/models.py:1157 msgid "buy time" msgstr "وقت الشراء" -#: core/models.py:1136 +#: core/models.py:1164 msgid "a human-readable identifier for the order" msgstr "معرّف يمكن قراءته بواسطة البشر للطلب" -#: core/models.py:1137 +#: core/models.py:1165 msgid "human readable id" msgstr "معرّف يمكن قراءته من قبل البشر" -#: core/models.py:1143 +#: core/models.py:1171 msgid "order" msgstr "الطلب" -#: core/models.py:1168 +#: core/models.py:1209 msgid "a user must have only one pending order at a time" msgstr "يجب أن يكون لدى المستخدم طلب واحد فقط معلق في كل مرة!" -#: core/models.py:1202 +#: core/models.py:1249 msgid "you cannot add products to an order that is not a pending one" msgstr "لا يمكنك إضافة منتجات إلى طلب غير معلق إلى طلب غير معلق" -#: core/models.py:1207 +#: core/models.py:1254 msgid "you cannot add inactive products to order" msgstr "لا يمكنك إضافة منتجات غير نشطة للطلب" -#: core/models.py:1224 +#: core/models.py:1271 msgid "you cannot add more products than available in stock" msgstr "لا يمكنك إضافة منتجات أكثر من المتوفرة في المخزون" -#: core/models.py:1246 core/models.py:1271 core/models.py:1279 +#: core/models.py:1293 core/models.py:1318 core/models.py:1326 msgid "you cannot remove products from an order that is not a pending one" msgstr "لا يمكنك إزالة المنتجات من طلب غير معلق من طلب غير معلق" -#: core/models.py:1267 +#: core/models.py:1314 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} غير موجود مع الاستعلام <{query}>!" -#: core/models.py:1299 +#: core/models.py:1346 msgid "promocode does not exist" msgstr "الرمز الترويجي غير موجود" -#: core/models.py:1305 +#: core/models.py:1352 msgid "you can only buy physical products with shipping address specified" msgstr "يمكنك فقط شراء المنتجات المادية مع تحديد عنوان الشحن فقط!" -#: core/models.py:1324 +#: core/models.py:1371 msgid "address does not exist" msgstr "العنوان غير موجود" -#: core/models.py:1345 core/models.py:1414 +#: core/models.py:1392 core/models.py:1461 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "لا يمكنك الشراء في هذه اللحظة، يرجى المحاولة مرة أخرى بعد بضع دقائق." -#: core/models.py:1348 core/models.py:1410 +#: core/models.py:1395 core/models.py:1457 msgid "invalid force value" msgstr "قيمة القوة غير صالحة" -#: core/models.py:1354 core/models.py:1417 +#: core/models.py:1401 core/models.py:1464 msgid "you cannot purchase an empty order!" msgstr "لا يمكنك شراء طلبية فارغة!" -#: core/models.py:1373 +#: core/models.py:1420 msgid "you cannot buy an order without a user" msgstr "لا يمكنك شراء طلب بدون مستخدم!" -#: core/models.py:1387 +#: core/models.py:1434 msgid "a user without a balance cannot buy with balance" msgstr "المستخدم بدون رصيد لا يمكنه الشراء بالرصيد!" -#: core/models.py:1392 +#: core/models.py:1439 msgid "insufficient funds to complete the order" msgstr "عدم كفاية الأموال لإكمال الطلب" -#: core/models.py:1426 +#: core/models.py:1473 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2209,14 +2209,14 @@ msgstr "" "لا يمكنك الشراء بدون تسجيل، يرجى تقديم المعلومات التالية: اسم العميل، البريد" " الإلكتروني للعميل، رقم هاتف العميل" -#: core/models.py:1435 +#: core/models.py:1482 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "طريقة الدفع غير صالحة: {payment_method} من {available_payment_methods}!" -#: core/models.py:1533 +#: core/models.py:1591 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2235,108 +2235,108 @@ msgstr "" " تدعم منطق العمل، مثل حساب السعر الإجمالي أو إنشاء عنوان URL للتنزيل " "للمنتجات الرقمية. يتكامل النموذج مع نموذجي الطلب والمنتج ويخزن مرجعًا لهما." -#: core/models.py:1548 +#: core/models.py:1606 msgid "the price paid by the customer for this product at purchase time" msgstr "السعر الذي دفعه العميل لهذا المنتج وقت الشراء" -#: core/models.py:1549 +#: core/models.py:1607 msgid "purchase price at order time" msgstr "سعر الشراء وقت الطلب" -#: core/models.py:1554 +#: core/models.py:1612 msgid "internal comments for admins about this ordered product" msgstr "تعليقات داخلية للمسؤولين حول هذا المنتج المطلوب" -#: core/models.py:1555 +#: core/models.py:1613 msgid "internal comments" msgstr "التعليقات الداخلية" -#: core/models.py:1561 +#: core/models.py:1619 msgid "user notifications" msgstr "إشعارات المستخدم" -#: core/models.py:1566 +#: core/models.py:1624 msgid "json representation of this item's attributes" msgstr "تمثيل JSON لسمات هذا العنصر" -#: core/models.py:1567 +#: core/models.py:1625 msgid "ordered product attributes" msgstr "سمات المنتج المطلوبة" -#: core/models.py:1572 +#: core/models.py:1630 msgid "reference to the parent order that contains this product" msgstr "الإشارة إلى الطلب الأصلي الذي يحتوي على هذا المنتج" -#: core/models.py:1573 +#: core/models.py:1631 msgid "parent order" msgstr "ترتيب الوالدين" -#: core/models.py:1582 +#: core/models.py:1640 msgid "the specific product associated with this order line" msgstr "المنتج المحدد المرتبط بخط الطلب هذا" -#: core/models.py:1589 +#: core/models.py:1647 msgid "quantity of this specific product in the order" msgstr "كمية هذا المنتج المحدد في الطلب" -#: core/models.py:1590 +#: core/models.py:1648 msgid "product quantity" msgstr "كمية المنتج" -#: core/models.py:1597 +#: core/models.py:1655 msgid "current status of this product in the order" msgstr "الحالة الحالية لهذا المنتج بالترتيب" -#: core/models.py:1598 +#: core/models.py:1656 msgid "product line status" msgstr "حالة خط الإنتاج" -#: core/models.py:1661 +#: core/models.py:1719 msgid "order product must have an order" msgstr "يجب أن يكون لـ Orderproduct طلب مرتبط به!" -#: core/models.py:1663 +#: core/models.py:1721 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "تم تحديد إجراء خاطئ للتغذية الراجعة: {action}!" -#: core/models.py:1677 +#: core/models.py:1735 msgid "you cannot feedback an order which is not received" msgstr "لا يمكنك التعليق على طلب لم يتم استلامه" -#: core/models.py:1683 +#: core/models.py:1741 msgid "name" msgstr "الاسم" -#: core/models.py:1684 +#: core/models.py:1742 msgid "URL of the integration" msgstr "رابط التكامل" -#: core/models.py:1685 +#: core/models.py:1743 msgid "authentication credentials" msgstr "بيانات اعتماد المصادقة" -#: core/models.py:1699 +#: core/models.py:1765 msgid "you can only have one default CRM provider" msgstr "يمكن أن يكون لديك موفر CRM افتراضي واحد فقط" -#: core/models.py:1703 +#: core/models.py:1775 msgid "CRM" msgstr "إدارة علاقات العملاء" -#: core/models.py:1704 +#: core/models.py:1776 msgid "CRMs" msgstr "إدارة علاقات العملاء" -#: core/models.py:1716 +#: core/models.py:1788 msgid "order CRM link" msgstr "رابط إدارة علاقات العملاء الخاصة بالطلب" -#: core/models.py:1717 +#: core/models.py:1789 msgid "orders CRM links" msgstr "روابط إدارة علاقات العملاء الخاصة بالطلبات" -#: core/models.py:1722 +#: core/models.py:1794 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2351,19 +2351,15 @@ msgstr "" "إذا كان الأصل مرئيًا للعامة. وتتضمن طريقة لإنشاء عنوان URL لتنزيل الأصل " "عندما يكون الطلب المرتبط في حالة مكتملة." -#: core/models.py:1736 +#: core/models.py:1808 msgid "download" msgstr "تنزيل" -#: core/models.py:1737 +#: core/models.py:1809 msgid "downloads" msgstr "التنزيلات" -#: core/models.py:1745 -msgid "you can not download a digital asset for a non-finished order" -msgstr "لا يمكنك تنزيل أصل رقمي لطلب غير مكتمل" - -#: core/models.py:1754 +#: core/models.py:1823 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2376,28 +2372,28 @@ msgstr "" "المستخدم، ومرجع إلى المنتج ذي الصلة في الطلب، وتقييم معين من قبل المستخدم. " "يستخدم الفصل حقول قاعدة البيانات لنمذجة وإدارة بيانات الملاحظات بشكل فعال." -#: core/models.py:1766 +#: core/models.py:1835 msgid "user-provided comments about their experience with the product" msgstr "التعليقات المقدمة من المستخدمين حول تجربتهم مع المنتج" -#: core/models.py:1767 +#: core/models.py:1836 msgid "feedback comments" msgstr "تعليقات على الملاحظات" -#: core/models.py:1774 +#: core/models.py:1843 msgid "" "references the specific product in an order that this feedback is about" msgstr "الإشارة إلى المنتج المحدد في الطلب الذي تدور حوله هذه الملاحظات" -#: core/models.py:1775 +#: core/models.py:1844 msgid "related order product" msgstr "منتجات الطلبات ذات الصلة" -#: core/models.py:1780 +#: core/models.py:1849 msgid "user-assigned rating for the product" msgstr "التصنيف المعين من قبل المستخدم للمنتج" -#: core/models.py:1781 +#: core/models.py:1850 msgid "product rating" msgstr "تصنيف المنتج" @@ -2595,11 +2591,11 @@ msgstr "" "جميع الحقوق\n" " محفوظة" -#: core/utils/caching.py:41 +#: core/utils/caching.py:48 msgid "both data and timeout are required" msgstr "كل من البيانات والمهلة مطلوبة" -#: core/utils/caching.py:43 +#: core/utils/caching.py:50 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "قيمة المهلة غير صالحة، يجب أن تكون بين 0 و216000 ثانية" @@ -2631,24 +2627,323 @@ msgstr "ليس لديك إذن لتنفيذ هذا الإجراء." msgid "NOMINATIM_URL must be configured." msgstr "يجب تكوين معلمة NOMINATIM_URL!" -#: core/validators.py:16 +#: core/validators.py:14 #, 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/validators.py:22 -msgid "invalid phone number format" -msgstr "تنسيق رقم الهاتف غير صالح" +#: core/views.py:72 +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:489 +#: core/views.py:87 +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 "" +"يعالج استجابة العرض التفصيلي لخريطة الموقع. تقوم هذه الدالة بمعالجة الطلب، " +"وجلب استجابة تفاصيل خريطة الموقع المناسبة، وتعيين رأس نوع المحتوى ل XML." + +#: core/views.py:116 +msgid "" +"Returns a list of supported languages and their corresponding information." +msgstr "إرجاع قائمة باللغات المدعومة والمعلومات الخاصة بها." + +#: core/views.py:148 +msgid "Returns the parameters of the website as a JSON object." +msgstr "إرجاع معلمات الموقع الإلكتروني ككائن JSON." + +#: core/views.py:167 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +msgstr "" +"يعالج عمليات ذاكرة التخزين المؤقت مثل قراءة بيانات ذاكرة التخزين المؤقت " +"وتعيينها بمفتاح ومهلة محددة." + +#: core/views.py:194 +msgid "Handles `contact us` form submissions." +msgstr "يتعامل مع عمليات إرسال نموذج \"اتصل بنا\"." + +#: core/views.py:215 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "" +"يعالج طلبات معالجة عناوين URL والتحقق من صحة عناوين URL من طلبات POST " +"الواردة." + +#: core/views.py:255 +msgid "Handles global search queries." +msgstr "يتعامل مع استعلامات البحث العامة." + +#: core/views.py:270 +msgid "Handles the logic of buying as a business without registration." +msgstr "يتعامل بمنطق الشراء كشركة تجارية دون تسجيل." + +#: core/views.py:312 msgid "you can only download the digital asset once" msgstr "يمكنك تنزيل الأصل الرقمي مرة واحدة فقط" -#: core/views.py:547 +#: core/views.py:315 +msgid "the order must be paid before downloading the digital asset" +msgstr "يجب دفع الطلب قبل تنزيل الأصل الرقمي" + +#: core/views.py:353 +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." +msgstr "" +"يتعامل مع تنزيل الأصل الرقمي المرتبط بأمر ما.\n" +"تحاول هذه الدالة خدمة ملف الأصل الرقمي الموجود في دليل التخزين الخاص بالمشروع. إذا لم يتم العثور على الملف، يتم رفع خطأ HTTP 404 للإشارة إلى أن المورد غير متوفر." + +#: core/views.py:365 msgid "favicon not found" msgstr "الرمز المفضل غير موجود" -#: core/viewsets.py:1357 +#: core/views.py:370 +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." +msgstr "" +"يتعامل مع طلبات الرمز المفضل لموقع ويب.\n" +"تحاول هذه الدالة عرض ملف الأيقونة المفضلة الموجود في الدليل الثابت للمشروع. إذا لم يتم العثور على ملف الأيقونة المفضلة، يتم رفع خطأ HTTP 404 للإشارة إلى أن المورد غير متوفر." + +#: core/views.py:382 +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 "" +"يعيد توجيه الطلب إلى صفحة فهرس المشرف. تعالج الدالة طلبات HTTP الواردة وتعيد" +" توجيهها إلى صفحة فهرس واجهة إدارة Django. تستخدم دالة \"إعادة التوجيه\" في " +"Django للتعامل مع إعادة توجيه HTTP." + +#: core/viewsets.py:128 +msgid "" +"Defines a viewset for managing Evibes-related operations. The EvibesViewSet " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" +"يحدد مجموعة طرق عرض لإدارة العمليات المتعلقة ب Evibes. يرث صنف EvibesViewSet" +" من ModelViewSet ويوفر وظائف للتعامل مع الإجراءات والعمليات على كيانات " +"Evibes. وتتضمن دعمًا لفئات المتسلسلات الديناميكية استنادًا إلى الإجراء " +"الحالي، والأذونات القابلة للتخصيص، وتنسيقات العرض." + +#: core/viewsets.py:147 +msgid "" +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." +msgstr "" +"يمثل مجموعة طرق عرض لإدارة كائنات AttributeGroup. يتعامل مع العمليات " +"المتعلقة ب AttributeGroup، بما في ذلك التصفية والتسلسل واسترجاع البيانات. " +"تعد هذه الفئة جزءًا من طبقة واجهة برمجة التطبيقات الخاصة بالتطبيق وتوفر " +"طريقة موحدة لمعالجة الطلبات والاستجابات لبيانات AttributeGroup." + +#: core/viewsets.py:166 +msgid "" +"Handles operations related to Attribute objects within the application. " +"Provides a set of API endpoints to interact with Attribute data. This class " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"يعالج العمليات المتعلقة بكائنات السمة داخل التطبيق. يوفر مجموعة من نقاط " +"نهاية واجهة برمجة التطبيقات للتفاعل مع بيانات السمة. تدير هذه الفئة " +"الاستعلام عن كائنات السمة وتصفيتها وتسلسلها، مما يسمح بالتحكم الديناميكي في " +"البيانات التي يتم إرجاعها، مثل التصفية حسب حقول معينة أو استرجاع معلومات " +"مفصلة مقابل معلومات مبسطة حسب الطلب." + +#: core/viewsets.py:185 +msgid "" +"A viewset for managing AttributeValue objects. This viewset provides " +"functionality for listing, retrieving, creating, updating, and deleting " +"AttributeValue objects. It integrates with Django REST Framework's viewset " +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." +msgstr "" +"مجموعة طرق عرض لإدارة كائنات AttributeValue. توفر مجموعة طرق العرض هذه وظائف" +" لإدراج كائنات AttributeValue واسترجاعها وإنشائها وتحديثها وحذفها. وهي " +"تتكامل مع آليات مجموعة طرق عرض Django REST Framework وتستخدم المتسلسلات " +"المناسبة للإجراءات المختلفة. يتم توفير إمكانيات التصفية من خلال " +"DjangoFilterBackend." + +#: core/viewsets.py:204 +msgid "" +"Manages views for Category-related operations. The CategoryViewSet class is " +"responsible for handling operations related to the Category model in the " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" +"يدير طرق العرض للعمليات المتعلقة بالفئة. فئة CategoryViewSet مسؤولة عن " +"التعامل مع العمليات المتعلقة بنموذج الفئة في النظام. وهي تدعم استرجاع بيانات" +" الفئة وتصفيتها وتسلسلها. تفرض مجموعة طرق العرض أيضًا الأذونات لضمان وصول " +"المستخدمين المصرح لهم فقط إلى بيانات محددة." + +#: core/viewsets.py:315 +msgid "" +"Represents a viewset for managing Brand instances. This class provides " +"functionality for querying, filtering, and serializing Brand objects. It " +"uses Django's ViewSet framework to simplify the implementation of API " +"endpoints for Brand objects." +msgstr "" +"يمثل مجموعة طرق عرض لإدارة مثيلات العلامة التجارية. توفر هذه الفئة وظائف " +"الاستعلام عن كائنات العلامة التجارية وتصفيتها وتسلسلها. ويستخدم إطار عمل " +"Django's ViewSet لتبسيط تنفيذ نقاط نهاية واجهة برمجة التطبيقات لكائنات " +"العلامة التجارية." + +#: core/viewsets.py:427 +msgid "" +"Manages operations related to the `Product` model in the system. This class " +"provides a viewset for managing products, including their filtering, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" +"يدير العمليات المتعلقة بنموذج \"المنتج\" في النظام. توفر هذه الفئة مجموعة " +"طرق عرض لإدارة المنتجات، بما في ذلك تصفيتها وتسلسلها وعملياتها على مثيلات " +"محددة. وهو يمتد من 'EvibesViewSet' لاستخدام الوظائف الشائعة ويتكامل مع إطار " +"عمل Django REST لعمليات RESTful API. يتضمن أساليب لاسترجاع تفاصيل المنتج، " +"وتطبيق الأذونات، والوصول إلى الملاحظات ذات الصلة بمنتج ما." + +#: core/viewsets.py:547 +msgid "" +"Represents a viewset for managing Vendor objects. This viewset allows " +"fetching, filtering, and serializing Vendor data. It defines the queryset, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" +"يمثل مجموعة طرق عرض لإدارة كائنات المورد. تسمح مجموعة العرض هذه بجلب بيانات " +"البائع وتصفيتها وتسلسلها. وهي تُعرِّف مجموعة الاستعلام، وتكوينات التصفية، " +"وفئات أداة التسلسل المستخدمة للتعامل مع الإجراءات المختلفة. الغرض من هذه " +"الفئة هو توفير وصول مبسط إلى الموارد المتعلقة بالمورد من خلال إطار عمل " +"Django REST." + +#: core/viewsets.py:567 +msgid "" +"Representation of a view set handling Feedback objects. This class manages " +"operations related to Feedback objects, including listing, filtering, and " +"retrieving details. The purpose of this view set is to provide different " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"use of Django's filtering system for querying data." +msgstr "" +"تمثيل مجموعة عرض تتعامل مع كائنات الملاحظات. تدير هذه الفئة العمليات " +"المتعلقة بكائنات الملاحظات، بما في ذلك الإدراج والتصفية واسترجاع التفاصيل. " +"الغرض من مجموعة العرض هذه هو توفير متسلسلات مختلفة لإجراءات مختلفة وتنفيذ " +"معالجة قائمة على الأذونات لكائنات الملاحظات التي يمكن الوصول إليها. وهي توسع" +" \"مجموعة عرض الملاحظات\" الأساسية وتستفيد من نظام تصفية Django للاستعلام عن" +" البيانات." + +#: core/viewsets.py:593 +msgid "" +"ViewSet for managing orders and related operations. This class provides " +"functionality to retrieve, modify, and manage order objects. It includes " +"various endpoints for handling order operations such as adding or removing " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " +"enforces permissions accordingly while interacting with order data." +msgstr "" +"ViewSet لإدارة الطلبات والعمليات ذات الصلة. توفر هذه الفئة وظائف لاسترداد " +"كائنات الطلبات وتعديلها وإدارتها. وهي تتضمن نقاط نهاية مختلفة للتعامل مع " +"عمليات الطلبات مثل إضافة أو إزالة المنتجات، وتنفيذ عمليات الشراء للمستخدمين " +"المسجلين وغير المسجلين، واسترجاع الطلبات المعلقة للمستخدم الحالي المصادق " +"عليه. يستخدم ViewSet العديد من المتسلسلات بناءً على الإجراء المحدد الذي يتم " +"تنفيذه ويفرض الأذونات وفقًا لذلك أثناء التفاعل مع بيانات الطلبات." + +#: core/viewsets.py:782 +msgid "" +"Provides a viewset for managing OrderProduct entities. This viewset enables " +"CRUD operations and custom actions specific to the OrderProduct model. It " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " +"feedback on OrderProduct instances" +msgstr "" +"يوفر مجموعة طرق عرض لإدارة كيانات OrderProduct. تتيح مجموعة طرق العرض هذه " +"عمليات CRUD وإجراءات مخصصة خاصة بنموذج OrderProduct. تتضمن التصفية، والتحقق " +"من الأذونات، وتبديل المتسلسل بناءً على الإجراء المطلوب. بالإضافة إلى ذلك، " +"توفر إجراءً مفصلاً للتعامل مع الملاحظات على مثيلات OrderProduct" + +#: core/viewsets.py:833 +msgid "Manages operations related to Product images in the application. " +msgstr "يدير العمليات المتعلقة بصور المنتج في التطبيق." + +#: core/viewsets.py:845 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +msgstr "" +"يدير استرداد مثيلات PromoCode ومعالجتها من خلال إجراءات واجهة برمجة " +"التطبيقات المختلفة." + +#: core/viewsets.py:866 +msgid "Represents a view set for managing promotions. " +msgstr "يمثل مجموعة عرض لإدارة الترقيات." + +#: core/viewsets.py:878 +msgid "Handles operations related to Stock data in the system." +msgstr "يتعامل مع العمليات المتعلقة ببيانات المخزون في النظام." + +#: core/viewsets.py:892 +msgid "" +"ViewSet for managing Wishlist operations. The WishlistViewSet provides " +"endpoints for interacting with a user's wish list, allowing for the " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " +"actions for wishlist products. Permission checks are integrated to ensure " +"that users can only manage their own wishlists unless explicit permissions " +"are granted." +msgstr "" +"ViewSet لإدارة عمليات قائمة الرغبات. توفر مجموعة طرق عرض قائمة الأمنيات نقاط" +" نهاية للتفاعل مع قائمة أمنيات المستخدم، مما يسمح باسترجاع المنتجات وتعديلها" +" وتخصيصها ضمن قائمة الأمنيات. تسهل مجموعة العرض هذه وظائف مثل الإضافة " +"والإزالة والإجراءات المجمعة لمنتجات قائمة الرغبات. يتم دمج عمليات التحقق من " +"الأذونات للتأكد من أن المستخدمين يمكنهم فقط إدارة قوائم الرغبات الخاصة بهم " +"ما لم يتم منح أذونات صريحة." + +#: core/viewsets.py:1007 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" +"توفر هذه الفئة وظيفة مجموعة طرق العرض لإدارة كائنات \"العنوان\". تتيح فئة " +"AddressViewSet عمليات CRUD والتصفية والإجراءات المخصصة المتعلقة بكيانات " +"العناوين. وتتضمن سلوكيات متخصصة لطرق HTTP المختلفة، وتجاوزات المتسلسل، " +"ومعالجة الأذونات بناءً على سياق الطلب." + +#: core/viewsets.py:1074 #, python-brace-format msgid "Geocoding error: {e}" msgstr "خطأ في الترميز الجغرافي: {e}" + +#: core/viewsets.py:1081 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" +"يعالج العمليات المتعلقة بعلامات المنتجات داخل التطبيق. توفر هذه الفئة وظيفة " +"استرجاع وتصفية وتسلسل كائنات وسم المنتج. وهي تدعم التصفية المرنة على سمات " +"محددة باستخدام الواجهة الخلفية للتصفية المحددة وتستخدم ديناميكيًا متسلسلات " +"مختلفة بناءً على الإجراء الذي يتم تنفيذه." diff --git a/core/locale/cs_CZ/LC_MESSAGES/django.mo b/core/locale/cs_CZ/LC_MESSAGES/django.mo index 5606a786b678184ba14fc2207fc91993149887de..a471167f9e7fe90949a7e08ee15e4a1986f6425f 100644 GIT binary patch delta 26882 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…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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:11 +#: core/abstract.py:12 msgid "unique id" msgstr "Jedinečné ID" -#: core/abstract.py:12 +#: 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:19 +#: core/abstract.py:20 msgid "is active" msgstr "Je aktivní" -#: core/abstract.py:20 +#: core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" @@ -34,19 +34,19 @@ msgstr "" "Pokud je nastaveno na false, nemohou tento objekt vidět uživatelé bez " "potřebného oprávnění." -#: core/abstract.py:22 core/choices.py:18 +#: core/abstract.py:23 core/choices.py:18 msgid "created" msgstr "Vytvořeno" -#: core/abstract.py:22 +#: 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:23 +#: core/abstract.py:24 msgid "modified" msgstr "Upraveno" -#: core/abstract.py:23 +#: core/abstract.py:24 msgid "when the object was last modified" msgstr "Kdy byl objekt naposledy upraven" @@ -89,11 +89,11 @@ msgid "selected items have been deactivated." msgstr "Vybrané položky byly deaktivovány!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 +#: core/graphene/object_types.py:616 core/models.py:701 core/models.py:709 msgid "attribute value" msgstr "Hodnota atributu" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 msgid "attribute values" msgstr "Hodnoty atributů" @@ -105,7 +105,7 @@ msgstr "Obrázek" msgid "images" msgstr "Obrázky" -#: core/admin.py:155 core/models.py:445 +#: core/admin.py:155 core/models.py:459 msgid "stock" msgstr "Stock" @@ -113,11 +113,11 @@ msgstr "Stock" msgid "stocks" msgstr "Zásoby" -#: core/admin.py:166 core/models.py:1609 +#: core/admin.py:166 core/models.py:1667 msgid "order product" msgstr "Objednat produkt" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 msgid "order products" msgstr "Objednat produkty" @@ -732,7 +732,7 @@ msgstr "odstranit vztah objednávka-produkt" msgid "add or remove feedback on an order–product relation" msgstr "přidat nebo odebrat zpětnou vazbu na vztah objednávka-produkt." -#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 msgid "no search term provided." msgstr "Nebyl zadán žádný vyhledávací termín." @@ -785,7 +785,7 @@ msgid "Quantity" msgstr "Množství" #: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:287 core/models.py:369 core/models.py:522 +#: core/models.py:301 core/models.py:383 core/models.py:536 msgid "Slug" msgstr "Slug" @@ -801,7 +801,7 @@ msgstr "Zahrnout podkategorie" msgid "Include personal ordered" msgstr "Zahrnout osobně objednané produkty" -#: core/filters.py:85 core/models.py:526 +#: core/filters.py:85 core/models.py:540 msgid "SKU" msgstr "SKU" @@ -875,7 +875,7 @@ msgstr "Data uložená v mezipaměti" msgid "camelized JSON data from the requested URL" msgstr "Kamelizovaná data JSON z požadované adresy URL" -#: core/graphene/mutations.py:65 core/views.py:360 +#: core/graphene/mutations.py:65 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "Povoleny jsou pouze adresy URL začínající http(s)://." @@ -906,7 +906,7 @@ 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:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:839 +#: core/graphene/mutations.py:527 core/viewsets.py:679 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Z metody order.buy() pochází nesprávný typ: {type(instance)!s}" @@ -982,9 +982,9 @@ msgstr "Orderproduct {order_product_uuid} nenalezen!" msgid "original address string provided by the user" msgstr "Původní řetězec adresy zadaný uživatelem" -#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 -#: core/models.py:1234 core/models.py:1263 core/models.py:1288 -#: core/viewsets.py:842 +#: core/graphene/mutations.py:656 core/models.py:849 core/models.py:862 +#: core/models.py:1281 core/models.py:1310 core/models.py:1335 +#: core/viewsets.py:682 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} neexistuje: {uuid}!" @@ -998,8 +998,8 @@ msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - funguje jako kouzlo" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 -#: core/models.py:1686 +#: core/graphene/object_types.py:444 core/models.py:672 core/models.py:1144 +#: core/models.py:1744 msgid "attributes" msgstr "Atributy" @@ -1012,11 +1012,11 @@ msgid "groups of attributes" msgstr "Skupiny atributů" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:612 +#: core/graphene/object_types.py:224 core/models.py:326 core/models.py:626 msgid "categories" msgstr "Kategorie" -#: core/graphene/object_types.py:124 core/models.py:383 +#: core/graphene/object_types.py:124 core/models.py:397 msgid "brands" msgstr "Značky" @@ -1025,7 +1025,7 @@ msgid "category image url" msgstr "Kategorie" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:249 +#: core/models.py:263 msgid "markup percentage" msgstr "Procento přirážky" @@ -1048,7 +1048,7 @@ msgstr "Štítky pro tuto kategorii" msgid "products in this category" msgstr "Produkty v této kategorii" -#: core/graphene/object_types.py:351 core/models.py:155 +#: core/graphene/object_types.py:351 core/models.py:169 msgid "vendors" msgstr "Prodejci" @@ -1073,7 +1073,7 @@ msgid "represents feedback from a user." msgstr "Představuje zpětnou vazbu od uživatele." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1110 +#: core/models.py:1138 msgid "notifications" msgstr "Oznámení" @@ -1081,7 +1081,7 @@ msgstr "Oznámení" 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:400 core/models.py:1791 +#: core/graphene/object_types.py:400 core/models.py:1860 msgid "feedback" msgstr "Zpětná vazba" @@ -1089,7 +1089,7 @@ msgstr "Zpětná vazba" msgid "a list of order products in this order" msgstr "Seznam objednaných produktů v tomto pořadí" -#: core/graphene/object_types.py:436 core/models.py:1080 +#: core/graphene/object_types.py:436 core/models.py:1108 msgid "billing address" msgstr "Fakturační adresa" @@ -1117,7 +1117,7 @@ msgstr "Jsou všechny produkty v objednávce digitální" msgid "transactions for this order" msgstr "Transakce pro tuto objednávku" -#: core/graphene/object_types.py:465 core/models.py:1144 +#: core/graphene/object_types.py:465 core/models.py:1172 msgid "orders" msgstr "Objednávky" @@ -1129,15 +1129,15 @@ msgstr "Adresa URL obrázku" msgid "product's images" msgstr "Obrázky produktu" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 +#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 msgid "category" msgstr "Kategorie" -#: core/graphene/object_types.py:502 core/models.py:1792 +#: core/graphene/object_types.py:502 core/models.py:1861 msgid "feedbacks" msgstr "Zpětná vazba" -#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 +#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 msgid "brand" msgstr "Značka" @@ -1169,7 +1169,7 @@ msgstr "Počet zpětných vazeb" msgid "only available for personal orders" msgstr "Produkty jsou k dispozici pouze pro osobní objednávky" -#: core/graphene/object_types.py:534 core/models.py:536 +#: core/graphene/object_types.py:534 core/models.py:550 msgid "products" msgstr "Produkty" @@ -1181,15 +1181,15 @@ msgstr "Propagační kódy" msgid "products on sale" msgstr "Produkty v prodeji" -#: core/graphene/object_types.py:651 core/models.py:784 +#: core/graphene/object_types.py:651 core/models.py:798 msgid "promotions" msgstr "Propagační akce" -#: core/graphene/object_types.py:655 core/models.py:154 +#: core/graphene/object_types.py:655 core/models.py:168 msgid "vendor" msgstr "Prodejce" -#: core/graphene/object_types.py:656 core/models.py:535 +#: core/graphene/object_types.py:656 core/models.py:549 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1197,11 +1197,11 @@ msgstr "Prodejce" msgid "product" msgstr "Produkt" -#: core/graphene/object_types.py:667 core/models.py:807 +#: core/graphene/object_types.py:667 core/models.py:821 msgid "wishlisted products" msgstr "Produkty uvedené na seznamu přání" -#: core/graphene/object_types.py:673 core/models.py:824 +#: core/graphene/object_types.py:673 core/models.py:838 msgid "wishlists" msgstr "Seznamy přání" @@ -1209,7 +1209,7 @@ msgstr "Seznamy přání" msgid "tagged products" msgstr "Produkty s příznakem" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 +#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 msgid "product tags" msgstr "Štítky produktu" @@ -1320,7 +1320,7 @@ msgstr "Nadřazená skupina atributů" msgid "attribute group's name" msgstr "Název skupiny atributů" -#: core/models.py:100 core/models.py:620 +#: core/models.py:100 core/models.py:634 msgid "attribute group" msgstr "Skupina atributů" @@ -1368,7 +1368,7 @@ msgstr "Název tohoto prodejce" msgid "vendor name" msgstr "Název prodejce" -#: core/models.py:163 +#: core/models.py:177 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1382,27 +1382,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:175 core/models.py:206 +#: core/models.py:189 core/models.py:220 msgid "internal tag identifier for the product tag" msgstr "Interní identifikátor značky produktu" -#: core/models.py:176 core/models.py:207 +#: core/models.py:190 core/models.py:221 msgid "tag name" msgstr "Název štítku" -#: core/models.py:180 core/models.py:211 +#: core/models.py:194 core/models.py:225 msgid "user-friendly name for the product tag" msgstr "Uživatelsky přívětivý název pro značku produktu" -#: core/models.py:181 core/models.py:212 +#: core/models.py:195 core/models.py:226 msgid "tag display name" msgstr "Zobrazení názvu štítku" -#: core/models.py:189 +#: core/models.py:203 msgid "product tag" msgstr "Štítek produktu" -#: core/models.py:195 +#: core/models.py:209 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 " @@ -1413,15 +1413,15 @@ msgstr "" "Obsahuje atributy pro interní identifikátor značky a uživatelsky přívětivý " "zobrazovací název." -#: core/models.py:220 +#: core/models.py:234 msgid "category tag" msgstr "značka kategorie" -#: core/models.py:221 core/models.py:293 +#: core/models.py:235 core/models.py:307 msgid "category tags" msgstr "štítky kategorií" -#: core/models.py:226 +#: core/models.py:240 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1443,51 +1443,51 @@ msgstr "" "kategorií a také přiřazovat atributy, jako jsou obrázky, značky nebo " "priorita." -#: core/models.py:240 +#: core/models.py:254 msgid "upload an image representing this category" msgstr "Nahrát obrázek reprezentující tuto kategorii" -#: core/models.py:243 +#: core/models.py:257 msgid "category image" msgstr "Obrázek kategorie" -#: core/models.py:248 +#: core/models.py:262 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:257 +#: core/models.py:271 msgid "parent of this category to form a hierarchical structure" msgstr "Nadřízený této kategorie, který tvoří hierarchickou strukturu." -#: core/models.py:258 +#: core/models.py:272 msgid "parent category" msgstr "Nadřazená kategorie" -#: core/models.py:263 +#: core/models.py:277 msgid "category name" msgstr "Název kategorie" -#: core/models.py:264 +#: core/models.py:278 msgid "provide a name for this category" msgstr "Uveďte název této kategorie" -#: core/models.py:271 +#: core/models.py:285 msgid "add a detailed description for this category" msgstr "Přidejte podrobný popis této kategorie" -#: core/models.py:272 +#: core/models.py:286 msgid "category description" msgstr "Popis kategorie" -#: core/models.py:292 +#: core/models.py:306 msgid "tags that help describe or group this category" msgstr "značky, které pomáhají popsat nebo seskupit tuto kategorii" -#: core/models.py:299 core/models.py:375 +#: core/models.py:313 core/models.py:389 msgid "priority" msgstr "Priorita" -#: core/models.py:318 +#: core/models.py:332 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1500,47 +1500,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:328 +#: core/models.py:342 msgid "name of this brand" msgstr "Název této značky" -#: core/models.py:329 +#: core/models.py:343 msgid "brand name" msgstr "Název značky" -#: core/models.py:336 +#: core/models.py:350 msgid "upload a logo representing this brand" msgstr "Nahrát logo reprezentující tuto značku" -#: core/models.py:338 +#: core/models.py:352 msgid "brand small image" msgstr "Malý obrázek značky" -#: core/models.py:344 +#: core/models.py:358 msgid "upload a big logo representing this brand" msgstr "Nahrát velké logo reprezentující tuto značku" -#: core/models.py:346 +#: core/models.py:360 msgid "brand big image" msgstr "Velká image značky" -#: core/models.py:351 +#: core/models.py:365 msgid "add a detailed description of the brand" msgstr "Přidejte podrobný popis značky" -#: core/models.py:352 +#: core/models.py:366 msgid "brand description" msgstr "Popis značky" -#: core/models.py:357 +#: core/models.py:371 msgid "optional categories that this brand is associated with" msgstr "Volitelné kategorie, se kterými je tato značka spojena" -#: core/models.py:358 +#: core/models.py:372 msgid "associated categories" msgstr "Kategorie" -#: core/models.py:388 +#: core/models.py:402 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1556,68 +1556,68 @@ msgstr "" "zásob, který umožňuje sledovat a vyhodnocovat produkty dostupné od různých " "dodavatelů." -#: core/models.py:400 +#: core/models.py:414 msgid "the vendor supplying this product stock" msgstr "Prodejce dodávající tento výrobek na sklad" -#: core/models.py:401 +#: core/models.py:415 msgid "associated vendor" msgstr "Přidružený prodejce" -#: core/models.py:405 +#: core/models.py:419 msgid "final price to the customer after markups" msgstr "Konečná cena pro zákazníka po přirážkách" -#: core/models.py:406 +#: core/models.py:420 msgid "selling price" msgstr "Prodejní cena" -#: core/models.py:411 +#: core/models.py:425 msgid "the product associated with this stock entry" msgstr "Produkt spojený s touto skladovou položkou" -#: core/models.py:412 core/models.py:683 core/models.py:730 -#: core/models.py:1583 +#: core/models.py:426 core/models.py:697 core/models.py:744 +#: core/models.py:1641 msgid "associated product" msgstr "Související produkt" -#: core/models.py:419 +#: core/models.py:433 msgid "the price paid to the vendor for this product" msgstr "Cena zaplacená prodejci za tento výrobek" -#: core/models.py:420 +#: core/models.py:434 msgid "vendor purchase price" msgstr "Kupní cena prodejce" -#: core/models.py:424 +#: core/models.py:438 msgid "available quantity of the product in stock" msgstr "Dostupné množství produktu na skladě" -#: core/models.py:425 +#: core/models.py:439 msgid "quantity in stock" msgstr "Množství na skladě" -#: core/models.py:429 +#: core/models.py:443 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU přidělený prodejcem pro identifikaci výrobku" -#: core/models.py:430 +#: core/models.py:444 msgid "vendor sku" msgstr "SKU prodejce" -#: core/models.py:436 +#: core/models.py:450 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:437 +#: core/models.py:451 msgid "digital file" msgstr "Digitální soubor" -#: core/models.py:446 +#: core/models.py:460 msgid "stock entries" msgstr "Zápisy do zásob" -#: core/models.py:451 +#: core/models.py:465 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1638,55 +1638,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:464 +#: core/models.py:478 msgid "category this product belongs to" msgstr "Kategorie, do které tento produkt patří" -#: core/models.py:473 +#: core/models.py:487 msgid "optionally associate this product with a brand" msgstr "Volitelně přiřadit tento produkt ke značce" -#: core/models.py:479 +#: core/models.py:493 msgid "tags that help describe or group this product" msgstr "Značky, které pomáhají popsat nebo seskupit tento produkt" -#: core/models.py:484 +#: core/models.py:498 msgid "indicates whether this product is digitally delivered" msgstr "Označuje, zda je tento produkt dodáván digitálně" -#: core/models.py:485 +#: core/models.py:499 msgid "is product digital" msgstr "Je produkt digitální" -#: core/models.py:491 +#: core/models.py:505 msgid "provide a clear identifying name for the product" msgstr "Uveďte jasný identifikační název výrobku" -#: core/models.py:492 +#: core/models.py:506 msgid "product name" msgstr "Název produktu" -#: core/models.py:497 core/models.py:772 +#: core/models.py:511 core/models.py:786 msgid "add a detailed description of the product" msgstr "Přidejte podrobný popis produktu" -#: core/models.py:498 +#: core/models.py:512 msgid "product description" msgstr "Popis produktu" -#: core/models.py:505 +#: core/models.py:519 msgid "part number for this product" msgstr "Číslo dílu pro tento produkt" -#: core/models.py:506 +#: core/models.py:520 msgid "part number" msgstr "Číslo dílu" -#: core/models.py:525 +#: core/models.py:539 msgid "stock keeping unit for this product" msgstr "Skladová jednotka pro tento produkt" -#: core/models.py:599 +#: core/models.py:613 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 " @@ -1702,68 +1702,68 @@ msgstr "" "booleanu, pole a objektu. To umožňuje dynamické a flexibilní strukturování " "dat." -#: core/models.py:611 +#: core/models.py:625 msgid "category of this attribute" msgstr "Kategorie tohoto atributu" -#: core/models.py:619 +#: core/models.py:633 msgid "group of this attribute" msgstr "Skupina tohoto atributu" -#: core/models.py:625 +#: core/models.py:639 msgid "string" msgstr "Řetězec" -#: core/models.py:626 +#: core/models.py:640 msgid "integer" msgstr "Celé číslo" -#: core/models.py:627 +#: core/models.py:641 msgid "float" msgstr "Float" -#: core/models.py:628 +#: core/models.py:642 msgid "boolean" msgstr "Boolean" -#: core/models.py:629 +#: core/models.py:643 msgid "array" msgstr "Pole" -#: core/models.py:630 +#: core/models.py:644 msgid "object" msgstr "Objekt" -#: core/models.py:632 +#: core/models.py:646 msgid "type of the attribute's value" msgstr "Typ hodnoty atributu" -#: core/models.py:633 +#: core/models.py:647 msgid "value type" msgstr "Typ hodnoty" -#: core/models.py:638 +#: core/models.py:652 msgid "name of this attribute" msgstr "Název tohoto atributu" -#: core/models.py:639 +#: core/models.py:653 msgid "attribute's name" msgstr "Název atributu" -#: core/models.py:645 +#: core/models.py:659 msgid "is filterable" msgstr "je filtrovatelný" -#: core/models.py:646 +#: core/models.py:660 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:657 core/models.py:675 +#: core/models.py:671 core/models.py:689 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Atribut" -#: core/models.py:663 +#: core/models.py:677 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" @@ -1773,19 +1773,19 @@ msgstr "" " \"atribut\" s jedinečnou \"hodnotou\", což umožňuje lepší organizaci a " "dynamickou reprezentaci vlastností produktu." -#: core/models.py:674 +#: core/models.py:688 msgid "attribute of this value" msgstr "Atribut této hodnoty" -#: core/models.py:682 +#: core/models.py:696 msgid "the specific product associated with this attribute's value" msgstr "Konkrétní produkt spojený s hodnotou tohoto atributu" -#: core/models.py:688 +#: core/models.py:702 msgid "the specific value for this attribute" msgstr "Konkrétní hodnota tohoto atributu" -#: core/models.py:701 +#: core/models.py:715 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -1799,39 +1799,39 @@ msgstr "" " zobrazení. Obsahuje také funkci pro zpřístupnění alternativního textu pro " "obrázky." -#: core/models.py:712 +#: core/models.py:726 msgid "provide alternative text for the image for accessibility" msgstr "Poskytněte alternativní text k obrázku kvůli přístupnosti." -#: core/models.py:713 +#: core/models.py:727 msgid "image alt text" msgstr "Text alt obrázku" -#: core/models.py:716 +#: core/models.py:730 msgid "upload the image file for this product" msgstr "Nahrát soubor s obrázkem tohoto produktu" -#: core/models.py:717 core/models.py:742 +#: core/models.py:731 core/models.py:756 msgid "product image" msgstr "Obrázek produktu" -#: core/models.py:723 +#: core/models.py:737 msgid "determines the order in which images are displayed" msgstr "Určuje pořadí, v jakém se obrázky zobrazují." -#: core/models.py:724 +#: core/models.py:738 msgid "display priority" msgstr "Priorita zobrazení" -#: core/models.py:729 +#: core/models.py:743 msgid "the product that this image represents" msgstr "Výrobek, který tento obrázek představuje" -#: core/models.py:743 +#: core/models.py:757 msgid "product images" msgstr "Obrázky produktů" -#: core/models.py:748 +#: core/models.py:762 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1846,39 +1846,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:760 +#: core/models.py:774 msgid "percentage discount for the selected products" msgstr "Procentuální sleva na vybrané produkty" -#: core/models.py:761 +#: core/models.py:775 msgid "discount percentage" msgstr "Procento slevy" -#: core/models.py:766 +#: core/models.py:780 msgid "provide a unique name for this promotion" msgstr "Uveďte jedinečný název této propagační akce" -#: core/models.py:767 +#: core/models.py:781 msgid "promotion name" msgstr "Název akce" -#: core/models.py:773 +#: core/models.py:787 msgid "promotion description" msgstr "Popis propagace" -#: core/models.py:778 +#: core/models.py:792 msgid "select which products are included in this promotion" msgstr "Vyberte, které produkty jsou zahrnuty do této akce" -#: core/models.py:779 +#: core/models.py:793 msgid "included products" msgstr "Zahrnuté produkty" -#: core/models.py:783 +#: core/models.py:797 msgid "promotion" msgstr "Propagace" -#: core/models.py:794 +#: core/models.py:808 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1890,23 +1890,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:806 +#: core/models.py:820 msgid "products that the user has marked as wanted" msgstr "Výrobky, které uživatel označil jako požadované" -#: core/models.py:814 +#: core/models.py:828 msgid "user who owns this wishlist" msgstr "Uživatel, který vlastní tento seznam přání" -#: core/models.py:815 +#: core/models.py:829 msgid "wishlist owner" msgstr "Majitel seznamu přání" -#: core/models.py:823 +#: core/models.py:837 msgid "wishlist" msgstr "Seznam přání" -#: core/models.py:865 +#: core/models.py:879 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1921,19 +1921,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:878 +#: core/models.py:892 msgid "documentary" msgstr "Dokumentární film" -#: core/models.py:879 +#: core/models.py:893 msgid "documentaries" msgstr "Dokumentární filmy" -#: core/models.py:889 +#: core/models.py:903 msgid "unresolved" msgstr "Nevyřešené" -#: core/models.py:894 +#: core/models.py:908 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1953,59 +1953,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:909 +#: core/models.py:923 msgid "address line for the customer" msgstr "Adresní řádek pro zákazníka" -#: core/models.py:910 +#: core/models.py:924 msgid "address line" msgstr "Adresní řádek" -#: core/models.py:912 +#: core/models.py:926 msgid "street" msgstr "Ulice" -#: core/models.py:913 +#: core/models.py:927 msgid "district" msgstr "Okres" -#: core/models.py:914 +#: core/models.py:928 msgid "city" msgstr "Město" -#: core/models.py:915 +#: core/models.py:929 msgid "region" msgstr "Region" -#: core/models.py:916 +#: core/models.py:930 msgid "postal code" msgstr "Poštovní směrovací číslo" -#: core/models.py:917 +#: core/models.py:931 msgid "country" msgstr "Země" -#: core/models.py:924 +#: core/models.py:938 msgid "geolocation point: (longitude, latitude)" msgstr "Geolokace Bod(Zeměpisná délka, Zeměpisná šířka)" -#: core/models.py:927 +#: core/models.py:941 msgid "full JSON response from geocoder for this address" msgstr "Úplná odpověď JSON z geokodéru pro tuto adresu" -#: core/models.py:932 +#: core/models.py:946 msgid "stored JSON response from the geocoding service" msgstr "Uložená odpověď JSON ze služby geokódování" -#: core/models.py:940 +#: core/models.py:954 msgid "address" msgstr "Adresa" -#: core/models.py:941 +#: core/models.py:955 msgid "addresses" msgstr "Adresy" -#: core/models.py:953 +#: core/models.py:967 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2021,71 +2021,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:967 +#: core/models.py:981 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:968 +#: core/models.py:982 msgid "promo code identifier" msgstr "Identifikátor propagačního kódu" -#: core/models.py:975 +#: core/models.py:989 msgid "fixed discount amount applied if percent is not used" msgstr "Pevná výše slevy, pokud není použito procento" -#: core/models.py:976 +#: core/models.py:990 msgid "fixed discount amount" msgstr "Pevná výše slevy" -#: core/models.py:982 +#: core/models.py:996 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:983 +#: core/models.py:997 msgid "percentage discount" msgstr "Procentuální sleva" -#: core/models.py:988 +#: core/models.py:1002 msgid "timestamp when the promocode expires" msgstr "Časové razítko ukončení platnosti promokódu" -#: core/models.py:989 +#: core/models.py:1003 msgid "end validity time" msgstr "Doba ukončení platnosti" -#: core/models.py:994 +#: core/models.py:1008 msgid "timestamp from which this promocode is valid" msgstr "Časové razítko, od kterého je tento promokód platný" -#: core/models.py:995 +#: core/models.py:1009 msgid "start validity time" msgstr "Čas zahájení platnosti" -#: core/models.py:1000 +#: core/models.py:1014 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:1001 +#: core/models.py:1015 msgid "usage timestamp" msgstr "Časové razítko použití" -#: core/models.py:1006 +#: core/models.py:1020 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:1007 +#: core/models.py:1021 msgid "assigned user" msgstr "Přiřazený uživatel" -#: core/models.py:1014 +#: core/models.py:1028 msgid "promo code" msgstr "Propagační kód" -#: core/models.py:1015 +#: core/models.py:1029 msgid "promo codes" msgstr "Propagační kódy" -#: core/models.py:1022 +#: core/models.py:1044 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2093,16 +2093,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:1037 +#: core/models.py:1065 msgid "promocode already used" msgstr "Promo kód byl již použit" -#: core/models.py:1053 +#: core/models.py:1081 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Neplatný typ slevy pro promokód {self.uuid}!" -#: core/models.py:1062 +#: core/models.py:1090 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 " @@ -2119,136 +2119,136 @@ msgstr "" "fakturaci. Stejně tak funkce podporuje správu produktů v životním cyklu " "objednávky." -#: core/models.py:1079 +#: core/models.py:1107 msgid "the billing address used for this order" msgstr "Fakturační adresa použitá pro tuto objednávku" -#: core/models.py:1087 +#: core/models.py:1115 msgid "optional promo code applied to this order" msgstr "Volitelný promo kód použitý na tuto objednávku" -#: core/models.py:1088 +#: core/models.py:1116 msgid "applied promo code" msgstr "Použitý promo kód" -#: core/models.py:1096 +#: core/models.py:1124 msgid "the shipping address used for this order" msgstr "Dodací adresa použitá pro tuto objednávku" -#: core/models.py:1097 +#: core/models.py:1125 msgid "shipping address" msgstr "Dodací adresa" -#: core/models.py:1103 +#: core/models.py:1131 msgid "current status of the order in its lifecycle" msgstr "Aktuální stav zakázky v jejím životním cyklu" -#: core/models.py:1104 +#: core/models.py:1132 msgid "order status" msgstr "Stav objednávky" -#: core/models.py:1109 core/models.py:1560 +#: core/models.py:1137 core/models.py:1618 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:1115 +#: core/models.py:1143 msgid "json representation of order attributes for this order" msgstr "JSON reprezentace atributů objednávky pro tuto objednávku" -#: core/models.py:1121 +#: core/models.py:1149 msgid "the user who placed the order" msgstr "Uživatel, který zadal objednávku" -#: core/models.py:1122 +#: core/models.py:1150 msgid "user" msgstr "Uživatel" -#: core/models.py:1128 +#: core/models.py:1156 msgid "the timestamp when the order was finalized" msgstr "Časové razítko, kdy byla objednávka dokončena." -#: core/models.py:1129 +#: core/models.py:1157 msgid "buy time" msgstr "Kupte si čas" -#: core/models.py:1136 +#: core/models.py:1164 msgid "a human-readable identifier for the order" msgstr "Lidsky čitelný identifikátor objednávky" -#: core/models.py:1137 +#: core/models.py:1165 msgid "human readable id" msgstr "lidsky čitelné ID" -#: core/models.py:1143 +#: core/models.py:1171 msgid "order" msgstr "Objednávka" -#: core/models.py:1168 +#: core/models.py:1209 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:1202 +#: core/models.py:1249 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:1207 +#: core/models.py:1254 msgid "you cannot add inactive products to order" msgstr "Do objednávky nelze přidat neaktivní produkty" -#: core/models.py:1224 +#: core/models.py:1271 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:1246 core/models.py:1271 core/models.py:1279 +#: core/models.py:1293 core/models.py:1318 core/models.py:1326 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:1267 +#: core/models.py:1314 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} neexistuje s dotazem <{query}>!" -#: core/models.py:1299 +#: core/models.py:1346 msgid "promocode does not exist" msgstr "Promo kód neexistuje" -#: core/models.py:1305 +#: core/models.py:1352 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:1324 +#: core/models.py:1371 msgid "address does not exist" msgstr "Adresa neexistuje" -#: core/models.py:1345 core/models.py:1414 +#: core/models.py:1392 core/models.py:1461 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:1348 core/models.py:1410 +#: core/models.py:1395 core/models.py:1457 msgid "invalid force value" msgstr "Neplatná hodnota síly" -#: core/models.py:1354 core/models.py:1417 +#: core/models.py:1401 core/models.py:1464 msgid "you cannot purchase an empty order!" msgstr "Nelze zakoupit prázdnou objednávku!" -#: core/models.py:1373 +#: core/models.py:1420 msgid "you cannot buy an order without a user" msgstr "Bez uživatele nelze objednávku zakoupit!" -#: core/models.py:1387 +#: core/models.py:1434 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:1392 +#: core/models.py:1439 msgid "insufficient funds to complete the order" msgstr "Nedostatek finančních prostředků na dokončení objednávky" -#: core/models.py:1426 +#: core/models.py:1473 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2256,14 +2256,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:1435 +#: core/models.py:1482 #, 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:1533 +#: core/models.py:1591 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2285,108 +2285,108 @@ msgstr "" "produktů. Model se integruje s modely objednávek a produktů a ukládá na ně " "odkaz." -#: core/models.py:1548 +#: core/models.py:1606 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:1549 +#: core/models.py:1607 msgid "purchase price at order time" msgstr "Nákupní cena v době objednávky" -#: core/models.py:1554 +#: core/models.py:1612 msgid "internal comments for admins about this ordered product" msgstr "Interní komentáře pro administrátory k tomuto objednanému produktu" -#: core/models.py:1555 +#: core/models.py:1613 msgid "internal comments" msgstr "Interní připomínky" -#: core/models.py:1561 +#: core/models.py:1619 msgid "user notifications" msgstr "Oznámení uživatele" -#: core/models.py:1566 +#: core/models.py:1624 msgid "json representation of this item's attributes" msgstr "JSON reprezentace atributů této položky" -#: core/models.py:1567 +#: core/models.py:1625 msgid "ordered product attributes" msgstr "Objednané atributy produktu" -#: core/models.py:1572 +#: core/models.py:1630 msgid "reference to the parent order that contains this product" msgstr "Odkaz na nadřazenou objednávku, která obsahuje tento produkt" -#: core/models.py:1573 +#: core/models.py:1631 msgid "parent order" msgstr "Objednávka rodičů" -#: core/models.py:1582 +#: core/models.py:1640 msgid "the specific product associated with this order line" msgstr "Konkrétní produkt spojený s touto objednávkou" -#: core/models.py:1589 +#: core/models.py:1647 msgid "quantity of this specific product in the order" msgstr "Množství tohoto konkrétního produktu v objednávce" -#: core/models.py:1590 +#: core/models.py:1648 msgid "product quantity" msgstr "Množství produktu" -#: core/models.py:1597 +#: core/models.py:1655 msgid "current status of this product in the order" msgstr "Aktuální stav tohoto produktu v objednávce" -#: core/models.py:1598 +#: core/models.py:1656 msgid "product line status" msgstr "Stav produktové řady" -#: core/models.py:1661 +#: core/models.py:1719 msgid "order product must have an order" msgstr "Orderproduct musí mít přiřazenou objednávku!" -#: core/models.py:1663 +#: core/models.py:1721 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Špatně zadaná akce pro zpětnou vazbu: {action}!" -#: core/models.py:1677 +#: core/models.py:1735 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:1683 +#: core/models.py:1741 msgid "name" msgstr "Název" -#: core/models.py:1684 +#: core/models.py:1742 msgid "URL of the integration" msgstr "Adresa URL integrace" -#: core/models.py:1685 +#: core/models.py:1743 msgid "authentication credentials" msgstr "Ověřovací pověření" -#: core/models.py:1699 +#: core/models.py:1765 msgid "you can only have one default CRM provider" msgstr "Můžete mít pouze jednoho výchozího poskytovatele CRM" -#: core/models.py:1703 +#: core/models.py:1775 msgid "CRM" msgstr "CRM" -#: core/models.py:1704 +#: core/models.py:1776 msgid "CRMs" msgstr "CRM" -#: core/models.py:1716 +#: core/models.py:1788 msgid "order CRM link" msgstr "Odkaz na CRM objednávky" -#: core/models.py:1717 +#: core/models.py:1789 msgid "orders CRM links" msgstr "Odkazy CRM objednávek" -#: core/models.py:1722 +#: core/models.py:1794 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2402,19 +2402,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:1736 +#: core/models.py:1808 msgid "download" msgstr "Stáhnout" -#: core/models.py:1737 +#: core/models.py:1809 msgid "downloads" msgstr "Ke stažení na" -#: core/models.py:1745 -msgid "you can not download a digital asset for a non-finished order" -msgstr "Digitální aktivum pro nedokončenou objednávku nelze stáhnout." - -#: core/models.py:1754 +#: core/models.py:1823 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2428,30 +2424,30 @@ 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:1766 +#: core/models.py:1835 msgid "user-provided comments about their experience with the product" msgstr "Komentáře uživatelů o jejich zkušenostech s produktem" -#: core/models.py:1767 +#: core/models.py:1836 msgid "feedback comments" msgstr "Zpětná vazba" -#: core/models.py:1774 +#: core/models.py:1843 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:1775 +#: core/models.py:1844 msgid "related order product" msgstr "Související objednávka produktu" -#: core/models.py:1780 +#: core/models.py:1849 msgid "user-assigned rating for the product" msgstr "Hodnocení produktu přidělené uživatelem" -#: core/models.py:1781 +#: core/models.py:1850 msgid "product rating" msgstr "Hodnocení produktu" @@ -2656,11 +2652,11 @@ msgstr "" "všechna práva\n" " vyhrazeno" -#: core/utils/caching.py:41 +#: core/utils/caching.py:48 msgid "both data and timeout are required" msgstr "Jsou vyžadována data i časový limit" -#: core/utils/caching.py:43 +#: core/utils/caching.py:50 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." @@ -2692,25 +2688,337 @@ msgstr "K provedení této akce nemáte oprávnění." msgid "NOMINATIM_URL must be configured." msgstr "Parametr NOMINATIM_URL musí být nakonfigurován!" -#: core/validators.py:16 +#: core/validators.py:14 #, 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/validators.py:22 -msgid "invalid phone number format" -msgstr "Nesprávný formát telefonního čísla" +#: core/views.py:72 +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 "" +"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:489 +#: core/views.py:87 +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 "" +"Zpracovává odpověď podrobného zobrazení pro mapu webu. Tato funkce zpracuje " +"požadavek, načte příslušnou podrobnou odpověď mapy stránek a nastaví " +"hlavičku Content-Type pro XML." + +#: core/views.py:116 +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 +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 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +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 +msgid "Handles `contact us` form submissions." +msgstr "Zpracovává odeslání formuláře `contact us`." + +#: core/views.py:215 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +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 +msgid "Handles global search queries." +msgstr "Zpracovává globální vyhledávací dotazy." + +#: core/views.py:270 +msgid "Handles the logic of buying as a business without registration." +msgstr "Řeší logiku nákupu jako firmy bez registrace." + +#: core/views.py:312 msgid "you can only download the digital asset once" msgstr "Digitální aktivum můžete stáhnout pouze jednou" -#: core/views.py:547 +#: core/views.py:315 +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:353 +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." +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:365 msgid "favicon not found" msgstr "favicon nebyl nalezen" -#: core/viewsets.py:1357 +#: core/views.py:370 +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." +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:382 +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 "" +"Přesměruje požadavek na indexovou stránku správce. Funkce zpracovává " +"příchozí požadavky HTTP a přesměrovává je na indexovou stránku " +"administrátorského rozhraní Django. Pro zpracování přesměrování HTTP používá" +" funkci `redirect` Djanga." + +#: core/viewsets.py:128 +msgid "" +"Defines a viewset for managing Evibes-related operations. The EvibesViewSet " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" +"Definuje sadu pohledů pro správu operací souvisejících s Evibes. Třída " +"EvibesViewSet dědí z ModelViewSet a poskytuje funkce pro zpracování akcí a " +"operací s entitami Evibes. Zahrnuje podporu dynamických tříd serializátorů " +"na základě aktuální akce, přizpůsobitelných oprávnění a formátů " +"vykreslování." + +#: core/viewsets.py:147 +msgid "" +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." +msgstr "" +"Představuje sadu pohledů pro správu objektů AttributeGroup. Zpracovává " +"operace související s AttributeGroup, včetně filtrování, serializace a " +"načítání dat. Tato třída je součástí vrstvy API aplikace a poskytuje " +"standardizovaný způsob zpracování požadavků a odpovědí pro data " +"AttributeGroup." + +#: core/viewsets.py:166 +msgid "" +"Handles operations related to Attribute objects within the application. " +"Provides a set of API endpoints to interact with Attribute data. This class " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"Zpracovává operace související s objekty atributů v rámci aplikace. " +"Poskytuje sadu koncových bodů API pro interakci s daty atributů. Tato třída " +"spravuje dotazování, filtrování a serializaci objektů Attribute a umožňuje " +"dynamickou kontrolu nad vrácenými daty, například filtrování podle " +"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:185 +msgid "" +"A viewset for managing AttributeValue objects. This viewset provides " +"functionality for listing, retrieving, creating, updating, and deleting " +"AttributeValue objects. It integrates with Django REST Framework's viewset " +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." +msgstr "" +"Sada pohledů pro správu objektů AttributeValue. Tato sada pohledů poskytuje " +"funkce pro výpis, načítání, vytváření, aktualizaci a mazání objektů " +"AttributeValue. Integruje se s mechanismy viewsetu frameworku Django REST a " +"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:204 +msgid "" +"Manages views for Category-related operations. The CategoryViewSet class is " +"responsible for handling operations related to the Category model in the " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" +"Spravuje zobrazení pro operace související s kategorií. Třída " +"CategoryViewSet je zodpovědná za zpracování operací souvisejících s modelem " +"Category v systému. Podporuje načítání, filtrování a serializaci dat " +"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:315 +msgid "" +"Represents a viewset for managing Brand instances. This class provides " +"functionality for querying, filtering, and serializing Brand objects. It " +"uses Django's ViewSet framework to simplify the implementation of API " +"endpoints for Brand objects." +msgstr "" +"Představuje sadu pohledů pro správu instancí značky. Tato třída poskytuje " +"funkce pro dotazování, filtrování a serializaci objektů značky. Používá " +"rámec ViewSet Djanga pro zjednodušení implementace koncových bodů API pro " +"objekty Brand." + +#: core/viewsets.py:427 +msgid "" +"Manages operations related to the `Product` model in the system. This class " +"provides a viewset for managing products, including their filtering, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" +"Spravuje operace související s modelem `Product` v systému. Tato třída " +"poskytuje sadu pohledů pro správu produktů, včetně jejich filtrování, " +"serializace a operací s konkrétními instancemi. Rozšiřuje se z " +"`EvibesViewSet`, aby využívala společné funkce, a integruje se s rámcem " +"Django REST pro operace RESTful API. Obsahuje metody pro načítání " +"podrobností o produktu, uplatňování oprávnění a přístup k související zpětné" +" vazbě produktu." + +#: core/viewsets.py:547 +msgid "" +"Represents a viewset for managing Vendor objects. This viewset allows " +"fetching, filtering, and serializing Vendor data. It defines the queryset, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" +"Představuje sadu pohledů pro správu objektů prodejce. Tato sada pohledů " +"umožňuje načítání, filtrování a serializaci dat prodejce. Definuje sadu " +"dotazů, konfigurace filtrů a třídy serializátorů používané pro zpracování " +"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:567 +msgid "" +"Representation of a view set handling Feedback objects. This class manages " +"operations related to Feedback objects, including listing, filtering, and " +"retrieving details. The purpose of this view set is to provide different " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"use of Django's filtering system for querying data." +msgstr "" +"Reprezentace sady zobrazení, která zpracovává objekty zpětné vazby. Tato " +"třída spravuje operace související s objekty zpětné vazby, včetně výpisu, " +"filtrování a načítání podrobností. Účelem této sady zobrazení je poskytnout " +"různé serializátory pro různé akce a implementovat manipulaci s přístupnými " +"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:593 +msgid "" +"ViewSet for managing orders and related operations. This class provides " +"functionality to retrieve, modify, and manage order objects. It includes " +"various endpoints for handling order operations such as adding or removing " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " +"enforces permissions accordingly while interacting with order data." +msgstr "" +"ViewSet pro správu objednávek a souvisejících operací. Tato třída poskytuje " +"funkce pro načítání, úpravu a správu objektů objednávek. Obsahuje různé " +"koncové body pro zpracování operací s objednávkami, jako je přidávání nebo " +"odebírání produktů, provádění nákupů pro registrované i neregistrované " +"uživatele a načítání nevyřízených objednávek aktuálního ověřeného uživatele." +" 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:782 +msgid "" +"Provides a viewset for managing OrderProduct entities. This viewset enables " +"CRUD operations and custom actions specific to the OrderProduct model. It " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " +"feedback on OrderProduct instances" +msgstr "" +"Poskytuje sadu pohledů pro správu entit OrderProduct. Tato sada pohledů " +"umožňuje operace CRUD a vlastní akce specifické pro model OrderProduct. " +"Zahrnuje filtrování, kontroly oprávnění a přepínání serializátoru na základě" +" požadované akce. Kromě toho poskytuje podrobnou akci pro zpracování zpětné " +"vazby na instance OrderProduct" + +#: core/viewsets.py:833 +msgid "Manages operations related to Product images in the application. " +msgstr "Spravuje operace související s obrázky produktů v aplikaci." + +#: core/viewsets.py:845 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +msgstr "" +"Spravuje načítání a zpracování instancí PromoCode prostřednictvím různých " +"akcí API." + +#: core/viewsets.py:866 +msgid "Represents a view set for managing promotions. " +msgstr "Představuje sadu zobrazení pro správu povýšení." + +#: core/viewsets.py:878 +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:892 +msgid "" +"ViewSet for managing Wishlist operations. The WishlistViewSet provides " +"endpoints for interacting with a user's wish list, allowing for the " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " +"actions for wishlist products. Permission checks are integrated to ensure " +"that users can only manage their own wishlists unless explicit permissions " +"are granted." +msgstr "" +"ViewSet pro správu operací seznamu přání. Sada WishlistViewSet poskytuje " +"koncové body pro interakci se seznamem přání uživatele a umožňuje načítat, " +"upravovat a přizpůsobovat produkty v seznamu přání. Tato sada ViewSet " +"usnadňuje funkce, jako je přidávání, odebírání a hromadné akce pro produkty " +"seznamu přání. Jsou integrovány kontroly oprávnění, které zajišťují, že " +"uživatelé mohou spravovat pouze své vlastní seznamy přání, pokud jim nejsou " +"udělena výslovná oprávnění." + +#: core/viewsets.py:1007 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" +"Tato třída poskytuje funkce sady pohledů pro správu objektů `Address`. Třída" +" AddressViewSet umožňuje operace CRUD, filtrování a vlastní akce související" +" s entitami adres. Obsahuje specializované chování pro různé metody HTTP, " +"přepisování serializátoru a zpracování oprávnění na základě kontextu " +"požadavku." + +#: core/viewsets.py:1074 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Chyba v zeměpisném kódování: {e}" + +#: core/viewsets.py:1081 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" +"Zpracovává operace související se značkami produktů v rámci aplikace. Tato " +"třída poskytuje funkce pro načítání, filtrování a serializaci objektů " +"Product Tag. Podporuje flexibilní filtrování podle konkrétních atributů " +"pomocí zadaného filtru backend a dynamicky používá různé serializátory podle" +" prováděné akce." diff --git a/core/locale/da_DK/LC_MESSAGES/django.mo b/core/locale/da_DK/LC_MESSAGES/django.mo index ac285fa3c749855353c03adf87d0e6a48a281ab9..c621057ffc62169c101fa04ea25e63a7a615dbc8 100644 GIT binary patch delta 26696 zcmbuG2b`3}{r{g+ihu$tAe{w7K<`eFt|Cu6n)EJFjPa}$r zC>nb?3sGaqsfiekHL>?ZW9&xM#NhA!nVIL=-2)T1B}d0t<*a2Lsg>Un`zNv1m$li)>g5o`xPgu3x_IGK*W zgX(zV7|$CBXTYJb4)%uU!@HTpO>hF`_;}myI!KjwhvWN>{kW+c{d)_@?4gEW9G(aJ z!_VP~bli1c&pQ;JyPxNcqyDx1J#Q}THqrAoLm%D&k2=8fI&oj;Nlb=v@5y#TM?gv7 zQ@AtyC+rE^P4T=Q^zRKI(*cf!n(<_~8$1|FlvPjOkAxsu`9i!-3p)7Sup)f$QL%Fla~Su$kx_E`mG41eDHK!nrhf7L@2;JIM3i zgnxxMQ2*F0&nt(SgFWv^M1T1qp7#pZzd6kF8mWJN4l07P=6T+1c-(x?TM8doz(lye z`y%9jDHThWc-~#`^QE5mBn@151ja}?d!*-m3C}yq^Y*6x)MFs!X7~l=caQbFBPjoQ z8J*DJ$mJLw<)2jB0q$Jmc@5OxU+a1IQeVEp^G<{B)iWTTUy(xo(&^nPtDBFZtoC~- z$!wqYykW2-l;}o5)sJ`ONszw0=}<;`1METh!;HPZtih_F9h7Rj!WQo91Gi^jZwAMC zUIiE4&3WE%xO3hb<9=`?<>hb$ya-AKkHMkvX*d{ehI+1dBeR3kp{^eXReveOe!Ujh z8*YL9V6T;y!8kIyaSY9VXGM&tb@D2Ti{;u|A)!Q_&$Q2p|{4~&;|a4;vhH#UJ2z5kHVecCfFUm1l8at zQ0`TBydB7{unXmWum`MwUEy@N8(d_rqyLnl#z{rn(6*f4a|lT zc?!xFj)xNYsjw3~2WkM9y6cZZP2?%40lnnvKY&v4=P;1S+ns1d*d40FVX!wG3)SH~ zSAPtQQBFb);2bEg_$Aa#*Fkl34U}q{q1t-_s-3?;b^IRGbKjnb{`KG%Dm3$UCt3D{ zx^Yh^-A{tjoe!mom9Q5))A3rUjvs`wg{Ps~eH)g;ze9}8gj?CdRK%|G;Q^WPWKM$< z;Db;D`Npy1Pi@D2q3SE31~3U~01F&bPy;v}N>!IY4dgy36+H!|iod|A@EvGuCpg)P zW+{~W`A{9KgPQSeP@;Yq8c{;&`Y&)Gd>86^+f%F&c82P3G8_bF!^toOHNab;Ch{QM z0|w8Kk+FU4E^L8nuo9_7H)u-K;1v_XIAGk;AqN6L0S6+P!hfb z?gyWNBjJvx85ITI0c3_zF#~Ew8K{w60M*e(D1ZG7N~Amd+}cJT7^6G_%2?+?%`6EI zg(pE`miI@Pg40g71G)ps=dGG+Z4t9XAK&kRQxC{MzUyvCK+n#CHg8ktr$}8aZ@Jcug z{tD{BCt)A>vMYZD`%~WjEGzm!P?A~#hr$((7eYz+KF8N!5TjxXnSOA<*>@NfIZ>sa3{Fg)wem!_?R}R}!J`#3@aj5

    s$hLX%FP?9*`)n5fQgJ#$jKJ2bP z3)R6}?)pdW`nOQ+cf80(&RrqT1zrUi`S$@(Mz$EL;ZtBocplVZav4;^w?m2c0Vo@J z9_|c3g1UbT>;OAlY@gc|YT(16u8)T!;4~PM|L4gJqvB#H9X$xu;MY)I(BYSMk2f6d zN%>qT8~6>>jQ$LD|C_K9eh$aN*d=rVmq4|<4$3QDfU=psYZ)N@dxObn#1o)8oCc+{ zD#xG0A(U@$NK<|rt)OGDka7VZOEpxW6C$HQS)*!uVt z$X^u~QK1{2a{L}jlq0XSi^ejj>z6}`@M$;&_PENHm%_=EuXcPJPNY2OYFobyN>c0L zVEAV!iT>;Az*=`~y%l*Slr_(TN5SP##`6%|6+R8+E$={i#RpIgZidon?_b$9U?7}I zc^*{#MULyBRP-yT_HGHtsKZB~jOjVJGkg^)aC{7V!2du=q}w&t->1P%l#hd_!u_wc zs(2XgNBILd8ScKp-tR-{yb10BABHme;C(WBpzC#3M2Em3luw4z;q|Z|d=5(2pTSA6 z=k+!~Ern|MT(~>DAMOv|f|_Z+Ut5U{gL2z@s4wnBfB-4kA)lhza5mblk;ok5e zDDU_b%2vLGYIvU;tp87hvnVfy!{OCX6W9bbfzRL`u+NQFqElfT%JX4`{C^3VU8pz> zY9MQ&W^xzQgD=Aapm&p<$t2j3;(@RooC|xxC9o50fZgEEBy$vt5@@fzv5p3wMBjhcdn|;2>Cbi#3|vVF$|NVFjEDrNRa{1>Ov&!cSm19C@pi z#4&I<g(ab@Jgsi_aRhA1MjdM z9R`O|UIW$PdRPA>lxjD_sxplEPUJ7^Ufpcpk1{gU^p51;|O>loDJWkqx0dhlpB7}J3ZxRUfwGAw zVH>ywVz1uzPulCZL#gmSxFdYdmEVNtm!bc!$+YLf8BY<9;rZ|tIy&oVBm!%m;T#Cj zuYZ=;GOl-ffj3<0cY2Wl!|VUdJ@Dhd5QN~um#OFecV8ihQ6B!f=lveu^agc2pL>hR zQeN^l-m@M0KjR&%(|g|Ig@6lR!p?Btzu5+6y^oF1;FBM)08u~YAD;IQ_}oXh67>&$ zVmmnKb31^pUver!M_2vRM#zt#jB(IcR&t{qCqd)?v&ppOhBeUW1WJ@YhfCmDu$~Uz zh21I7`PyFhVJFHfU{|;jzRP{5LrI|iTN`-p_%}1=`rD4Xd}obx8VoAAa6Flg@CG;% z-UUa)zrmrf&ws2HPlM%@S3x~@EtJhX5BtGhTP(-HVU!m^wRaNSAKvb+f9%-ld-Ok> z3&X#+HjsziD4zgjEEmAt;FVBTd=K>DL+}VV#49tq+MmM3l%Io=#PG5*<97SPzLe9j z3p@*|{dMphczan;X58g~?aGV_eAt-_^-vNy9-6fQ%AeOl4dgbc`!+(Uf80c8V2q1v4QC86m7nciela0omD?gej!8&V?HJ5l{n5 zLN&P7@fs)z-3s;GBTy>a1f`01pzi+?s+}!R{dH|uCKU%>IhmcPm;fb#nNTxHL5$eT zL5X@L)QnDpx_=$iOmBc1z=Kc?KMVEz$53AMB~-`XKn^{a1i}_dy~0>6SI;8fzb zI?BPl;R$dLcr)A+J`bnBEuHayjbw5cEAqn~8=!P~I@I;+93O(qD8B@2;DoMaX1Tr^ zYM@)7B++hXtBT%G)}MeHP#(&NPlOssQ$S`UnFpa}^chqGUqg+s(=PVLLt#1P)lk;oDIC1rxhjkxhrvRU=d^51<;l0uF*V z!O8Gxr~!28Zl4`dz&*Frt_7}Nm%2sMG%q1^gYDDV0nDuQBd#qDOygTYaFsWC&E8sOXRXYowE@kf`QB>FiinUIlgibf|&-63QsAclCEe8RMf+ z#`_YK1m1z_;6G3U={mp~X(d!Y%b+CNFaZCTpPxvD8onG#R5wET>C;fEc@Ju4o1q>o zi`lr)8S45_r~yoX((yE?b~A8ycrKJXH@oszP#crp!N4*vL1rA>1Fna9;15uu`WR}& zUqRf(YdfgSn*;ZO2fndJ%{MNDi z?ly3Ygaf&81(bx&hE?z~xD;-I8qks<)&{PJdsF@nYC`3El$n>*1yBPz8EPVHApt4y z9?A0gxE99X ztx!h%C-^h?mdf<+`IXj+SHiZG&xE@1d??YchYBz)a46gaYvC7A?sdf8_WH3tMj8_1?6)fy7lgdvieV;;>L(kHeMv*2+9|a!v6=6d7KJ0^mjN54jgSmWWD2M zP$GQ-9s)mwa>M<{Sc%PoS_|etS^1Gr*1ZbK|1W`xBX_&&k3tRTtucWWP2aKBjfOz! ztPaXrvrtC$3pg6S3@c&hake}W%3ZTiqP_%5RX0OPq8Tb6y$v}zExZS1#GUrF z?H&R3d{9G1F@6oyNPh(-+TTLyXcN@C+rOa#&iMVTt(**X{dZ8$e+ea_zWZBmmD6@&GNS-@;`oOP^lR3Pts)acd3%!lNR1%)Md#3m2@HL zWXhV=4m8}2d?V?nB%-i6a^C@7L3)n#Gt%F=SHFYF{|-K7N=#qBO4l3z?Zhy3lNUy`1o{2*yQNx$E~PNX+U2QVn9>OK+xkNjLMK z&I9MTi$r1XE7HBBjodJlYah64@`O>8-+}t|AwQh-G5KA&XEW(AcdxGZ=i1Fso0ns# zzmGJ5x~{s&4^0K$BV@iKeayw)q$Q;OB>fa7<%aSMT-Mu}ho_KEb=Rr(I+CA6-5gif z0u>!!B9&9G-&FWE^$SVFH1lgR|1$r}T*deBx1>F}@Bo}^@6)lb_bugG(goyakXlHc zDQn@mhxBLCCd&G)B)w0bcbDil*X56oYV3)~PXaDXq4Gv3f7EXUc~({L0#cgt2saB| z`+_?Co`gfF{}sHK@*wg%k=l`ZP`8)zFa~?VW>WaOk__R%{EYtBx+^*~N^{{{${#_w z)kE+xxC4pxCi=A{KaTtLV;S(W?%K7KyO8=(e#F&XPx&SClexcv`~XslglC)nP2iy% z{VKU}7asV`)hH6)7F}gYbqzlS_jiN%HP^L9B-}OK-i!P-Fh*KS{-31Pq~BA1f^?w# z|41qhBHcp8Lekfy{b+P=sNYRo3x6+=nMG27+D-S6&gS}wq%P#wK{im{J)~{@&Y*HB z*IprgM_Og)PrRqF59v5=$iwjW2APv6`|xOZhr4hZ`SZ!&0{>0gLVh+R3VUynw9elT z^_xt3QyKT$iTdTF6G*{X{F5W;H;fs)OMW-<(@AZ}KLal!>G!mS`P014+&jfR_cVN; zYoCywb#+&{d*?fL;C>cA^Q++B`$@l1{MnZa%P7>7^lMM~Hf~%){%+FQq(6{8B(?ta z5J8P9*)VAk8EFfonIA zE+Kz29PRG?lCl=63}w0VtK_TQHL~7l*Ulp9E>i_R{q5gBpgI3FHC${@nndAk(h=mt z-*MzGrf?!@82P`FUMKD88ty>-!KD9?{z3gncq-{m^5JhYnFC2DlYT+^+Fc78$XrO; znRL3VoXQRQjUxS&w1m`1(l1ULzZ}-zjrqcf-h5d4e4-FAJU7YFGJ|aEnZs^9v*U1C(dx8g^bNNHbzeWBb(x;?yl72t8Fy}(b zKFWP3!Rz66uAzUCf1VWn&Xd9Xne;o-P|`PCIfb-7yu&fcwKnAUg&jz{kp|G{pP+u@ zExhX-Lmc9+|AmU5kp4!wXE-a$K{NkMBZ%L1nR**K3!rv(F>rPu+p!)^hFDTsZDt6@J-^u@xtN$kTC%sm< z*^9gUrErX!MK{;dpWsO9j)Vi8`#l+?6(iUHC`88QieJ z-Bb_vpe{$c&egT$zB9?sfK%Zeq(`}aH0c!bRq!b2lP)LCV|Z;k_r4L{&$V;Oe?zKv zH+)KdU-|#@u3~>G+Hm8C@N?=a;0bUXX$X1!9ww#8_f%n+zdBx(A0C^V%~Us5GqL#xE?5|wk&UPPRhex4&~O+*K9=&U>f-4{E|rU^kH#EN#v2;4 znTBkFW@0%XCKJc|*_@eXb)u%m&-&?n41pvvX(l!!k<4=!1FMQR#FrWc?WJ ztV~q<)v?s4sp~mvOGi2W>T?3Gl(#}L9=zk<8otKvuXP6 z>`npVs7`7&Zh}TGh0bD`wCgH{6wFjBV@C2-$;N6%pKEMr$YiZiRIf?LQ;Dh~DcXT? z+wyo$lSmtpR5fNpnT}yb<*};9Tt1UZ93NkvM2dbkmB{5Z)p9c$?ya^GM?k4K*45l; zL`9oGBd6(QRhe|2(WA{}Qd){JEe~6$^bT^jRmH0iThYvNja7BAcn)KXR~rE!BFx*^ zoV^)yj9bHs$8rsRRiY-rB`T!k@7Q*`9c@9$;|S2l1AcLnm(?PLHoJF<)Xer zt>!ZY^A3H-^q8=c!ZwqMDx>#GxueWW79%$dGBvR&b7!HK>V^!Skc-ipJR&P$7=MVI zGp4Cj#*9x|TQLqyTN>pWre7Yb2@TsyJ#+=rc}#tUp6&)3NIl79W|f2&s$ROtW|FbY zN@v1cH1#kwow`nQO%25-EgI zlL)9vq^(I{EZo~F(X(d6|2LITi`G>dwmPl6-6ePJh#Pjg+k_H1Q*tV!xTN7WIzyf8h zIIh1um&p5-9gXf>%u7p*eyYKG3qn}wo56-pB1Auy%;0jyy6i;q_&`;xI+0~*%VgK6 zdG*E|0f+!s?gKC@wapvHN&BcF@9wb7P}NjE?!)ELOwyY&@Z;Xxz41Zf?ht z^>dlVY?ZHD8q@KWSib^eVdCoCdWC#I%QDi*H4rcn0ZkJhn0PAQ;5yOTO@uO^&C zFuVTG4?U#Sm@})=$&8J* zMn%<$+C-j+$>K#om_bWvoM#{P>2vHwVgrHyS{k(q3~7TIk>lckE375o?l zF8%+|U@}vSRUwDvjS9e8isIz)2^^!T%Z1(f6Q*$SDpHpbt;$ZvxLdWq+IW!-vow>I z>?3`dDC4JdjTnhjyfYR&%&y{UuUPX6Ry)+ukKL-F`rK*TD=c4OY%@!jwbr7}ieqXb zoy*75L?SDr)z~rXkJ&ygE7@T!lb5nxj1iJjv=F)!ajRY4><2EK-#sYaf7XQiPopqx zNoyLDX2C9ugF_*2jN%5*645{JvqQ>{DwI0}j z=-R4`G$2{K#Y;{|9FBH_m?cU`Wu~D3)aayyHtoiCWjve6uoi3o;Wmym+x+C{!^;Az zUGuVFW-|?st|e^#;8r%gA>6CF&8&82#!l^;h+GPzi#EgD6D>iS&a`-7d$Xn!TA*8t zv~!J?+aI}XD=cgH(H6>&_UrLvF2nWzjyIy>EH4-4 z#e;RX3P+7sNonCSUe(-ZY@f0K(T6)dBgfV+U2_x`xyhJDVP9VI%H^lEXyjtk<}aFF z>}yi9-EW7Qi#pe+CB&vdb9V`hM??Xl$h!)L7h~0^s&~8e(CG;NIX0hFb&6>vI}5ko zFnwz>m9Z(+)x1(<(%PVu#}fI%D@r^l?EBn~M4k~@K*6%pu@Y%Sw(8AmjO&eMjW^%7 z0Y40WW>*-_HD1jY!^O}B;*yq3R?)`5ydtG-k0zA4&4^jX!_9~byG8A%!iHTe2-{~{ zUK7`vZlbmA32QWOp!QbYQ`dXv;({DLHzrFESEYS;4`aE{U=dZbM_XAwwuN z+bC99vw_hDfIJpRn8Nr2Ez{x4cfq!7fGk{b!N=%9?*)DeDTJ)}qH_t(O8#E)}oGDzqZdWTe1I0x=tLjPk-)EE_?Z4;VLa*Pt+InRRrU z!rW6C_m*GK>JOd~M6YBs3Cj(Iw~B)pp?p77W~nZDDzIlZ=CNW`M&svAjki}Fg%mBK zg|&h?Z}mor_8Q`x1Q@lN?L_$Mie+n|NXFL?93;Gkpb+4+v{c8l)g~^kim!1dV4`9x zH?zAIYXYsNZbtJXBsMjx{u7>xZ4~Q%^^4BSIgW@-N8AWL~KVoi+*}U*vG_aE8z`Us=I&JlF+N~!TIDN~bT}xKQ z%&*$FM^zfT5fR=Rw!n@kU6ZJ7bf;5xyA>J_`ZlY%brtifV_dP=xt$BM;A|^6M4N#q zGO+W_b7qs`)XFR+#!|Ry2OaG)2#Dq_N`Bn>G|rw7M*1-Uw0ZIDv7Oq_HzyUjrXA|~ zA7xCHDYLn(%5Y*O^E2lQMW+sWRA(DDT44ViIuhz}J^M=NUPA5We)fVnhdK2$ow?}2 zpeX#>pof^E_1>P*u{5%TnJ^LsiDfLCjE2*$B31iZOjR3NpB3B>>;jDP*eU58(`u~M zmY^u~$8EbmbpEGvF~tdVvD~lY1w6CW*{NBu+y=K0Sp2EjDrY)booU%Y6m2b{h`p^X zglsPFug+IC&0M@s5YD(Hk}gT)>a;Kw#XxId;f3(2Nb-eqG&K|+q{$u3Sz27dK1(QD zMayQ*W6V1K3UrGek#|HPvRoTbPN~>FvJ4f=*o9PC2z_e{S90tWHE%;xEF34h2c0#u z8^w!@je~b!cc_M@j6Sn|iX}AE?DEEBeYDlnIMss@P1rq0i_w{@+tZoz?C5yiIBxNN zR-&-`*G#$tTU)z(XbNh(Pj5`K^5kOvYMoqaOBXfGGR7e}=k@501EpwU3@Ng0^TMBN z+HzR0Hu4Sv^T4B=OnoO(c8ZGOwo7|LP;dl-RkUXfUs6gH8yS}As_EsKeF6p$iY!t| zd3g3E?XqLxyMaCyNPbzr7Q^DR02^6U=O>e5W4fr`$j6S;jb6>jK%%p6UIw&t$3Aq3 z<7_KB!PExdZI?nhaZ4_iYE0%6Y;&UJd8_lg!g-DMOaZWYlZXr;x%G$o*De<~@pY;c`a_M^9NCOg@os*+?nLz8jmc=iA7zNVINjS@Z6hUBt}Qa2so+@-|zfd7A?lK;lYiQY+t;H2e2Uk2SyA@E|vRQOt-W@W_ zIs29a#uDaCDp7A1IzP>_l}IjMBVqE0@n$yv6}e<%zCp%Jy=})hm(F8xM>$v6vfXu} z`m`Ujb{2&Ko>f?}gC3_*+g+%27EKxjXg4BQaYgPOMU1AiZ|~Q%*TxQkloWld!rqyp zzET<6*C1%yYC~^Dt_#0L6L1o*$M9-=eGZPvt~j0`+$e|{+vKxVa)oWpUe(ak^?b>a zYbDnNM#DT6uc>Rf4kN4O2%Oi`G#dvsf+&ma<%d-=xA+6rR@x{Lq%0X3nxN9O_O`C0 zT!3^lv~e*KpT|!e4r+X6@(*4D-unpP~_9p_3=J@?v|*+?^7tt z#mCT#OX8tZr1=uBEuic#bmTCISeI?AuEB=Qht`6jZ$nyvv*4smPWr`i?OVF9Z-j+s z3mPDbr_8R_eIsYg=1Wy%U3{z>DuEIJanstC4JOX(dsRhIE4KAOi<#6NDcCg6sPvM+ zmWbVj{eD&1(JCzr{zfqJSRTfu^u+_8aW_{WR-X-~9FCPlHzl--G2Y46lK1O;LLoBX zgHQwKTL-Zcls+6w7)#dC6fv){I@z*OdksQM_|2-K#$RF9D-D3ZvA~Sj-Q;l@zS-zo z6-Q`lgU)g8TA8!YU`oUqaE8q&3tkbeNNm(JMH4T=4_B=upjQi>X%vf(NgMOcs#S)< z0;#QK_+g~N^_5feXl{NONNJ?_lU0TNWW^K|m+VKYf-!_U7`dj#Z@*X}1eWEMP4m9# z9`GO=pe!F6TaB41nK)~-w%pIJ@QG;E-0m7-2~#8J?}xQ#jI~5@(sr@Jg8!y5Eh!vd zr{y~T&kEBADwIlZQgwaHMmBe9keZc=Y&}_)=~%#@fu!A@*apcGtrx6aOL?Rl*;>8M z{7_63cZ~(0fC{P1uKu}1J&l^7tC9!wWL+jHb63X=gTvhw7gV3qC#zOpA)C&-d}FYU zkU(?Nxp@z&&-1rD3eH=vXvM+dhg*rhT2+{@Rz^*Q026C^{3A+!p)T4L%mDZQOo`88JSLxPP^t&cI~awyhB;aE+} zb<92&xWz$d^0=bWk9`d^v8&Z4xFR}2agr?h%vHR#(RZ#$Ya9gdQ7PI57#9vzkO^2A z-MWa<(<@CpMMvQ-P4-g5G83<^B@7wu74|2Ej{+De%Z1j(dSd$&o$>R^h9%K&v`Eub ztKI3`>}dDRtHORqK zc#oBX6^DE^Y(9a>{o-hzQzR3@>p66&W;Ze;e8J^YTVd5@)Zu1ITM)CE3hb`ftmT=a z?y7kiRyX$LyrQHxbBd?$Zft}kiLh5z>TvgIA1nU$RuS#H%;-aputXAgi50SR?fXuBiayU&3m#rpk$9$Ff$o* z=M(^G& zImME5>5nEk;J4asZhQ68Zu|{#v0k_3IQ8)qpLYosg-3Oah8TWC)QVnL&8NAd=^kXA zBTzfV8-UVqU;22FITYr+jSWSKS!m8Wcq!PTMy{}dC)Wg}FZ<@hUIm*}sn~69IFJZG z=_$%%RV^C`PTFa>O?**=Ft%ZK=n9;r!>=$eX(*ydkh6cZB+ciuqEJ;jC&p^d35!%7 zIm=dW!M3U56UVKhhg%RU`2LgfSGHW2tv9B@q}7Ao`inil#0{Bb(E4aZQfSp(WPm^3 zirlBL;t^Y?_E(_~;}p0#hsjMJU%i9b0~A8VR0#JRp-u-7EHCC< z$8BH3FN4PO>sI*Kg;qS4Klhc8xth1Bd`#a3ovSwuc({dg+oH)?uUcvU--~Eza=UW{ zu2zvV`Z`z?JW4+eMyIzwu=CMICvpbGW9C`d25q$qYPBfE%~wc&+h@3Dqh!zLFr+vq zH`itP%VmtdNbM`&Bl*{qTh76XG`HX?IupUgj6Y-O5<&?}%1U|NEFT+Ii$+QPbPyeVt17mm}CO z7Hq4Kqa@Fe%xQG2q3N^ld-0VV7i57Bci`@`ps})W-{OqJy!4g(q!R-;Wm_H4q!~Y3D-m8jP8G#aWBJ# z70qmlo6f$i@6fHpT|7#AuA?a0H09dv`U8qN(#X`(f)5;}T`)!5IJ`t(TX)pnm&`7U9C2!GmJbRm?yJfq}9y6787ZKhiP zClWHYck^+!hPQ3~0W4;x^DHzU8kxC;Z(5xCDr!Z(XaCm$t?_2NglQMO35B+0<9&Ea zYrd%%e|4{oMJnc?N$)JgNSuv$sp+$!#ZLJ2>klM!%23Rn-h4K&ALYzo&Fa+L>yaaO zYrf#6%leO>qZu%qdj7DLqqjIm8`!^I^0e@k9>7IkDLF%K-t+65I^5g0tn9Ql{|7Ne B@O}UQ delta 12273 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\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:11 +#: core/abstract.py:12 msgid "unique id" msgstr "Unikt ID" -#: core/abstract.py:12 +#: 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:19 +#: core/abstract.py:20 msgid "is active" msgstr "Er aktiv" -#: core/abstract.py:20 +#: core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" @@ -33,19 +33,19 @@ msgstr "" "Hvis det er sat til false, kan dette objekt ikke ses af brugere uden den " "nødvendige tilladelse." -#: core/abstract.py:22 core/choices.py:18 +#: core/abstract.py:23 core/choices.py:18 msgid "created" msgstr "Oprettet" -#: core/abstract.py:22 +#: 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:23 +#: core/abstract.py:24 msgid "modified" msgstr "Modificeret" -#: core/abstract.py:23 +#: core/abstract.py:24 msgid "when the object was last modified" msgstr "Hvornår objektet sidst blev redigeret" @@ -88,11 +88,11 @@ msgid "selected items have been deactivated." msgstr "Udvalgte varer er blevet deaktiveret!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 +#: core/graphene/object_types.py:616 core/models.py:701 core/models.py:709 msgid "attribute value" msgstr "Attributværdi" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 msgid "attribute values" msgstr "Attributværdier" @@ -104,7 +104,7 @@ msgstr "Billede" msgid "images" msgstr "Billeder" -#: core/admin.py:155 core/models.py:445 +#: core/admin.py:155 core/models.py:459 msgid "stock" msgstr "Lager" @@ -112,11 +112,11 @@ msgstr "Lager" msgid "stocks" msgstr "Aktier" -#: core/admin.py:166 core/models.py:1609 +#: core/admin.py:166 core/models.py:1667 msgid "order product" msgstr "Bestil produkt" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 msgid "order products" msgstr "Bestil produkter" @@ -734,7 +734,7 @@ msgstr "slette en ordre-produkt-relation" msgid "add or remove feedback on an order–product relation" msgstr "tilføje eller fjerne feedback på en ordre-produkt-relation" -#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 msgid "no search term provided." msgstr "Der er ikke angivet noget søgeord." @@ -787,7 +787,7 @@ msgid "Quantity" msgstr "Mængde" #: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:287 core/models.py:369 core/models.py:522 +#: core/models.py:301 core/models.py:383 core/models.py:536 msgid "Slug" msgstr "Snegl" @@ -803,7 +803,7 @@ msgstr "Inkluder underkategorier" msgid "Include personal ordered" msgstr "Inkluder personligt bestilte produkter" -#: core/filters.py:85 core/models.py:526 +#: core/filters.py:85 core/models.py:540 msgid "SKU" msgstr "VARENUMMER" @@ -877,7 +877,7 @@ msgstr "Cachelagrede data" msgid "camelized JSON data from the requested URL" msgstr "Cameliserede JSON-data fra den ønskede URL" -#: core/graphene/mutations.py:65 core/views.py:360 +#: core/graphene/mutations.py:65 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "Kun URL'er, der starter med http(s)://, er tilladt." @@ -908,7 +908,7 @@ 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:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:839 +#: core/graphene/mutations.py:527 core/viewsets.py:679 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Forkert type kom fra metoden order.buy(): {type(instance)!s}" @@ -984,9 +984,9 @@ msgstr "Ordreprodukt {order_product_uuid} ikke fundet!" msgid "original address string provided by the user" msgstr "Original adressestreng leveret af brugeren" -#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 -#: core/models.py:1234 core/models.py:1263 core/models.py:1288 -#: core/viewsets.py:842 +#: core/graphene/mutations.py:656 core/models.py:849 core/models.py:862 +#: core/models.py:1281 core/models.py:1310 core/models.py:1335 +#: core/viewsets.py:682 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} findes ikke: {uuid}!" @@ -1000,8 +1000,8 @@ msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - fungerer som en charme" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 -#: core/models.py:1686 +#: core/graphene/object_types.py:444 core/models.py:672 core/models.py:1144 +#: core/models.py:1744 msgid "attributes" msgstr "Egenskaber" @@ -1014,11 +1014,11 @@ 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:224 core/models.py:312 core/models.py:612 +#: core/graphene/object_types.py:224 core/models.py:326 core/models.py:626 msgid "categories" msgstr "Kategorier" -#: core/graphene/object_types.py:124 core/models.py:383 +#: core/graphene/object_types.py:124 core/models.py:397 msgid "brands" msgstr "Mærker" @@ -1027,7 +1027,7 @@ msgid "category image url" msgstr "Kategorier" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:249 +#: core/models.py:263 msgid "markup percentage" msgstr "Markup-procentdel" @@ -1052,7 +1052,7 @@ msgstr "Tags for denne kategori" msgid "products in this category" msgstr "Produkter i denne kategori" -#: core/graphene/object_types.py:351 core/models.py:155 +#: core/graphene/object_types.py:351 core/models.py:169 msgid "vendors" msgstr "Leverandører" @@ -1079,7 +1079,7 @@ msgid "represents feedback from a user." msgstr "Repræsenterer feedback fra en bruger." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1110 +#: core/models.py:1138 msgid "notifications" msgstr "Meddelelser" @@ -1087,7 +1087,7 @@ msgstr "Meddelelser" msgid "download url for this order product if applicable" msgstr "Download url for dette ordreprodukt, hvis det er relevant" -#: core/graphene/object_types.py:400 core/models.py:1791 +#: core/graphene/object_types.py:400 core/models.py:1860 msgid "feedback" msgstr "Feedback" @@ -1095,7 +1095,7 @@ msgstr "Feedback" msgid "a list of order products in this order" msgstr "En liste over bestillingsprodukter i denne ordre" -#: core/graphene/object_types.py:436 core/models.py:1080 +#: core/graphene/object_types.py:436 core/models.py:1108 msgid "billing address" msgstr "Faktureringsadresse" @@ -1123,7 +1123,7 @@ msgstr "Er alle produkterne i ordren digitale?" msgid "transactions for this order" msgstr "Transaktioner for denne ordre" -#: core/graphene/object_types.py:465 core/models.py:1144 +#: core/graphene/object_types.py:465 core/models.py:1172 msgid "orders" msgstr "Bestillinger" @@ -1135,15 +1135,15 @@ msgstr "Billed-URL" msgid "product's images" msgstr "Produktets billeder" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 +#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 msgid "category" msgstr "Kategori" -#: core/graphene/object_types.py:502 core/models.py:1792 +#: core/graphene/object_types.py:502 core/models.py:1861 msgid "feedbacks" msgstr "Tilbagemeldinger" -#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 +#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 msgid "brand" msgstr "Brand" @@ -1175,7 +1175,7 @@ msgstr "Antal tilbagemeldinger" msgid "only available for personal orders" msgstr "Produkter kun tilgængelige for personlige bestillinger" -#: core/graphene/object_types.py:534 core/models.py:536 +#: core/graphene/object_types.py:534 core/models.py:550 msgid "products" msgstr "Produkter" @@ -1187,15 +1187,15 @@ msgstr "Promokoder" msgid "products on sale" msgstr "Produkter til salg" -#: core/graphene/object_types.py:651 core/models.py:784 +#: core/graphene/object_types.py:651 core/models.py:798 msgid "promotions" msgstr "Kampagner" -#: core/graphene/object_types.py:655 core/models.py:154 +#: core/graphene/object_types.py:655 core/models.py:168 msgid "vendor" msgstr "Leverandør" -#: core/graphene/object_types.py:656 core/models.py:535 +#: core/graphene/object_types.py:656 core/models.py:549 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1203,11 +1203,11 @@ msgstr "Leverandør" msgid "product" msgstr "Produkt" -#: core/graphene/object_types.py:667 core/models.py:807 +#: core/graphene/object_types.py:667 core/models.py:821 msgid "wishlisted products" msgstr "Produkter på ønskelisten" -#: core/graphene/object_types.py:673 core/models.py:824 +#: core/graphene/object_types.py:673 core/models.py:838 msgid "wishlists" msgstr "Ønskelister" @@ -1215,7 +1215,7 @@ msgstr "Ønskelister" msgid "tagged products" msgstr "Mærkede produkter" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 +#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 msgid "product tags" msgstr "Produktmærker" @@ -1326,7 +1326,7 @@ msgstr "Overordnet attributgruppe" msgid "attribute group's name" msgstr "Attributgruppens navn" -#: core/models.py:100 core/models.py:620 +#: core/models.py:100 core/models.py:634 msgid "attribute group" msgstr "Attributgruppe" @@ -1375,7 +1375,7 @@ msgstr "Navn på denne leverandør" msgid "vendor name" msgstr "Leverandørens navn" -#: core/models.py:163 +#: core/models.py:177 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1390,27 +1390,27 @@ msgstr "" "operationer, der eksporteres gennem mixins, og giver mulighed for tilpasning" " af metadata til administrative formål." -#: core/models.py:175 core/models.py:206 +#: core/models.py:189 core/models.py:220 msgid "internal tag identifier for the product tag" msgstr "Intern tag-identifikator for produkttagget" -#: core/models.py:176 core/models.py:207 +#: core/models.py:190 core/models.py:221 msgid "tag name" msgstr "Tag-navn" -#: core/models.py:180 core/models.py:211 +#: core/models.py:194 core/models.py:225 msgid "user-friendly name for the product tag" msgstr "Brugervenligt navn til produktmærket" -#: core/models.py:181 core/models.py:212 +#: core/models.py:195 core/models.py:226 msgid "tag display name" msgstr "Navn på tag-visning" -#: core/models.py:189 +#: core/models.py:203 msgid "product tag" msgstr "Produktmærke" -#: core/models.py:195 +#: core/models.py:209 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 " @@ -1421,15 +1421,15 @@ msgstr "" "produkter. Den indeholder attributter til en intern tag-identifikator og et " "brugervenligt visningsnavn." -#: core/models.py:220 +#: core/models.py:234 msgid "category tag" msgstr "Kategori-tag" -#: core/models.py:221 core/models.py:293 +#: core/models.py:235 core/models.py:307 msgid "category tags" msgstr "Kategori-tags" -#: core/models.py:226 +#: core/models.py:240 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1451,51 +1451,51 @@ msgstr "" " angive navn, beskrivelse og hierarki for kategorier samt tildele " "attributter som billeder, tags eller prioritet." -#: core/models.py:240 +#: core/models.py:254 msgid "upload an image representing this category" msgstr "Upload et billede, der repræsenterer denne kategori" -#: core/models.py:243 +#: core/models.py:257 msgid "category image" msgstr "Kategori billede" -#: core/models.py:248 +#: core/models.py:262 msgid "define a markup percentage for products in this category" msgstr "Definer en markup-procentdel for produkter i denne kategori" -#: core/models.py:257 +#: core/models.py:271 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:258 +#: core/models.py:272 msgid "parent category" msgstr "Overordnet kategori" -#: core/models.py:263 +#: core/models.py:277 msgid "category name" msgstr "Navn på kategori" -#: core/models.py:264 +#: core/models.py:278 msgid "provide a name for this category" msgstr "Giv et navn til denne kategori" -#: core/models.py:271 +#: core/models.py:285 msgid "add a detailed description for this category" msgstr "Tilføj en detaljeret beskrivelse af denne kategori" -#: core/models.py:272 +#: core/models.py:286 msgid "category description" msgstr "Beskrivelse af kategori" -#: core/models.py:292 +#: core/models.py:306 msgid "tags that help describe or group this category" msgstr "tags, der hjælper med at beskrive eller gruppere denne kategori" -#: core/models.py:299 core/models.py:375 +#: core/models.py:313 core/models.py:389 msgid "priority" msgstr "Prioritet" -#: core/models.py:318 +#: core/models.py:332 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1509,47 +1509,47 @@ msgstr "" " Den gør det muligt at organisere og repræsentere brand-relaterede data i " "applikationen." -#: core/models.py:328 +#: core/models.py:342 msgid "name of this brand" msgstr "Navnet på dette mærke" -#: core/models.py:329 +#: core/models.py:343 msgid "brand name" msgstr "Varemærke" -#: core/models.py:336 +#: core/models.py:350 msgid "upload a logo representing this brand" msgstr "Upload et logo, der repræsenterer dette brand" -#: core/models.py:338 +#: core/models.py:352 msgid "brand small image" msgstr "Brandets lille image" -#: core/models.py:344 +#: core/models.py:358 msgid "upload a big logo representing this brand" msgstr "Upload et stort logo, der repræsenterer dette brand" -#: core/models.py:346 +#: core/models.py:360 msgid "brand big image" msgstr "Brandets store image" -#: core/models.py:351 +#: core/models.py:365 msgid "add a detailed description of the brand" msgstr "Tilføj en detaljeret beskrivelse af brandet" -#: core/models.py:352 +#: core/models.py:366 msgid "brand description" msgstr "Varemærkebeskrivelse" -#: core/models.py:357 +#: core/models.py:371 msgid "optional categories that this brand is associated with" msgstr "Valgfrie kategorier, som dette brand er forbundet med" -#: core/models.py:358 +#: core/models.py:372 msgid "associated categories" msgstr "Kategorier" -#: core/models.py:388 +#: core/models.py:402 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1565,68 +1565,68 @@ msgstr "" "muliggøre sporing og evaluering af produkter, der er tilgængelige fra " "forskellige leverandører." -#: core/models.py:400 +#: core/models.py:414 msgid "the vendor supplying this product stock" msgstr "Den leverandør, der leverer dette produkt, lagerfører" -#: core/models.py:401 +#: core/models.py:415 msgid "associated vendor" msgstr "Tilknyttet leverandør" -#: core/models.py:405 +#: core/models.py:419 msgid "final price to the customer after markups" msgstr "Endelig pris til kunden efter tillæg" -#: core/models.py:406 +#: core/models.py:420 msgid "selling price" msgstr "Salgspris" -#: core/models.py:411 +#: core/models.py:425 msgid "the product associated with this stock entry" msgstr "Det produkt, der er knyttet til denne lagerpost" -#: core/models.py:412 core/models.py:683 core/models.py:730 -#: core/models.py:1583 +#: core/models.py:426 core/models.py:697 core/models.py:744 +#: core/models.py:1641 msgid "associated product" msgstr "Tilknyttet produkt" -#: core/models.py:419 +#: core/models.py:433 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:420 +#: core/models.py:434 msgid "vendor purchase price" msgstr "Leverandørens købspris" -#: core/models.py:424 +#: core/models.py:438 msgid "available quantity of the product in stock" msgstr "Tilgængelig mængde af produktet på lager" -#: core/models.py:425 +#: core/models.py:439 msgid "quantity in stock" msgstr "Antal på lager" -#: core/models.py:429 +#: core/models.py:443 msgid "vendor-assigned SKU for identifying the product" msgstr "Leverandørtildelt SKU til identifikation af produktet" -#: core/models.py:430 +#: core/models.py:444 msgid "vendor sku" msgstr "Leverandørens SKU" -#: core/models.py:436 +#: core/models.py:450 msgid "digital file associated with this stock if applicable" msgstr "Digital fil knyttet til dette lager, hvis relevant" -#: core/models.py:437 +#: core/models.py:451 msgid "digital file" msgstr "Digital fil" -#: core/models.py:446 +#: core/models.py:460 msgid "stock entries" msgstr "Lagerposteringer" -#: core/models.py:451 +#: core/models.py:465 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1646,55 +1646,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:464 +#: core/models.py:478 msgid "category this product belongs to" msgstr "Kategori, som dette produkt tilhører" -#: core/models.py:473 +#: core/models.py:487 msgid "optionally associate this product with a brand" msgstr "Tilknyt eventuelt dette produkt til et brand" -#: core/models.py:479 +#: core/models.py:493 msgid "tags that help describe or group this product" msgstr "Tags, der hjælper med at beskrive eller gruppere dette produkt" -#: core/models.py:484 +#: core/models.py:498 msgid "indicates whether this product is digitally delivered" msgstr "Angiver, om dette produkt leveres digitalt" -#: core/models.py:485 +#: core/models.py:499 msgid "is product digital" msgstr "Er produktet digitalt?" -#: core/models.py:491 +#: core/models.py:505 msgid "provide a clear identifying name for the product" msgstr "Giv produktet et klart identificerende navn" -#: core/models.py:492 +#: core/models.py:506 msgid "product name" msgstr "Produktets navn" -#: core/models.py:497 core/models.py:772 +#: core/models.py:511 core/models.py:786 msgid "add a detailed description of the product" msgstr "Tilføj en detaljeret beskrivelse af produktet" -#: core/models.py:498 +#: core/models.py:512 msgid "product description" msgstr "Produktbeskrivelse" -#: core/models.py:505 +#: core/models.py:519 msgid "part number for this product" msgstr "Reservedelsnummer for dette produkt" -#: core/models.py:506 +#: core/models.py:520 msgid "part number" msgstr "Varenummer" -#: core/models.py:525 +#: core/models.py:539 msgid "stock keeping unit for this product" msgstr "Lagerbeholdning for dette produkt" -#: core/models.py:599 +#: core/models.py:613 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 " @@ -1710,70 +1710,70 @@ msgstr "" "string, integer, float, boolean, array og object. Det giver mulighed for " "dynamisk og fleksibel datastrukturering." -#: core/models.py:611 +#: core/models.py:625 msgid "category of this attribute" msgstr "Kategori for denne attribut" -#: core/models.py:619 +#: core/models.py:633 msgid "group of this attribute" msgstr "Gruppe af denne attribut" -#: core/models.py:625 +#: core/models.py:639 msgid "string" msgstr "Streng" -#: core/models.py:626 +#: core/models.py:640 msgid "integer" msgstr "Heltal" -#: core/models.py:627 +#: core/models.py:641 msgid "float" msgstr "Flyder" -#: core/models.py:628 +#: core/models.py:642 msgid "boolean" msgstr "Boolsk" -#: core/models.py:629 +#: core/models.py:643 msgid "array" msgstr "Array" -#: core/models.py:630 +#: core/models.py:644 msgid "object" msgstr "Objekt" -#: core/models.py:632 +#: core/models.py:646 msgid "type of the attribute's value" msgstr "Type af attributtens værdi" -#: core/models.py:633 +#: core/models.py:647 msgid "value type" msgstr "Værditype" -#: core/models.py:638 +#: core/models.py:652 msgid "name of this attribute" msgstr "Navn på denne attribut" -#: core/models.py:639 +#: core/models.py:653 msgid "attribute's name" msgstr "Attributtens navn" -#: core/models.py:645 +#: core/models.py:659 msgid "is filterable" msgstr "er filtrerbar" -#: core/models.py:646 +#: core/models.py:660 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:657 core/models.py:675 +#: core/models.py:671 core/models.py:689 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attribut" -#: core/models.py:663 +#: core/models.py:677 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" @@ -1784,19 +1784,19 @@ msgstr "" "mulighed for bedre organisering og dynamisk repræsentation af " "produktegenskaber." -#: core/models.py:674 +#: core/models.py:688 msgid "attribute of this value" msgstr "Attribut for denne værdi" -#: core/models.py:682 +#: core/models.py:696 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:688 +#: core/models.py:702 msgid "the specific value for this attribute" msgstr "Den specifikke værdi for denne attribut" -#: core/models.py:701 +#: core/models.py:715 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -1810,39 +1810,39 @@ msgstr "" "specifikke produkter og bestemme deres visningsrækkefølge. Den indeholder " "også en tilgængelighedsfunktion med alternativ tekst til billederne." -#: core/models.py:712 +#: core/models.py:726 msgid "provide alternative text for the image for accessibility" msgstr "Giv alternativ tekst til billedet af hensyn til tilgængeligheden" -#: core/models.py:713 +#: core/models.py:727 msgid "image alt text" msgstr "Billedets alt-tekst" -#: core/models.py:716 +#: core/models.py:730 msgid "upload the image file for this product" msgstr "Upload billedfilen til dette produkt" -#: core/models.py:717 core/models.py:742 +#: core/models.py:731 core/models.py:756 msgid "product image" msgstr "Produktbillede" -#: core/models.py:723 +#: core/models.py:737 msgid "determines the order in which images are displayed" msgstr "Bestemmer den rækkefølge, billederne vises i" -#: core/models.py:724 +#: core/models.py:738 msgid "display priority" msgstr "Skærm-prioritet" -#: core/models.py:729 +#: core/models.py:743 msgid "the product that this image represents" msgstr "Det produkt, som dette billede repræsenterer" -#: core/models.py:743 +#: core/models.py:757 msgid "product images" msgstr "Produktbilleder" -#: core/models.py:748 +#: core/models.py:762 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1858,39 +1858,39 @@ msgstr "" "relevante produkter. Den integreres med produktkataloget for at bestemme de " "berørte varer i kampagnen." -#: core/models.py:760 +#: core/models.py:774 msgid "percentage discount for the selected products" msgstr "Procentvis rabat for de valgte produkter" -#: core/models.py:761 +#: core/models.py:775 msgid "discount percentage" msgstr "Rabatprocent" -#: core/models.py:766 +#: core/models.py:780 msgid "provide a unique name for this promotion" msgstr "Giv et unikt navn til denne kampagne" -#: core/models.py:767 +#: core/models.py:781 msgid "promotion name" msgstr "Navn på kampagne" -#: core/models.py:773 +#: core/models.py:787 msgid "promotion description" msgstr "Beskrivelse af kampagnen" -#: core/models.py:778 +#: core/models.py:792 msgid "select which products are included in this promotion" msgstr "Vælg, hvilke produkter der er inkluderet i denne kampagne" -#: core/models.py:779 +#: core/models.py:793 msgid "included products" msgstr "Inkluderede produkter" -#: core/models.py:783 +#: core/models.py:797 msgid "promotion" msgstr "Forfremmelse" -#: core/models.py:794 +#: core/models.py:808 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1903,23 +1903,23 @@ msgstr "" "produkter samt operationer til at tilføje og fjerne flere produkter på én " "gang." -#: core/models.py:806 +#: core/models.py:820 msgid "products that the user has marked as wanted" msgstr "Produkter, som brugeren har markeret som ønskede" -#: core/models.py:814 +#: core/models.py:828 msgid "user who owns this wishlist" msgstr "Bruger, der ejer denne ønskeliste" -#: core/models.py:815 +#: core/models.py:829 msgid "wishlist owner" msgstr "Ønskelistens ejer" -#: core/models.py:823 +#: core/models.py:837 msgid "wishlist" msgstr "Ønskeliste" -#: core/models.py:865 +#: core/models.py:879 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1935,19 +1935,19 @@ msgstr "" "dokumentarfilerne. Den udvider funktionaliteten fra specifikke mixins og " "giver yderligere brugerdefinerede funktioner." -#: core/models.py:878 +#: core/models.py:892 msgid "documentary" msgstr "Dokumentarfilm" -#: core/models.py:879 +#: core/models.py:893 msgid "documentaries" msgstr "Dokumentarfilm" -#: core/models.py:889 +#: core/models.py:903 msgid "unresolved" msgstr "Uafklaret" -#: core/models.py:894 +#: core/models.py:908 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1968,59 +1968,59 @@ msgstr "" "Klassen gør det også muligt at knytte en adresse til en bruger, hvilket " "letter personlig datahåndtering." -#: core/models.py:909 +#: core/models.py:923 msgid "address line for the customer" msgstr "Adresselinje til kunden" -#: core/models.py:910 +#: core/models.py:924 msgid "address line" msgstr "Adresselinje" -#: core/models.py:912 +#: core/models.py:926 msgid "street" msgstr "Gade" -#: core/models.py:913 +#: core/models.py:927 msgid "district" msgstr "Distrikt" -#: core/models.py:914 +#: core/models.py:928 msgid "city" msgstr "By" -#: core/models.py:915 +#: core/models.py:929 msgid "region" msgstr "Region" -#: core/models.py:916 +#: core/models.py:930 msgid "postal code" msgstr "Postnummer" -#: core/models.py:917 +#: core/models.py:931 msgid "country" msgstr "Land" -#: core/models.py:924 +#: core/models.py:938 msgid "geolocation point: (longitude, latitude)" msgstr "Geolokaliseringspunkt (længdegrad, breddegrad)" -#: core/models.py:927 +#: core/models.py:941 msgid "full JSON response from geocoder for this address" msgstr "Fuldt JSON-svar fra geokoderen for denne adresse" -#: core/models.py:932 +#: core/models.py:946 msgid "stored JSON response from the geocoding service" msgstr "Gemt JSON-svar fra geokodningstjenesten" -#: core/models.py:940 +#: core/models.py:954 msgid "address" msgstr "Adresse" -#: core/models.py:941 +#: core/models.py:955 msgid "addresses" msgstr "Adresser" -#: core/models.py:953 +#: core/models.py:967 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2036,72 +2036,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:967 +#: core/models.py:981 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:968 +#: core/models.py:982 msgid "promo code identifier" msgstr "Identifikator for kampagnekode" -#: core/models.py:975 +#: core/models.py:989 msgid "fixed discount amount applied if percent is not used" msgstr "Fast rabatbeløb anvendes, hvis procent ikke bruges" -#: core/models.py:976 +#: core/models.py:990 msgid "fixed discount amount" msgstr "Fast rabatbeløb" -#: core/models.py:982 +#: core/models.py:996 msgid "percentage discount applied if fixed amount is not used" msgstr "Procentvis rabat, hvis det faste beløb ikke bruges" -#: core/models.py:983 +#: core/models.py:997 msgid "percentage discount" msgstr "Procentvis rabat" -#: core/models.py:988 +#: core/models.py:1002 msgid "timestamp when the promocode expires" msgstr "Tidsstempel, når promokoden udløber" -#: core/models.py:989 +#: core/models.py:1003 msgid "end validity time" msgstr "Slut gyldighedstid" -#: core/models.py:994 +#: core/models.py:1008 msgid "timestamp from which this promocode is valid" msgstr "Tidsstempel, hvorfra denne promokode er gyldig" -#: core/models.py:995 +#: core/models.py:1009 msgid "start validity time" msgstr "Start gyldighedstid" -#: core/models.py:1000 +#: core/models.py:1014 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:1001 +#: core/models.py:1015 msgid "usage timestamp" msgstr "Tidsstempel for brug" -#: core/models.py:1006 +#: core/models.py:1020 msgid "user assigned to this promocode if applicable" msgstr "Bruger tildelt denne promokode, hvis relevant" -#: core/models.py:1007 +#: core/models.py:1021 msgid "assigned user" msgstr "Tildelt bruger" -#: core/models.py:1014 +#: core/models.py:1028 msgid "promo code" msgstr "Kampagnekode" -#: core/models.py:1015 +#: core/models.py:1029 msgid "promo codes" msgstr "Kampagnekoder" -#: core/models.py:1022 +#: core/models.py:1044 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2109,16 +2109,16 @@ msgstr "" "Der skal kun defineres én type rabat (beløb eller procent), men ikke begge " "eller ingen af dem." -#: core/models.py:1037 +#: core/models.py:1065 msgid "promocode already used" msgstr "Promokoden er allerede blevet brugt" -#: core/models.py:1053 +#: core/models.py:1081 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Ugyldig rabattype for promokode {self.uuid}!" -#: core/models.py:1062 +#: core/models.py:1090 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 " @@ -2135,138 +2135,138 @@ msgstr "" " eller faktureringsoplysninger kan opdateres. Ligeledes understøtter " "funktionaliteten håndtering af produkterne i ordrens livscyklus." -#: core/models.py:1079 +#: core/models.py:1107 msgid "the billing address used for this order" msgstr "Den faktureringsadresse, der bruges til denne ordre" -#: core/models.py:1087 +#: core/models.py:1115 msgid "optional promo code applied to this order" msgstr "Valgfri kampagnekode anvendt på denne ordre" -#: core/models.py:1088 +#: core/models.py:1116 msgid "applied promo code" msgstr "Anvendt kampagnekode" -#: core/models.py:1096 +#: core/models.py:1124 msgid "the shipping address used for this order" msgstr "Den leveringsadresse, der er brugt til denne ordre" -#: core/models.py:1097 +#: core/models.py:1125 msgid "shipping address" msgstr "Leveringsadresse" -#: core/models.py:1103 +#: core/models.py:1131 msgid "current status of the order in its lifecycle" msgstr "Ordrens aktuelle status i dens livscyklus" -#: core/models.py:1104 +#: core/models.py:1132 msgid "order status" msgstr "Bestillingsstatus" -#: core/models.py:1109 core/models.py:1560 +#: core/models.py:1137 core/models.py:1618 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:1115 +#: core/models.py:1143 msgid "json representation of order attributes for this order" msgstr "JSON-repræsentation af ordreattributter for denne ordre" -#: core/models.py:1121 +#: core/models.py:1149 msgid "the user who placed the order" msgstr "Den bruger, der har afgivet ordren" -#: core/models.py:1122 +#: core/models.py:1150 msgid "user" msgstr "Bruger" -#: core/models.py:1128 +#: core/models.py:1156 msgid "the timestamp when the order was finalized" msgstr "Tidsstemplet for, hvornår ordren blev afsluttet" -#: core/models.py:1129 +#: core/models.py:1157 msgid "buy time" msgstr "Køb tid" -#: core/models.py:1136 +#: core/models.py:1164 msgid "a human-readable identifier for the order" msgstr "En menneskeligt læsbar identifikator for ordren" -#: core/models.py:1137 +#: core/models.py:1165 msgid "human readable id" msgstr "menneskeligt læsbart ID" -#: core/models.py:1143 +#: core/models.py:1171 msgid "order" msgstr "Bestil" -#: core/models.py:1168 +#: core/models.py:1209 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:1202 +#: core/models.py:1249 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:1207 +#: core/models.py:1254 msgid "you cannot add inactive products to order" msgstr "Du kan ikke tilføje inaktive produkter til en ordre" -#: core/models.py:1224 +#: core/models.py:1271 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:1246 core/models.py:1271 core/models.py:1279 +#: core/models.py:1293 core/models.py:1318 core/models.py:1326 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:1267 +#: core/models.py:1314 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} findes ikke med forespørgslen <{query}>!" -#: core/models.py:1299 +#: core/models.py:1346 msgid "promocode does not exist" msgstr "Promokode findes ikke" -#: core/models.py:1305 +#: core/models.py:1352 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:1324 +#: core/models.py:1371 msgid "address does not exist" msgstr "Adressen findes ikke" -#: core/models.py:1345 core/models.py:1414 +#: core/models.py:1392 core/models.py:1461 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:1348 core/models.py:1410 +#: core/models.py:1395 core/models.py:1457 msgid "invalid force value" msgstr "Ugyldig kraftværdi" -#: core/models.py:1354 core/models.py:1417 +#: core/models.py:1401 core/models.py:1464 msgid "you cannot purchase an empty order!" msgstr "Du kan ikke købe en tom ordre!" -#: core/models.py:1373 +#: core/models.py:1420 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:1387 +#: core/models.py:1434 msgid "a user without a balance cannot buy with balance" msgstr "En bruger uden saldo kan ikke købe med saldo!" -#: core/models.py:1392 +#: core/models.py:1439 msgid "insufficient funds to complete the order" msgstr "Utilstrækkelige midler til at gennemføre ordren" -#: core/models.py:1426 +#: core/models.py:1473 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2274,14 +2274,14 @@ msgstr "" "du kan ikke købe uden registrering, angiv venligst følgende oplysninger: " "kundens navn, kundens e-mail, kundens telefonnummer" -#: core/models.py:1435 +#: core/models.py:1482 #, 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:1533 +#: core/models.py:1591 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2303,110 +2303,110 @@ msgstr "" "en download-URL for digitale produkter. Modellen integreres med Order- og " "Product-modellerne og gemmer en reference til dem." -#: core/models.py:1548 +#: core/models.py:1606 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:1549 +#: core/models.py:1607 msgid "purchase price at order time" msgstr "Købspris på bestillingstidspunktet" -#: core/models.py:1554 +#: core/models.py:1612 msgid "internal comments for admins about this ordered product" msgstr "Interne kommentarer til administratorer om dette bestilte produkt" -#: core/models.py:1555 +#: core/models.py:1613 msgid "internal comments" msgstr "Interne kommentarer" -#: core/models.py:1561 +#: core/models.py:1619 msgid "user notifications" msgstr "Notifikationer til brugere" -#: core/models.py:1566 +#: core/models.py:1624 msgid "json representation of this item's attributes" msgstr "JSON-repræsentation af dette elements attributter" -#: core/models.py:1567 +#: core/models.py:1625 msgid "ordered product attributes" msgstr "Bestilte produktattributter" -#: core/models.py:1572 +#: core/models.py:1630 msgid "reference to the parent order that contains this product" msgstr "Henvisning til den overordnede ordre, der indeholder dette produkt" -#: core/models.py:1573 +#: core/models.py:1631 msgid "parent order" msgstr "Forældreordre" -#: core/models.py:1582 +#: core/models.py:1640 msgid "the specific product associated with this order line" msgstr "Det specifikke produkt, der er knyttet til denne ordrelinje" -#: core/models.py:1589 +#: core/models.py:1647 msgid "quantity of this specific product in the order" msgstr "Mængde af dette specifikke produkt i ordren" -#: core/models.py:1590 +#: core/models.py:1648 msgid "product quantity" msgstr "Produktmængde" -#: core/models.py:1597 +#: core/models.py:1655 msgid "current status of this product in the order" msgstr "Aktuel status for dette produkt i bestillingen" -#: core/models.py:1598 +#: core/models.py:1656 msgid "product line status" msgstr "Status for produktlinje" -#: core/models.py:1661 +#: core/models.py:1719 msgid "order product must have an order" msgstr "Orderproduct skal have en tilknyttet ordre!" -#: core/models.py:1663 +#: core/models.py:1721 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Forkert handling angivet for feedback: {action}!" -#: core/models.py:1677 +#: core/models.py:1735 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:1683 +#: core/models.py:1741 msgid "name" msgstr "Navn" -#: core/models.py:1684 +#: core/models.py:1742 msgid "URL of the integration" msgstr "URL til integrationen" -#: core/models.py:1685 +#: core/models.py:1743 msgid "authentication credentials" msgstr "Legitimationsoplysninger til godkendelse" -#: core/models.py:1699 +#: core/models.py:1765 msgid "you can only have one default CRM provider" msgstr "Du kan kun have én standard CRM-udbyder" -#: core/models.py:1703 +#: core/models.py:1775 msgid "CRM" msgstr "CRM" -#: core/models.py:1704 +#: core/models.py:1776 msgid "CRMs" msgstr "CRM'er" -#: core/models.py:1716 +#: core/models.py:1788 msgid "order CRM link" msgstr "Ordrens CRM-link" -#: core/models.py:1717 +#: core/models.py:1789 msgid "orders CRM links" msgstr "Bestillingernes CRM-links" -#: core/models.py:1722 +#: core/models.py:1794 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2423,19 +2423,15 @@ msgstr "" "URL til download af aktivet, når den tilknyttede ordre har status som " "afsluttet." -#: core/models.py:1736 +#: core/models.py:1808 msgid "download" msgstr "Download" -#: core/models.py:1737 +#: core/models.py:1809 msgid "downloads" msgstr "Downloads" -#: core/models.py:1745 -msgid "you can not download a digital asset for a non-finished order" -msgstr "Du kan ikke downloade et digitalt aktiv for en ikke-færdiggjort ordre" - -#: core/models.py:1754 +#: core/models.py:1823 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2450,30 +2446,30 @@ msgstr "" "bruger databasefelter til effektivt at modellere og administrere " "feedbackdata." -#: core/models.py:1766 +#: core/models.py:1835 msgid "user-provided comments about their experience with the product" msgstr "Brugernes kommentarer om deres oplevelse med produktet" -#: core/models.py:1767 +#: core/models.py:1836 msgid "feedback comments" msgstr "Kommentarer til feedback" -#: core/models.py:1774 +#: core/models.py:1843 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:1775 +#: core/models.py:1844 msgid "related order product" msgstr "Relateret ordreprodukt" -#: core/models.py:1780 +#: core/models.py:1849 msgid "user-assigned rating for the product" msgstr "Brugertildelt vurdering af produktet" -#: core/models.py:1781 +#: core/models.py:1850 msgid "product rating" msgstr "Produktvurdering" @@ -2678,11 +2674,11 @@ msgstr "" "alle rettigheder\n" " forbeholdt" -#: core/utils/caching.py:41 +#: core/utils/caching.py:48 msgid "both data and timeout are required" msgstr "Både data og timeout er påkrævet" -#: core/utils/caching.py:43 +#: core/utils/caching.py:50 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" @@ -2714,26 +2710,343 @@ msgstr "Du har ikke tilladelse til at udføre denne handling." msgid "NOMINATIM_URL must be configured." msgstr "Parameteren NOMINATIM_URL skal være konfigureret!" -#: core/validators.py:16 +#: core/validators.py:14 #, 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/validators.py:22 -msgid "invalid phone number format" -msgstr "Ugyldigt telefonnummerformat" +#: core/views.py:72 +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 "" +"Håndterer anmodningen om sitemap-indekset og returnerer et XML-svar. Den " +"sikrer, at svaret indeholder den passende indholdstypeheader for XML." -#: core/views.py:489 +#: core/views.py:87 +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 "" +"Håndterer det detaljerede visningssvar for et sitemap. Denne funktion " +"behandler anmodningen, henter det relevante sitemap-detaljesvar og " +"indstiller Content-Type-headeren til XML." + +#: core/views.py:116 +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 +msgid "Returns the parameters of the website as a JSON object." +msgstr "Returnerer hjemmesidens parametre som et JSON-objekt." + +#: core/views.py:167 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +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 +msgid "Handles `contact us` form submissions." +msgstr "Håndterer indsendelser af `kontakt os`-formularer." + +#: core/views.py:215 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "" +"Håndterer anmodninger om behandling og validering af URL'er fra indgående " +"POST-anmodninger." + +#: core/views.py:255 +msgid "Handles global search queries." +msgstr "Håndterer globale søgeforespørgsler." + +#: core/views.py:270 +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:312 msgid "you can only download the digital asset once" msgstr "Du kan kun downloade det digitale aktiv én gang" -#: core/views.py:547 +#: core/views.py:315 +msgid "the order must be paid before downloading the digital asset" +msgstr "Ordren skal betales, før det digitale aktiv downloades." + +#: core/views.py:353 +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." +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:365 msgid "favicon not found" msgstr "Favicon ikke fundet" -#: core/viewsets.py:1357 +#: core/views.py:370 +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." +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:382 +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 "" +"Omdirigerer anmodningen til administratorens indeksside. Funktionen " +"håndterer indgående HTTP-anmodninger og omdirigerer dem til Django-" +"administratorinterfacets indeksside. Den bruger Djangos `redirect`-funktion " +"til at håndtere HTTP-omdirigeringen." + +#: core/viewsets.py:128 +msgid "" +"Defines a viewset for managing Evibes-related operations. The EvibesViewSet " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" +"Definerer et visningssæt til håndtering af Evibes-relaterede operationer. " +"EvibesViewSet-klassen arver fra ModelViewSet og giver funktionalitet til " +"håndtering af handlinger og operationer på Evibes-enheder. Den omfatter " +"understøttelse af dynamiske serializer-klasser baseret på den aktuelle " +"handling, tilladelser, der kan tilpasses, og gengivelsesformater." + +#: core/viewsets.py:147 +msgid "" +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." +msgstr "" +"Repræsenterer et visningssæt til håndtering af AttributeGroup-objekter. " +"Håndterer operationer relateret til AttributeGroup, herunder filtrering, " +"serialisering og hentning af data. Denne klasse er en del af applikationens " +"API-lag og giver en standardiseret måde at behandle anmodninger og svar for " +"AttributeGroup-data på." + +#: core/viewsets.py:166 +msgid "" +"Handles operations related to Attribute objects within the application. " +"Provides a set of API endpoints to interact with Attribute data. This class " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"Håndterer operationer relateret til attributobjekter i applikationen. " +"Tilbyder et sæt API-slutpunkter til at interagere med attributdata. Denne " +"klasse håndterer forespørgsler, filtrering og serialisering af Attribute-" +"objekter, hvilket giver mulighed for dynamisk kontrol over de returnerede " +"data, f.eks. filtrering efter specifikke felter eller hentning af " +"detaljerede eller forenklede oplysninger afhængigt af anmodningen." + +#: core/viewsets.py:185 +msgid "" +"A viewset for managing AttributeValue objects. This viewset provides " +"functionality for listing, retrieving, creating, updating, and deleting " +"AttributeValue objects. It integrates with Django REST Framework's viewset " +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." +msgstr "" +"Et visningssæt til håndtering af AttributeValue-objekter. Dette viewet giver" +" funktionalitet til at liste, hente, oprette, opdatere og slette " +"AttributeValue-objekter. Det integreres med Django REST Framework's viewset-" +"mekanismer og bruger passende serializers til forskellige handlinger. " +"Filtreringsfunktioner leveres gennem DjangoFilterBackend." + +#: core/viewsets.py:204 +msgid "" +"Manages views for Category-related operations. The CategoryViewSet class is " +"responsible for handling operations related to the Category model in the " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" +"Administrerer visninger til kategorirelaterede operationer. Klassen " +"CategoryViewSet er ansvarlig for at håndtere operationer, der er relateret " +"til kategorimodellen i systemet. Den understøtter hentning, filtrering og " +"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:315 +msgid "" +"Represents a viewset for managing Brand instances. This class provides " +"functionality for querying, filtering, and serializing Brand objects. It " +"uses Django's ViewSet framework to simplify the implementation of API " +"endpoints for Brand objects." +msgstr "" +"Repræsenterer et visningssæt til håndtering af Brand-instanser. Denne klasse" +" giver funktionalitet til at forespørge, filtrere og serialisere Brand-" +"objekter. Den bruger Djangos ViewSet-rammeværk til at forenkle " +"implementeringen af API-slutpunkter for Brand-objekter." + +#: core/viewsets.py:427 +msgid "" +"Manages operations related to the `Product` model in the system. This class " +"provides a viewset for managing products, including their filtering, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" +"Håndterer operationer relateret til `Product`-modellen i systemet. Denne " +"klasse giver et visningssæt til håndtering af produkter, herunder deres " +"filtrering, serialisering og operationer på specifikke forekomster. Den " +"udvider fra `EvibesViewSet` for at bruge fælles funktionalitet og integrerer" +" med Django REST-frameworket til RESTful API-operationer. Indeholder metoder" +" til at hente produktoplysninger, anvende tilladelser og få adgang til " +"relateret feedback om et produkt." + +#: core/viewsets.py:547 +msgid "" +"Represents a viewset for managing Vendor objects. This viewset allows " +"fetching, filtering, and serializing Vendor data. It defines the queryset, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" +"Repræsenterer et visningssæt til håndtering af Vendor-objekter. Dette viewet" +" gør det muligt at hente, filtrere og serialisere Vendor-data. Det definerer" +" queryset, filterkonfigurationer og serializer-klasser, der bruges til at " +"håndtere forskellige handlinger. Formålet med denne klasse er at give " +"strømlinet adgang til Vendor-relaterede ressourcer gennem Django REST-" +"frameworket." + +#: core/viewsets.py:567 +msgid "" +"Representation of a view set handling Feedback objects. This class manages " +"operations related to Feedback objects, including listing, filtering, and " +"retrieving details. The purpose of this view set is to provide different " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"use of Django's filtering system for querying data." +msgstr "" +"Repræsentation af et visningssæt, der håndterer feedback-objekter. Denne " +"klasse håndterer handlinger relateret til feedback-objekter, herunder liste," +" filtrering og hentning af detaljer. Formålet med dette visningssæt er at " +"levere forskellige serializers til forskellige handlinger og implementere " +"tilladelsesbaseret håndtering af tilgængelige feedback-objekter. Det udvider" +" basen `EvibesViewSet` og gør brug af Djangos filtreringssystem til at " +"forespørge på data." + +#: core/viewsets.py:593 +msgid "" +"ViewSet for managing orders and related operations. This class provides " +"functionality to retrieve, modify, and manage order objects. It includes " +"various endpoints for handling order operations such as adding or removing " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " +"enforces permissions accordingly while interacting with order data." +msgstr "" +"ViewSet til håndtering af ordrer og relaterede operationer. Denne klasse " +"indeholder funktionalitet til at hente, ændre og administrere ordreobjekter." +" Den indeholder forskellige endpoints til håndtering af ordreoperationer " +"såsom tilføjelse eller fjernelse af produkter, udførelse af køb for " +"registrerede såvel som uregistrerede brugere og hentning af den aktuelle " +"godkendte brugers afventende ordrer. ViewSet bruger flere serializers " +"baseret på den specifikke handling, der udføres, og håndhæver tilladelser i " +"overensstemmelse hermed, mens der interageres med ordredata." + +#: core/viewsets.py:782 +msgid "" +"Provides a viewset for managing OrderProduct entities. This viewset enables " +"CRUD operations and custom actions specific to the OrderProduct model. It " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " +"feedback on OrderProduct instances" +msgstr "" +"Indeholder et visningssæt til håndtering af OrderProduct-enheder. Dette " +"visningssæt muliggør CRUD-operationer og brugerdefinerede handlinger, der er" +" specifikke for OrderProduct-modellen. Det omfatter filtrering, kontrol af " +"tilladelser og skift af serializer baseret på den ønskede handling. " +"Derudover indeholder det en detaljeret handling til håndtering af feedback " +"på OrderProduct-instanser." + +#: core/viewsets.py:833 +msgid "Manages operations related to Product images in the application. " +msgstr "Håndterer operationer relateret til produktbilleder i applikationen." + +#: core/viewsets.py:845 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +msgstr "" +"Administrerer hentning og håndtering af PromoCode-instanser gennem " +"forskellige API-handlinger." + +#: core/viewsets.py:866 +msgid "Represents a view set for managing promotions. " +msgstr "Repræsenterer et visningssæt til håndtering af kampagner." + +#: core/viewsets.py:878 +msgid "Handles operations related to Stock data in the system." +msgstr "Håndterer operationer relateret til lagerdata i systemet." + +#: core/viewsets.py:892 +msgid "" +"ViewSet for managing Wishlist operations. The WishlistViewSet provides " +"endpoints for interacting with a user's wish list, allowing for the " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " +"actions for wishlist products. Permission checks are integrated to ensure " +"that users can only manage their own wishlists unless explicit permissions " +"are granted." +msgstr "" +"ViewSet til håndtering af ønskelisteoperationer. WishlistViewSet giver " +"slutpunkter til at interagere med en brugers ønskeliste, hvilket giver " +"mulighed for at hente, ændre og tilpasse produkter på ønskelisten. Dette " +"ViewSet faciliterer funktionalitet som tilføjelse, fjernelse og " +"massehandlinger for ønskelisteprodukter. Kontrol af tilladelser er " +"integreret for at sikre, at brugere kun kan administrere deres egne " +"ønskelister, medmindre der er givet eksplicitte tilladelser." + +#: core/viewsets.py:1007 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" +"Denne klasse giver viewset-funktionalitet til håndtering af " +"`Address`-objekter. AddressViewSet-klassen muliggør CRUD-operationer, " +"filtrering og brugerdefinerede handlinger relateret til adresseenheder. Den " +"omfatter specialiseret adfærd for forskellige HTTP-metoder, tilsidesættelse " +"af serializer og håndtering af tilladelser baseret på anmodningskonteksten." + +#: core/viewsets.py:1074 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Fejl i geokodning: {e}" + +#: core/viewsets.py:1081 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" +"Håndterer operationer relateret til Product Tags i applikationen. Denne " +"klasse giver funktionalitet til at hente, filtrere og serialisere Product " +"Tag-objekter. Den understøtter fleksibel filtrering på specifikke " +"attributter ved hjælp af den angivne filterbackend og bruger dynamisk " +"forskellige serializers baseret på den handling, der udføres." diff --git a/core/locale/de_DE/LC_MESSAGES/django.mo b/core/locale/de_DE/LC_MESSAGES/django.mo index f74fc3c26d35eef9eec9b2b3366a93ac96e00dcf..1dfd6c97bc7343e515d4f0af1ebe56bcb9e58111 100644 GIT binary patch delta 27525 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 delta 12273 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 R6*oJ%%I%ri$yM6#{{S{c;`9Ij diff --git a/core/locale/de_DE/LC_MESSAGES/django.po b/core/locale/de_DE/LC_MESSAGES/django.po index b31894ee..0d942358 100644 --- a/core/locale/de_DE/LC_MESSAGES/django.po +++ b/core/locale/de_DE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+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:11 +#: core/abstract.py:12 msgid "unique id" msgstr "Eindeutige ID" -#: core/abstract.py:12 +#: 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:19 +#: core/abstract.py:20 msgid "is active" msgstr "Ist aktiv" -#: core/abstract.py:20 +#: core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" @@ -35,19 +35,19 @@ msgstr "" "Wenn auf false gesetzt, kann dieses Objekt von Benutzern ohne die " "erforderliche Berechtigung nicht gesehen werden." -#: core/abstract.py:22 core/choices.py:18 +#: core/abstract.py:23 core/choices.py:18 msgid "created" msgstr "Erstellt" -#: core/abstract.py:22 +#: 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:23 +#: core/abstract.py:24 msgid "modified" msgstr "Geändert" -#: core/abstract.py:23 +#: core/abstract.py:24 msgid "when the object was last modified" msgstr "Wann das Objekt zuletzt bearbeitet wurde" @@ -90,11 +90,11 @@ msgid "selected items have been deactivated." msgstr "Ausgewählte Artikel wurden deaktiviert!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 +#: core/graphene/object_types.py:616 core/models.py:701 core/models.py:709 msgid "attribute value" msgstr "Attribut Wert" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 msgid "attribute values" msgstr "Attribut Werte" @@ -106,7 +106,7 @@ msgstr "Bild" msgid "images" msgstr "Bilder" -#: core/admin.py:155 core/models.py:445 +#: core/admin.py:155 core/models.py:459 msgid "stock" msgstr "Lagerbestand" @@ -114,11 +114,11 @@ msgstr "Lagerbestand" msgid "stocks" msgstr "Bestände" -#: core/admin.py:166 core/models.py:1609 +#: core/admin.py:166 core/models.py:1667 msgid "order product" msgstr "Produkt bestellen" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 msgid "order products" msgstr "Produkte bestellen" @@ -760,7 +760,7 @@ msgid "add or remove feedback on an order–product relation" msgstr "" "Feedback zu einer Bestellung-Produkt-Beziehung hinzufügen oder entfernen" -#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 msgid "no search term provided." msgstr "Kein Suchbegriff angegeben." @@ -813,7 +813,7 @@ msgid "Quantity" msgstr "Menge" #: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:287 core/models.py:369 core/models.py:522 +#: core/models.py:301 core/models.py:383 core/models.py:536 msgid "Slug" msgstr "Schnecke" @@ -829,7 +829,7 @@ msgstr "Unterkategorien einbeziehen" msgid "Include personal ordered" msgstr "Persönlich bestellte Produkte einbeziehen" -#: core/filters.py:85 core/models.py:526 +#: core/filters.py:85 core/models.py:540 msgid "SKU" msgstr "SKU" @@ -904,7 +904,7 @@ msgstr "Zwischengespeicherte Daten" msgid "camelized JSON data from the requested URL" msgstr "Camelized JSON-Daten aus der angeforderten URL" -#: core/graphene/mutations.py:65 core/views.py:360 +#: core/graphene/mutations.py:65 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "Nur URLs, die mit http(s):// beginnen, sind zulässig" @@ -937,7 +937,7 @@ msgstr "" "sich gegenseitig aus!" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:839 +#: core/graphene/mutations.py:527 core/viewsets.py:679 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Von der Methode order.buy() kam der falsche Typ: {type(instance)!s}" @@ -1014,9 +1014,9 @@ msgstr "Bestellprodukt {order_product_uuid} nicht gefunden!" msgid "original address string provided by the user" msgstr "Vom Benutzer angegebene Originaladresse" -#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 -#: core/models.py:1234 core/models.py:1263 core/models.py:1288 -#: core/viewsets.py:842 +#: core/graphene/mutations.py:656 core/models.py:849 core/models.py:862 +#: core/models.py:1281 core/models.py:1310 core/models.py:1335 +#: core/viewsets.py:682 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} existiert nicht: {uuid}!" @@ -1030,8 +1030,8 @@ msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - funktioniert wie ein Zauber" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 -#: core/models.py:1686 +#: core/graphene/object_types.py:444 core/models.py:672 core/models.py:1144 +#: core/models.py:1744 msgid "attributes" msgstr "Attribute" @@ -1044,11 +1044,11 @@ 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:224 core/models.py:312 core/models.py:612 +#: core/graphene/object_types.py:224 core/models.py:326 core/models.py:626 msgid "categories" msgstr "Kategorien" -#: core/graphene/object_types.py:124 core/models.py:383 +#: core/graphene/object_types.py:124 core/models.py:397 msgid "brands" msgstr "Marken" @@ -1057,7 +1057,7 @@ msgid "category image url" msgstr "Kategorien" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:249 +#: core/models.py:263 msgid "markup percentage" msgstr "Markup Percentage" @@ -1082,7 +1082,7 @@ msgstr "Tags für diese Kategorie" msgid "products in this category" msgstr "Produkte in dieser Kategorie" -#: core/graphene/object_types.py:351 core/models.py:155 +#: core/graphene/object_types.py:351 core/models.py:169 msgid "vendors" msgstr "Anbieter" @@ -1108,7 +1108,7 @@ msgid "represents feedback from a user." msgstr "Stellt das Feedback eines Benutzers dar." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1110 +#: core/models.py:1138 msgid "notifications" msgstr "Benachrichtigungen" @@ -1116,7 +1116,7 @@ msgstr "Benachrichtigungen" msgid "download url for this order product if applicable" msgstr "Download-Url für dieses Bestellprodukt, falls zutreffend" -#: core/graphene/object_types.py:400 core/models.py:1791 +#: core/graphene/object_types.py:400 core/models.py:1860 msgid "feedback" msgstr "Rückmeldung" @@ -1124,7 +1124,7 @@ msgstr "Rückmeldung" msgid "a list of order products in this order" msgstr "Eine Liste der bestellten Produkte in dieser Reihenfolge" -#: core/graphene/object_types.py:436 core/models.py:1080 +#: core/graphene/object_types.py:436 core/models.py:1108 msgid "billing address" msgstr "Rechnungsadresse" @@ -1152,7 +1152,7 @@ msgstr "Sind alle Produkte in der Bestellung digital" msgid "transactions for this order" msgstr "Vorgänge für diesen Auftrag" -#: core/graphene/object_types.py:465 core/models.py:1144 +#: core/graphene/object_types.py:465 core/models.py:1172 msgid "orders" msgstr "Bestellungen" @@ -1164,15 +1164,15 @@ msgstr "Bild URL" msgid "product's images" msgstr "Bilder des Produkts" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 +#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 msgid "category" msgstr "Kategorie" -#: core/graphene/object_types.py:502 core/models.py:1792 +#: core/graphene/object_types.py:502 core/models.py:1861 msgid "feedbacks" msgstr "Rückmeldungen" -#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 +#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 msgid "brand" msgstr "Marke" @@ -1204,7 +1204,7 @@ msgstr "Anzahl der Rückmeldungen" msgid "only available for personal orders" msgstr "Produkte nur für persönliche Bestellungen verfügbar" -#: core/graphene/object_types.py:534 core/models.py:536 +#: core/graphene/object_types.py:534 core/models.py:550 msgid "products" msgstr "Produkte" @@ -1216,15 +1216,15 @@ msgstr "Promocodes" msgid "products on sale" msgstr "Zum Verkauf stehende Produkte" -#: core/graphene/object_types.py:651 core/models.py:784 +#: core/graphene/object_types.py:651 core/models.py:798 msgid "promotions" msgstr "Werbeaktionen" -#: core/graphene/object_types.py:655 core/models.py:154 +#: core/graphene/object_types.py:655 core/models.py:168 msgid "vendor" msgstr "Anbieter" -#: core/graphene/object_types.py:656 core/models.py:535 +#: core/graphene/object_types.py:656 core/models.py:549 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1232,11 +1232,11 @@ msgstr "Anbieter" msgid "product" msgstr "Produkt" -#: core/graphene/object_types.py:667 core/models.py:807 +#: core/graphene/object_types.py:667 core/models.py:821 msgid "wishlisted products" msgstr "Auf dem Wunschzettel stehende Produkte" -#: core/graphene/object_types.py:673 core/models.py:824 +#: core/graphene/object_types.py:673 core/models.py:838 msgid "wishlists" msgstr "Wunschzettel" @@ -1244,7 +1244,7 @@ msgstr "Wunschzettel" msgid "tagged products" msgstr "Markierte Produkte" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 +#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 msgid "product tags" msgstr "Produkt-Tags" @@ -1355,7 +1355,7 @@ msgstr "Übergeordnete Attributgruppe" msgid "attribute group's name" msgstr "Name der Attributgruppe" -#: core/models.py:100 core/models.py:620 +#: core/models.py:100 core/models.py:634 msgid "attribute group" msgstr "Attribut-Gruppe" @@ -1406,7 +1406,7 @@ msgstr "Name dieses Anbieters" msgid "vendor name" msgstr "Name des Anbieters" -#: core/models.py:163 +#: core/models.py:177 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1421,27 +1421,27 @@ msgstr "" "Sie unterstützt Operationen, die über Mixins exportiert werden, und " "ermöglicht die Anpassung von Metadaten für Verwaltungszwecke." -#: core/models.py:175 core/models.py:206 +#: core/models.py:189 core/models.py:220 msgid "internal tag identifier for the product tag" msgstr "Interner Tag-Identifikator für das Produkt-Tag" -#: core/models.py:176 core/models.py:207 +#: core/models.py:190 core/models.py:221 msgid "tag name" msgstr "Tag name" -#: core/models.py:180 core/models.py:211 +#: core/models.py:194 core/models.py:225 msgid "user-friendly name for the product tag" msgstr "Benutzerfreundlicher Name für den Produktanhänger" -#: core/models.py:181 core/models.py:212 +#: core/models.py:195 core/models.py:226 msgid "tag display name" msgstr "Tag-Anzeigename" -#: core/models.py:189 +#: core/models.py:203 msgid "product tag" msgstr "Produkt-Tag" -#: core/models.py:195 +#: core/models.py:209 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 " @@ -1452,15 +1452,15 @@ msgstr "" "zuzuordnen und zu klassifizieren. Sie enthält Attribute für einen internen " "Tag-Bezeichner und einen benutzerfreundlichen Anzeigenamen." -#: core/models.py:220 +#: core/models.py:234 msgid "category tag" msgstr "Kategorie-Tag" -#: core/models.py:221 core/models.py:293 +#: core/models.py:235 core/models.py:307 msgid "category tags" msgstr "Kategorie-Tags" -#: core/models.py:226 +#: core/models.py:240 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1483,53 +1483,53 @@ msgstr "" " Beschreibung und die Hierarchie von Kategorien festzulegen sowie Attribute " "wie Bilder, Tags oder Priorität zuzuweisen." -#: core/models.py:240 +#: core/models.py:254 msgid "upload an image representing this category" msgstr "Laden Sie ein Bild hoch, das diese Kategorie repräsentiert" -#: core/models.py:243 +#: core/models.py:257 msgid "category image" msgstr "Kategorie Bild" -#: core/models.py:248 +#: core/models.py:262 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:257 +#: core/models.py:271 msgid "parent of this category to form a hierarchical structure" msgstr "" "Übergeordneter dieser Kategorie, um eine hierarchische Struktur zu bilden" -#: core/models.py:258 +#: core/models.py:272 msgid "parent category" msgstr "Übergeordnete Kategorie" -#: core/models.py:263 +#: core/models.py:277 msgid "category name" msgstr "Name der Kategorie" -#: core/models.py:264 +#: core/models.py:278 msgid "provide a name for this category" msgstr "Geben Sie einen Namen für diese Kategorie an" -#: core/models.py:271 +#: core/models.py:285 msgid "add a detailed description for this category" msgstr "Fügen Sie eine detaillierte Beschreibung für diese Kategorie hinzu" -#: core/models.py:272 +#: core/models.py:286 msgid "category description" msgstr "Beschreibung der Kategorie" -#: core/models.py:292 +#: core/models.py:306 msgid "tags that help describe or group this category" msgstr "Tags, die helfen, diese Kategorie zu beschreiben oder zu gruppieren" -#: core/models.py:299 core/models.py:375 +#: core/models.py:313 core/models.py:389 msgid "priority" msgstr "Priorität" -#: core/models.py:318 +#: core/models.py:332 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1543,48 +1543,48 @@ msgstr "" "der Prioritätsreihenfolge. Sie ermöglicht die Organisation und Darstellung " "von markenbezogenen Daten innerhalb der Anwendung." -#: core/models.py:328 +#: core/models.py:342 msgid "name of this brand" msgstr "Name dieser Marke" -#: core/models.py:329 +#: core/models.py:343 msgid "brand name" msgstr "Markenname" -#: core/models.py:336 +#: core/models.py:350 msgid "upload a logo representing this brand" msgstr "Laden Sie ein Logo hoch, das diese Marke repräsentiert" -#: core/models.py:338 +#: core/models.py:352 msgid "brand small image" msgstr "Marke kleines Bild" -#: core/models.py:344 +#: core/models.py:358 msgid "upload a big logo representing this brand" msgstr "Laden Sie ein großes Logo hoch, das diese Marke repräsentiert" -#: core/models.py:346 +#: core/models.py:360 msgid "brand big image" msgstr "Großes Image der Marke" -#: core/models.py:351 +#: core/models.py:365 msgid "add a detailed description of the brand" msgstr "Fügen Sie eine detaillierte Beschreibung der Marke hinzu" -#: core/models.py:352 +#: core/models.py:366 msgid "brand description" msgstr "Beschreibung der Marke" -#: core/models.py:357 +#: core/models.py:371 msgid "optional categories that this brand is associated with" msgstr "" "Optionale Kategorien, mit denen diese Marke in Verbindung gebracht wird" -#: core/models.py:358 +#: core/models.py:372 msgid "associated categories" msgstr "Kategorien" -#: core/models.py:388 +#: core/models.py:402 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1600,69 +1600,69 @@ msgstr "" "Bestandsverwaltungssystems, um die Nachverfolgung und Bewertung der von " "verschiedenen Anbietern verfügbaren Produkte zu ermöglichen." -#: core/models.py:400 +#: core/models.py:414 msgid "the vendor supplying this product stock" msgstr "Der Verkäufer, der dieses Produkt liefert, hat folgende Bestände" -#: core/models.py:401 +#: core/models.py:415 msgid "associated vendor" msgstr "Zugehöriger Anbieter" -#: core/models.py:405 +#: core/models.py:419 msgid "final price to the customer after markups" msgstr "Endpreis für den Kunden nach Aufschlägen" -#: core/models.py:406 +#: core/models.py:420 msgid "selling price" msgstr "Verkaufspreis" -#: core/models.py:411 +#: core/models.py:425 msgid "the product associated with this stock entry" msgstr "Das mit diesem Bestandseintrag verbundene Produkt" -#: core/models.py:412 core/models.py:683 core/models.py:730 -#: core/models.py:1583 +#: core/models.py:426 core/models.py:697 core/models.py:744 +#: core/models.py:1641 msgid "associated product" msgstr "Zugehöriges Produkt" -#: core/models.py:419 +#: core/models.py:433 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:420 +#: core/models.py:434 msgid "vendor purchase price" msgstr "Einkaufspreis des Verkäufers" -#: core/models.py:424 +#: core/models.py:438 msgid "available quantity of the product in stock" msgstr "Verfügbare Menge des Produkts auf Lager" -#: core/models.py:425 +#: core/models.py:439 msgid "quantity in stock" msgstr "Vorrätige Menge" -#: core/models.py:429 +#: core/models.py:443 msgid "vendor-assigned SKU for identifying the product" msgstr "Vom Hersteller zugewiesene SKU zur Identifizierung des Produkts" -#: core/models.py:430 +#: core/models.py:444 msgid "vendor sku" msgstr "SKU des Verkäufers" -#: core/models.py:436 +#: core/models.py:450 msgid "digital file associated with this stock if applicable" msgstr "" "Digitale Datei, die mit diesem Bestand verbunden ist, falls zutreffend" -#: core/models.py:437 +#: core/models.py:451 msgid "digital file" msgstr "Digitale Datei" -#: core/models.py:446 +#: core/models.py:460 msgid "stock entries" msgstr "Bestandseinträge" -#: core/models.py:451 +#: core/models.py:465 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1684,56 +1684,56 @@ msgstr "" " um Produktdaten und die damit verbundenen Informationen innerhalb einer " "Anwendung zu definieren und zu manipulieren." -#: core/models.py:464 +#: core/models.py:478 msgid "category this product belongs to" msgstr "Kategorie, zu der dieses Produkt gehört" -#: core/models.py:473 +#: core/models.py:487 msgid "optionally associate this product with a brand" msgstr "Optional können Sie dieses Produkt mit einer Marke verknüpfen" -#: core/models.py:479 +#: core/models.py:493 msgid "tags that help describe or group this product" msgstr "Tags, die helfen, dieses Produkt zu beschreiben oder zu gruppieren" -#: core/models.py:484 +#: core/models.py:498 msgid "indicates whether this product is digitally delivered" msgstr "Gibt an, ob dieses Produkt digital geliefert wird" -#: core/models.py:485 +#: core/models.py:499 msgid "is product digital" msgstr "Ist das Produkt digital" -#: core/models.py:491 +#: core/models.py:505 msgid "provide a clear identifying name for the product" msgstr "" "Geben Sie einen eindeutigen Namen zur Identifizierung des Produkts an." -#: core/models.py:492 +#: core/models.py:506 msgid "product name" msgstr "Name des Produkts" -#: core/models.py:497 core/models.py:772 +#: core/models.py:511 core/models.py:786 msgid "add a detailed description of the product" msgstr "Fügen Sie eine detaillierte Beschreibung des Produkts hinzu" -#: core/models.py:498 +#: core/models.py:512 msgid "product description" msgstr "Beschreibung des Produkts" -#: core/models.py:505 +#: core/models.py:519 msgid "part number for this product" msgstr "Teilenummer für dieses Produkt" -#: core/models.py:506 +#: core/models.py:520 msgid "part number" msgstr "Teilnummer" -#: core/models.py:525 +#: core/models.py:539 msgid "stock keeping unit for this product" msgstr "Lagerhaltende Einheit für dieses Produkt" -#: core/models.py:599 +#: core/models.py:613 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 " @@ -1750,70 +1750,70 @@ msgstr "" "Array und Object. Dies ermöglicht eine dynamische und flexible " "Datenstrukturierung." -#: core/models.py:611 +#: core/models.py:625 msgid "category of this attribute" msgstr "Kategorie dieses Attributs" -#: core/models.py:619 +#: core/models.py:633 msgid "group of this attribute" msgstr "Gruppe dieses Attributs" -#: core/models.py:625 +#: core/models.py:639 msgid "string" msgstr "Zeichenfolge" -#: core/models.py:626 +#: core/models.py:640 msgid "integer" msgstr "Integer" -#: core/models.py:627 +#: core/models.py:641 msgid "float" msgstr "Schwimmer" -#: core/models.py:628 +#: core/models.py:642 msgid "boolean" msgstr "Boolesche" -#: core/models.py:629 +#: core/models.py:643 msgid "array" msgstr "Array" -#: core/models.py:630 +#: core/models.py:644 msgid "object" msgstr "Objekt" -#: core/models.py:632 +#: core/models.py:646 msgid "type of the attribute's value" msgstr "Typ des Attributwerts" -#: core/models.py:633 +#: core/models.py:647 msgid "value type" msgstr "Werttyp" -#: core/models.py:638 +#: core/models.py:652 msgid "name of this attribute" msgstr "Name dieses Attributs" -#: core/models.py:639 +#: core/models.py:653 msgid "attribute's name" msgstr "Name des Attributs" -#: core/models.py:645 +#: core/models.py:659 msgid "is filterable" msgstr "ist filterbar" -#: core/models.py:646 +#: core/models.py:660 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:657 core/models.py:675 +#: core/models.py:671 core/models.py:689 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attribut" -#: core/models.py:663 +#: core/models.py:677 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" @@ -1824,20 +1824,20 @@ msgstr "" "und ermöglicht so eine bessere Organisation und dynamische Darstellung der " "Produktmerkmale." -#: core/models.py:674 +#: core/models.py:688 msgid "attribute of this value" msgstr "Attribut dieses Wertes" -#: core/models.py:682 +#: core/models.py:696 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:688 +#: core/models.py:702 msgid "the specific value for this attribute" msgstr "Der spezifische Wert für dieses Attribut" -#: core/models.py:701 +#: core/models.py:715 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -1851,41 +1851,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:712 +#: core/models.py:726 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:713 +#: core/models.py:727 msgid "image alt text" msgstr "Bild-Alt-Text" -#: core/models.py:716 +#: core/models.py:730 msgid "upload the image file for this product" msgstr "Laden Sie die Bilddatei für dieses Produkt hoch" -#: core/models.py:717 core/models.py:742 +#: core/models.py:731 core/models.py:756 msgid "product image" msgstr "Produktbild" -#: core/models.py:723 +#: core/models.py:737 msgid "determines the order in which images are displayed" msgstr "Legt die Reihenfolge fest, in der die Bilder angezeigt werden" -#: core/models.py:724 +#: core/models.py:738 msgid "display priority" msgstr "Priorität anzeigen" -#: core/models.py:729 +#: core/models.py:743 msgid "the product that this image represents" msgstr "Das Produkt, das dieses Bild darstellt" -#: core/models.py:743 +#: core/models.py:757 msgid "product images" msgstr "Produktbilder" -#: core/models.py:748 +#: core/models.py:762 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1902,39 +1902,39 @@ msgstr "" "Sie ist mit dem Produktkatalog integriert, um die betroffenen Artikel in der" " Kampagne zu bestimmen." -#: core/models.py:760 +#: core/models.py:774 msgid "percentage discount for the selected products" msgstr "Prozentualer Rabatt für die ausgewählten Produkte" -#: core/models.py:761 +#: core/models.py:775 msgid "discount percentage" msgstr "Prozentsatz der Ermäßigung" -#: core/models.py:766 +#: core/models.py:780 msgid "provide a unique name for this promotion" msgstr "Geben Sie einen eindeutigen Namen für diese Aktion an" -#: core/models.py:767 +#: core/models.py:781 msgid "promotion name" msgstr "Name der Aktion" -#: core/models.py:773 +#: core/models.py:787 msgid "promotion description" msgstr "Promotion description" -#: core/models.py:778 +#: core/models.py:792 msgid "select which products are included in this promotion" msgstr "Wählen Sie aus, welche Produkte in dieser Aktion enthalten sind" -#: core/models.py:779 +#: core/models.py:793 msgid "included products" msgstr "Enthaltene Produkte" -#: core/models.py:783 +#: core/models.py:797 msgid "promotion" msgstr "Förderung" -#: core/models.py:794 +#: core/models.py:808 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1947,23 +1947,23 @@ msgstr "" "Entfernen von Produkten sowie das Hinzufügen und Entfernen mehrerer Produkte" " gleichzeitig." -#: core/models.py:806 +#: core/models.py:820 msgid "products that the user has marked as wanted" msgstr "Produkte, die der Benutzer als gewünscht markiert hat" -#: core/models.py:814 +#: core/models.py:828 msgid "user who owns this wishlist" msgstr "Benutzer, dem diese Wunschliste gehört" -#: core/models.py:815 +#: core/models.py:829 msgid "wishlist owner" msgstr "Besitzer der Wishlist" -#: core/models.py:823 +#: core/models.py:837 msgid "wishlist" msgstr "Wunschzettel" -#: core/models.py:865 +#: core/models.py:879 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1980,19 +1980,19 @@ msgstr "" " die Funktionalität von bestimmten Mixins und bietet zusätzliche " "benutzerdefinierte Funktionen." -#: core/models.py:878 +#: core/models.py:892 msgid "documentary" msgstr "Dokumentarfilm" -#: core/models.py:879 +#: core/models.py:893 msgid "documentaries" msgstr "Dokumentarfilme" -#: core/models.py:889 +#: core/models.py:903 msgid "unresolved" msgstr "Ungelöst" -#: core/models.py:894 +#: core/models.py:908 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2014,59 +2014,59 @@ msgstr "" "ermöglicht es auch, eine Adresse mit einem Benutzer zu verknüpfen, was die " "personalisierte Datenverarbeitung erleichtert." -#: core/models.py:909 +#: core/models.py:923 msgid "address line for the customer" msgstr "Adresszeile für den Kunden" -#: core/models.py:910 +#: core/models.py:924 msgid "address line" msgstr "Adresszeile" -#: core/models.py:912 +#: core/models.py:926 msgid "street" msgstr "Straße" -#: core/models.py:913 +#: core/models.py:927 msgid "district" msgstr "Bezirk" -#: core/models.py:914 +#: core/models.py:928 msgid "city" msgstr "Stadt" -#: core/models.py:915 +#: core/models.py:929 msgid "region" msgstr "Region" -#: core/models.py:916 +#: core/models.py:930 msgid "postal code" msgstr "Postleitzahl" -#: core/models.py:917 +#: core/models.py:931 msgid "country" msgstr "Land" -#: core/models.py:924 +#: core/models.py:938 msgid "geolocation point: (longitude, latitude)" msgstr "Geolocation Point(Längengrad, Breitengrad)" -#: core/models.py:927 +#: core/models.py:941 msgid "full JSON response from geocoder for this address" msgstr "Vollständige JSON-Antwort vom Geocoder für diese Adresse" -#: core/models.py:932 +#: core/models.py:946 msgid "stored JSON response from the geocoding service" msgstr "Gespeicherte JSON-Antwort vom Geokodierungsdienst" -#: core/models.py:940 +#: core/models.py:954 msgid "address" msgstr "Adresse" -#: core/models.py:941 +#: core/models.py:955 msgid "addresses" msgstr "Adressen" -#: core/models.py:953 +#: core/models.py:967 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2084,76 +2084,76 @@ msgstr "" "Validierung und Anwendung des Promo-Codes auf eine Bestellung, wobei " "sichergestellt wird, dass die Einschränkungen eingehalten werden." -#: core/models.py:967 +#: core/models.py:981 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:968 +#: core/models.py:982 msgid "promo code identifier" msgstr "Kennung des Promo-Codes" -#: core/models.py:975 +#: core/models.py:989 msgid "fixed discount amount applied if percent is not used" msgstr "" "Fester Rabattbetrag, der angewandt wird, wenn kein Prozentsatz verwendet " "wird" -#: core/models.py:976 +#: core/models.py:990 msgid "fixed discount amount" msgstr "Fester Rabattbetrag" -#: core/models.py:982 +#: core/models.py:996 msgid "percentage discount applied if fixed amount is not used" msgstr "Prozentualer Rabatt, wenn der Festbetrag nicht verwendet wird" -#: core/models.py:983 +#: core/models.py:997 msgid "percentage discount" msgstr "Prozentualer Rabatt" -#: core/models.py:988 +#: core/models.py:1002 msgid "timestamp when the promocode expires" msgstr "Zeitstempel, wann der Promocode abläuft" -#: core/models.py:989 +#: core/models.py:1003 msgid "end validity time" msgstr "Ende der Gültigkeitsdauer" -#: core/models.py:994 +#: core/models.py:1008 msgid "timestamp from which this promocode is valid" msgstr "Zeitstempel, ab dem dieser Promocode gültig ist" -#: core/models.py:995 +#: core/models.py:1009 msgid "start validity time" msgstr "Beginn der Gültigkeitsdauer" -#: core/models.py:1000 +#: core/models.py:1014 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:1001 +#: core/models.py:1015 msgid "usage timestamp" msgstr "Zeitstempel der Verwendung" -#: core/models.py:1006 +#: core/models.py:1020 msgid "user assigned to this promocode if applicable" msgstr "Diesem Promocode zugewiesener Benutzer, falls zutreffend" -#: core/models.py:1007 +#: core/models.py:1021 msgid "assigned user" msgstr "Zugewiesener Benutzer" -#: core/models.py:1014 +#: core/models.py:1028 msgid "promo code" msgstr "Promo-Code" -#: core/models.py:1015 +#: core/models.py:1029 msgid "promo codes" msgstr "Promo-Codes" -#: core/models.py:1022 +#: core/models.py:1044 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2161,16 +2161,16 @@ msgstr "" "Es sollte nur eine Art von Rabatt definiert werden (Betrag oder " "Prozentsatz), aber nicht beides oder keines von beiden." -#: core/models.py:1037 +#: core/models.py:1065 msgid "promocode already used" msgstr "Promocode wurde bereits verwendet" -#: core/models.py:1053 +#: core/models.py:1081 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Ungültiger Rabatttyp für den Promocode {self.uuid}!" -#: core/models.py:1062 +#: core/models.py:1090 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 " @@ -2188,143 +2188,143 @@ msgstr "" "aktualisiert werden. Ebenso unterstützt die Funktionalität die Verwaltung " "der Produkte im Lebenszyklus der Bestellung." -#: core/models.py:1079 +#: core/models.py:1107 msgid "the billing address used for this order" msgstr "Die für diese Bestellung verwendete Rechnungsadresse" -#: core/models.py:1087 +#: core/models.py:1115 msgid "optional promo code applied to this order" msgstr "Optionaler Promo-Code für diese Bestellung" -#: core/models.py:1088 +#: core/models.py:1116 msgid "applied promo code" msgstr "Angewandter Promo-Code" -#: core/models.py:1096 +#: core/models.py:1124 msgid "the shipping address used for this order" msgstr "Die für diese Bestellung verwendete Lieferadresse" -#: core/models.py:1097 +#: core/models.py:1125 msgid "shipping address" msgstr "Lieferadresse" -#: core/models.py:1103 +#: core/models.py:1131 msgid "current status of the order in its lifecycle" msgstr "Aktueller Status des Auftrags in seinem Lebenszyklus" -#: core/models.py:1104 +#: core/models.py:1132 msgid "order status" msgstr "Status der Bestellung" -#: core/models.py:1109 core/models.py:1560 +#: core/models.py:1137 core/models.py:1618 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:1115 +#: core/models.py:1143 msgid "json representation of order attributes for this order" msgstr "JSON-Darstellung der Auftragsattribute für diesen Auftrag" -#: core/models.py:1121 +#: core/models.py:1149 msgid "the user who placed the order" msgstr "Der Benutzer, der die Bestellung aufgegeben hat" -#: core/models.py:1122 +#: core/models.py:1150 msgid "user" msgstr "Benutzer" -#: core/models.py:1128 +#: core/models.py:1156 msgid "the timestamp when the order was finalized" msgstr "Der Zeitstempel, zu dem der Auftrag abgeschlossen wurde" -#: core/models.py:1129 +#: core/models.py:1157 msgid "buy time" msgstr "Zeit kaufen" -#: core/models.py:1136 +#: core/models.py:1164 msgid "a human-readable identifier for the order" msgstr "Ein von Menschen lesbarer Identifikator für den Auftrag" -#: core/models.py:1137 +#: core/models.py:1165 msgid "human readable id" msgstr "menschenlesbare ID" -#: core/models.py:1143 +#: core/models.py:1171 msgid "order" msgstr "Bestellung" -#: core/models.py:1168 +#: core/models.py:1209 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:1202 +#: core/models.py:1249 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:1207 +#: core/models.py:1254 msgid "you cannot add inactive products to order" msgstr "Sie können keine inaktiven Produkte zur Bestellung hinzufügen" -#: core/models.py:1224 +#: core/models.py:1271 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:1246 core/models.py:1271 core/models.py:1279 +#: core/models.py:1293 core/models.py:1318 core/models.py:1326 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:1267 +#: core/models.py:1314 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} existiert nicht mit Abfrage <{query}>!" -#: core/models.py:1299 +#: core/models.py:1346 msgid "promocode does not exist" msgstr "Promocode existiert nicht" -#: core/models.py:1305 +#: core/models.py:1352 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:1324 +#: core/models.py:1371 msgid "address does not exist" msgstr "Adresse ist nicht vorhanden" -#: core/models.py:1345 core/models.py:1414 +#: core/models.py:1392 core/models.py:1461 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:1348 core/models.py:1410 +#: core/models.py:1395 core/models.py:1457 msgid "invalid force value" msgstr "Ungültiger Force-Wert" -#: core/models.py:1354 core/models.py:1417 +#: core/models.py:1401 core/models.py:1464 msgid "you cannot purchase an empty order!" msgstr "Sie können keine leere Bestellung kaufen!" -#: core/models.py:1373 +#: core/models.py:1420 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:1387 +#: core/models.py:1434 msgid "a user without a balance cannot buy with balance" msgstr "Ein Benutzer ohne Guthaben kann nicht mit Guthaben kaufen!" -#: core/models.py:1392 +#: core/models.py:1439 msgid "insufficient funds to complete the order" msgstr "Unzureichende Mittel für die Ausführung des Auftrags" -#: core/models.py:1426 +#: core/models.py:1473 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2332,14 +2332,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:1435 +#: core/models.py:1482 #, 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:1533 +#: core/models.py:1591 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2362,112 +2362,112 @@ msgstr "" "Produkte. Das Modell ist mit den Modellen \"Order\" und \"Product\" " "integriert und speichert einen Verweis auf diese." -#: core/models.py:1548 +#: core/models.py:1606 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:1549 +#: core/models.py:1607 msgid "purchase price at order time" msgstr "Einkaufspreis zum Zeitpunkt der Bestellung" -#: core/models.py:1554 +#: core/models.py:1612 msgid "internal comments for admins about this ordered product" msgstr "Interne Kommentare für Administratoren zu diesem bestellten Produkt" -#: core/models.py:1555 +#: core/models.py:1613 msgid "internal comments" msgstr "Interne Kommentare" -#: core/models.py:1561 +#: core/models.py:1619 msgid "user notifications" msgstr "Benutzerbenachrichtigungen" -#: core/models.py:1566 +#: core/models.py:1624 msgid "json representation of this item's attributes" msgstr "JSON-Darstellung der Attribute dieses Artikels" -#: core/models.py:1567 +#: core/models.py:1625 msgid "ordered product attributes" msgstr "Bestellte Produktattribute" -#: core/models.py:1572 +#: core/models.py:1630 msgid "reference to the parent order that contains this product" msgstr "Verweis auf den übergeordneten Auftrag, der dieses Produkt enthält" -#: core/models.py:1573 +#: core/models.py:1631 msgid "parent order" msgstr "Übergeordneter Auftrag" -#: core/models.py:1582 +#: core/models.py:1640 msgid "the specific product associated with this order line" msgstr "Das spezifische Produkt, das mit dieser Auftragszeile verbunden ist" -#: core/models.py:1589 +#: core/models.py:1647 msgid "quantity of this specific product in the order" msgstr "Menge dieses spezifischen Produkts in der Bestellung" -#: core/models.py:1590 +#: core/models.py:1648 msgid "product quantity" msgstr "Produktmenge" -#: core/models.py:1597 +#: core/models.py:1655 msgid "current status of this product in the order" msgstr "Aktueller Status dieses Produkts im Auftrag" -#: core/models.py:1598 +#: core/models.py:1656 msgid "product line status" msgstr "Status der Produktlinie" -#: core/models.py:1661 +#: core/models.py:1719 msgid "order product must have an order" msgstr "Das Bestellprodukt muss eine zugehörige Bestellung haben!" -#: core/models.py:1663 +#: core/models.py:1721 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Falsche Aktion für Feedback angegeben: {action}!" -#: core/models.py:1677 +#: core/models.py:1735 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:1683 +#: core/models.py:1741 msgid "name" msgstr "Name" -#: core/models.py:1684 +#: core/models.py:1742 msgid "URL of the integration" msgstr "URL der Integration" -#: core/models.py:1685 +#: core/models.py:1743 msgid "authentication credentials" msgstr "Anmeldeinformationen zur Authentifizierung" -#: core/models.py:1699 +#: core/models.py:1765 msgid "you can only have one default CRM provider" msgstr "Sie können nur einen Standard-CRM-Anbieter haben" -#: core/models.py:1703 +#: core/models.py:1775 msgid "CRM" msgstr "CRM" -#: core/models.py:1704 +#: core/models.py:1776 msgid "CRMs" msgstr "CRMs" -#: core/models.py:1716 +#: core/models.py:1788 msgid "order CRM link" msgstr "CRM-Link der Bestellung" -#: core/models.py:1717 +#: core/models.py:1789 msgid "orders CRM links" msgstr "CRM-Links der Bestellungen" -#: core/models.py:1722 +#: core/models.py:1794 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2484,21 +2484,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:1736 +#: core/models.py:1808 msgid "download" msgstr "Herunterladen" -#: core/models.py:1737 +#: core/models.py:1809 msgid "downloads" msgstr "Herunterladen" -#: core/models.py:1745 -msgid "you can not download a digital asset for a non-finished order" -msgstr "" -"Sie können kein digitales Asset für eine nicht abgeschlossene Bestellung " -"herunterladen" - -#: core/models.py:1754 +#: core/models.py:1823 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2513,30 +2507,30 @@ msgstr "" "Benutzer zugewiesene Bewertung. Die Klasse verwendet Datenbankfelder, um " "Feedbackdaten effektiv zu modellieren und zu verwalten." -#: core/models.py:1766 +#: core/models.py:1835 msgid "user-provided comments about their experience with the product" msgstr "Kommentare der Nutzer über ihre Erfahrungen mit dem Produkt" -#: core/models.py:1767 +#: core/models.py:1836 msgid "feedback comments" msgstr "Kommentare zum Feedback" -#: core/models.py:1774 +#: core/models.py:1843 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:1775 +#: core/models.py:1844 msgid "related order product" msgstr "Produkt zur Bestellung" -#: core/models.py:1780 +#: core/models.py:1849 msgid "user-assigned rating for the product" msgstr "Vom Benutzer zugewiesene Bewertung für das Produkt" -#: core/models.py:1781 +#: core/models.py:1850 msgid "product rating" msgstr "Produktbewertung" @@ -2742,11 +2736,11 @@ msgstr "" "alle Rechte\n" " vorbehalten" -#: core/utils/caching.py:41 +#: core/utils/caching.py:48 msgid "both data and timeout are required" msgstr "Sowohl Daten als auch Timeout sind erforderlich" -#: core/utils/caching.py:43 +#: core/utils/caching.py:50 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" @@ -2779,26 +2773,356 @@ msgstr "Sie haben nicht die Erlaubnis, diese Aktion durchzuführen." msgid "NOMINATIM_URL must be configured." msgstr "Der Parameter NOMINATIM_URL muss konfiguriert werden!" -#: core/validators.py:16 +#: core/validators.py:14 #, 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/validators.py:22 -msgid "invalid phone number format" -msgstr "Ungültiges Rufnummernformat" +#: core/views.py:72 +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 "" +"Bearbeitet die Anfrage für den Sitemap-Index und gibt eine XML-Antwort " +"zurück. Sie stellt sicher, dass die Antwort den entsprechenden Content-Type-" +"Header für XML enthält." -#: core/views.py:489 +#: core/views.py:87 +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 "" +"Verarbeitet die Antwort auf die Detailansicht für eine Sitemap. Diese " +"Funktion verarbeitet die Anfrage, holt die entsprechende Sitemap-" +"Detailantwort ab und setzt den Content-Type-Header für XML." + +#: core/views.py:116 +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 +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 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +msgstr "" +"Erledigt Cache-Operationen wie das Lesen und Setzen von Cache-Daten mit " +"einem bestimmten Schlüssel und Timeout." + +#: core/views.py:194 +msgid "Handles `contact us` form submissions." +msgstr "Verarbeitet Übermittlungen des Formulars \"Kontaktieren Sie uns\"." + +#: core/views.py:215 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "" +"Bearbeitet Anfragen zur Verarbeitung und Validierung von URLs aus " +"eingehenden POST-Anfragen." + +#: core/views.py:255 +msgid "Handles global search queries." +msgstr "Bearbeitet globale Suchanfragen." + +#: core/views.py:270 +msgid "Handles the logic of buying as a business without registration." +msgstr "Behandelt die Logik des Kaufs als Unternehmen ohne Registrierung." + +#: core/views.py:312 msgid "you can only download the digital asset once" msgstr "Sie können das digitale Asset nur einmal herunterladen" -#: core/views.py:547 +#: core/views.py:315 +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:353 +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." +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:365 msgid "favicon not found" msgstr "Favicon nicht gefunden" -#: core/viewsets.py:1357 +#: core/views.py:370 +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." +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:382 +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 "" +"Leitet die Anfrage auf die Admin-Indexseite um. Die Funktion verarbeitet " +"eingehende HTTP-Anfragen und leitet sie auf die Indexseite der Django-" +"Administrationsoberfläche um. Sie verwendet die Funktion `redirect` von " +"Django für die Bearbeitung der HTTP-Umleitung." + +#: core/viewsets.py:128 +msgid "" +"Defines a viewset for managing Evibes-related operations. The EvibesViewSet " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" +"Definiert ein Viewset für die Verwaltung von Evibes-bezogenen Operationen. " +"Die Klasse EvibesViewSet erbt von ModelViewSet und bietet Funktionalität für" +" die Handhabung von Aktionen und Operationen auf Evibes-Entitäten. Sie " +"enthält Unterstützung für dynamische Serialisiererklassen auf der Grundlage " +"der aktuellen Aktion, anpassbare Berechtigungen und Rendering-Formate." + +#: core/viewsets.py:147 +msgid "" +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." +msgstr "" +"Stellt ein Viewset für die Verwaltung von AttributeGroup-Objekten dar. " +"Bearbeitet Vorgänge im Zusammenhang mit AttributeGroup, einschließlich " +"Filterung, Serialisierung und Abruf von Daten. Diese Klasse ist Teil der " +"API-Schicht der Anwendung und bietet eine standardisierte Methode zur " +"Verarbeitung von Anfragen und Antworten für AttributeGroup-Daten." + +#: core/viewsets.py:166 +msgid "" +"Handles operations related to Attribute objects within the application. " +"Provides a set of API endpoints to interact with Attribute data. This class " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"Erledigt Vorgänge im Zusammenhang mit Attributobjekten innerhalb der " +"Anwendung. Bietet eine Reihe von API-Endpunkten zur Interaktion mit " +"Attributdaten. Diese Klasse verwaltet die Abfrage, Filterung und " +"Serialisierung von Attributobjekten und ermöglicht die dynamische Kontrolle " +"über die zurückgegebenen Daten, z. B. die Filterung nach bestimmten Feldern " +"oder das Abrufen detaillierter bzw. vereinfachter Informationen je nach " +"Anfrage." + +#: core/viewsets.py:185 +msgid "" +"A viewset for managing AttributeValue objects. This viewset provides " +"functionality for listing, retrieving, creating, updating, and deleting " +"AttributeValue objects. It integrates with Django REST Framework's viewset " +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." +msgstr "" +"Ein Viewset für die Verwaltung von AttributeValue-Objekten. Dieses Viewset " +"bietet Funktionen zum Auflisten, Abrufen, Erstellen, Aktualisieren und " +"Löschen von AttributeValue-Objekten. Es integriert sich in die Viewset-" +"Mechanismen des Django REST Frameworks und verwendet geeignete Serialisierer" +" für verschiedene Aktionen. Filterfunktionen werden über das " +"DjangoFilterBackend bereitgestellt." + +#: core/viewsets.py:204 +msgid "" +"Manages views for Category-related operations. The CategoryViewSet class is " +"responsible for handling operations related to the Category model in the " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" +"Verwaltet Ansichten für kategoriebezogene Operationen. Die Klasse " +"CategoryViewSet ist für die Handhabung von Vorgängen im Zusammenhang mit dem" +" Kategoriemodell im System verantwortlich. Sie unterstützt das Abrufen, " +"Filtern und Serialisieren von Kategoriedaten. Das Viewset erzwingt auch " +"Berechtigungen, um sicherzustellen, dass nur autorisierte Benutzer auf " +"bestimmte Daten zugreifen können." + +#: core/viewsets.py:315 +msgid "" +"Represents a viewset for managing Brand instances. This class provides " +"functionality for querying, filtering, and serializing Brand objects. It " +"uses Django's ViewSet framework to simplify the implementation of API " +"endpoints for Brand objects." +msgstr "" +"Stellt ein Viewset zur Verwaltung von Brand-Instanzen dar. Diese Klasse " +"bietet Funktionen zur Abfrage, Filterung und Serialisierung von Brand-" +"Objekten. Sie verwendet das ViewSet-Framework von Django, um die " +"Implementierung von API-Endpunkten für Brand-Objekte zu vereinfachen." + +#: core/viewsets.py:427 +msgid "" +"Manages operations related to the `Product` model in the system. This class " +"provides a viewset for managing products, including their filtering, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" +"Verwaltet Vorgänge im Zusammenhang mit dem Modell \"Produkt\" im System. " +"Diese Klasse bietet ein Viewset für die Verwaltung von Produkten, " +"einschließlich ihrer Filterung, Serialisierung und Operationen für bestimmte" +" Instanzen. Sie ist eine Erweiterung von `EvibesViewSet`, um gemeinsame " +"Funktionen zu nutzen und integriert sich in das Django REST Framework für " +"RESTful API Operationen. Enthält Methoden zum Abrufen von Produktdetails, " +"zur Anwendung von Berechtigungen und zum Zugriff auf zugehörige " +"Rückmeldungen zu einem Produkt." + +#: core/viewsets.py:547 +msgid "" +"Represents a viewset for managing Vendor objects. This viewset allows " +"fetching, filtering, and serializing Vendor data. It defines the queryset, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" +"Stellt ein Viewset für die Verwaltung von Vendor-Objekten dar. Dieses " +"Viewset ermöglicht das Abrufen, Filtern und Serialisieren von Vendor-Daten. " +"Sie definiert das Queryset, die Filterkonfigurationen und die Serializer-" +"Klassen, die für die verschiedenen Aktionen verwendet werden. Der Zweck " +"dieser Klasse ist die Bereitstellung eines optimierten Zugriffs auf Vendor-" +"Ressourcen über das Django REST-Framework." + +#: core/viewsets.py:567 +msgid "" +"Representation of a view set handling Feedback objects. This class manages " +"operations related to Feedback objects, including listing, filtering, and " +"retrieving details. The purpose of this view set is to provide different " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"use of Django's filtering system for querying data." +msgstr "" +"Darstellung eines View-Sets, das Feedback-Objekte behandelt. Diese Klasse " +"verwaltet Vorgänge im Zusammenhang mit Feedback-Objekten, einschließlich " +"Auflistung, Filterung und Abruf von Details. Der Zweck dieses ViewSets ist " +"es, verschiedene Serialisierer für verschiedene Aktionen bereitzustellen und" +" eine erlaubnisbasierte Handhabung von zugänglichen Feedback-Objekten zu " +"implementieren. Es erweitert das Basis `EvibesViewSet` und nutzt das " +"Filtersystem von Django zur Abfrage von Daten." + +#: core/viewsets.py:593 +msgid "" +"ViewSet for managing orders and related operations. This class provides " +"functionality to retrieve, modify, and manage order objects. It includes " +"various endpoints for handling order operations such as adding or removing " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " +"enforces permissions accordingly while interacting with order data." +msgstr "" +"ViewSet zur Verwaltung von Aufträgen und zugehörigen Vorgängen. Diese Klasse" +" bietet Funktionen zum Abrufen, Ändern und Verwalten von Bestellobjekten. " +"Sie enthält verschiedene Endpunkte für die Handhabung von Bestellvorgängen " +"wie das Hinzufügen oder Entfernen von Produkten, die Durchführung von Käufen" +" für registrierte und nicht registrierte Benutzer und das Abrufen der " +"ausstehenden Bestellungen des aktuell authentifizierten Benutzers. Das " +"ViewSet verwendet mehrere Serialisierer, die auf der spezifischen Aktion " +"basieren, die durchgeführt wird, und erzwingt die entsprechenden " +"Berechtigungen, während es mit den Bestelldaten interagiert." + +#: core/viewsets.py:782 +msgid "" +"Provides a viewset for managing OrderProduct entities. This viewset enables " +"CRUD operations and custom actions specific to the OrderProduct model. It " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " +"feedback on OrderProduct instances" +msgstr "" +"Bietet ein Viewset für die Verwaltung von OrderProduct-Entitäten. Dieses " +"Viewset ermöglicht CRUD-Vorgänge und benutzerdefinierte Aktionen speziell " +"für das OrderProduct-Modell. Es umfasst Filterung, Berechtigungsprüfungen " +"und Serializer-Umschaltung auf der Grundlage der angeforderten Aktion. " +"Außerdem bietet es eine detaillierte Aktion für die Bearbeitung von Feedback" +" zu OrderProduct-Instanzen" + +#: core/viewsets.py:833 +msgid "Manages operations related to Product images in the application. " +msgstr "" +"Verwaltet Vorgänge im Zusammenhang mit Produktbildern in der Anwendung." + +#: core/viewsets.py:845 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +msgstr "" +"Verwaltet den Abruf und die Handhabung von PromoCode-Instanzen durch " +"verschiedene API-Aktionen." + +#: core/viewsets.py:866 +msgid "Represents a view set for managing promotions. " +msgstr "Stellt ein Ansichtsset für die Verwaltung von Werbeaktionen dar." + +#: core/viewsets.py:878 +msgid "Handles operations related to Stock data in the system." +msgstr "Erledigt Vorgänge im Zusammenhang mit Bestandsdaten im System." + +#: core/viewsets.py:892 +msgid "" +"ViewSet for managing Wishlist operations. The WishlistViewSet provides " +"endpoints for interacting with a user's wish list, allowing for the " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " +"actions for wishlist products. Permission checks are integrated to ensure " +"that users can only manage their own wishlists unless explicit permissions " +"are granted." +msgstr "" +"ViewSet für die Verwaltung von Wishlist-Vorgängen. Das WishlistViewSet " +"bietet Endpunkte für die Interaktion mit der Wunschliste eines Benutzers und" +" ermöglicht das Abrufen, Ändern und Anpassen von Produkten innerhalb der " +"Wunschliste. Dieses ViewSet erleichtert Funktionen wie das Hinzufügen, " +"Entfernen und Massenaktionen für Produkte auf der Wunschliste. " +"Berechtigungsprüfungen sind integriert, um sicherzustellen, dass Benutzer " +"nur ihre eigenen Wunschlisten verwalten können, sofern keine expliziten " +"Berechtigungen erteilt wurden." + +#: core/viewsets.py:1007 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" +"Diese Klasse bietet Viewset-Funktionalität für die Verwaltung von " +"\"Address\"-Objekten. Die Klasse AddressViewSet ermöglicht CRUD-Operationen," +" Filterung und benutzerdefinierte Aktionen im Zusammenhang mit " +"Adressentitäten. Sie umfasst spezielle Verhaltensweisen für verschiedene " +"HTTP-Methoden, Serialisierungsüberschreibungen und die Behandlung von " +"Berechtigungen auf der Grundlage des Anfragekontexts." + +#: core/viewsets.py:1074 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Geocodierungsfehler: {e}" + +#: core/viewsets.py:1081 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" +"Bearbeitet Vorgänge im Zusammenhang mit Produkt-Tags innerhalb der " +"Anwendung. Diese Klasse bietet Funktionen zum Abrufen, Filtern und " +"Serialisieren von Produkt-Tag-Objekten. Sie unterstützt die flexible " +"Filterung nach bestimmten Attributen unter Verwendung des angegebenen " +"Filter-Backends und verwendet dynamisch verschiedene Serialisierer auf der " +"Grundlage der durchgeführten Aktion." diff --git a/core/locale/en_GB/LC_MESSAGES/django.mo b/core/locale/en_GB/LC_MESSAGES/django.mo index 5db53afc01febfe5aecb2d727780951fe8e6b88f..6dcc5c6f0ea9e3044d66fc0f78437d2c68f54e74 100644 GIT binary patch delta 26153 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\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:11 +#: core/abstract.py:12 msgid "unique id" msgstr "Unique ID" -#: core/abstract.py:12 +#: 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:19 +#: core/abstract.py:20 msgid "is active" msgstr "Is Active" -#: core/abstract.py:20 +#: core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" @@ -37,19 +37,19 @@ msgstr "" "If set to false, this object can't be seen by users without needed " "permission" -#: core/abstract.py:22 core/choices.py:18 +#: core/abstract.py:23 core/choices.py:18 msgid "created" msgstr "Created" -#: core/abstract.py:22 +#: 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:23 +#: core/abstract.py:24 msgid "modified" msgstr "Modified" -#: core/abstract.py:23 +#: core/abstract.py:24 msgid "when the object was last modified" msgstr "When the object was last edited" @@ -92,11 +92,11 @@ msgid "selected items have been deactivated." msgstr "Selected items have been deactivated!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 +#: core/graphene/object_types.py:616 core/models.py:701 core/models.py:709 msgid "attribute value" msgstr "Attribute Value" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 msgid "attribute values" msgstr "Attribute Values" @@ -108,7 +108,7 @@ msgstr "Image" msgid "images" msgstr "Images" -#: core/admin.py:155 core/models.py:445 +#: core/admin.py:155 core/models.py:459 msgid "stock" msgstr "Stock" @@ -116,11 +116,11 @@ msgstr "Stock" msgid "stocks" msgstr "Stocks" -#: core/admin.py:166 core/models.py:1609 +#: core/admin.py:166 core/models.py:1667 msgid "order product" msgstr "Order Product" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 msgid "order products" msgstr "Order Products" @@ -712,7 +712,7 @@ msgstr "delete an order–product relation" msgid "add or remove feedback on an order–product relation" msgstr "add or remove feedback on an order–product relation" -#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 msgid "no search term provided." msgstr "No search term provided." @@ -765,7 +765,7 @@ msgid "Quantity" msgstr "Quantity" #: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:287 core/models.py:369 core/models.py:522 +#: core/models.py:301 core/models.py:383 core/models.py:536 msgid "Slug" msgstr "Slug" @@ -781,7 +781,7 @@ msgstr "Include sub-categories" msgid "Include personal ordered" msgstr "Include personal ordered products" -#: core/filters.py:85 core/models.py:526 +#: core/filters.py:85 core/models.py:540 msgid "SKU" msgstr "SKU" @@ -854,7 +854,7 @@ msgstr "Cached data" msgid "camelized JSON data from the requested URL" msgstr "Camelized JSON data from the requested URL" -#: core/graphene/mutations.py:65 core/views.py:360 +#: core/graphene/mutations.py:65 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "Only URLs starting with http(s):// are allowed" @@ -885,7 +885,7 @@ 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:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:839 +#: core/graphene/mutations.py:527 core/viewsets.py:679 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Wrong type came from order.buy() method: {type(instance)!s}" @@ -961,9 +961,9 @@ msgstr "Orderproduct {order_product_uuid} not found!" msgid "original address string provided by the user" msgstr "Original address string provided by the user" -#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 -#: core/models.py:1234 core/models.py:1263 core/models.py:1288 -#: core/viewsets.py:842 +#: core/graphene/mutations.py:656 core/models.py:849 core/models.py:862 +#: core/models.py:1281 core/models.py:1310 core/models.py:1335 +#: core/viewsets.py:682 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} does not exist: {uuid}!" @@ -977,8 +977,8 @@ msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - works like a charm" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 -#: core/models.py:1686 +#: core/graphene/object_types.py:444 core/models.py:672 core/models.py:1144 +#: core/models.py:1744 msgid "attributes" msgstr "Attributes" @@ -991,11 +991,11 @@ 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:224 core/models.py:312 core/models.py:612 +#: core/graphene/object_types.py:224 core/models.py:326 core/models.py:626 msgid "categories" msgstr "Categories" -#: core/graphene/object_types.py:124 core/models.py:383 +#: core/graphene/object_types.py:124 core/models.py:397 msgid "brands" msgstr "Brands" @@ -1004,7 +1004,7 @@ msgid "category image url" msgstr "Categories" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:249 +#: core/models.py:263 msgid "markup percentage" msgstr "Markup Percentage" @@ -1026,7 +1026,7 @@ msgstr "Tags for this category" msgid "products in this category" msgstr "Products in this category" -#: core/graphene/object_types.py:351 core/models.py:155 +#: core/graphene/object_types.py:351 core/models.py:169 msgid "vendors" msgstr "Vendors" @@ -1051,7 +1051,7 @@ msgid "represents feedback from a user." msgstr "Represents feedback from a user." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1110 +#: core/models.py:1138 msgid "notifications" msgstr "Notifications" @@ -1059,7 +1059,7 @@ msgstr "Notifications" msgid "download url for this order product if applicable" msgstr "Download url for this order product if applicable" -#: core/graphene/object_types.py:400 core/models.py:1791 +#: core/graphene/object_types.py:400 core/models.py:1860 msgid "feedback" msgstr "Feedback" @@ -1067,7 +1067,7 @@ msgstr "Feedback" msgid "a list of order products in this order" msgstr "A list of order products in this order" -#: core/graphene/object_types.py:436 core/models.py:1080 +#: core/graphene/object_types.py:436 core/models.py:1108 msgid "billing address" msgstr "Billing address" @@ -1095,7 +1095,7 @@ msgstr "Are all of the products in the order digital" msgid "transactions for this order" msgstr "Transactions for this order" -#: core/graphene/object_types.py:465 core/models.py:1144 +#: core/graphene/object_types.py:465 core/models.py:1172 msgid "orders" msgstr "Orders" @@ -1107,15 +1107,15 @@ msgstr "Image URL" msgid "product's images" msgstr "Product's images" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 +#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 msgid "category" msgstr "Category" -#: core/graphene/object_types.py:502 core/models.py:1792 +#: core/graphene/object_types.py:502 core/models.py:1861 msgid "feedbacks" msgstr "Feedbacks" -#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 +#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 msgid "brand" msgstr "Brand" @@ -1147,7 +1147,7 @@ msgstr "Number of feedbacks" msgid "only available for personal orders" msgstr "Products only available for personal orders" -#: core/graphene/object_types.py:534 core/models.py:536 +#: core/graphene/object_types.py:534 core/models.py:550 msgid "products" msgstr "Products" @@ -1159,15 +1159,15 @@ msgstr "Promocodes" msgid "products on sale" msgstr "Products on sale" -#: core/graphene/object_types.py:651 core/models.py:784 +#: core/graphene/object_types.py:651 core/models.py:798 msgid "promotions" msgstr "Promotions" -#: core/graphene/object_types.py:655 core/models.py:154 +#: core/graphene/object_types.py:655 core/models.py:168 msgid "vendor" msgstr "Vendor" -#: core/graphene/object_types.py:656 core/models.py:535 +#: core/graphene/object_types.py:656 core/models.py:549 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1175,11 +1175,11 @@ msgstr "Vendor" msgid "product" msgstr "Product" -#: core/graphene/object_types.py:667 core/models.py:807 +#: core/graphene/object_types.py:667 core/models.py:821 msgid "wishlisted products" msgstr "Wishlisted products" -#: core/graphene/object_types.py:673 core/models.py:824 +#: core/graphene/object_types.py:673 core/models.py:838 msgid "wishlists" msgstr "Wishlists" @@ -1187,7 +1187,7 @@ msgstr "Wishlists" msgid "tagged products" msgstr "Tagged products" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 +#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 msgid "product tags" msgstr "Product tags" @@ -1296,7 +1296,7 @@ msgstr "Parent attribute group" msgid "attribute group's name" msgstr "Attribute group's name" -#: core/models.py:100 core/models.py:620 +#: core/models.py:100 core/models.py:634 msgid "attribute group" msgstr "Attribute group" @@ -1343,7 +1343,7 @@ msgstr "Name of this vendor" msgid "vendor name" msgstr "Vendor name" -#: core/models.py:163 +#: core/models.py:177 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1357,27 +1357,27 @@ msgstr "" "display name. It supports operations exported through mixins and provides " "metadata customization for administrative purposes." -#: core/models.py:175 core/models.py:206 +#: core/models.py:189 core/models.py:220 msgid "internal tag identifier for the product tag" msgstr "Internal tag identifier for the product tag" -#: core/models.py:176 core/models.py:207 +#: core/models.py:190 core/models.py:221 msgid "tag name" msgstr "Tag name" -#: core/models.py:180 core/models.py:211 +#: core/models.py:194 core/models.py:225 msgid "user-friendly name for the product tag" msgstr "User-friendly name for the product tag" -#: core/models.py:181 core/models.py:212 +#: core/models.py:195 core/models.py:226 msgid "tag display name" msgstr "Tag display name" -#: core/models.py:189 +#: core/models.py:203 msgid "product tag" msgstr "Product tag" -#: core/models.py:195 +#: core/models.py:209 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 " @@ -1387,15 +1387,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:220 +#: core/models.py:234 msgid "category tag" msgstr "category tag" -#: core/models.py:221 core/models.py:293 +#: core/models.py:235 core/models.py:307 msgid "category tags" msgstr "category tags" -#: core/models.py:226 +#: core/models.py:240 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1417,51 +1417,51 @@ msgstr "" "hierarchy of categories, as well as assign attributes like images, tags, or " "priority." -#: core/models.py:240 +#: core/models.py:254 msgid "upload an image representing this category" msgstr "Upload an image representing this category" -#: core/models.py:243 +#: core/models.py:257 msgid "category image" msgstr "Category image" -#: core/models.py:248 +#: core/models.py:262 msgid "define a markup percentage for products in this category" msgstr "Define a markup percentage for products in this category" -#: core/models.py:257 +#: core/models.py:271 msgid "parent of this category to form a hierarchical structure" msgstr "Parent of this category to form a hierarchical structure" -#: core/models.py:258 +#: core/models.py:272 msgid "parent category" msgstr "Parent category" -#: core/models.py:263 +#: core/models.py:277 msgid "category name" msgstr "Category name" -#: core/models.py:264 +#: core/models.py:278 msgid "provide a name for this category" msgstr "Provide a name for this category" -#: core/models.py:271 +#: core/models.py:285 msgid "add a detailed description for this category" msgstr "Add a detailed description for this category" -#: core/models.py:272 +#: core/models.py:286 msgid "category description" msgstr "Category description" -#: core/models.py:292 +#: core/models.py:306 msgid "tags that help describe or group this category" msgstr "tags that help describe or group this category" -#: core/models.py:299 core/models.py:375 +#: core/models.py:313 core/models.py:389 msgid "priority" msgstr "Priority" -#: core/models.py:318 +#: core/models.py:332 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1475,47 +1475,47 @@ msgstr "" "organization and representation of brand-related data within the " "application." -#: core/models.py:328 +#: core/models.py:342 msgid "name of this brand" msgstr "Name of this brand" -#: core/models.py:329 +#: core/models.py:343 msgid "brand name" msgstr "Brand name" -#: core/models.py:336 +#: core/models.py:350 msgid "upload a logo representing this brand" msgstr "Upload a logo representing this brand" -#: core/models.py:338 +#: core/models.py:352 msgid "brand small image" msgstr "Brand small image" -#: core/models.py:344 +#: core/models.py:358 msgid "upload a big logo representing this brand" msgstr "Upload a big logo representing this brand" -#: core/models.py:346 +#: core/models.py:360 msgid "brand big image" msgstr "Brand big image" -#: core/models.py:351 +#: core/models.py:365 msgid "add a detailed description of the brand" msgstr "Add a detailed description of the brand" -#: core/models.py:352 +#: core/models.py:366 msgid "brand description" msgstr "Brand description" -#: core/models.py:357 +#: core/models.py:371 msgid "optional categories that this brand is associated with" msgstr "Optional categories that this brand is associated with" -#: core/models.py:358 +#: core/models.py:372 msgid "associated categories" msgstr "Categories" -#: core/models.py:388 +#: core/models.py:402 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1531,68 +1531,68 @@ msgstr "" "management system to allow tracking and evaluation of products available " "from various vendors." -#: core/models.py:400 +#: core/models.py:414 msgid "the vendor supplying this product stock" msgstr "The vendor supplying this product stock" -#: core/models.py:401 +#: core/models.py:415 msgid "associated vendor" msgstr "Associated vendor" -#: core/models.py:405 +#: core/models.py:419 msgid "final price to the customer after markups" msgstr "Final price to the customer after markups" -#: core/models.py:406 +#: core/models.py:420 msgid "selling price" msgstr "Selling price" -#: core/models.py:411 +#: core/models.py:425 msgid "the product associated with this stock entry" msgstr "The product associated with this stock entry" -#: core/models.py:412 core/models.py:683 core/models.py:730 -#: core/models.py:1583 +#: core/models.py:426 core/models.py:697 core/models.py:744 +#: core/models.py:1641 msgid "associated product" msgstr "Associated product" -#: core/models.py:419 +#: core/models.py:433 msgid "the price paid to the vendor for this product" msgstr "The price paid to the vendor for this product" -#: core/models.py:420 +#: core/models.py:434 msgid "vendor purchase price" msgstr "Vendor purchase price" -#: core/models.py:424 +#: core/models.py:438 msgid "available quantity of the product in stock" msgstr "Available quantity of the product in stock" -#: core/models.py:425 +#: core/models.py:439 msgid "quantity in stock" msgstr "Quantity in stock" -#: core/models.py:429 +#: core/models.py:443 msgid "vendor-assigned SKU for identifying the product" msgstr "Vendor-assigned SKU for identifying the product" -#: core/models.py:430 +#: core/models.py:444 msgid "vendor sku" msgstr "Vendor's SKU" -#: core/models.py:436 +#: core/models.py:450 msgid "digital file associated with this stock if applicable" msgstr "Digital file associated with this stock if applicable" -#: core/models.py:437 +#: core/models.py:451 msgid "digital file" msgstr "Digital file" -#: core/models.py:446 +#: core/models.py:460 msgid "stock entries" msgstr "Stock entries" -#: core/models.py:451 +#: core/models.py:465 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1612,55 +1612,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:464 +#: core/models.py:478 msgid "category this product belongs to" msgstr "Category this product belongs to" -#: core/models.py:473 +#: core/models.py:487 msgid "optionally associate this product with a brand" msgstr "Optionally associate this product with a brand" -#: core/models.py:479 +#: core/models.py:493 msgid "tags that help describe or group this product" msgstr "Tags that help describe or group this product" -#: core/models.py:484 +#: core/models.py:498 msgid "indicates whether this product is digitally delivered" msgstr "Indicates whether this product is digitally delivered" -#: core/models.py:485 +#: core/models.py:499 msgid "is product digital" msgstr "Is product digital" -#: core/models.py:491 +#: core/models.py:505 msgid "provide a clear identifying name for the product" msgstr "Provide a clear identifying name for the product" -#: core/models.py:492 +#: core/models.py:506 msgid "product name" msgstr "Product name" -#: core/models.py:497 core/models.py:772 +#: core/models.py:511 core/models.py:786 msgid "add a detailed description of the product" msgstr "Add a detailed description of the product" -#: core/models.py:498 +#: core/models.py:512 msgid "product description" msgstr "Product description" -#: core/models.py:505 +#: core/models.py:519 msgid "part number for this product" msgstr "Part number for this product" -#: core/models.py:506 +#: core/models.py:520 msgid "part number" msgstr "Part number" -#: core/models.py:525 +#: core/models.py:539 msgid "stock keeping unit for this product" msgstr "Stock Keeping Unit for this product" -#: core/models.py:599 +#: core/models.py:613 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 " @@ -1676,68 +1676,68 @@ msgstr "" " including string, integer, float, boolean, array, and object. This allows " "for dynamic and flexible data structuring." -#: core/models.py:611 +#: core/models.py:625 msgid "category of this attribute" msgstr "Category of this attribute" -#: core/models.py:619 +#: core/models.py:633 msgid "group of this attribute" msgstr "Group of this attribute" -#: core/models.py:625 +#: core/models.py:639 msgid "string" msgstr "String" -#: core/models.py:626 +#: core/models.py:640 msgid "integer" msgstr "Integer" -#: core/models.py:627 +#: core/models.py:641 msgid "float" msgstr "Float" -#: core/models.py:628 +#: core/models.py:642 msgid "boolean" msgstr "Boolean" -#: core/models.py:629 +#: core/models.py:643 msgid "array" msgstr "Array" -#: core/models.py:630 +#: core/models.py:644 msgid "object" msgstr "Object" -#: core/models.py:632 +#: core/models.py:646 msgid "type of the attribute's value" msgstr "Type of the attribute's value" -#: core/models.py:633 +#: core/models.py:647 msgid "value type" msgstr "Value type" -#: core/models.py:638 +#: core/models.py:652 msgid "name of this attribute" msgstr "Name of this attribute" -#: core/models.py:639 +#: core/models.py:653 msgid "attribute's name" msgstr "Attribute's name" -#: core/models.py:645 +#: core/models.py:659 msgid "is filterable" msgstr "is filterable" -#: core/models.py:646 +#: core/models.py:660 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:657 core/models.py:675 +#: core/models.py:671 core/models.py:689 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attribute" -#: core/models.py:663 +#: core/models.py:677 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" @@ -1747,19 +1747,19 @@ msgstr "" " links the 'attribute' to a unique 'value', allowing better organization and" " dynamic representation of product characteristics." -#: core/models.py:674 +#: core/models.py:688 msgid "attribute of this value" msgstr "Attribute of this value" -#: core/models.py:682 +#: core/models.py:696 msgid "the specific product associated with this attribute's value" msgstr "The specific product associated with this attribute's value" -#: core/models.py:688 +#: core/models.py:702 msgid "the specific value for this attribute" msgstr "The specific value for this attribute" -#: core/models.py:701 +#: core/models.py:715 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -1773,39 +1773,39 @@ msgstr "" "determining their display order. It also includes an accessibility feature " "with alternative text for the images." -#: core/models.py:712 +#: core/models.py:726 msgid "provide alternative text for the image for accessibility" msgstr "Provide alternative text for the image for accessibility" -#: core/models.py:713 +#: core/models.py:727 msgid "image alt text" msgstr "Image alt text" -#: core/models.py:716 +#: core/models.py:730 msgid "upload the image file for this product" msgstr "Upload the image file for this product" -#: core/models.py:717 core/models.py:742 +#: core/models.py:731 core/models.py:756 msgid "product image" msgstr "Product image" -#: core/models.py:723 +#: core/models.py:737 msgid "determines the order in which images are displayed" msgstr "Determines the order in which images are displayed" -#: core/models.py:724 +#: core/models.py:738 msgid "display priority" msgstr "Display priority" -#: core/models.py:729 +#: core/models.py:743 msgid "the product that this image represents" msgstr "The product that this image represents" -#: core/models.py:743 +#: core/models.py:757 msgid "product images" msgstr "Product images" -#: core/models.py:748 +#: core/models.py:762 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1821,39 +1821,39 @@ msgstr "" "applicable products. It integrates with the product catalog to determine the" " affected items in the campaign." -#: core/models.py:760 +#: core/models.py:774 msgid "percentage discount for the selected products" msgstr "Percentage discount for the selected products" -#: core/models.py:761 +#: core/models.py:775 msgid "discount percentage" msgstr "Discount percentage" -#: core/models.py:766 +#: core/models.py:780 msgid "provide a unique name for this promotion" msgstr "Provide a unique name for this promotion" -#: core/models.py:767 +#: core/models.py:781 msgid "promotion name" msgstr "Promotion name" -#: core/models.py:773 +#: core/models.py:787 msgid "promotion description" msgstr "Promotion description" -#: core/models.py:778 +#: core/models.py:792 msgid "select which products are included in this promotion" msgstr "Select which products are included in this promotion" -#: core/models.py:779 +#: core/models.py:793 msgid "included products" msgstr "Included products" -#: core/models.py:783 +#: core/models.py:797 msgid "promotion" msgstr "Promotion" -#: core/models.py:794 +#: core/models.py:808 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1865,23 +1865,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:806 +#: core/models.py:820 msgid "products that the user has marked as wanted" msgstr "Products that the user has marked as wanted" -#: core/models.py:814 +#: core/models.py:828 msgid "user who owns this wishlist" msgstr "User who owns this wishlist" -#: core/models.py:815 +#: core/models.py:829 msgid "wishlist owner" msgstr "Wishlist's Owner" -#: core/models.py:823 +#: core/models.py:837 msgid "wishlist" msgstr "Wishlist" -#: core/models.py:865 +#: core/models.py:879 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1897,19 +1897,19 @@ msgstr "" "files. It extends functionality from specific mixins and provides additional" " custom features." -#: core/models.py:878 +#: core/models.py:892 msgid "documentary" msgstr "Documentary" -#: core/models.py:879 +#: core/models.py:893 msgid "documentaries" msgstr "Documentaries" -#: core/models.py:889 +#: core/models.py:903 msgid "unresolved" msgstr "Unresolved" -#: core/models.py:894 +#: core/models.py:908 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1929,59 +1929,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:909 +#: core/models.py:923 msgid "address line for the customer" msgstr "Address line for the customer" -#: core/models.py:910 +#: core/models.py:924 msgid "address line" msgstr "Address line" -#: core/models.py:912 +#: core/models.py:926 msgid "street" msgstr "Street" -#: core/models.py:913 +#: core/models.py:927 msgid "district" msgstr "District" -#: core/models.py:914 +#: core/models.py:928 msgid "city" msgstr "City" -#: core/models.py:915 +#: core/models.py:929 msgid "region" msgstr "Region" -#: core/models.py:916 +#: core/models.py:930 msgid "postal code" msgstr "Postal code" -#: core/models.py:917 +#: core/models.py:931 msgid "country" msgstr "Country" -#: core/models.py:924 +#: core/models.py:938 msgid "geolocation point: (longitude, latitude)" msgstr "Geolocation Point(Longitude, Latitude)" -#: core/models.py:927 +#: core/models.py:941 msgid "full JSON response from geocoder for this address" msgstr "Full JSON response from geocoder for this address" -#: core/models.py:932 +#: core/models.py:946 msgid "stored JSON response from the geocoding service" msgstr "Stored JSON response from the geocoding service" -#: core/models.py:940 +#: core/models.py:954 msgid "address" msgstr "Address" -#: core/models.py:941 +#: core/models.py:955 msgid "addresses" msgstr "Adresses" -#: core/models.py:953 +#: core/models.py:967 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -1997,71 +1997,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:967 +#: core/models.py:981 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:968 +#: core/models.py:982 msgid "promo code identifier" msgstr "Promo code identifier" -#: core/models.py:975 +#: core/models.py:989 msgid "fixed discount amount applied if percent is not used" msgstr "Fixed discount amount applied if percent is not used" -#: core/models.py:976 +#: core/models.py:990 msgid "fixed discount amount" msgstr "Fixed discount amount" -#: core/models.py:982 +#: core/models.py:996 msgid "percentage discount applied if fixed amount is not used" msgstr "Percentage discount applied if fixed amount is not used" -#: core/models.py:983 +#: core/models.py:997 msgid "percentage discount" msgstr "Percentage discount" -#: core/models.py:988 +#: core/models.py:1002 msgid "timestamp when the promocode expires" msgstr "Timestamp when the promocode expires" -#: core/models.py:989 +#: core/models.py:1003 msgid "end validity time" msgstr "End validity time" -#: core/models.py:994 +#: core/models.py:1008 msgid "timestamp from which this promocode is valid" msgstr "Timestamp from which this promocode is valid" -#: core/models.py:995 +#: core/models.py:1009 msgid "start validity time" msgstr "Start validity time" -#: core/models.py:1000 +#: core/models.py:1014 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:1001 +#: core/models.py:1015 msgid "usage timestamp" msgstr "Usage timestamp" -#: core/models.py:1006 +#: core/models.py:1020 msgid "user assigned to this promocode if applicable" msgstr "User assigned to this promocode if applicable" -#: core/models.py:1007 +#: core/models.py:1021 msgid "assigned user" msgstr "Assigned user" -#: core/models.py:1014 +#: core/models.py:1028 msgid "promo code" msgstr "Promo code" -#: core/models.py:1015 +#: core/models.py:1029 msgid "promo codes" msgstr "Promo codes" -#: core/models.py:1022 +#: core/models.py:1044 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2069,16 +2069,16 @@ msgstr "" "Only one type of discount should be defined (amount or percent), but not " "both or neither." -#: core/models.py:1037 +#: core/models.py:1065 msgid "promocode already used" msgstr "Promocode has been used already" -#: core/models.py:1053 +#: core/models.py:1081 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Invalid discount type for promocode {self.uuid}!" -#: core/models.py:1062 +#: core/models.py:1090 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 " @@ -2094,135 +2094,135 @@ msgstr "" "set, and shipping or billing details updated. Equally, functionality " "supports managing the products in the order lifecycle." -#: core/models.py:1079 +#: core/models.py:1107 msgid "the billing address used for this order" msgstr "The billing address used for this order" -#: core/models.py:1087 +#: core/models.py:1115 msgid "optional promo code applied to this order" msgstr "Optional promo code applied to this order" -#: core/models.py:1088 +#: core/models.py:1116 msgid "applied promo code" msgstr "Applied promo code" -#: core/models.py:1096 +#: core/models.py:1124 msgid "the shipping address used for this order" msgstr "The shipping address used for this order" -#: core/models.py:1097 +#: core/models.py:1125 msgid "shipping address" msgstr "Shipping address" -#: core/models.py:1103 +#: core/models.py:1131 msgid "current status of the order in its lifecycle" msgstr "Current status of the order in its lifecycle" -#: core/models.py:1104 +#: core/models.py:1132 msgid "order status" msgstr "Order status" -#: core/models.py:1109 core/models.py:1560 +#: core/models.py:1137 core/models.py:1618 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:1115 +#: core/models.py:1143 msgid "json representation of order attributes for this order" msgstr "JSON representation of order attributes for this order" -#: core/models.py:1121 +#: core/models.py:1149 msgid "the user who placed the order" msgstr "The user who placed the order" -#: core/models.py:1122 +#: core/models.py:1150 msgid "user" msgstr "User" -#: core/models.py:1128 +#: core/models.py:1156 msgid "the timestamp when the order was finalized" msgstr "The timestamp when the order was finalized" -#: core/models.py:1129 +#: core/models.py:1157 msgid "buy time" msgstr "Buy time" -#: core/models.py:1136 +#: core/models.py:1164 msgid "a human-readable identifier for the order" msgstr "A human-readable identifier for the order" -#: core/models.py:1137 +#: core/models.py:1165 msgid "human readable id" msgstr "human-readable ID" -#: core/models.py:1143 +#: core/models.py:1171 msgid "order" msgstr "Order" -#: core/models.py:1168 +#: core/models.py:1209 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:1202 +#: core/models.py:1249 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:1207 +#: core/models.py:1254 msgid "you cannot add inactive products to order" msgstr "You cannot add inactive products to order" -#: core/models.py:1224 +#: core/models.py:1271 msgid "you cannot add more products than available in stock" msgstr "You cannot add more products than available in stock" -#: core/models.py:1246 core/models.py:1271 core/models.py:1279 +#: core/models.py:1293 core/models.py:1318 core/models.py:1326 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:1267 +#: core/models.py:1314 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} does not exist with query <{query}>!" -#: core/models.py:1299 +#: core/models.py:1346 msgid "promocode does not exist" msgstr "Promocode does not exist" -#: core/models.py:1305 +#: core/models.py:1352 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:1324 +#: core/models.py:1371 msgid "address does not exist" msgstr "Address does not exist" -#: core/models.py:1345 core/models.py:1414 +#: core/models.py:1392 core/models.py:1461 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:1348 core/models.py:1410 +#: core/models.py:1395 core/models.py:1457 msgid "invalid force value" msgstr "Invalid force value" -#: core/models.py:1354 core/models.py:1417 +#: core/models.py:1401 core/models.py:1464 msgid "you cannot purchase an empty order!" msgstr "You cannot purchase an empty order!" -#: core/models.py:1373 +#: core/models.py:1420 msgid "you cannot buy an order without a user" msgstr "You cannot buy an order without a user!" -#: core/models.py:1387 +#: core/models.py:1434 msgid "a user without a balance cannot buy with balance" msgstr "A user without a balance cannot buy with balance!" -#: core/models.py:1392 +#: core/models.py:1439 msgid "insufficient funds to complete the order" msgstr "Insufficient funds to complete the order" -#: core/models.py:1426 +#: core/models.py:1473 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2230,14 +2230,14 @@ msgstr "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" -#: core/models.py:1435 +#: core/models.py:1482 #, 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:1533 +#: core/models.py:1591 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2259,108 +2259,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:1548 +#: core/models.py:1606 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:1549 +#: core/models.py:1607 msgid "purchase price at order time" msgstr "Purchase price at order time" -#: core/models.py:1554 +#: core/models.py:1612 msgid "internal comments for admins about this ordered product" msgstr "Internal comments for admins about this ordered product" -#: core/models.py:1555 +#: core/models.py:1613 msgid "internal comments" msgstr "Internal comments" -#: core/models.py:1561 +#: core/models.py:1619 msgid "user notifications" msgstr "User notifications" -#: core/models.py:1566 +#: core/models.py:1624 msgid "json representation of this item's attributes" msgstr "JSON representation of this item's attributes" -#: core/models.py:1567 +#: core/models.py:1625 msgid "ordered product attributes" msgstr "Ordered product attributes" -#: core/models.py:1572 +#: core/models.py:1630 msgid "reference to the parent order that contains this product" msgstr "Reference to the parent order that contains this product" -#: core/models.py:1573 +#: core/models.py:1631 msgid "parent order" msgstr "Parent order" -#: core/models.py:1582 +#: core/models.py:1640 msgid "the specific product associated with this order line" msgstr "The specific product associated with this order line" -#: core/models.py:1589 +#: core/models.py:1647 msgid "quantity of this specific product in the order" msgstr "Quantity of this specific product in the order" -#: core/models.py:1590 +#: core/models.py:1648 msgid "product quantity" msgstr "Product quantity" -#: core/models.py:1597 +#: core/models.py:1655 msgid "current status of this product in the order" msgstr "Current status of this product in the order" -#: core/models.py:1598 +#: core/models.py:1656 msgid "product line status" msgstr "Product line status" -#: core/models.py:1661 +#: core/models.py:1719 msgid "order product must have an order" msgstr "Orderproduct must have an associated order!" -#: core/models.py:1663 +#: core/models.py:1721 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Wrong action specified for feedback: {action}!" -#: core/models.py:1677 +#: core/models.py:1735 msgid "you cannot feedback an order which is not received" msgstr "you cannot feedback an order which is not received" -#: core/models.py:1683 +#: core/models.py:1741 msgid "name" msgstr "Name" -#: core/models.py:1684 +#: core/models.py:1742 msgid "URL of the integration" msgstr "URL of the integration" -#: core/models.py:1685 +#: core/models.py:1743 msgid "authentication credentials" msgstr "Authentication credentials" -#: core/models.py:1699 +#: core/models.py:1765 msgid "you can only have one default CRM provider" msgstr "You can only have one default CRM provider" -#: core/models.py:1703 +#: core/models.py:1775 msgid "CRM" msgstr "CRM" -#: core/models.py:1704 +#: core/models.py:1776 msgid "CRMs" msgstr "CRMs" -#: core/models.py:1716 +#: core/models.py:1788 msgid "order CRM link" msgstr "Order's CRM link" -#: core/models.py:1717 +#: core/models.py:1789 msgid "orders CRM links" msgstr "Orders' CRM links" -#: core/models.py:1722 +#: core/models.py:1794 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2376,19 +2376,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:1736 +#: core/models.py:1808 msgid "download" msgstr "Download" -#: core/models.py:1737 +#: core/models.py:1809 msgid "downloads" msgstr "Downloads" -#: core/models.py:1745 -msgid "you can not download a digital asset for a non-finished order" -msgstr "You can not download a digital asset for a non-finished order" - -#: core/models.py:1754 +#: core/models.py:1823 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2402,29 +2398,29 @@ 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:1766 +#: core/models.py:1835 msgid "user-provided comments about their experience with the product" msgstr "User-provided comments about their experience with the product" -#: core/models.py:1767 +#: core/models.py:1836 msgid "feedback comments" msgstr "Feedback comments" -#: core/models.py:1774 +#: core/models.py:1843 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:1775 +#: core/models.py:1844 msgid "related order product" msgstr "Related order product" -#: core/models.py:1780 +#: core/models.py:1849 msgid "user-assigned rating for the product" msgstr "User-assigned rating for the product" -#: core/models.py:1781 +#: core/models.py:1850 msgid "product rating" msgstr "Product rating" @@ -2628,11 +2624,11 @@ msgstr "" "All rights\n" " reserved" -#: core/utils/caching.py:41 +#: core/utils/caching.py:48 msgid "both data and timeout are required" msgstr "Both data and timeout are required" -#: core/utils/caching.py:43 +#: core/utils/caching.py:50 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "Invalid timeout value, it must be between 0 and 216000 seconds" @@ -2664,25 +2660,337 @@ msgstr "You do not have permission to perform this action." msgid "NOMINATIM_URL must be configured." msgstr "NOMINATIM_URL parameter must be configured!" -#: core/validators.py:16 +#: core/validators.py:14 #, 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/validators.py:22 -msgid "invalid phone number format" -msgstr "Invalid phone number format" +#: core/views.py:72 +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 "" +"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:489 +#: core/views.py:87 +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 "" +"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." + +#: core/views.py:116 +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 +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 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +msgstr "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." + +#: core/views.py:194 +msgid "Handles `contact us` form submissions." +msgstr "Handles `contact us` form submissions." + +#: core/views.py:215 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." + +#: core/views.py:255 +msgid "Handles global search queries." +msgstr "Handles global search queries." + +#: core/views.py:270 +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:312 msgid "you can only download the digital asset once" msgstr "You can only download the digital asset once" -#: core/views.py:547 +#: core/views.py:315 +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:353 +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." +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:365 msgid "favicon not found" msgstr "favicon not found" -#: core/viewsets.py:1357 +#: core/views.py:370 +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." +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:382 +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 "" +"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." + +#: core/viewsets.py:128 +msgid "" +"Defines a viewset for managing Evibes-related operations. The EvibesViewSet " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" +"Defines a viewset for managing Evibes-related operations. The EvibesViewSet " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." + +#: core/viewsets.py:147 +msgid "" +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." +msgstr "" +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." + +#: core/viewsets.py:166 +msgid "" +"Handles operations related to Attribute objects within the application. " +"Provides a set of API endpoints to interact with Attribute data. This class " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"Handles operations related to Attribute objects within the application. " +"Provides a set of API endpoints to interact with Attribute data. This class " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." + +#: core/viewsets.py:185 +msgid "" +"A viewset for managing AttributeValue objects. This viewset provides " +"functionality for listing, retrieving, creating, updating, and deleting " +"AttributeValue objects. It integrates with Django REST Framework's viewset " +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." +msgstr "" +"A viewset for managing AttributeValue objects. This viewset provides " +"functionality for listing, retrieving, creating, updating, and deleting " +"AttributeValue objects. It integrates with Django REST Framework's viewset " +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." + +#: core/viewsets.py:204 +msgid "" +"Manages views for Category-related operations. The CategoryViewSet class is " +"responsible for handling operations related to the Category model in the " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" +"Manages views for Category-related operations. The CategoryViewSet class is " +"responsible for handling operations related to the Category model in the " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." + +#: core/viewsets.py:315 +msgid "" +"Represents a viewset for managing Brand instances. This class provides " +"functionality for querying, filtering, and serializing Brand objects. It " +"uses Django's ViewSet framework to simplify the implementation of API " +"endpoints for Brand objects." +msgstr "" +"Represents a viewset for managing Brand instances. This class provides " +"functionality for querying, filtering, and serializing Brand objects. It " +"uses Django's ViewSet framework to simplify the implementation of API " +"endpoints for Brand objects." + +#: core/viewsets.py:427 +msgid "" +"Manages operations related to the `Product` model in the system. This class " +"provides a viewset for managing products, including their filtering, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" +"Manages operations related to the `Product` model in the system. This class " +"provides a viewset for managing products, including their filtering, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." + +#: core/viewsets.py:547 +msgid "" +"Represents a viewset for managing Vendor objects. This viewset allows " +"fetching, filtering, and serializing Vendor data. It defines the queryset, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" +"Represents a viewset for managing Vendor objects. This viewset allows " +"fetching, filtering, and serializing Vendor data. It defines the queryset, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." + +#: core/viewsets.py:567 +msgid "" +"Representation of a view set handling Feedback objects. This class manages " +"operations related to Feedback objects, including listing, filtering, and " +"retrieving details. The purpose of this view set is to provide different " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"use of Django's filtering system for querying data." +msgstr "" +"Representation of a view set handling Feedback objects. This class manages " +"operations related to Feedback objects, including listing, filtering, and " +"retrieving details. The purpose of this view set is to provide different " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"use of Django's filtering system for querying data." + +#: core/viewsets.py:593 +msgid "" +"ViewSet for managing orders and related operations. This class provides " +"functionality to retrieve, modify, and manage order objects. It includes " +"various endpoints for handling order operations such as adding or removing " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " +"enforces permissions accordingly while interacting with order data." +msgstr "" +"ViewSet for managing orders and related operations. This class provides " +"functionality to retrieve, modify, and manage order objects. It includes " +"various endpoints for handling order operations such as adding or removing " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " +"enforces permissions accordingly while interacting with order data." + +#: core/viewsets.py:782 +msgid "" +"Provides a viewset for managing OrderProduct entities. This viewset enables " +"CRUD operations and custom actions specific to the OrderProduct model. It " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " +"feedback on OrderProduct instances" +msgstr "" +"Provides a viewset for managing OrderProduct entities. This viewset enables " +"CRUD operations and custom actions specific to the OrderProduct model. It " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " +"feedback on OrderProduct instances" + +#: core/viewsets.py:833 +msgid "Manages operations related to Product images in the application. " +msgstr "Manages operations related to Product images in the application." + +#: core/viewsets.py:845 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +msgstr "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." + +#: core/viewsets.py:866 +msgid "Represents a view set for managing promotions. " +msgstr "Represents a view set for managing promotions." + +#: core/viewsets.py:878 +msgid "Handles operations related to Stock data in the system." +msgstr "Handles operations related to Stock data in the system." + +#: core/viewsets.py:892 +msgid "" +"ViewSet for managing Wishlist operations. The WishlistViewSet provides " +"endpoints for interacting with a user's wish list, allowing for the " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " +"actions for wishlist products. Permission checks are integrated to ensure " +"that users can only manage their own wishlists unless explicit permissions " +"are granted." +msgstr "" +"ViewSet for managing Wishlist operations. The WishlistViewSet provides " +"endpoints for interacting with a user's wish list, allowing for the " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " +"actions for wishlist products. Permission checks are integrated to ensure " +"that users can only manage their own wishlists unless explicit permissions " +"are granted." + +#: core/viewsets.py:1007 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." + +#: core/viewsets.py:1074 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Geocoding error: {e}" + +#: core/viewsets.py:1081 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." diff --git a/core/locale/en_US/LC_MESSAGES/django.mo b/core/locale/en_US/LC_MESSAGES/django.mo index 9de69688ef9ad7b558f2d798ab175808db18ea19..5d734ce622f52171f727edad1b5f8298d1ff4b94 100644 GIT binary patch delta 25964 zcmeI42b5Gry2tNG&N&M-d4K`QISyGRN5w^YW_p;GneL&xhoo{>F(aT3hzh7EDh3vD z#QZRzt~n>nqOO<_a2LgZ@Atn|x2Fg3oqg|}^Y-j{++)qJ(yj1)Uwu`#n&Z8P%RTgE zdH2J*<<~kqV@`0K6XCSFj#ICk<6PcWxsLNrH^-?Dcf&K&9A_V_OnO2O$EgZu!p1NQ zHi2iu3UDo?8D~8#4{w0W;AW`z+Vpgs+K%HoU5PXxV<=n$r^AZyE2xSG;4nJ=1*+r0 zy&b0&91T0bJlGUo0e3KoJ7Is)!G5OQ^^h!QyX6;_&8bwM{++2r+N&WLgsWi-cmSSD z$F&DI&Um^O&D2yTaG3~`)l)T=p^$&hY3%uMKXC<%NA>%hOm z#<1dW$7x9aPD>(HU>~R%4}*>1DNv%!hI%0k`Oi6@KaZw4&XaHk=?g}n2GZ}r5wPbd z)83-dhUdXn)LQ{Hkgae%ya&1!iA)%S&f#=e9fqNFz7S5L!4*)Ve}Amwd;~v-x0CQpsoLTUZsZ50W4W=XiYsr{7 z({b*F2WC0W^E7bl=@=vF*lfr796wmmI_bCO(g_WA&%*FX zpPgd{SSQzU3dw(Xp5xq4e#Tjjb0Pd}J_F+YvkH*Ebh@L!=;m7}tNjg1GUXzUlMbsw ziLNJ9em|QY3hB!k31y_W!-k~4ikkXqg+>Jxp;TKN?xJ2ZSdM{xxAc5ozA`2wi?Ya#aQ?1D|<5!f6yS!n3? zC8CPcVQ=Wd`fvx75k3bcsy(n0?6Szrus4*goC?+8X|M`h1ZTqY-~_lE4u$E9863=m zb>UXnS?m8XA~L>jU`^;OF%@dTvq`pw?cnuLtKmsl13m{Ez;~b;+y}M1(w3Tm)PuE1 zH-`;j7g!sPgpJ^IuN?gs*n)E{S3&9O2G|td0X4v)!wsE?Ys@u@n=x)9X=QR>%}8vXyz4{88(Kh*a=GaL!opRf>Omo z*aTi?xf!bColv&$5>&gNzzp~$#MnG{D_h7!>`I^J66r_eLf9Yfgc`_?mR0|3IzAC9 zzYEj=hC&Tss$~Jx04|17)jFtwJOrhp7ok+~Hq3;3pl3Voc}6s|pq5_c^lbN+?~w4O_uap~@?qZ;Y@eRENW0Yj`po1`D7D_!p>&?1b&1`w9^m+Yh$j2vmc$ zmz#=Bpc?E9JHpkJ{1 zPR3}c8AYK+b|q9t4?wNg{ZJyUe37w@W-vgy8vAdx<>!ewSJ7zBHgJ`0wE*TZyp6V!{(!)9=|P5%S7AYE>S z5q)bYNzH^E;8~VeK}q-_%lDxhAma#;=CI}EX0sU#Tau1Im9K)G;Wk(vz6T|NkD)|= z5LSjYR+@A}IEHk0sQe|C=R=8p1ynoNtwjD>k2jE^5#I-8{m;V2@B>%_97m6|P49wTLVyLmd^v0NeyK;1f_U zdUGbn+z;bXS^Rj3X=w&ma0^21Q=S6yQ~XFbS! zuG58x*7p!7Bbx!$@cFPRTn)9ETnE+g-B6-^1j%| z?+3fV5ip?jpCFP>##$&H?SyLZ2dGt0j*oMUIk?X4?@l8EvWh*!LINC>;nVq z=mgG$YIi-T(%Ps;{?;6+x?t*IP5bOujH=6w5M&z%IHDsv5iK~huCeaGCL{8$P}V#do&mF< zjOS5U555GoTJ}J#ioH+`9)i+o)0@m5&vj09X<|aOs~N@ z@I5HU@hxl!e}$4r{hQ5t9|4~uy#OwUgEkvgJO&4n-V2Apwzru2At;>}!}jnoD5H13 zAfgv)-)cm3Dr`skJSZLB2Ajjzpme<-4uy?xGY)DNRKu%aTlg>>1V4tFY4a^cV(C!J zw=0y54S;R5{-+UXM#f^Ob-xCx!%grc_$bus_zuce4nsBE<94(D2g7lsXTXl|MyLrq z2Q`8Husv*chmmL|EKhn0?4tEQlSo}ME`%D$HBd9T7wW~`a0qnnG&30rtCAcAE5b>z zF`Nmj!9v&oo�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 J{n)zve*#PIiUI%t delta 12296 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 JCwRsA{tu`xC(Zx> diff --git a/core/locale/en_US/LC_MESSAGES/django.po b/core/locale/en_US/LC_MESSAGES/django.po index 1b913d43..228e92d1 100644 --- a/core/locale/en_US/LC_MESSAGES/django.po +++ b/core/locale/en_US/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+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:11 +#: core/abstract.py:12 msgid "unique id" msgstr "Unique ID" -#: core/abstract.py:12 +#: 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:19 +#: core/abstract.py:20 msgid "is active" msgstr "Is Active" -#: core/abstract.py:20 +#: core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" @@ -33,19 +33,19 @@ msgstr "" "If set to false, this object can't be seen by users without needed " "permission" -#: core/abstract.py:22 core/choices.py:18 +#: core/abstract.py:23 core/choices.py:18 msgid "created" msgstr "Created" -#: core/abstract.py:22 +#: 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:23 +#: core/abstract.py:24 msgid "modified" msgstr "Modified" -#: core/abstract.py:23 +#: core/abstract.py:24 msgid "when the object was last modified" msgstr "When the object was last edited" @@ -88,11 +88,11 @@ msgid "selected items have been deactivated." msgstr "Selected items have been deactivated!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 +#: core/graphene/object_types.py:616 core/models.py:701 core/models.py:709 msgid "attribute value" msgstr "Attribute Value" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 msgid "attribute values" msgstr "Attribute Values" @@ -104,7 +104,7 @@ msgstr "Image" msgid "images" msgstr "Images" -#: core/admin.py:155 core/models.py:445 +#: core/admin.py:155 core/models.py:459 msgid "stock" msgstr "Stock" @@ -112,11 +112,11 @@ msgstr "Stock" msgid "stocks" msgstr "Stocks" -#: core/admin.py:166 core/models.py:1609 +#: core/admin.py:166 core/models.py:1667 msgid "order product" msgstr "Order Product" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 msgid "order products" msgstr "Order Products" @@ -708,7 +708,7 @@ msgstr "delete an order–product relation" msgid "add or remove feedback on an order–product relation" msgstr "add or remove feedback on an order–product relation" -#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 msgid "no search term provided." msgstr "No search term provided." @@ -761,7 +761,7 @@ msgid "Quantity" msgstr "Quantity" #: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:287 core/models.py:369 core/models.py:522 +#: core/models.py:301 core/models.py:383 core/models.py:536 msgid "Slug" msgstr "Slug" @@ -777,7 +777,7 @@ msgstr "Include sub-categories" msgid "Include personal ordered" msgstr "Include personal ordered products" -#: core/filters.py:85 core/models.py:526 +#: core/filters.py:85 core/models.py:540 msgid "SKU" msgstr "SKU" @@ -850,7 +850,7 @@ msgstr "Cached data" msgid "camelized JSON data from the requested URL" msgstr "Camelized JSON data from the requested URL" -#: core/graphene/mutations.py:65 core/views.py:360 +#: core/graphene/mutations.py:65 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "Only URLs starting with http(s):// are allowed" @@ -881,7 +881,7 @@ 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:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:839 +#: core/graphene/mutations.py:527 core/viewsets.py:679 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Wrong type came from order.buy() method: {type(instance)!s}" @@ -957,9 +957,9 @@ msgstr "Orderproduct {order_product_uuid} not found!" msgid "original address string provided by the user" msgstr "Original address string provided by the user" -#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 -#: core/models.py:1234 core/models.py:1263 core/models.py:1288 -#: core/viewsets.py:842 +#: core/graphene/mutations.py:656 core/models.py:849 core/models.py:862 +#: core/models.py:1281 core/models.py:1310 core/models.py:1335 +#: core/viewsets.py:682 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} does not exist: {uuid}!" @@ -973,8 +973,8 @@ msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - works like a charm" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 -#: core/models.py:1686 +#: core/graphene/object_types.py:444 core/models.py:672 core/models.py:1144 +#: core/models.py:1744 msgid "attributes" msgstr "Attributes" @@ -987,11 +987,11 @@ 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:224 core/models.py:312 core/models.py:612 +#: core/graphene/object_types.py:224 core/models.py:326 core/models.py:626 msgid "categories" msgstr "Categories" -#: core/graphene/object_types.py:124 core/models.py:383 +#: core/graphene/object_types.py:124 core/models.py:397 msgid "brands" msgstr "Brands" @@ -1000,7 +1000,7 @@ msgid "category image url" msgstr "Categories" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:249 +#: core/models.py:263 msgid "markup percentage" msgstr "Markup Percentage" @@ -1022,7 +1022,7 @@ msgstr "Tags for this category" msgid "products in this category" msgstr "Products in this category" -#: core/graphene/object_types.py:351 core/models.py:155 +#: core/graphene/object_types.py:351 core/models.py:169 msgid "vendors" msgstr "Vendors" @@ -1047,7 +1047,7 @@ msgid "represents feedback from a user." msgstr "Represents feedback from a user." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1110 +#: core/models.py:1138 msgid "notifications" msgstr "Notifications" @@ -1055,7 +1055,7 @@ msgstr "Notifications" msgid "download url for this order product if applicable" msgstr "Download url for this order product if applicable" -#: core/graphene/object_types.py:400 core/models.py:1791 +#: core/graphene/object_types.py:400 core/models.py:1860 msgid "feedback" msgstr "Feedback" @@ -1063,7 +1063,7 @@ msgstr "Feedback" msgid "a list of order products in this order" msgstr "A list of order products in this order" -#: core/graphene/object_types.py:436 core/models.py:1080 +#: core/graphene/object_types.py:436 core/models.py:1108 msgid "billing address" msgstr "Billing address" @@ -1091,7 +1091,7 @@ msgstr "Are all of the products in the order digital" msgid "transactions for this order" msgstr "Transactions for this order" -#: core/graphene/object_types.py:465 core/models.py:1144 +#: core/graphene/object_types.py:465 core/models.py:1172 msgid "orders" msgstr "Orders" @@ -1103,15 +1103,15 @@ msgstr "Image URL" msgid "product's images" msgstr "Product's images" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 +#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 msgid "category" msgstr "Category" -#: core/graphene/object_types.py:502 core/models.py:1792 +#: core/graphene/object_types.py:502 core/models.py:1861 msgid "feedbacks" msgstr "Feedbacks" -#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 +#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 msgid "brand" msgstr "Brand" @@ -1143,7 +1143,7 @@ msgstr "Number of feedbacks" msgid "only available for personal orders" msgstr "Products only available for personal orders" -#: core/graphene/object_types.py:534 core/models.py:536 +#: core/graphene/object_types.py:534 core/models.py:550 msgid "products" msgstr "Products" @@ -1155,15 +1155,15 @@ msgstr "Promocodes" msgid "products on sale" msgstr "Products on sale" -#: core/graphene/object_types.py:651 core/models.py:784 +#: core/graphene/object_types.py:651 core/models.py:798 msgid "promotions" msgstr "Promotions" -#: core/graphene/object_types.py:655 core/models.py:154 +#: core/graphene/object_types.py:655 core/models.py:168 msgid "vendor" msgstr "Vendor" -#: core/graphene/object_types.py:656 core/models.py:535 +#: core/graphene/object_types.py:656 core/models.py:549 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1171,11 +1171,11 @@ msgstr "Vendor" msgid "product" msgstr "Product" -#: core/graphene/object_types.py:667 core/models.py:807 +#: core/graphene/object_types.py:667 core/models.py:821 msgid "wishlisted products" msgstr "Wishlisted products" -#: core/graphene/object_types.py:673 core/models.py:824 +#: core/graphene/object_types.py:673 core/models.py:838 msgid "wishlists" msgstr "Wishlists" @@ -1183,7 +1183,7 @@ msgstr "Wishlists" msgid "tagged products" msgstr "Tagged products" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 +#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 msgid "product tags" msgstr "Product tags" @@ -1292,7 +1292,7 @@ msgstr "Parent attribute group" msgid "attribute group's name" msgstr "Attribute group's name" -#: core/models.py:100 core/models.py:620 +#: core/models.py:100 core/models.py:634 msgid "attribute group" msgstr "Attribute group" @@ -1339,7 +1339,7 @@ msgstr "Name of this vendor" msgid "vendor name" msgstr "Vendor name" -#: core/models.py:163 +#: core/models.py:177 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1353,27 +1353,27 @@ msgstr "" "display name. It supports operations exported through mixins and provides " "metadata customization for administrative purposes." -#: core/models.py:175 core/models.py:206 +#: core/models.py:189 core/models.py:220 msgid "internal tag identifier for the product tag" msgstr "Internal tag identifier for the product tag" -#: core/models.py:176 core/models.py:207 +#: core/models.py:190 core/models.py:221 msgid "tag name" msgstr "Tag name" -#: core/models.py:180 core/models.py:211 +#: core/models.py:194 core/models.py:225 msgid "user-friendly name for the product tag" msgstr "User-friendly name for the product tag" -#: core/models.py:181 core/models.py:212 +#: core/models.py:195 core/models.py:226 msgid "tag display name" msgstr "Tag display name" -#: core/models.py:189 +#: core/models.py:203 msgid "product tag" msgstr "Product tag" -#: core/models.py:195 +#: core/models.py:209 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 " @@ -1383,15 +1383,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:220 +#: core/models.py:234 msgid "category tag" msgstr "category tag" -#: core/models.py:221 core/models.py:293 +#: core/models.py:235 core/models.py:307 msgid "category tags" msgstr "category tags" -#: core/models.py:226 +#: core/models.py:240 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1413,51 +1413,51 @@ msgstr "" "hierarchy of categories, as well as assign attributes like images, tags, or " "priority." -#: core/models.py:240 +#: core/models.py:254 msgid "upload an image representing this category" msgstr "Upload an image representing this category" -#: core/models.py:243 +#: core/models.py:257 msgid "category image" msgstr "Category image" -#: core/models.py:248 +#: core/models.py:262 msgid "define a markup percentage for products in this category" msgstr "Define a markup percentage for products in this category" -#: core/models.py:257 +#: core/models.py:271 msgid "parent of this category to form a hierarchical structure" msgstr "Parent of this category to form a hierarchical structure" -#: core/models.py:258 +#: core/models.py:272 msgid "parent category" msgstr "Parent category" -#: core/models.py:263 +#: core/models.py:277 msgid "category name" msgstr "Category name" -#: core/models.py:264 +#: core/models.py:278 msgid "provide a name for this category" msgstr "Provide a name for this category" -#: core/models.py:271 +#: core/models.py:285 msgid "add a detailed description for this category" msgstr "Add a detailed description for this category" -#: core/models.py:272 +#: core/models.py:286 msgid "category description" msgstr "Category description" -#: core/models.py:292 +#: core/models.py:306 msgid "tags that help describe or group this category" msgstr "tags that help describe or group this category" -#: core/models.py:299 core/models.py:375 +#: core/models.py:313 core/models.py:389 msgid "priority" msgstr "Priority" -#: core/models.py:318 +#: core/models.py:332 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1471,47 +1471,47 @@ msgstr "" "organization and representation of brand-related data within the " "application." -#: core/models.py:328 +#: core/models.py:342 msgid "name of this brand" msgstr "Name of this brand" -#: core/models.py:329 +#: core/models.py:343 msgid "brand name" msgstr "Brand name" -#: core/models.py:336 +#: core/models.py:350 msgid "upload a logo representing this brand" msgstr "Upload a logo representing this brand" -#: core/models.py:338 +#: core/models.py:352 msgid "brand small image" msgstr "Brand small image" -#: core/models.py:344 +#: core/models.py:358 msgid "upload a big logo representing this brand" msgstr "Upload a big logo representing this brand" -#: core/models.py:346 +#: core/models.py:360 msgid "brand big image" msgstr "Brand big image" -#: core/models.py:351 +#: core/models.py:365 msgid "add a detailed description of the brand" msgstr "Add a detailed description of the brand" -#: core/models.py:352 +#: core/models.py:366 msgid "brand description" msgstr "Brand description" -#: core/models.py:357 +#: core/models.py:371 msgid "optional categories that this brand is associated with" msgstr "Optional categories that this brand is associated with" -#: core/models.py:358 +#: core/models.py:372 msgid "associated categories" msgstr "Categories" -#: core/models.py:388 +#: core/models.py:402 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1527,68 +1527,68 @@ msgstr "" "management system to allow tracking and evaluation of products available " "from various vendors." -#: core/models.py:400 +#: core/models.py:414 msgid "the vendor supplying this product stock" msgstr "The vendor supplying this product stock" -#: core/models.py:401 +#: core/models.py:415 msgid "associated vendor" msgstr "Associated vendor" -#: core/models.py:405 +#: core/models.py:419 msgid "final price to the customer after markups" msgstr "Final price to the customer after markups" -#: core/models.py:406 +#: core/models.py:420 msgid "selling price" msgstr "Selling price" -#: core/models.py:411 +#: core/models.py:425 msgid "the product associated with this stock entry" msgstr "The product associated with this stock entry" -#: core/models.py:412 core/models.py:683 core/models.py:730 -#: core/models.py:1583 +#: core/models.py:426 core/models.py:697 core/models.py:744 +#: core/models.py:1641 msgid "associated product" msgstr "Associated product" -#: core/models.py:419 +#: core/models.py:433 msgid "the price paid to the vendor for this product" msgstr "The price paid to the vendor for this product" -#: core/models.py:420 +#: core/models.py:434 msgid "vendor purchase price" msgstr "Vendor purchase price" -#: core/models.py:424 +#: core/models.py:438 msgid "available quantity of the product in stock" msgstr "Available quantity of the product in stock" -#: core/models.py:425 +#: core/models.py:439 msgid "quantity in stock" msgstr "Quantity in stock" -#: core/models.py:429 +#: core/models.py:443 msgid "vendor-assigned SKU for identifying the product" msgstr "Vendor-assigned SKU for identifying the product" -#: core/models.py:430 +#: core/models.py:444 msgid "vendor sku" msgstr "Vendor's SKU" -#: core/models.py:436 +#: core/models.py:450 msgid "digital file associated with this stock if applicable" msgstr "Digital file associated with this stock if applicable" -#: core/models.py:437 +#: core/models.py:451 msgid "digital file" msgstr "Digital file" -#: core/models.py:446 +#: core/models.py:460 msgid "stock entries" msgstr "Stock entries" -#: core/models.py:451 +#: core/models.py:465 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1608,55 +1608,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:464 +#: core/models.py:478 msgid "category this product belongs to" msgstr "Category this product belongs to" -#: core/models.py:473 +#: core/models.py:487 msgid "optionally associate this product with a brand" msgstr "Optionally associate this product with a brand" -#: core/models.py:479 +#: core/models.py:493 msgid "tags that help describe or group this product" msgstr "Tags that help describe or group this product" -#: core/models.py:484 +#: core/models.py:498 msgid "indicates whether this product is digitally delivered" msgstr "Indicates whether this product is digitally delivered" -#: core/models.py:485 +#: core/models.py:499 msgid "is product digital" msgstr "Is product digital" -#: core/models.py:491 +#: core/models.py:505 msgid "provide a clear identifying name for the product" msgstr "Provide a clear identifying name for the product" -#: core/models.py:492 +#: core/models.py:506 msgid "product name" msgstr "Product name" -#: core/models.py:497 core/models.py:772 +#: core/models.py:511 core/models.py:786 msgid "add a detailed description of the product" msgstr "Add a detailed description of the product" -#: core/models.py:498 +#: core/models.py:512 msgid "product description" msgstr "Product description" -#: core/models.py:505 +#: core/models.py:519 msgid "part number for this product" msgstr "Part number for this product" -#: core/models.py:506 +#: core/models.py:520 msgid "part number" msgstr "Part number" -#: core/models.py:525 +#: core/models.py:539 msgid "stock keeping unit for this product" msgstr "Stock Keeping Unit for this product" -#: core/models.py:599 +#: core/models.py:613 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 " @@ -1672,68 +1672,68 @@ msgstr "" " including string, integer, float, boolean, array, and object. This allows " "for dynamic and flexible data structuring." -#: core/models.py:611 +#: core/models.py:625 msgid "category of this attribute" msgstr "Category of this attribute" -#: core/models.py:619 +#: core/models.py:633 msgid "group of this attribute" msgstr "Group of this attribute" -#: core/models.py:625 +#: core/models.py:639 msgid "string" msgstr "String" -#: core/models.py:626 +#: core/models.py:640 msgid "integer" msgstr "Integer" -#: core/models.py:627 +#: core/models.py:641 msgid "float" msgstr "Float" -#: core/models.py:628 +#: core/models.py:642 msgid "boolean" msgstr "Boolean" -#: core/models.py:629 +#: core/models.py:643 msgid "array" msgstr "Array" -#: core/models.py:630 +#: core/models.py:644 msgid "object" msgstr "Object" -#: core/models.py:632 +#: core/models.py:646 msgid "type of the attribute's value" msgstr "Type of the attribute's value" -#: core/models.py:633 +#: core/models.py:647 msgid "value type" msgstr "Value type" -#: core/models.py:638 +#: core/models.py:652 msgid "name of this attribute" msgstr "Name of this attribute" -#: core/models.py:639 +#: core/models.py:653 msgid "attribute's name" msgstr "Attribute's name" -#: core/models.py:645 +#: core/models.py:659 msgid "is filterable" msgstr "is filterable" -#: core/models.py:646 +#: core/models.py:660 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:657 core/models.py:675 +#: core/models.py:671 core/models.py:689 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attribute" -#: core/models.py:663 +#: core/models.py:677 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" @@ -1743,19 +1743,19 @@ msgstr "" " links the 'attribute' to a unique 'value', allowing better organization and" " dynamic representation of product characteristics." -#: core/models.py:674 +#: core/models.py:688 msgid "attribute of this value" msgstr "Attribute of this value" -#: core/models.py:682 +#: core/models.py:696 msgid "the specific product associated with this attribute's value" msgstr "The specific product associated with this attribute's value" -#: core/models.py:688 +#: core/models.py:702 msgid "the specific value for this attribute" msgstr "The specific value for this attribute" -#: core/models.py:701 +#: core/models.py:715 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -1769,39 +1769,39 @@ msgstr "" "determining their display order. It also includes an accessibility feature " "with alternative text for the images." -#: core/models.py:712 +#: core/models.py:726 msgid "provide alternative text for the image for accessibility" msgstr "Provide alternative text for the image for accessibility" -#: core/models.py:713 +#: core/models.py:727 msgid "image alt text" msgstr "Image alt text" -#: core/models.py:716 +#: core/models.py:730 msgid "upload the image file for this product" msgstr "Upload the image file for this product" -#: core/models.py:717 core/models.py:742 +#: core/models.py:731 core/models.py:756 msgid "product image" msgstr "Product image" -#: core/models.py:723 +#: core/models.py:737 msgid "determines the order in which images are displayed" msgstr "Determines the order in which images are displayed" -#: core/models.py:724 +#: core/models.py:738 msgid "display priority" msgstr "Display priority" -#: core/models.py:729 +#: core/models.py:743 msgid "the product that this image represents" msgstr "The product that this image represents" -#: core/models.py:743 +#: core/models.py:757 msgid "product images" msgstr "Product images" -#: core/models.py:748 +#: core/models.py:762 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1817,39 +1817,39 @@ msgstr "" "applicable products. It integrates with the product catalog to determine the" " affected items in the campaign." -#: core/models.py:760 +#: core/models.py:774 msgid "percentage discount for the selected products" msgstr "Percentage discount for the selected products" -#: core/models.py:761 +#: core/models.py:775 msgid "discount percentage" msgstr "Discount percentage" -#: core/models.py:766 +#: core/models.py:780 msgid "provide a unique name for this promotion" msgstr "Provide a unique name for this promotion" -#: core/models.py:767 +#: core/models.py:781 msgid "promotion name" msgstr "Promotion name" -#: core/models.py:773 +#: core/models.py:787 msgid "promotion description" msgstr "Promotion description" -#: core/models.py:778 +#: core/models.py:792 msgid "select which products are included in this promotion" msgstr "Select which products are included in this promotion" -#: core/models.py:779 +#: core/models.py:793 msgid "included products" msgstr "Included products" -#: core/models.py:783 +#: core/models.py:797 msgid "promotion" msgstr "Promotion" -#: core/models.py:794 +#: core/models.py:808 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1861,23 +1861,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:806 +#: core/models.py:820 msgid "products that the user has marked as wanted" msgstr "Products that the user has marked as wanted" -#: core/models.py:814 +#: core/models.py:828 msgid "user who owns this wishlist" msgstr "User who owns this wishlist" -#: core/models.py:815 +#: core/models.py:829 msgid "wishlist owner" msgstr "Wishlist's Owner" -#: core/models.py:823 +#: core/models.py:837 msgid "wishlist" msgstr "Wishlist" -#: core/models.py:865 +#: core/models.py:879 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1893,19 +1893,19 @@ msgstr "" "files. It extends functionality from specific mixins and provides additional" " custom features." -#: core/models.py:878 +#: core/models.py:892 msgid "documentary" msgstr "Documentary" -#: core/models.py:879 +#: core/models.py:893 msgid "documentaries" msgstr "Documentaries" -#: core/models.py:889 +#: core/models.py:903 msgid "unresolved" msgstr "Unresolved" -#: core/models.py:894 +#: core/models.py:908 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1925,59 +1925,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:909 +#: core/models.py:923 msgid "address line for the customer" msgstr "Address line for the customer" -#: core/models.py:910 +#: core/models.py:924 msgid "address line" msgstr "Address line" -#: core/models.py:912 +#: core/models.py:926 msgid "street" msgstr "Street" -#: core/models.py:913 +#: core/models.py:927 msgid "district" msgstr "District" -#: core/models.py:914 +#: core/models.py:928 msgid "city" msgstr "City" -#: core/models.py:915 +#: core/models.py:929 msgid "region" msgstr "Region" -#: core/models.py:916 +#: core/models.py:930 msgid "postal code" msgstr "Postal code" -#: core/models.py:917 +#: core/models.py:931 msgid "country" msgstr "Country" -#: core/models.py:924 +#: core/models.py:938 msgid "geolocation point: (longitude, latitude)" msgstr "Geolocation Point(Longitude, Latitude)" -#: core/models.py:927 +#: core/models.py:941 msgid "full JSON response from geocoder for this address" msgstr "Full JSON response from geocoder for this address" -#: core/models.py:932 +#: core/models.py:946 msgid "stored JSON response from the geocoding service" msgstr "Stored JSON response from the geocoding service" -#: core/models.py:940 +#: core/models.py:954 msgid "address" msgstr "Address" -#: core/models.py:941 +#: core/models.py:955 msgid "addresses" msgstr "Adresses" -#: core/models.py:953 +#: core/models.py:967 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -1993,71 +1993,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:967 +#: core/models.py:981 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:968 +#: core/models.py:982 msgid "promo code identifier" msgstr "Promo code identifier" -#: core/models.py:975 +#: core/models.py:989 msgid "fixed discount amount applied if percent is not used" msgstr "Fixed discount amount applied if percent is not used" -#: core/models.py:976 +#: core/models.py:990 msgid "fixed discount amount" msgstr "Fixed discount amount" -#: core/models.py:982 +#: core/models.py:996 msgid "percentage discount applied if fixed amount is not used" msgstr "Percentage discount applied if fixed amount is not used" -#: core/models.py:983 +#: core/models.py:997 msgid "percentage discount" msgstr "Percentage discount" -#: core/models.py:988 +#: core/models.py:1002 msgid "timestamp when the promocode expires" msgstr "Timestamp when the promocode expires" -#: core/models.py:989 +#: core/models.py:1003 msgid "end validity time" msgstr "End validity time" -#: core/models.py:994 +#: core/models.py:1008 msgid "timestamp from which this promocode is valid" msgstr "Timestamp from which this promocode is valid" -#: core/models.py:995 +#: core/models.py:1009 msgid "start validity time" msgstr "Start validity time" -#: core/models.py:1000 +#: core/models.py:1014 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:1001 +#: core/models.py:1015 msgid "usage timestamp" msgstr "Usage timestamp" -#: core/models.py:1006 +#: core/models.py:1020 msgid "user assigned to this promocode if applicable" msgstr "User assigned to this promocode if applicable" -#: core/models.py:1007 +#: core/models.py:1021 msgid "assigned user" msgstr "Assigned user" -#: core/models.py:1014 +#: core/models.py:1028 msgid "promo code" msgstr "Promo code" -#: core/models.py:1015 +#: core/models.py:1029 msgid "promo codes" msgstr "Promo codes" -#: core/models.py:1022 +#: core/models.py:1044 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2065,16 +2065,16 @@ msgstr "" "Only one type of discount should be defined (amount or percent), but not " "both or neither." -#: core/models.py:1037 +#: core/models.py:1065 msgid "promocode already used" msgstr "Promocode has been used already" -#: core/models.py:1053 +#: core/models.py:1081 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Invalid discount type for promocode {self.uuid}!" -#: core/models.py:1062 +#: core/models.py:1090 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 " @@ -2090,135 +2090,135 @@ msgstr "" "set, and shipping or billing details updated. Equally, functionality " "supports managing the products in the order lifecycle." -#: core/models.py:1079 +#: core/models.py:1107 msgid "the billing address used for this order" msgstr "The billing address used for this order" -#: core/models.py:1087 +#: core/models.py:1115 msgid "optional promo code applied to this order" msgstr "Optional promo code applied to this order" -#: core/models.py:1088 +#: core/models.py:1116 msgid "applied promo code" msgstr "Applied promo code" -#: core/models.py:1096 +#: core/models.py:1124 msgid "the shipping address used for this order" msgstr "The shipping address used for this order" -#: core/models.py:1097 +#: core/models.py:1125 msgid "shipping address" msgstr "Shipping address" -#: core/models.py:1103 +#: core/models.py:1131 msgid "current status of the order in its lifecycle" msgstr "Current status of the order in its lifecycle" -#: core/models.py:1104 +#: core/models.py:1132 msgid "order status" msgstr "Order status" -#: core/models.py:1109 core/models.py:1560 +#: core/models.py:1137 core/models.py:1618 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:1115 +#: core/models.py:1143 msgid "json representation of order attributes for this order" msgstr "JSON representation of order attributes for this order" -#: core/models.py:1121 +#: core/models.py:1149 msgid "the user who placed the order" msgstr "The user who placed the order" -#: core/models.py:1122 +#: core/models.py:1150 msgid "user" msgstr "User" -#: core/models.py:1128 +#: core/models.py:1156 msgid "the timestamp when the order was finalized" msgstr "The timestamp when the order was finalized" -#: core/models.py:1129 +#: core/models.py:1157 msgid "buy time" msgstr "Buy time" -#: core/models.py:1136 +#: core/models.py:1164 msgid "a human-readable identifier for the order" msgstr "A human-readable identifier for the order" -#: core/models.py:1137 +#: core/models.py:1165 msgid "human readable id" msgstr "human-readable ID" -#: core/models.py:1143 +#: core/models.py:1171 msgid "order" msgstr "Order" -#: core/models.py:1168 +#: core/models.py:1209 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:1202 +#: core/models.py:1249 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:1207 +#: core/models.py:1254 msgid "you cannot add inactive products to order" msgstr "You cannot add inactive products to order" -#: core/models.py:1224 +#: core/models.py:1271 msgid "you cannot add more products than available in stock" msgstr "You cannot add more products than available in stock" -#: core/models.py:1246 core/models.py:1271 core/models.py:1279 +#: core/models.py:1293 core/models.py:1318 core/models.py:1326 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:1267 +#: core/models.py:1314 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} does not exist with query <{query}>!" -#: core/models.py:1299 +#: core/models.py:1346 msgid "promocode does not exist" msgstr "Promocode does not exist" -#: core/models.py:1305 +#: core/models.py:1352 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:1324 +#: core/models.py:1371 msgid "address does not exist" msgstr "Address does not exist" -#: core/models.py:1345 core/models.py:1414 +#: core/models.py:1392 core/models.py:1461 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:1348 core/models.py:1410 +#: core/models.py:1395 core/models.py:1457 msgid "invalid force value" msgstr "Invalid force value" -#: core/models.py:1354 core/models.py:1417 +#: core/models.py:1401 core/models.py:1464 msgid "you cannot purchase an empty order!" msgstr "You cannot purchase an empty order!" -#: core/models.py:1373 +#: core/models.py:1420 msgid "you cannot buy an order without a user" msgstr "You cannot buy an order without a user!" -#: core/models.py:1387 +#: core/models.py:1434 msgid "a user without a balance cannot buy with balance" msgstr "A user without a balance cannot buy with balance!" -#: core/models.py:1392 +#: core/models.py:1439 msgid "insufficient funds to complete the order" msgstr "Insufficient funds to complete the order" -#: core/models.py:1426 +#: core/models.py:1473 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2226,14 +2226,14 @@ msgstr "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" -#: core/models.py:1435 +#: core/models.py:1482 #, 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:1533 +#: core/models.py:1591 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2255,108 +2255,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:1548 +#: core/models.py:1606 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:1549 +#: core/models.py:1607 msgid "purchase price at order time" msgstr "Purchase price at order time" -#: core/models.py:1554 +#: core/models.py:1612 msgid "internal comments for admins about this ordered product" msgstr "Internal comments for admins about this ordered product" -#: core/models.py:1555 +#: core/models.py:1613 msgid "internal comments" msgstr "Internal comments" -#: core/models.py:1561 +#: core/models.py:1619 msgid "user notifications" msgstr "User notifications" -#: core/models.py:1566 +#: core/models.py:1624 msgid "json representation of this item's attributes" msgstr "JSON representation of this item's attributes" -#: core/models.py:1567 +#: core/models.py:1625 msgid "ordered product attributes" msgstr "Ordered product attributes" -#: core/models.py:1572 +#: core/models.py:1630 msgid "reference to the parent order that contains this product" msgstr "Reference to the parent order that contains this product" -#: core/models.py:1573 +#: core/models.py:1631 msgid "parent order" msgstr "Parent order" -#: core/models.py:1582 +#: core/models.py:1640 msgid "the specific product associated with this order line" msgstr "The specific product associated with this order line" -#: core/models.py:1589 +#: core/models.py:1647 msgid "quantity of this specific product in the order" msgstr "Quantity of this specific product in the order" -#: core/models.py:1590 +#: core/models.py:1648 msgid "product quantity" msgstr "Product quantity" -#: core/models.py:1597 +#: core/models.py:1655 msgid "current status of this product in the order" msgstr "Current status of this product in the order" -#: core/models.py:1598 +#: core/models.py:1656 msgid "product line status" msgstr "Product line status" -#: core/models.py:1661 +#: core/models.py:1719 msgid "order product must have an order" msgstr "Orderproduct must have an associated order!" -#: core/models.py:1663 +#: core/models.py:1721 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Wrong action specified for feedback: {action}!" -#: core/models.py:1677 +#: core/models.py:1735 msgid "you cannot feedback an order which is not received" msgstr "you cannot feedback an order which is not received" -#: core/models.py:1683 +#: core/models.py:1741 msgid "name" msgstr "Name" -#: core/models.py:1684 +#: core/models.py:1742 msgid "URL of the integration" msgstr "URL of the integration" -#: core/models.py:1685 +#: core/models.py:1743 msgid "authentication credentials" msgstr "Authentication credentials" -#: core/models.py:1699 +#: core/models.py:1765 msgid "you can only have one default CRM provider" msgstr "You can only have one default CRM provider" -#: core/models.py:1703 +#: core/models.py:1775 msgid "CRM" msgstr "CRM" -#: core/models.py:1704 +#: core/models.py:1776 msgid "CRMs" msgstr "CRMs" -#: core/models.py:1716 +#: core/models.py:1788 msgid "order CRM link" msgstr "Order's CRM link" -#: core/models.py:1717 +#: core/models.py:1789 msgid "orders CRM links" msgstr "Orders' CRM links" -#: core/models.py:1722 +#: core/models.py:1794 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2372,19 +2372,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:1736 +#: core/models.py:1808 msgid "download" msgstr "Download" -#: core/models.py:1737 +#: core/models.py:1809 msgid "downloads" msgstr "Downloads" -#: core/models.py:1745 -msgid "you can not download a digital asset for a non-finished order" -msgstr "You can not download a digital asset for a non-finished order" - -#: core/models.py:1754 +#: core/models.py:1823 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2398,29 +2394,29 @@ 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:1766 +#: core/models.py:1835 msgid "user-provided comments about their experience with the product" msgstr "User-provided comments about their experience with the product" -#: core/models.py:1767 +#: core/models.py:1836 msgid "feedback comments" msgstr "Feedback comments" -#: core/models.py:1774 +#: core/models.py:1843 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:1775 +#: core/models.py:1844 msgid "related order product" msgstr "Related order product" -#: core/models.py:1780 +#: core/models.py:1849 msgid "user-assigned rating for the product" msgstr "User-assigned rating for the product" -#: core/models.py:1781 +#: core/models.py:1850 msgid "product rating" msgstr "Product rating" @@ -2624,11 +2620,11 @@ msgstr "" "all rights\n" " reserved" -#: core/utils/caching.py:41 +#: core/utils/caching.py:48 msgid "both data and timeout are required" msgstr "Both data and timeout are required" -#: core/utils/caching.py:43 +#: core/utils/caching.py:50 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "Invalid timeout value, it must be between 0 and 216000 seconds" @@ -2660,25 +2656,337 @@ msgstr "You do not have permission to perform this action." msgid "NOMINATIM_URL must be configured." msgstr "NOMINATIM_URL parameter must be configured!" -#: core/validators.py:16 +#: core/validators.py:14 #, 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/validators.py:22 -msgid "invalid phone number format" -msgstr "Invalid phone number format" +#: core/views.py:72 +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 "" +"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:489 +#: core/views.py:87 +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 "" +"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." + +#: core/views.py:116 +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 +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 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +msgstr "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." + +#: core/views.py:194 +msgid "Handles `contact us` form submissions." +msgstr "Handles `contact us` form submissions." + +#: core/views.py:215 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." + +#: core/views.py:255 +msgid "Handles global search queries." +msgstr "Handles global search queries." + +#: core/views.py:270 +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:312 msgid "you can only download the digital asset once" msgstr "You can only download the digital asset once" -#: core/views.py:547 +#: core/views.py:315 +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:353 +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." +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:365 msgid "favicon not found" msgstr "favicon not found" -#: core/viewsets.py:1357 +#: core/views.py:370 +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." +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:382 +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 "" +"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." + +#: core/viewsets.py:128 +msgid "" +"Defines a viewset for managing Evibes-related operations. The EvibesViewSet " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" +"Defines a viewset for managing Evibes-related operations. The EvibesViewSet " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." + +#: core/viewsets.py:147 +msgid "" +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." +msgstr "" +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." + +#: core/viewsets.py:166 +msgid "" +"Handles operations related to Attribute objects within the application. " +"Provides a set of API endpoints to interact with Attribute data. This class " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"Handles operations related to Attribute objects within the application. " +"Provides a set of API endpoints to interact with Attribute data. This class " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." + +#: core/viewsets.py:185 +msgid "" +"A viewset for managing AttributeValue objects. This viewset provides " +"functionality for listing, retrieving, creating, updating, and deleting " +"AttributeValue objects. It integrates with Django REST Framework's viewset " +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." +msgstr "" +"A viewset for managing AttributeValue objects. This viewset provides " +"functionality for listing, retrieving, creating, updating, and deleting " +"AttributeValue objects. It integrates with Django REST Framework's viewset " +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." + +#: core/viewsets.py:204 +msgid "" +"Manages views for Category-related operations. The CategoryViewSet class is " +"responsible for handling operations related to the Category model in the " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" +"Manages views for Category-related operations. The CategoryViewSet class is " +"responsible for handling operations related to the Category model in the " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." + +#: core/viewsets.py:315 +msgid "" +"Represents a viewset for managing Brand instances. This class provides " +"functionality for querying, filtering, and serializing Brand objects. It " +"uses Django's ViewSet framework to simplify the implementation of API " +"endpoints for Brand objects." +msgstr "" +"Represents a viewset for managing Brand instances. This class provides " +"functionality for querying, filtering, and serializing Brand objects. It " +"uses Django's ViewSet framework to simplify the implementation of API " +"endpoints for Brand objects." + +#: core/viewsets.py:427 +msgid "" +"Manages operations related to the `Product` model in the system. This class " +"provides a viewset for managing products, including their filtering, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" +"Manages operations related to the `Product` model in the system. This class " +"provides a viewset for managing products, including their filtering, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." + +#: core/viewsets.py:547 +msgid "" +"Represents a viewset for managing Vendor objects. This viewset allows " +"fetching, filtering, and serializing Vendor data. It defines the queryset, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" +"Represents a viewset for managing Vendor objects. This viewset allows " +"fetching, filtering, and serializing Vendor data. It defines the queryset, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." + +#: core/viewsets.py:567 +msgid "" +"Representation of a view set handling Feedback objects. This class manages " +"operations related to Feedback objects, including listing, filtering, and " +"retrieving details. The purpose of this view set is to provide different " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"use of Django's filtering system for querying data." +msgstr "" +"Representation of a view set handling Feedback objects. This class manages " +"operations related to Feedback objects, including listing, filtering, and " +"retrieving details. The purpose of this view set is to provide different " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"use of Django's filtering system for querying data." + +#: core/viewsets.py:593 +msgid "" +"ViewSet for managing orders and related operations. This class provides " +"functionality to retrieve, modify, and manage order objects. It includes " +"various endpoints for handling order operations such as adding or removing " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " +"enforces permissions accordingly while interacting with order data." +msgstr "" +"ViewSet for managing orders and related operations. This class provides " +"functionality to retrieve, modify, and manage order objects. It includes " +"various endpoints for handling order operations such as adding or removing " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " +"enforces permissions accordingly while interacting with order data." + +#: core/viewsets.py:782 +msgid "" +"Provides a viewset for managing OrderProduct entities. This viewset enables " +"CRUD operations and custom actions specific to the OrderProduct model. It " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " +"feedback on OrderProduct instances" +msgstr "" +"Provides a viewset for managing OrderProduct entities. This viewset enables " +"CRUD operations and custom actions specific to the OrderProduct model. It " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " +"feedback on OrderProduct instances" + +#: core/viewsets.py:833 +msgid "Manages operations related to Product images in the application. " +msgstr "Manages operations related to Product images in the application." + +#: core/viewsets.py:845 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +msgstr "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." + +#: core/viewsets.py:866 +msgid "Represents a view set for managing promotions. " +msgstr "Represents a view set for managing promotions." + +#: core/viewsets.py:878 +msgid "Handles operations related to Stock data in the system." +msgstr "Handles operations related to Stock data in the system." + +#: core/viewsets.py:892 +msgid "" +"ViewSet for managing Wishlist operations. The WishlistViewSet provides " +"endpoints for interacting with a user's wish list, allowing for the " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " +"actions for wishlist products. Permission checks are integrated to ensure " +"that users can only manage their own wishlists unless explicit permissions " +"are granted." +msgstr "" +"ViewSet for managing Wishlist operations. The WishlistViewSet provides " +"endpoints for interacting with a user's wish list, allowing for the " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " +"actions for wishlist products. Permission checks are integrated to ensure " +"that users can only manage their own wishlists unless explicit permissions " +"are granted." + +#: core/viewsets.py:1007 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." + +#: core/viewsets.py:1074 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Geocoding error: {e}" + +#: core/viewsets.py:1081 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." diff --git a/core/locale/es_ES/LC_MESSAGES/django.mo b/core/locale/es_ES/LC_MESSAGES/django.mo index d127adf7be6373971a01641cec6e99b473910ba5..0878edefe01f21bb69ad340485aa08babcd60d29 100644 GIT binary patch delta 27090 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 COcEsk diff --git a/core/locale/es_ES/LC_MESSAGES/django.po b/core/locale/es_ES/LC_MESSAGES/django.po index ad0a97d5..245e94f4 100644 --- a/core/locale/es_ES/LC_MESSAGES/django.po +++ b/core/locale/es_ES/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+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:11 +#: core/abstract.py:12 msgid "unique id" msgstr "Identificación única" -#: core/abstract.py:12 +#: 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:19 +#: core/abstract.py:20 msgid "is active" msgstr "Está activo" -#: core/abstract.py:20 +#: core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" @@ -35,19 +35,19 @@ msgstr "" "Si se establece en false, este objeto no puede ser visto por los usuarios " "sin el permiso necesario" -#: core/abstract.py:22 core/choices.py:18 +#: core/abstract.py:23 core/choices.py:18 msgid "created" msgstr "Creado" -#: core/abstract.py:22 +#: 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:23 +#: core/abstract.py:24 msgid "modified" msgstr "Modificado" -#: core/abstract.py:23 +#: core/abstract.py:24 msgid "when the object was last modified" msgstr "Cuándo se editó el objeto por última vez" @@ -90,11 +90,11 @@ msgid "selected items have been deactivated." msgstr "Los artículos seleccionados se han desactivado." #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 +#: core/graphene/object_types.py:616 core/models.py:701 core/models.py:709 msgid "attribute value" msgstr "Atributo Valor" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 msgid "attribute values" msgstr "Valores de los atributos" @@ -106,7 +106,7 @@ msgstr "Imagen" msgid "images" msgstr "Imágenes" -#: core/admin.py:155 core/models.py:445 +#: core/admin.py:155 core/models.py:459 msgid "stock" msgstr "Stock" @@ -114,11 +114,11 @@ msgstr "Stock" msgid "stocks" msgstr "Acciones" -#: core/admin.py:166 core/models.py:1609 +#: core/admin.py:166 core/models.py:1667 msgid "order product" msgstr "Pedir un producto" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 msgid "order products" msgstr "Pedir productos" @@ -742,7 +742,7 @@ msgstr "suprimir una relación pedido-producto" msgid "add or remove feedback on an order–product relation" msgstr "añadir o eliminar comentarios en una relación pedido-producto" -#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 msgid "no search term provided." msgstr "No se proporciona ningún término de búsqueda." @@ -795,7 +795,7 @@ msgid "Quantity" msgstr "Cantidad" #: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:287 core/models.py:369 core/models.py:522 +#: core/models.py:301 core/models.py:383 core/models.py:536 msgid "Slug" msgstr "Babosa" @@ -811,7 +811,7 @@ msgstr "Incluir subcategorías" msgid "Include personal ordered" msgstr "Incluir productos personales solicitados" -#: core/filters.py:85 core/models.py:526 +#: core/filters.py:85 core/models.py:540 msgid "SKU" msgstr "SKU" @@ -885,7 +885,7 @@ msgstr "Datos en caché" msgid "camelized JSON data from the requested URL" msgstr "Datos JSON camelizados de la URL solicitada" -#: core/graphene/mutations.py:65 core/views.py:360 +#: core/graphene/mutations.py:65 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "Sólo se permiten URL que empiecen por http(s)://." @@ -916,7 +916,7 @@ 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:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:839 +#: core/graphene/mutations.py:527 core/viewsets.py:679 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" "Tipo incorrecto proveniente del método order.buy(): {type(instance)!s}" @@ -993,9 +993,9 @@ msgstr "No se ha encontrado el producto {order_product_uuid}." msgid "original address string provided by the user" msgstr "Cadena de dirección original proporcionada por el usuario" -#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 -#: core/models.py:1234 core/models.py:1263 core/models.py:1288 -#: core/viewsets.py:842 +#: core/graphene/mutations.py:656 core/models.py:849 core/models.py:862 +#: core/models.py:1281 core/models.py:1310 core/models.py:1335 +#: core/viewsets.py:682 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} no existe: ¡{uuid}!" @@ -1009,8 +1009,8 @@ msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - funciona a las mil maravillas" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 -#: core/models.py:1686 +#: core/graphene/object_types.py:444 core/models.py:672 core/models.py:1144 +#: core/models.py:1744 msgid "attributes" msgstr "Atributos" @@ -1023,11 +1023,11 @@ 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:224 core/models.py:312 core/models.py:612 +#: core/graphene/object_types.py:224 core/models.py:326 core/models.py:626 msgid "categories" msgstr "Categorías" -#: core/graphene/object_types.py:124 core/models.py:383 +#: core/graphene/object_types.py:124 core/models.py:397 msgid "brands" msgstr "Marcas" @@ -1036,7 +1036,7 @@ msgid "category image url" msgstr "Categorías" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:249 +#: core/models.py:263 msgid "markup percentage" msgstr "Porcentaje de recargo" @@ -1060,7 +1060,7 @@ msgstr "Etiquetas para esta categoría" msgid "products in this category" msgstr "Productos de esta categoría" -#: core/graphene/object_types.py:351 core/models.py:155 +#: core/graphene/object_types.py:351 core/models.py:169 msgid "vendors" msgstr "Vendedores" @@ -1087,7 +1087,7 @@ msgid "represents feedback from a user." msgstr "Representa la opinión de un usuario." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1110 +#: core/models.py:1138 msgid "notifications" msgstr "Notificaciones" @@ -1095,7 +1095,7 @@ msgstr "Notificaciones" msgid "download url for this order product if applicable" msgstr "Descargar url para este producto de pedido si procede" -#: core/graphene/object_types.py:400 core/models.py:1791 +#: core/graphene/object_types.py:400 core/models.py:1860 msgid "feedback" msgstr "Comentarios" @@ -1103,7 +1103,7 @@ msgstr "Comentarios" msgid "a list of order products in this order" msgstr "Una lista de los productos del pedido" -#: core/graphene/object_types.py:436 core/models.py:1080 +#: core/graphene/object_types.py:436 core/models.py:1108 msgid "billing address" msgstr "Dirección de facturación" @@ -1131,7 +1131,7 @@ msgstr "¿Están todos los productos en el pedido digital" msgid "transactions for this order" msgstr "Transacciones para este pedido" -#: core/graphene/object_types.py:465 core/models.py:1144 +#: core/graphene/object_types.py:465 core/models.py:1172 msgid "orders" msgstr "Pedidos" @@ -1143,15 +1143,15 @@ msgstr "URL de la imagen" msgid "product's images" msgstr "Imágenes del producto" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 +#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 msgid "category" msgstr "Categoría" -#: core/graphene/object_types.py:502 core/models.py:1792 +#: core/graphene/object_types.py:502 core/models.py:1861 msgid "feedbacks" msgstr "Comentarios" -#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 +#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 msgid "brand" msgstr "Marca" @@ -1183,7 +1183,7 @@ msgstr "Número de reacciones" msgid "only available for personal orders" msgstr "Productos sólo disponibles para pedidos personales" -#: core/graphene/object_types.py:534 core/models.py:536 +#: core/graphene/object_types.py:534 core/models.py:550 msgid "products" msgstr "Productos" @@ -1195,15 +1195,15 @@ msgstr "Códigos promocionales" msgid "products on sale" msgstr "Productos a la venta" -#: core/graphene/object_types.py:651 core/models.py:784 +#: core/graphene/object_types.py:651 core/models.py:798 msgid "promotions" msgstr "Promociones" -#: core/graphene/object_types.py:655 core/models.py:154 +#: core/graphene/object_types.py:655 core/models.py:168 msgid "vendor" msgstr "Vendedor" -#: core/graphene/object_types.py:656 core/models.py:535 +#: core/graphene/object_types.py:656 core/models.py:549 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1211,11 +1211,11 @@ msgstr "Vendedor" msgid "product" msgstr "Producto" -#: core/graphene/object_types.py:667 core/models.py:807 +#: core/graphene/object_types.py:667 core/models.py:821 msgid "wishlisted products" msgstr "Productos deseados" -#: core/graphene/object_types.py:673 core/models.py:824 +#: core/graphene/object_types.py:673 core/models.py:838 msgid "wishlists" msgstr "Listas de deseos" @@ -1223,7 +1223,7 @@ msgstr "Listas de deseos" msgid "tagged products" msgstr "Productos con etiqueta" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 +#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 msgid "product tags" msgstr "Etiquetas del producto" @@ -1334,7 +1334,7 @@ msgstr "Grupo de atributos padre" msgid "attribute group's name" msgstr "Nombre del grupo de atributos" -#: core/models.py:100 core/models.py:620 +#: core/models.py:100 core/models.py:634 msgid "attribute group" msgstr "Grupo de atributos" @@ -1385,7 +1385,7 @@ msgstr "Nombre de este vendedor" msgid "vendor name" msgstr "Nombre del vendedor" -#: core/models.py:163 +#: core/models.py:177 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1400,27 +1400,27 @@ msgstr "" "operaciones exportadas a través de mixins y proporciona personalización de " "metadatos con fines administrativos." -#: core/models.py:175 core/models.py:206 +#: core/models.py:189 core/models.py:220 msgid "internal tag identifier for the product tag" msgstr "Identificador interno de la etiqueta del producto" -#: core/models.py:176 core/models.py:207 +#: core/models.py:190 core/models.py:221 msgid "tag name" msgstr "Nombre de la etiqueta" -#: core/models.py:180 core/models.py:211 +#: core/models.py:194 core/models.py:225 msgid "user-friendly name for the product tag" msgstr "Nombre fácil de usar para la etiqueta del producto" -#: core/models.py:181 core/models.py:212 +#: core/models.py:195 core/models.py:226 msgid "tag display name" msgstr "Nombre de la etiqueta" -#: core/models.py:189 +#: core/models.py:203 msgid "product tag" msgstr "Etiqueta del producto" -#: core/models.py:195 +#: core/models.py:209 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 " @@ -1431,15 +1431,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:220 +#: core/models.py:234 msgid "category tag" msgstr "etiqueta de categoría" -#: core/models.py:221 core/models.py:293 +#: core/models.py:235 core/models.py:307 msgid "category tags" msgstr "etiquetas de categoría" -#: core/models.py:226 +#: core/models.py:240 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1462,51 +1462,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:240 +#: core/models.py:254 msgid "upload an image representing this category" msgstr "Cargar una imagen que represente esta categoría" -#: core/models.py:243 +#: core/models.py:257 msgid "category image" msgstr "Categoría imagen" -#: core/models.py:248 +#: core/models.py:262 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:257 +#: core/models.py:271 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:258 +#: core/models.py:272 msgid "parent category" msgstr "Categoría de padres" -#: core/models.py:263 +#: core/models.py:277 msgid "category name" msgstr "Nombre de la categoría" -#: core/models.py:264 +#: core/models.py:278 msgid "provide a name for this category" msgstr "Indique un nombre para esta categoría" -#: core/models.py:271 +#: core/models.py:285 msgid "add a detailed description for this category" msgstr "Añadir una descripción detallada para esta categoría" -#: core/models.py:272 +#: core/models.py:286 msgid "category description" msgstr "Descripción de la categoría" -#: core/models.py:292 +#: core/models.py:306 msgid "tags that help describe or group this category" msgstr "etiquetas que ayudan a describir o agrupar esta categoría" -#: core/models.py:299 core/models.py:375 +#: core/models.py:313 core/models.py:389 msgid "priority" msgstr "Prioridad" -#: core/models.py:318 +#: core/models.py:332 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1520,47 +1520,47 @@ msgstr "" "Permite organizar y representar los datos relacionados con la marca dentro " "de la aplicación." -#: core/models.py:328 +#: core/models.py:342 msgid "name of this brand" msgstr "Nombre de esta marca" -#: core/models.py:329 +#: core/models.py:343 msgid "brand name" msgstr "Marca" -#: core/models.py:336 +#: core/models.py:350 msgid "upload a logo representing this brand" msgstr "Cargar un logotipo que represente a esta marca" -#: core/models.py:338 +#: core/models.py:352 msgid "brand small image" msgstr "Marca pequeña imagen" -#: core/models.py:344 +#: core/models.py:358 msgid "upload a big logo representing this brand" msgstr "Sube un logotipo grande que represente a esta marca" -#: core/models.py:346 +#: core/models.py:360 msgid "brand big image" msgstr "Gran imagen de marca" -#: core/models.py:351 +#: core/models.py:365 msgid "add a detailed description of the brand" msgstr "Añadir una descripción detallada de la marca" -#: core/models.py:352 +#: core/models.py:366 msgid "brand description" msgstr "Descripción de la marca" -#: core/models.py:357 +#: core/models.py:371 msgid "optional categories that this brand is associated with" msgstr "Categorías opcionales a las que se asocia esta marca" -#: core/models.py:358 +#: core/models.py:372 msgid "associated categories" msgstr "Categorías" -#: core/models.py:388 +#: core/models.py:402 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1577,68 +1577,68 @@ msgstr "" "seguimiento y la evaluación de los productos disponibles de varios " "vendedores." -#: core/models.py:400 +#: core/models.py:414 msgid "the vendor supplying this product stock" msgstr "El vendedor que suministra este producto dispone de" -#: core/models.py:401 +#: core/models.py:415 msgid "associated vendor" msgstr "Proveedor asociado" -#: core/models.py:405 +#: core/models.py:419 msgid "final price to the customer after markups" msgstr "Precio final al cliente después de márgenes" -#: core/models.py:406 +#: core/models.py:420 msgid "selling price" msgstr "Precio de venta" -#: core/models.py:411 +#: core/models.py:425 msgid "the product associated with this stock entry" msgstr "El producto asociado a esta entrada en stock" -#: core/models.py:412 core/models.py:683 core/models.py:730 -#: core/models.py:1583 +#: core/models.py:426 core/models.py:697 core/models.py:744 +#: core/models.py:1641 msgid "associated product" msgstr "Producto asociado" -#: core/models.py:419 +#: core/models.py:433 msgid "the price paid to the vendor for this product" msgstr "El precio pagado al vendedor por este producto" -#: core/models.py:420 +#: core/models.py:434 msgid "vendor purchase price" msgstr "Precio de compra al vendedor" -#: core/models.py:424 +#: core/models.py:438 msgid "available quantity of the product in stock" msgstr "Cantidad disponible del producto en stock" -#: core/models.py:425 +#: core/models.py:439 msgid "quantity in stock" msgstr "Cantidad en stock" -#: core/models.py:429 +#: core/models.py:443 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU asignada por el proveedor para identificar el producto" -#: core/models.py:430 +#: core/models.py:444 msgid "vendor sku" msgstr "SKU del vendedor" -#: core/models.py:436 +#: core/models.py:450 msgid "digital file associated with this stock if applicable" msgstr "Archivo digital asociado a esta acción, si procede" -#: core/models.py:437 +#: core/models.py:451 msgid "digital file" msgstr "Archivo digital" -#: core/models.py:446 +#: core/models.py:460 msgid "stock entries" msgstr "Entradas en existencias" -#: core/models.py:451 +#: core/models.py:465 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1660,55 +1660,55 @@ msgstr "" "para definir y manipular datos de productos y su información asociada dentro" " de una aplicación." -#: core/models.py:464 +#: core/models.py:478 msgid "category this product belongs to" msgstr "Categoría a la que pertenece este producto" -#: core/models.py:473 +#: core/models.py:487 msgid "optionally associate this product with a brand" msgstr "Si lo desea, puede asociar este producto a una marca" -#: core/models.py:479 +#: core/models.py:493 msgid "tags that help describe or group this product" msgstr "Etiquetas que ayudan a describir o agrupar este producto" -#: core/models.py:484 +#: core/models.py:498 msgid "indicates whether this product is digitally delivered" msgstr "Indica si este producto se entrega digitalmente" -#: core/models.py:485 +#: core/models.py:499 msgid "is product digital" msgstr "¿Es digital el producto?" -#: core/models.py:491 +#: core/models.py:505 msgid "provide a clear identifying name for the product" msgstr "Proporcionar un nombre que identifique claramente el producto" -#: core/models.py:492 +#: core/models.py:506 msgid "product name" msgstr "Nombre del producto" -#: core/models.py:497 core/models.py:772 +#: core/models.py:511 core/models.py:786 msgid "add a detailed description of the product" msgstr "Añada una descripción detallada del producto" -#: core/models.py:498 +#: core/models.py:512 msgid "product description" msgstr "Descripción del producto" -#: core/models.py:505 +#: core/models.py:519 msgid "part number for this product" msgstr "Número de pieza de este producto" -#: core/models.py:506 +#: core/models.py:520 msgid "part number" msgstr "Número de pieza" -#: core/models.py:525 +#: core/models.py:539 msgid "stock keeping unit for this product" msgstr "Unidad de Mantenimiento de Existencias para este producto" -#: core/models.py:599 +#: core/models.py:613 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 " @@ -1724,69 +1724,69 @@ msgstr "" "enteros, flotantes, booleanos, matrices y objetos. Esto permite una " "estructuración dinámica y flexible de los datos." -#: core/models.py:611 +#: core/models.py:625 msgid "category of this attribute" msgstr "Categoría de este atributo" -#: core/models.py:619 +#: core/models.py:633 msgid "group of this attribute" msgstr "Grupo de este atributo" -#: core/models.py:625 +#: core/models.py:639 msgid "string" msgstr "Cadena" -#: core/models.py:626 +#: core/models.py:640 msgid "integer" msgstr "Entero" -#: core/models.py:627 +#: core/models.py:641 msgid "float" msgstr "Flotador" -#: core/models.py:628 +#: core/models.py:642 msgid "boolean" msgstr "Booleano" -#: core/models.py:629 +#: core/models.py:643 msgid "array" msgstr "Matriz" -#: core/models.py:630 +#: core/models.py:644 msgid "object" msgstr "Objeto" -#: core/models.py:632 +#: core/models.py:646 msgid "type of the attribute's value" msgstr "Tipo del valor del atributo" -#: core/models.py:633 +#: core/models.py:647 msgid "value type" msgstr "Tipo de valor" -#: core/models.py:638 +#: core/models.py:652 msgid "name of this attribute" msgstr "Nombre de este atributo" -#: core/models.py:639 +#: core/models.py:653 msgid "attribute's name" msgstr "Nombre del atributo" -#: core/models.py:645 +#: core/models.py:659 msgid "is filterable" msgstr "es filtrable" -#: core/models.py:646 +#: core/models.py:660 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:657 core/models.py:675 +#: core/models.py:671 core/models.py:689 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Atributo" -#: core/models.py:663 +#: core/models.py:677 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" @@ -1796,19 +1796,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:674 +#: core/models.py:688 msgid "attribute of this value" msgstr "Atributo de este valor" -#: core/models.py:682 +#: core/models.py:696 msgid "the specific product associated with this attribute's value" msgstr "El producto específico asociado al valor de este atributo" -#: core/models.py:688 +#: core/models.py:702 msgid "the specific value for this attribute" msgstr "El valor específico de este atributo" -#: core/models.py:701 +#: core/models.py:715 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -1822,40 +1822,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:712 +#: core/models.py:726 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:713 +#: core/models.py:727 msgid "image alt text" msgstr "Texto alternativo de la imagen" -#: core/models.py:716 +#: core/models.py:730 msgid "upload the image file for this product" msgstr "Cargar el archivo de imagen para este producto" -#: core/models.py:717 core/models.py:742 +#: core/models.py:731 core/models.py:756 msgid "product image" msgstr "Imagen del producto" -#: core/models.py:723 +#: core/models.py:737 msgid "determines the order in which images are displayed" msgstr "Determina el orden de visualización de las imágenes" -#: core/models.py:724 +#: core/models.py:738 msgid "display priority" msgstr "Prioridad de visualización" -#: core/models.py:729 +#: core/models.py:743 msgid "the product that this image represents" msgstr "El producto que representa esta imagen" -#: core/models.py:743 +#: core/models.py:757 msgid "product images" msgstr "Imágenes de productos" -#: core/models.py:748 +#: core/models.py:762 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1871,39 +1871,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:760 +#: core/models.py:774 msgid "percentage discount for the selected products" msgstr "Porcentaje de descuento para los productos seleccionados" -#: core/models.py:761 +#: core/models.py:775 msgid "discount percentage" msgstr "Porcentaje de descuento" -#: core/models.py:766 +#: core/models.py:780 msgid "provide a unique name for this promotion" msgstr "Proporcione un nombre único para esta promoción" -#: core/models.py:767 +#: core/models.py:781 msgid "promotion name" msgstr "Nombre de la promoción" -#: core/models.py:773 +#: core/models.py:787 msgid "promotion description" msgstr "Descripción de la promoción" -#: core/models.py:778 +#: core/models.py:792 msgid "select which products are included in this promotion" msgstr "Seleccione los productos incluidos en esta promoción" -#: core/models.py:779 +#: core/models.py:793 msgid "included products" msgstr "Productos incluidos" -#: core/models.py:783 +#: core/models.py:797 msgid "promotion" msgstr "Promoción" -#: core/models.py:794 +#: core/models.py:808 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1916,23 +1916,23 @@ msgstr "" "productos, así como soportar operaciones para añadir y eliminar múltiples " "productos a la vez." -#: core/models.py:806 +#: core/models.py:820 msgid "products that the user has marked as wanted" msgstr "Productos que el usuario ha marcado como deseados" -#: core/models.py:814 +#: core/models.py:828 msgid "user who owns this wishlist" msgstr "Usuario propietario de esta lista de deseos" -#: core/models.py:815 +#: core/models.py:829 msgid "wishlist owner" msgstr "Propietario de Wishlist" -#: core/models.py:823 +#: core/models.py:837 msgid "wishlist" msgstr "Lista de deseos" -#: core/models.py:865 +#: core/models.py:879 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1948,19 +1948,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:878 +#: core/models.py:892 msgid "documentary" msgstr "Documental" -#: core/models.py:879 +#: core/models.py:893 msgid "documentaries" msgstr "Documentaries" -#: core/models.py:889 +#: core/models.py:903 msgid "unresolved" msgstr "Sin resolver" -#: core/models.py:894 +#: core/models.py:908 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1982,59 +1982,59 @@ msgstr "" " clase también permite asociar una dirección a un usuario, facilitando el " "manejo personalizado de los datos." -#: core/models.py:909 +#: core/models.py:923 msgid "address line for the customer" msgstr "Dirección del cliente" -#: core/models.py:910 +#: core/models.py:924 msgid "address line" msgstr "Dirección" -#: core/models.py:912 +#: core/models.py:926 msgid "street" msgstr "Calle" -#: core/models.py:913 +#: core/models.py:927 msgid "district" msgstr "Distrito" -#: core/models.py:914 +#: core/models.py:928 msgid "city" msgstr "Ciudad" -#: core/models.py:915 +#: core/models.py:929 msgid "region" msgstr "Región" -#: core/models.py:916 +#: core/models.py:930 msgid "postal code" msgstr "Promo code" -#: core/models.py:917 +#: core/models.py:931 msgid "country" msgstr "País" -#: core/models.py:924 +#: core/models.py:938 msgid "geolocation point: (longitude, latitude)" msgstr "Geolocalización Punto(Longitud, Latitud)" -#: core/models.py:927 +#: core/models.py:941 msgid "full JSON response from geocoder for this address" msgstr "Respuesta JSON completa del geocodificador para esta dirección" -#: core/models.py:932 +#: core/models.py:946 msgid "stored JSON response from the geocoding service" msgstr "Respuesta JSON almacenada del servicio de geocodificación" -#: core/models.py:940 +#: core/models.py:954 msgid "address" msgstr "Dirección" -#: core/models.py:941 +#: core/models.py:955 msgid "addresses" msgstr "Direcciones" -#: core/models.py:953 +#: core/models.py:967 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2051,72 +2051,72 @@ msgstr "" "para validar y aplicar el código promocional a un pedido garantizando el " "cumplimiento de las restricciones." -#: core/models.py:967 +#: core/models.py:981 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:968 +#: core/models.py:982 msgid "promo code identifier" msgstr "Promo code identifier" -#: core/models.py:975 +#: core/models.py:989 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:976 +#: core/models.py:990 msgid "fixed discount amount" msgstr "Importe fijo del descuento" -#: core/models.py:982 +#: core/models.py:996 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:983 +#: core/models.py:997 msgid "percentage discount" msgstr "Porcentaje de descuento" -#: core/models.py:988 +#: core/models.py:1002 msgid "timestamp when the promocode expires" msgstr "Fecha de caducidad del promocode" -#: core/models.py:989 +#: core/models.py:1003 msgid "end validity time" msgstr "Hora de fin de validez" -#: core/models.py:994 +#: core/models.py:1008 msgid "timestamp from which this promocode is valid" msgstr "Fecha a partir de la cual es válido este promocode" -#: core/models.py:995 +#: core/models.py:1009 msgid "start validity time" msgstr "Hora de inicio de validez" -#: core/models.py:1000 +#: core/models.py:1014 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:1001 +#: core/models.py:1015 msgid "usage timestamp" msgstr "Marca de tiempo de uso" -#: core/models.py:1006 +#: core/models.py:1020 msgid "user assigned to this promocode if applicable" msgstr "Usuario asignado a este promocode si procede" -#: core/models.py:1007 +#: core/models.py:1021 msgid "assigned user" msgstr "Usuario asignado" -#: core/models.py:1014 +#: core/models.py:1028 msgid "promo code" msgstr "Promo code" -#: core/models.py:1015 +#: core/models.py:1029 msgid "promo codes" msgstr "Promo codes" -#: core/models.py:1022 +#: core/models.py:1044 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2124,16 +2124,16 @@ msgstr "" "Sólo debe definirse un tipo de descuento (importe o porcentaje), pero no " "ambos ni ninguno." -#: core/models.py:1037 +#: core/models.py:1065 msgid "promocode already used" msgstr "El código promocional ya ha sido utilizado" -#: core/models.py:1053 +#: core/models.py:1081 #, 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:1062 +#: core/models.py:1090 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 " @@ -2150,137 +2150,137 @@ 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:1079 +#: core/models.py:1107 msgid "the billing address used for this order" msgstr "La dirección de facturación utilizada para este pedido" -#: core/models.py:1087 +#: core/models.py:1115 msgid "optional promo code applied to this order" msgstr "Código promocional opcional aplicado a este pedido" -#: core/models.py:1088 +#: core/models.py:1116 msgid "applied promo code" msgstr "Código promocional aplicado" -#: core/models.py:1096 +#: core/models.py:1124 msgid "the shipping address used for this order" msgstr "La dirección de envío utilizada para este pedido" -#: core/models.py:1097 +#: core/models.py:1125 msgid "shipping address" msgstr "Dirección de envío" -#: core/models.py:1103 +#: core/models.py:1131 msgid "current status of the order in its lifecycle" msgstr "Estado actual del pedido en su ciclo de vida" -#: core/models.py:1104 +#: core/models.py:1132 msgid "order status" msgstr "Estado del pedido" -#: core/models.py:1109 core/models.py:1560 +#: core/models.py:1137 core/models.py:1618 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:1115 +#: core/models.py:1143 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:1121 +#: core/models.py:1149 msgid "the user who placed the order" msgstr "El usuario que realizó el pedido" -#: core/models.py:1122 +#: core/models.py:1150 msgid "user" msgstr "Usuario" -#: core/models.py:1128 +#: core/models.py:1156 msgid "the timestamp when the order was finalized" msgstr "Fecha de finalización de la orden" -#: core/models.py:1129 +#: core/models.py:1157 msgid "buy time" msgstr "Comprar tiempo" -#: core/models.py:1136 +#: core/models.py:1164 msgid "a human-readable identifier for the order" msgstr "Un identificador legible por el ser humano para la orden" -#: core/models.py:1137 +#: core/models.py:1165 msgid "human readable id" msgstr "ID legible por humanos" -#: core/models.py:1143 +#: core/models.py:1171 msgid "order" msgstr "Pida" -#: core/models.py:1168 +#: core/models.py:1209 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:1202 +#: core/models.py:1249 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:1207 +#: core/models.py:1254 msgid "you cannot add inactive products to order" msgstr "No se pueden añadir productos inactivos al pedido" -#: core/models.py:1224 +#: core/models.py:1271 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:1246 core/models.py:1271 core/models.py:1279 +#: core/models.py:1293 core/models.py:1318 core/models.py:1326 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:1267 +#: core/models.py:1314 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} ¡no existe con la consulta <{query}>!" -#: core/models.py:1299 +#: core/models.py:1346 msgid "promocode does not exist" msgstr "Promocode no existe" -#: core/models.py:1305 +#: core/models.py:1352 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:1324 +#: core/models.py:1371 msgid "address does not exist" msgstr "La dirección no existe" -#: core/models.py:1345 core/models.py:1414 +#: core/models.py:1392 core/models.py:1461 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:1348 core/models.py:1410 +#: core/models.py:1395 core/models.py:1457 msgid "invalid force value" msgstr "Valor de fuerza no válido" -#: core/models.py:1354 core/models.py:1417 +#: core/models.py:1401 core/models.py:1464 msgid "you cannot purchase an empty order!" msgstr "No se puede comprar un pedido vacío." -#: core/models.py:1373 +#: core/models.py:1420 msgid "you cannot buy an order without a user" msgstr "No se puede comprar un pedido sin un usuario." -#: core/models.py:1387 +#: core/models.py:1434 msgid "a user without a balance cannot buy with balance" msgstr "¡Un usuario sin saldo no puede comprar con saldo!" -#: core/models.py:1392 +#: core/models.py:1439 msgid "insufficient funds to complete the order" msgstr "Fondos insuficientes para completar el pedido" -#: core/models.py:1426 +#: core/models.py:1473 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2288,14 +2288,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:1435 +#: core/models.py:1482 #, 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:1533 +#: core/models.py:1591 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2318,110 +2318,110 @@ msgstr "" "productos digitales. El modelo se integra con los modelos Pedido y Producto " "y almacena una referencia a ellos." -#: core/models.py:1548 +#: core/models.py:1606 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:1549 +#: core/models.py:1607 msgid "purchase price at order time" msgstr "Precio de compra en el momento del pedido" -#: core/models.py:1554 +#: core/models.py:1612 msgid "internal comments for admins about this ordered product" msgstr "" "Comentarios internos para los administradores sobre este producto solicitado" -#: core/models.py:1555 +#: core/models.py:1613 msgid "internal comments" msgstr "Comentarios internos" -#: core/models.py:1561 +#: core/models.py:1619 msgid "user notifications" msgstr "Notificaciones a los usuarios" -#: core/models.py:1566 +#: core/models.py:1624 msgid "json representation of this item's attributes" msgstr "Representación JSON de los atributos de este elemento" -#: core/models.py:1567 +#: core/models.py:1625 msgid "ordered product attributes" msgstr "Atributos ordenados del producto" -#: core/models.py:1572 +#: core/models.py:1630 msgid "reference to the parent order that contains this product" msgstr "Referencia al pedido principal que contiene este producto" -#: core/models.py:1573 +#: core/models.py:1631 msgid "parent order" msgstr "Orden de los padres" -#: core/models.py:1582 +#: core/models.py:1640 msgid "the specific product associated with this order line" msgstr "El producto específico asociado a esta línea de pedido" -#: core/models.py:1589 +#: core/models.py:1647 msgid "quantity of this specific product in the order" msgstr "Cantidad de este producto específico en el pedido" -#: core/models.py:1590 +#: core/models.py:1648 msgid "product quantity" msgstr "Cantidad de productos" -#: core/models.py:1597 +#: core/models.py:1655 msgid "current status of this product in the order" msgstr "Estado actual de este producto en el pedido" -#: core/models.py:1598 +#: core/models.py:1656 msgid "product line status" msgstr "Estado de la línea de productos" -#: core/models.py:1661 +#: core/models.py:1719 msgid "order product must have an order" msgstr "El pedido-producto debe tener un pedido asociado." -#: core/models.py:1663 +#: core/models.py:1721 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Acción incorrecta especificada para la retroalimentación: ¡{action}!" -#: core/models.py:1677 +#: core/models.py:1735 msgid "you cannot feedback an order which is not received" msgstr "no se puede comentar un pedido no recibido" -#: core/models.py:1683 +#: core/models.py:1741 msgid "name" msgstr "Nombre" -#: core/models.py:1684 +#: core/models.py:1742 msgid "URL of the integration" msgstr "URL de la integración" -#: core/models.py:1685 +#: core/models.py:1743 msgid "authentication credentials" msgstr "Credenciales de autenticación" -#: core/models.py:1699 +#: core/models.py:1765 msgid "you can only have one default CRM provider" msgstr "Sólo puede tener un proveedor de CRM por defecto" -#: core/models.py:1703 +#: core/models.py:1775 msgid "CRM" msgstr "CRM" -#: core/models.py:1704 +#: core/models.py:1776 msgid "CRMs" msgstr "CRMs" -#: core/models.py:1716 +#: core/models.py:1788 msgid "order CRM link" msgstr "Enlace CRM del pedido" -#: core/models.py:1717 +#: core/models.py:1789 msgid "orders CRM links" msgstr "Enlaces CRM de los pedidos" -#: core/models.py:1722 +#: core/models.py:1794 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2438,19 +2438,15 @@ msgstr "" " para descargar el activo cuando el pedido asociado está en estado " "completado." -#: core/models.py:1736 +#: core/models.py:1808 msgid "download" msgstr "Descargar" -#: core/models.py:1737 +#: core/models.py:1809 msgid "downloads" msgstr "Descargas" -#: core/models.py:1745 -msgid "you can not download a digital asset for a non-finished order" -msgstr "No puede descargar un activo digital para un pedido no finalizado" - -#: core/models.py:1754 +#: core/models.py:1823 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2466,30 +2462,30 @@ msgstr "" "clase utiliza campos de base de datos para modelar y gestionar eficazmente " "los datos de los comentarios." -#: core/models.py:1766 +#: core/models.py:1835 msgid "user-provided comments about their experience with the product" msgstr "Comentarios de los usuarios sobre su experiencia con el producto" -#: core/models.py:1767 +#: core/models.py:1836 msgid "feedback comments" msgstr "Comentarios" -#: core/models.py:1774 +#: core/models.py:1843 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:1775 +#: core/models.py:1844 msgid "related order product" msgstr "Producto relacionado con el pedido" -#: core/models.py:1780 +#: core/models.py:1849 msgid "user-assigned rating for the product" msgstr "Valoración del producto asignada por el usuario" -#: core/models.py:1781 +#: core/models.py:1850 msgid "product rating" msgstr "Valoración del producto" @@ -2694,11 +2690,11 @@ msgstr "" "todos los derechos\n" " reservados" -#: core/utils/caching.py:41 +#: core/utils/caching.py:48 msgid "both data and timeout are required" msgstr "Tanto los datos como el tiempo de espera son necesarios" -#: core/utils/caching.py:43 +#: core/utils/caching.py:50 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." @@ -2731,26 +2727,353 @@ msgstr "No tiene permiso para realizar esta acción." msgid "NOMINATIM_URL must be configured." msgstr "El parámetro NOMINATIM_URL debe estar configurado." -#: core/validators.py:16 +#: core/validators.py:14 #, 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/validators.py:22 -msgid "invalid phone number format" -msgstr "Formato de número de teléfono no válido" +#: core/views.py:72 +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 "" +"Gestiona la solicitud del índice del mapa del sitio y devuelve una respuesta" +" XML. Se asegura de que la respuesta incluya el encabezado de tipo de " +"contenido apropiado para XML." -#: core/views.py:489 +#: core/views.py:87 +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 "" +"Gestiona la respuesta de la vista detallada de un mapa del sitio. Esta " +"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 +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 +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 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +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 +msgid "Handles `contact us` form submissions." +msgstr "Gestiona los formularios de contacto." + +#: core/views.py:215 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "" +"Gestiona las solicitudes de procesamiento y validación de URL de las " +"solicitudes POST entrantes." + +#: core/views.py:255 +msgid "Handles global search queries." +msgstr "Gestiona las consultas de búsqueda global." + +#: core/views.py:270 +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:312 msgid "you can only download the digital asset once" msgstr "Sólo puede descargar el activo digital una vez" -#: core/views.py:547 +#: core/views.py:315 +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:353 +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." +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:365 msgid "favicon not found" msgstr "favicon no encontrado" -#: core/viewsets.py:1357 +#: core/views.py:370 +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." +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:382 +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 "" +"Redirige la petición a la página índice de administración. La función " +"gestiona las peticiones HTTP entrantes y las redirige a la página de índice " +"de la interfaz de administración de Django. Utiliza la función `redirect` de" +" Django para gestionar la redirección HTTP." + +#: core/viewsets.py:128 +msgid "" +"Defines a viewset for managing Evibes-related operations. The EvibesViewSet " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" +"Define un conjunto de vistas para gestionar operaciones relacionadas con " +"Evibes. La clase EvibesViewSet hereda de ModelViewSet y proporciona " +"funcionalidad para manejar acciones y operaciones sobre entidades Evibes. " +"Incluye soporte para clases serializadoras dinámicas basadas en la acción " +"actual, permisos personalizables y formatos de representación." + +#: core/viewsets.py:147 +msgid "" +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." +msgstr "" +"Representa un conjunto de vistas para gestionar objetos AttributeGroup. " +"Maneja operaciones relacionadas con AttributeGroup, incluyendo filtrado, " +"serialización y recuperación de datos. Esta clase forma parte de la capa API" +" de la aplicación y proporciona una forma estandarizada de procesar las " +"solicitudes y respuestas de los datos de AttributeGroup." + +#: core/viewsets.py:166 +msgid "" +"Handles operations related to Attribute objects within the application. " +"Provides a set of API endpoints to interact with Attribute data. This class " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"Gestiona las operaciones relacionadas con los objetos Attribute dentro de la" +" aplicación. Proporciona un conjunto de puntos finales de la API para " +"interactuar con los datos de los atributos. Esta clase gestiona la consulta," +" el filtrado y la serialización de objetos Attribute, lo que permite un " +"control dinámico de los datos devueltos, como el filtrado por campos " +"específicos o la recuperación de información detallada o simplificada en " +"función de la solicitud." + +#: core/viewsets.py:185 +msgid "" +"A viewset for managing AttributeValue objects. This viewset provides " +"functionality for listing, retrieving, creating, updating, and deleting " +"AttributeValue objects. It integrates with Django REST Framework's viewset " +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." +msgstr "" +"Conjunto de vistas para gestionar objetos AttributeValue. Este conjunto de " +"vistas proporciona funcionalidad para listar, recuperar, crear, actualizar y" +" eliminar objetos AttributeValue. Se integra con los mecanismos viewset de " +"Django REST Framework y utiliza serializadores apropiados para diferentes " +"acciones. Las capacidades de filtrado se proporcionan a través de " +"DjangoFilterBackend." + +#: core/viewsets.py:204 +msgid "" +"Manages views for Category-related operations. The CategoryViewSet class is " +"responsible for handling operations related to the Category model in the " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" +"Gestiona vistas para operaciones relacionadas con Categorías. La clase " +"CategoryViewSet se encarga de gestionar las operaciones relacionadas con el " +"modelo Category del sistema. Permite recuperar, filtrar y serializar datos " +"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:315 +msgid "" +"Represents a viewset for managing Brand instances. This class provides " +"functionality for querying, filtering, and serializing Brand objects. It " +"uses Django's ViewSet framework to simplify the implementation of API " +"endpoints for Brand objects." +msgstr "" +"Representa un conjunto de vistas para gestionar instancias de Brand. Esta " +"clase proporciona funcionalidad para consultar, filtrar y serializar objetos" +" Brand. Utiliza el marco ViewSet de Django para simplificar la " +"implementación de puntos finales de API para objetos Brand." + +#: core/viewsets.py:427 +msgid "" +"Manages operations related to the `Product` model in the system. This class " +"provides a viewset for managing products, including their filtering, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" +"Gestiona las operaciones relacionadas con el modelo `Producto` en el " +"sistema. Esta clase proporciona un conjunto de vistas para la gestión de " +"productos, incluyendo su filtrado, serialización y operaciones en instancias" +" específicas. Se extiende desde `EvibesViewSet` para utilizar " +"funcionalidades comunes y se integra con el framework Django REST para " +"operaciones RESTful API. Incluye métodos para recuperar detalles del " +"producto, aplicar permisos y acceder a comentarios relacionados de un " +"producto." + +#: core/viewsets.py:547 +msgid "" +"Represents a viewset for managing Vendor objects. This viewset allows " +"fetching, filtering, and serializing Vendor data. It defines the queryset, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" +"Representa un conjunto de vistas para gestionar objetos de vendedor. Este " +"conjunto de vistas permite obtener, filtrar y serializar datos de vendedor. " +"Define las clases queryset, filter configurations y serializer utilizadas " +"para gestionar las diferentes acciones. El propósito de esta clase es " +"proporcionar un acceso simplificado a los recursos relacionados con el " +"vendedor a través del marco REST de Django." + +#: core/viewsets.py:567 +msgid "" +"Representation of a view set handling Feedback objects. This class manages " +"operations related to Feedback objects, including listing, filtering, and " +"retrieving details. The purpose of this view set is to provide different " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"use of Django's filtering system for querying data." +msgstr "" +"Representación de un conjunto de vistas que maneja objetos Feedback. Esta " +"clase gestiona las operaciones relacionadas con los objetos Feedback, " +"incluyendo el listado, filtrado y recuperación de detalles. El propósito de " +"este conjunto de vistas es proporcionar diferentes serializadores para " +"diferentes acciones e implementar el manejo basado en permisos de los " +"objetos Feedback accesibles. Extiende la base `EvibesViewSet` y hace uso del" +" sistema de filtrado de Django para la consulta de datos." + +#: core/viewsets.py:593 +msgid "" +"ViewSet for managing orders and related operations. This class provides " +"functionality to retrieve, modify, and manage order objects. It includes " +"various endpoints for handling order operations such as adding or removing " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " +"enforces permissions accordingly while interacting with order data." +msgstr "" +"ViewSet para la gestión de pedidos y operaciones relacionadas. Esta clase " +"proporciona funcionalidad para recuperar, modificar y gestionar objetos de " +"pedido. Incluye varios puntos finales para gestionar operaciones de pedidos," +" como añadir o eliminar productos, realizar compras para usuarios " +"registrados y no registrados, y recuperar los pedidos pendientes del usuario" +" autenticado actual. ViewSet utiliza varios serializadores en función de la " +"acción específica que se esté realizando y aplica los permisos " +"correspondientes al interactuar con los datos del pedido." + +#: core/viewsets.py:782 +msgid "" +"Provides a viewset for managing OrderProduct entities. This viewset enables " +"CRUD operations and custom actions specific to the OrderProduct model. It " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " +"feedback on OrderProduct instances" +msgstr "" +"Proporciona un conjunto de vistas para gestionar entidades OrderProduct. " +"Este conjunto de vistas permite operaciones CRUD y acciones personalizadas " +"específicas del modelo OrderProduct. Incluye filtrado, comprobación de " +"permisos y cambio de serializador en función de la acción solicitada. " +"Además, proporciona una acción detallada para gestionar los comentarios " +"sobre las instancias de OrderProduct." + +#: core/viewsets.py:833 +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:845 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +msgstr "" +"Gestiona la recuperación y el manejo de instancias de PromoCode a través de " +"varias acciones de la API." + +#: core/viewsets.py:866 +msgid "Represents a view set for managing promotions. " +msgstr "Representa un conjunto de vistas para gestionar promociones." + +#: core/viewsets.py:878 +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:892 +msgid "" +"ViewSet for managing Wishlist operations. The WishlistViewSet provides " +"endpoints for interacting with a user's wish list, allowing for the " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " +"actions for wishlist products. Permission checks are integrated to ensure " +"that users can only manage their own wishlists unless explicit permissions " +"are granted." +msgstr "" +"ViewSet para gestionar las operaciones de la lista de deseos. " +"WishlistViewSet proporciona puntos finales para interactuar con la lista de " +"deseos de un usuario, permitiendo la recuperación, modificación y " +"personalización de productos dentro de la lista de deseos. Este ViewSet " +"facilita funcionalidades como la adición, eliminación y acciones masivas " +"para los productos de la lista de deseos. Los controles de permisos están " +"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:1007 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" +"Esta clase proporciona la funcionalidad viewset para la gestión de objetos " +"`Address`. La clase AddressViewSet permite operaciones CRUD, filtrado y " +"acciones personalizadas relacionadas con entidades de direcciones. Incluye " +"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:1074 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Error de geocodificación: {e}" + +#: core/viewsets.py:1081 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" +"Maneja las operaciones relacionadas con las Etiquetas de Producto dentro de " +"la aplicación. Esta clase proporciona funcionalidad para recuperar, filtrar " +"y serializar objetos de etiquetas de producto. Admite el filtrado flexible " +"de atributos específicos mediante el backend de filtrado especificado y " +"utiliza dinámicamente diferentes serializadores en función de la acción que " +"se esté realizando." diff --git a/core/locale/fa_IR/LC_MESSAGES/django.po b/core/locale/fa_IR/LC_MESSAGES/django.po index c7b687b4..fdd945e6 100644 --- a/core/locale/fa_IR/LC_MESSAGES/django.po +++ b/core/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-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,36 +16,36 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: core/abstract.py:11 +#: core/abstract.py:12 msgid "unique id" msgstr "" -#: core/abstract.py:12 +#: core/abstract.py:13 msgid "unique id is used to surely identify any database object" msgstr "" -#: core/abstract.py:19 +#: core/abstract.py:20 msgid "is active" msgstr "" -#: core/abstract.py:20 +#: core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed permission" msgstr "" -#: core/abstract.py:22 core/choices.py:18 +#: core/abstract.py:23 core/choices.py:18 msgid "created" msgstr "" -#: core/abstract.py:22 +#: core/abstract.py:23 msgid "when the object first appeared on the database" msgstr "" -#: core/abstract.py:23 +#: core/abstract.py:24 msgid "modified" msgstr "" -#: core/abstract.py:23 +#: core/abstract.py:24 msgid "when the object was last modified" msgstr "" @@ -88,11 +88,11 @@ msgid "selected items have been deactivated." msgstr "" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 +#: core/graphene/object_types.py:616 core/models.py:701 core/models.py:709 msgid "attribute value" msgstr "" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 msgid "attribute values" msgstr "" @@ -104,7 +104,7 @@ msgstr "" msgid "images" msgstr "" -#: core/admin.py:155 core/models.py:445 +#: core/admin.py:155 core/models.py:459 msgid "stock" msgstr "" @@ -112,11 +112,11 @@ msgstr "" msgid "stocks" msgstr "" -#: core/admin.py:166 core/models.py:1609 +#: core/admin.py:166 core/models.py:1667 msgid "order product" msgstr "" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 msgid "order products" msgstr "" @@ -678,7 +678,7 @@ msgstr "" msgid "add or remove feedback on an order–product relation" msgstr "" -#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 msgid "no search term provided." msgstr "" @@ -731,7 +731,7 @@ msgid "Quantity" msgstr "" #: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:287 core/models.py:369 core/models.py:522 +#: core/models.py:301 core/models.py:383 core/models.py:536 msgid "Slug" msgstr "" @@ -747,7 +747,7 @@ msgstr "" msgid "Include personal ordered" msgstr "" -#: core/filters.py:85 core/models.py:526 +#: core/filters.py:85 core/models.py:540 msgid "SKU" msgstr "" @@ -820,7 +820,7 @@ msgstr "" msgid "camelized JSON data from the requested URL" msgstr "" -#: core/graphene/mutations.py:65 core/views.py:360 +#: core/graphene/mutations.py:65 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "" @@ -851,7 +851,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:839 +#: core/graphene/mutations.py:527 core/viewsets.py:679 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" @@ -925,9 +925,9 @@ msgstr "" msgid "original address string provided by the user" msgstr "" -#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 -#: core/models.py:1234 core/models.py:1263 core/models.py:1288 -#: core/viewsets.py:842 +#: core/graphene/mutations.py:656 core/models.py:849 core/models.py:862 +#: core/models.py:1281 core/models.py:1310 core/models.py:1335 +#: core/viewsets.py:682 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" @@ -941,8 +941,8 @@ msgid "elasticsearch - works like a charm" msgstr "" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 -#: core/models.py:1686 +#: core/graphene/object_types.py:444 core/models.py:672 core/models.py:1144 +#: core/models.py:1744 msgid "attributes" msgstr "" @@ -955,11 +955,11 @@ msgid "groups of attributes" msgstr "" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:612 +#: core/graphene/object_types.py:224 core/models.py:326 core/models.py:626 msgid "categories" msgstr "" -#: core/graphene/object_types.py:124 core/models.py:383 +#: core/graphene/object_types.py:124 core/models.py:397 msgid "brands" msgstr "" @@ -968,7 +968,7 @@ msgid "category image url" msgstr "" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:249 +#: core/models.py:263 msgid "markup percentage" msgstr "" @@ -988,7 +988,7 @@ msgstr "" msgid "products in this category" msgstr "" -#: core/graphene/object_types.py:351 core/models.py:155 +#: core/graphene/object_types.py:351 core/models.py:169 msgid "vendors" msgstr "" @@ -1013,7 +1013,7 @@ msgid "represents feedback from a user." msgstr "" #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1110 +#: core/models.py:1138 msgid "notifications" msgstr "" @@ -1021,7 +1021,7 @@ msgstr "" msgid "download url for this order product if applicable" msgstr "" -#: core/graphene/object_types.py:400 core/models.py:1791 +#: core/graphene/object_types.py:400 core/models.py:1860 msgid "feedback" msgstr "" @@ -1029,7 +1029,7 @@ msgstr "" msgid "a list of order products in this order" msgstr "" -#: core/graphene/object_types.py:436 core/models.py:1080 +#: core/graphene/object_types.py:436 core/models.py:1108 msgid "billing address" msgstr "" @@ -1055,7 +1055,7 @@ msgstr "" msgid "transactions for this order" msgstr "" -#: core/graphene/object_types.py:465 core/models.py:1144 +#: core/graphene/object_types.py:465 core/models.py:1172 msgid "orders" msgstr "" @@ -1067,15 +1067,15 @@ msgstr "" msgid "product's images" msgstr "" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 +#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 msgid "category" msgstr "" -#: core/graphene/object_types.py:502 core/models.py:1792 +#: core/graphene/object_types.py:502 core/models.py:1861 msgid "feedbacks" msgstr "" -#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 +#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 msgid "brand" msgstr "" @@ -1107,7 +1107,7 @@ msgstr "" msgid "only available for personal orders" msgstr "" -#: core/graphene/object_types.py:534 core/models.py:536 +#: core/graphene/object_types.py:534 core/models.py:550 msgid "products" msgstr "" @@ -1119,15 +1119,15 @@ msgstr "" msgid "products on sale" msgstr "" -#: core/graphene/object_types.py:651 core/models.py:784 +#: core/graphene/object_types.py:651 core/models.py:798 msgid "promotions" msgstr "" -#: core/graphene/object_types.py:655 core/models.py:154 +#: core/graphene/object_types.py:655 core/models.py:168 msgid "vendor" msgstr "" -#: core/graphene/object_types.py:656 core/models.py:535 +#: core/graphene/object_types.py:656 core/models.py:549 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1135,11 +1135,11 @@ msgstr "" msgid "product" msgstr "" -#: core/graphene/object_types.py:667 core/models.py:807 +#: core/graphene/object_types.py:667 core/models.py:821 msgid "wishlisted products" msgstr "" -#: core/graphene/object_types.py:673 core/models.py:824 +#: core/graphene/object_types.py:673 core/models.py:838 msgid "wishlists" msgstr "" @@ -1147,7 +1147,7 @@ msgstr "" msgid "tagged products" msgstr "" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 +#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 msgid "product tags" msgstr "" @@ -1252,7 +1252,7 @@ msgstr "" msgid "attribute group's name" msgstr "" -#: core/models.py:100 core/models.py:620 +#: core/models.py:100 core/models.py:634 msgid "attribute group" msgstr "" @@ -1291,7 +1291,7 @@ msgstr "" msgid "vendor name" msgstr "" -#: core/models.py:163 +#: core/models.py:177 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1300,42 +1300,42 @@ msgid "" "metadata customization for administrative purposes." msgstr "" -#: core/models.py:175 core/models.py:206 +#: core/models.py:189 core/models.py:220 msgid "internal tag identifier for the product tag" msgstr "" -#: core/models.py:176 core/models.py:207 +#: core/models.py:190 core/models.py:221 msgid "tag name" msgstr "" -#: core/models.py:180 core/models.py:211 +#: core/models.py:194 core/models.py:225 msgid "user-friendly name for the product tag" msgstr "" -#: core/models.py:181 core/models.py:212 +#: core/models.py:195 core/models.py:226 msgid "tag display name" msgstr "" -#: core/models.py:189 +#: core/models.py:203 msgid "product tag" msgstr "" -#: core/models.py:195 +#: core/models.py:209 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:220 +#: core/models.py:234 msgid "category tag" msgstr "" -#: core/models.py:221 core/models.py:293 +#: core/models.py:235 core/models.py:307 msgid "category tags" msgstr "" -#: core/models.py:226 +#: core/models.py:240 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1348,51 +1348,51 @@ msgid "" "priority." msgstr "" -#: core/models.py:240 +#: core/models.py:254 msgid "upload an image representing this category" msgstr "" -#: core/models.py:243 +#: core/models.py:257 msgid "category image" msgstr "" -#: core/models.py:248 +#: core/models.py:262 msgid "define a markup percentage for products in this category" msgstr "" -#: core/models.py:257 +#: core/models.py:271 msgid "parent of this category to form a hierarchical structure" msgstr "" -#: core/models.py:258 +#: core/models.py:272 msgid "parent category" msgstr "" -#: core/models.py:263 +#: core/models.py:277 msgid "category name" msgstr "" -#: core/models.py:264 +#: core/models.py:278 msgid "provide a name for this category" msgstr "" -#: core/models.py:271 +#: core/models.py:285 msgid "add a detailed description for this category" msgstr "" -#: core/models.py:272 +#: core/models.py:286 msgid "category description" msgstr "" -#: core/models.py:292 +#: core/models.py:306 msgid "tags that help describe or group this category" msgstr "" -#: core/models.py:299 core/models.py:375 +#: core/models.py:313 core/models.py:389 msgid "priority" msgstr "" -#: core/models.py:318 +#: core/models.py:332 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1400,47 +1400,47 @@ msgid "" "organization and representation of brand-related data within the application." msgstr "" -#: core/models.py:328 +#: core/models.py:342 msgid "name of this brand" msgstr "" -#: core/models.py:329 +#: core/models.py:343 msgid "brand name" msgstr "" -#: core/models.py:336 +#: core/models.py:350 msgid "upload a logo representing this brand" msgstr "" -#: core/models.py:338 +#: core/models.py:352 msgid "brand small image" msgstr "" -#: core/models.py:344 +#: core/models.py:358 msgid "upload a big logo representing this brand" msgstr "" -#: core/models.py:346 +#: core/models.py:360 msgid "brand big image" msgstr "" -#: core/models.py:351 +#: core/models.py:365 msgid "add a detailed description of the brand" msgstr "" -#: core/models.py:352 +#: core/models.py:366 msgid "brand description" msgstr "" -#: core/models.py:357 +#: core/models.py:371 msgid "optional categories that this brand is associated with" msgstr "" -#: core/models.py:358 +#: core/models.py:372 msgid "associated categories" msgstr "" -#: core/models.py:388 +#: core/models.py:402 msgid "" "Represents the stock of a product managed in the system. This class provides " "details about the relationship between vendors, products, and their stock " @@ -1450,67 +1450,67 @@ msgid "" "from various vendors." msgstr "" -#: core/models.py:400 +#: core/models.py:414 msgid "the vendor supplying this product stock" msgstr "" -#: core/models.py:401 +#: core/models.py:415 msgid "associated vendor" msgstr "" -#: core/models.py:405 +#: core/models.py:419 msgid "final price to the customer after markups" msgstr "" -#: core/models.py:406 +#: core/models.py:420 msgid "selling price" msgstr "" -#: core/models.py:411 +#: core/models.py:425 msgid "the product associated with this stock entry" msgstr "" -#: core/models.py:412 core/models.py:683 core/models.py:730 core/models.py:1583 +#: core/models.py:426 core/models.py:697 core/models.py:744 core/models.py:1641 msgid "associated product" msgstr "" -#: core/models.py:419 +#: core/models.py:433 msgid "the price paid to the vendor for this product" msgstr "" -#: core/models.py:420 +#: core/models.py:434 msgid "vendor purchase price" msgstr "" -#: core/models.py:424 +#: core/models.py:438 msgid "available quantity of the product in stock" msgstr "" -#: core/models.py:425 +#: core/models.py:439 msgid "quantity in stock" msgstr "" -#: core/models.py:429 +#: core/models.py:443 msgid "vendor-assigned SKU for identifying the product" msgstr "" -#: core/models.py:430 +#: core/models.py:444 msgid "vendor sku" msgstr "" -#: core/models.py:436 +#: core/models.py:450 msgid "digital file associated with this stock if applicable" msgstr "" -#: core/models.py:437 +#: core/models.py:451 msgid "digital file" msgstr "" -#: core/models.py:446 +#: core/models.py:460 msgid "stock entries" msgstr "" -#: core/models.py:451 +#: core/models.py:465 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1522,55 +1522,55 @@ msgid "" "product data and its associated information within an application." msgstr "" -#: core/models.py:464 +#: core/models.py:478 msgid "category this product belongs to" msgstr "" -#: core/models.py:473 +#: core/models.py:487 msgid "optionally associate this product with a brand" msgstr "" -#: core/models.py:479 +#: core/models.py:493 msgid "tags that help describe or group this product" msgstr "" -#: core/models.py:484 +#: core/models.py:498 msgid "indicates whether this product is digitally delivered" msgstr "" -#: core/models.py:485 +#: core/models.py:499 msgid "is product digital" msgstr "" -#: core/models.py:491 +#: core/models.py:505 msgid "provide a clear identifying name for the product" msgstr "" -#: core/models.py:492 +#: core/models.py:506 msgid "product name" msgstr "" -#: core/models.py:497 core/models.py:772 +#: core/models.py:511 core/models.py:786 msgid "add a detailed description of the product" msgstr "" -#: core/models.py:498 +#: core/models.py:512 msgid "product description" msgstr "" -#: core/models.py:505 +#: core/models.py:519 msgid "part number for this product" msgstr "" -#: core/models.py:506 +#: core/models.py:520 msgid "part number" msgstr "" -#: core/models.py:525 +#: core/models.py:539 msgid "stock keeping unit for this product" msgstr "" -#: core/models.py:599 +#: core/models.py:613 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 " @@ -1580,87 +1580,87 @@ msgid "" "for dynamic and flexible data structuring." msgstr "" -#: core/models.py:611 +#: core/models.py:625 msgid "category of this attribute" msgstr "" -#: core/models.py:619 +#: core/models.py:633 msgid "group of this attribute" msgstr "" -#: core/models.py:625 +#: core/models.py:639 msgid "string" msgstr "" -#: core/models.py:626 +#: core/models.py:640 msgid "integer" msgstr "" -#: core/models.py:627 +#: core/models.py:641 msgid "float" msgstr "" -#: core/models.py:628 +#: core/models.py:642 msgid "boolean" msgstr "" -#: core/models.py:629 +#: core/models.py:643 msgid "array" msgstr "" -#: core/models.py:630 +#: core/models.py:644 msgid "object" msgstr "" -#: core/models.py:632 +#: core/models.py:646 msgid "type of the attribute's value" msgstr "" -#: core/models.py:633 +#: core/models.py:647 msgid "value type" msgstr "" -#: core/models.py:638 +#: core/models.py:652 msgid "name of this attribute" msgstr "" -#: core/models.py:639 +#: core/models.py:653 msgid "attribute's name" msgstr "" -#: core/models.py:645 +#: core/models.py:659 msgid "is filterable" msgstr "" -#: core/models.py:646 +#: core/models.py:660 msgid "designates whether this attribute can be used for filtering or not" msgstr "" -#: core/models.py:657 core/models.py:675 +#: core/models.py:671 core/models.py:689 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "" -#: core/models.py:663 +#: core/models.py:677 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:674 +#: core/models.py:688 msgid "attribute of this value" msgstr "" -#: core/models.py:682 +#: core/models.py:696 msgid "the specific product associated with this attribute's value" msgstr "" -#: core/models.py:688 +#: core/models.py:702 msgid "the specific value for this attribute" msgstr "" -#: core/models.py:701 +#: core/models.py:715 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for " @@ -1669,39 +1669,39 @@ msgid "" "with alternative text for the images." msgstr "" -#: core/models.py:712 +#: core/models.py:726 msgid "provide alternative text for the image for accessibility" msgstr "" -#: core/models.py:713 +#: core/models.py:727 msgid "image alt text" msgstr "" -#: core/models.py:716 +#: core/models.py:730 msgid "upload the image file for this product" msgstr "" -#: core/models.py:717 core/models.py:742 +#: core/models.py:731 core/models.py:756 msgid "product image" msgstr "" -#: core/models.py:723 +#: core/models.py:737 msgid "determines the order in which images are displayed" msgstr "" -#: core/models.py:724 +#: core/models.py:738 msgid "display priority" msgstr "" -#: core/models.py:729 +#: core/models.py:743 msgid "the product that this image represents" msgstr "" -#: core/models.py:743 +#: core/models.py:757 msgid "product images" msgstr "" -#: core/models.py:748 +#: core/models.py:762 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1711,39 +1711,39 @@ msgid "" "affected items in the campaign." msgstr "" -#: core/models.py:760 +#: core/models.py:774 msgid "percentage discount for the selected products" msgstr "" -#: core/models.py:761 +#: core/models.py:775 msgid "discount percentage" msgstr "" -#: core/models.py:766 +#: core/models.py:780 msgid "provide a unique name for this promotion" msgstr "" -#: core/models.py:767 +#: core/models.py:781 msgid "promotion name" msgstr "" -#: core/models.py:773 +#: core/models.py:787 msgid "promotion description" msgstr "" -#: core/models.py:778 +#: core/models.py:792 msgid "select which products are included in this promotion" msgstr "" -#: core/models.py:779 +#: core/models.py:793 msgid "included products" msgstr "" -#: core/models.py:783 +#: core/models.py:797 msgid "promotion" msgstr "" -#: core/models.py:794 +#: core/models.py:808 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1751,23 +1751,23 @@ msgid "" "operations for adding and removing multiple products at once." msgstr "" -#: core/models.py:806 +#: core/models.py:820 msgid "products that the user has marked as wanted" msgstr "" -#: core/models.py:814 +#: core/models.py:828 msgid "user who owns this wishlist" msgstr "" -#: core/models.py:815 +#: core/models.py:829 msgid "wishlist owner" msgstr "" -#: core/models.py:823 +#: core/models.py:837 msgid "wishlist" msgstr "" -#: core/models.py:865 +#: core/models.py:879 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1777,19 +1777,19 @@ msgid "" "custom features." msgstr "" -#: core/models.py:878 +#: core/models.py:892 msgid "documentary" msgstr "" -#: core/models.py:879 +#: core/models.py:893 msgid "documentaries" msgstr "" -#: core/models.py:889 +#: core/models.py:903 msgid "unresolved" msgstr "" -#: core/models.py:894 +#: core/models.py:908 msgid "" "Represents an address entity that includes location details and associations " "with a user. Provides functionality for geographic and address data storage, " @@ -1801,59 +1801,59 @@ msgid "" "address with a user, facilitating personalized data handling." msgstr "" -#: core/models.py:909 +#: core/models.py:923 msgid "address line for the customer" msgstr "" -#: core/models.py:910 +#: core/models.py:924 msgid "address line" msgstr "" -#: core/models.py:912 +#: core/models.py:926 msgid "street" msgstr "" -#: core/models.py:913 +#: core/models.py:927 msgid "district" msgstr "" -#: core/models.py:914 +#: core/models.py:928 msgid "city" msgstr "" -#: core/models.py:915 +#: core/models.py:929 msgid "region" msgstr "" -#: core/models.py:916 +#: core/models.py:930 msgid "postal code" msgstr "" -#: core/models.py:917 +#: core/models.py:931 msgid "country" msgstr "" -#: core/models.py:924 +#: core/models.py:938 msgid "geolocation point: (longitude, latitude)" msgstr "" -#: core/models.py:927 +#: core/models.py:941 msgid "full JSON response from geocoder for this address" msgstr "" -#: core/models.py:932 +#: core/models.py:946 msgid "stored JSON response from the geocoding service" msgstr "" -#: core/models.py:940 +#: core/models.py:954 msgid "address" msgstr "" -#: core/models.py:941 +#: core/models.py:955 msgid "addresses" msgstr "" -#: core/models.py:953 +#: core/models.py:967 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -1863,86 +1863,86 @@ msgid "" "apply the promo code to an order while ensuring constraints are met." msgstr "" -#: core/models.py:967 +#: core/models.py:981 msgid "unique code used by a user to redeem a discount" msgstr "" -#: core/models.py:968 +#: core/models.py:982 msgid "promo code identifier" msgstr "" -#: core/models.py:975 +#: core/models.py:989 msgid "fixed discount amount applied if percent is not used" msgstr "" -#: core/models.py:976 +#: core/models.py:990 msgid "fixed discount amount" msgstr "" -#: core/models.py:982 +#: core/models.py:996 msgid "percentage discount applied if fixed amount is not used" msgstr "" -#: core/models.py:983 +#: core/models.py:997 msgid "percentage discount" msgstr "" -#: core/models.py:988 +#: core/models.py:1002 msgid "timestamp when the promocode expires" msgstr "" -#: core/models.py:989 +#: core/models.py:1003 msgid "end validity time" msgstr "" -#: core/models.py:994 +#: core/models.py:1008 msgid "timestamp from which this promocode is valid" msgstr "" -#: core/models.py:995 +#: core/models.py:1009 msgid "start validity time" msgstr "" -#: core/models.py:1000 +#: core/models.py:1014 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" -#: core/models.py:1001 +#: core/models.py:1015 msgid "usage timestamp" msgstr "" -#: core/models.py:1006 +#: core/models.py:1020 msgid "user assigned to this promocode if applicable" msgstr "" -#: core/models.py:1007 +#: core/models.py:1021 msgid "assigned user" msgstr "" -#: core/models.py:1014 +#: core/models.py:1028 msgid "promo code" msgstr "" -#: core/models.py:1015 +#: core/models.py:1029 msgid "promo codes" msgstr "" -#: core/models.py:1022 +#: core/models.py:1044 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "" -#: core/models.py:1037 +#: core/models.py:1065 msgid "promocode already used" msgstr "" -#: core/models.py:1053 +#: core/models.py:1081 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "" -#: core/models.py:1062 +#: core/models.py:1090 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 " @@ -1952,144 +1952,144 @@ msgid "" "supports managing the products in the order lifecycle." msgstr "" -#: core/models.py:1079 +#: core/models.py:1107 msgid "the billing address used for this order" msgstr "" -#: core/models.py:1087 +#: core/models.py:1115 msgid "optional promo code applied to this order" msgstr "" -#: core/models.py:1088 +#: core/models.py:1116 msgid "applied promo code" msgstr "" -#: core/models.py:1096 +#: core/models.py:1124 msgid "the shipping address used for this order" msgstr "" -#: core/models.py:1097 +#: core/models.py:1125 msgid "shipping address" msgstr "" -#: core/models.py:1103 +#: core/models.py:1131 msgid "current status of the order in its lifecycle" msgstr "" -#: core/models.py:1104 +#: core/models.py:1132 msgid "order status" msgstr "" -#: core/models.py:1109 core/models.py:1560 +#: core/models.py:1137 core/models.py:1618 msgid "json structure of notifications to display to users" msgstr "" -#: core/models.py:1115 +#: core/models.py:1143 msgid "json representation of order attributes for this order" msgstr "" -#: core/models.py:1121 +#: core/models.py:1149 msgid "the user who placed the order" msgstr "" -#: core/models.py:1122 +#: core/models.py:1150 msgid "user" msgstr "" -#: core/models.py:1128 +#: core/models.py:1156 msgid "the timestamp when the order was finalized" msgstr "" -#: core/models.py:1129 +#: core/models.py:1157 msgid "buy time" msgstr "" -#: core/models.py:1136 +#: core/models.py:1164 msgid "a human-readable identifier for the order" msgstr "" -#: core/models.py:1137 +#: core/models.py:1165 msgid "human readable id" msgstr "" -#: core/models.py:1143 +#: core/models.py:1171 msgid "order" msgstr "" -#: core/models.py:1168 +#: core/models.py:1209 msgid "a user must have only one pending order at a time" msgstr "" -#: core/models.py:1202 +#: core/models.py:1249 msgid "you cannot add products to an order that is not a pending one" msgstr "" -#: core/models.py:1207 +#: core/models.py:1254 msgid "you cannot add inactive products to order" msgstr "" -#: core/models.py:1224 +#: core/models.py:1271 msgid "you cannot add more products than available in stock" msgstr "" -#: core/models.py:1246 core/models.py:1271 core/models.py:1279 +#: core/models.py:1293 core/models.py:1318 core/models.py:1326 msgid "you cannot remove products from an order that is not a pending one" msgstr "" -#: core/models.py:1267 +#: core/models.py:1314 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "" -#: core/models.py:1299 +#: core/models.py:1346 msgid "promocode does not exist" msgstr "" -#: core/models.py:1305 +#: core/models.py:1352 msgid "you can only buy physical products with shipping address specified" msgstr "" -#: core/models.py:1324 +#: core/models.py:1371 msgid "address does not exist" msgstr "" -#: core/models.py:1345 core/models.py:1414 +#: core/models.py:1392 core/models.py:1461 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" -#: core/models.py:1348 core/models.py:1410 +#: core/models.py:1395 core/models.py:1457 msgid "invalid force value" msgstr "" -#: core/models.py:1354 core/models.py:1417 +#: core/models.py:1401 core/models.py:1464 msgid "you cannot purchase an empty order!" msgstr "" -#: core/models.py:1373 +#: core/models.py:1420 msgid "you cannot buy an order without a user" msgstr "" -#: core/models.py:1387 +#: core/models.py:1434 msgid "a user without a balance cannot buy with balance" msgstr "" -#: core/models.py:1392 +#: core/models.py:1439 msgid "insufficient funds to complete the order" msgstr "" -#: core/models.py:1426 +#: core/models.py:1473 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "" -#: core/models.py:1435 +#: core/models.py:1482 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" -#: core/models.py:1533 +#: core/models.py:1591 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2102,108 +2102,108 @@ msgid "" "Product models and stores a reference to them." msgstr "" -#: core/models.py:1548 +#: core/models.py:1606 msgid "the price paid by the customer for this product at purchase time" msgstr "" -#: core/models.py:1549 +#: core/models.py:1607 msgid "purchase price at order time" msgstr "" -#: core/models.py:1554 +#: core/models.py:1612 msgid "internal comments for admins about this ordered product" msgstr "" -#: core/models.py:1555 +#: core/models.py:1613 msgid "internal comments" msgstr "" -#: core/models.py:1561 +#: core/models.py:1619 msgid "user notifications" msgstr "" -#: core/models.py:1566 +#: core/models.py:1624 msgid "json representation of this item's attributes" msgstr "" -#: core/models.py:1567 +#: core/models.py:1625 msgid "ordered product attributes" msgstr "" -#: core/models.py:1572 +#: core/models.py:1630 msgid "reference to the parent order that contains this product" msgstr "" -#: core/models.py:1573 +#: core/models.py:1631 msgid "parent order" msgstr "" -#: core/models.py:1582 +#: core/models.py:1640 msgid "the specific product associated with this order line" msgstr "" -#: core/models.py:1589 +#: core/models.py:1647 msgid "quantity of this specific product in the order" msgstr "" -#: core/models.py:1590 +#: core/models.py:1648 msgid "product quantity" msgstr "" -#: core/models.py:1597 +#: core/models.py:1655 msgid "current status of this product in the order" msgstr "" -#: core/models.py:1598 +#: core/models.py:1656 msgid "product line status" msgstr "" -#: core/models.py:1661 +#: core/models.py:1719 msgid "order product must have an order" msgstr "" -#: core/models.py:1663 +#: core/models.py:1721 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "" -#: core/models.py:1677 +#: core/models.py:1735 msgid "you cannot feedback an order which is not received" msgstr "" -#: core/models.py:1683 +#: core/models.py:1741 msgid "name" msgstr "" -#: core/models.py:1684 +#: core/models.py:1742 msgid "URL of the integration" msgstr "" -#: core/models.py:1685 +#: core/models.py:1743 msgid "authentication credentials" msgstr "" -#: core/models.py:1699 +#: core/models.py:1765 msgid "you can only have one default CRM provider" msgstr "" -#: core/models.py:1703 +#: core/models.py:1775 msgid "CRM" msgstr "" -#: core/models.py:1704 +#: core/models.py:1776 msgid "CRMs" msgstr "" -#: core/models.py:1716 +#: core/models.py:1788 msgid "order CRM link" msgstr "" -#: core/models.py:1717 +#: core/models.py:1789 msgid "orders CRM links" msgstr "" -#: core/models.py:1722 +#: core/models.py:1794 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2213,19 +2213,15 @@ msgid "" "the asset when the associated order is in a completed status." msgstr "" -#: core/models.py:1736 +#: core/models.py:1808 msgid "download" msgstr "" -#: core/models.py:1737 +#: core/models.py:1809 msgid "downloads" msgstr "" -#: core/models.py:1745 -msgid "you can not download a digital asset for a non-finished order" -msgstr "" - -#: core/models.py:1754 +#: core/models.py:1823 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2234,27 +2230,27 @@ msgid "" "fields to effectively model and manage feedback data." msgstr "" -#: core/models.py:1766 +#: core/models.py:1835 msgid "user-provided comments about their experience with the product" msgstr "" -#: core/models.py:1767 +#: core/models.py:1836 msgid "feedback comments" msgstr "" -#: core/models.py:1774 +#: core/models.py:1843 msgid "references the specific product in an order that this feedback is about" msgstr "" -#: core/models.py:1775 +#: core/models.py:1844 msgid "related order product" msgstr "" -#: core/models.py:1780 +#: core/models.py:1849 msgid "user-assigned rating for the product" msgstr "" -#: core/models.py:1781 +#: core/models.py:1850 msgid "product rating" msgstr "" @@ -2443,11 +2439,11 @@ msgid "" " reserved" msgstr "" -#: core/utils/caching.py:41 +#: core/utils/caching.py:48 msgid "both data and timeout are required" msgstr "" -#: core/utils/caching.py:43 +#: core/utils/caching.py:50 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "" @@ -2479,24 +2475,243 @@ msgstr "" msgid "NOMINATIM_URL must be configured." msgstr "" -#: core/validators.py:16 +#: core/validators.py:14 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" -#: core/validators.py:22 -msgid "invalid phone number format" +#: core/views.py:72 +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:489 +#: core/views.py:87 +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 +msgid "" +"Returns a list of supported languages and their corresponding information." +msgstr "" + +#: core/views.py:148 +msgid "Returns the parameters of the website as a JSON object." +msgstr "" + +#: core/views.py:167 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +msgstr "" + +#: core/views.py:194 +msgid "Handles `contact us` form submissions." +msgstr "" + +#: core/views.py:215 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "" + +#: core/views.py:255 +msgid "Handles global search queries." +msgstr "" + +#: core/views.py:270 +msgid "Handles the logic of buying as a business without registration." +msgstr "" + +#: core/views.py:312 msgid "you can only download the digital asset once" msgstr "" -#: core/views.py:547 +#: core/views.py:315 +msgid "the order must be paid before downloading the digital asset" +msgstr "" + +#: core/views.py:353 +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." +msgstr "" + +#: core/views.py:365 msgid "favicon not found" msgstr "" -#: core/viewsets.py:1357 +#: core/views.py:370 +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." +msgstr "" + +#: core/views.py:382 +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/viewsets.py:128 +msgid "" +"Defines a viewset for managing Evibes-related operations. The EvibesViewSet " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" + +#: core/viewsets.py:147 +msgid "" +"Represents a viewset for managing AttributeGroup objects. Handles operations " +"related to AttributeGroup, including filtering, serialization, and retrieval " +"of data. This class is part of the application's API layer and provides a " +"standardized way to process requests and responses for AttributeGroup data." +msgstr "" + +#: core/viewsets.py:166 +msgid "" +"Handles operations related to Attribute objects within the application. " +"Provides a set of API endpoints to interact with Attribute data. This class " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" + +#: core/viewsets.py:185 +msgid "" +"A viewset for managing AttributeValue objects. This viewset provides " +"functionality for listing, retrieving, creating, updating, and deleting " +"AttributeValue objects. It integrates with Django REST Framework's viewset " +"mechanisms and uses appropriate serializers for different actions. Filtering " +"capabilities are provided through the DjangoFilterBackend." +msgstr "" + +#: core/viewsets.py:204 +msgid "" +"Manages views for Category-related operations. The CategoryViewSet class is " +"responsible for handling operations related to the Category model in the " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" + +#: core/viewsets.py:315 +msgid "" +"Represents a viewset for managing Brand instances. This class provides " +"functionality for querying, filtering, and serializing Brand objects. It " +"uses Django's ViewSet framework to simplify the implementation of API " +"endpoints for Brand objects." +msgstr "" + +#: core/viewsets.py:427 +msgid "" +"Manages operations related to the `Product` model in the system. This class " +"provides a viewset for managing products, including their filtering, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" + +#: core/viewsets.py:547 +msgid "" +"Represents a viewset for managing Vendor objects. This viewset allows " +"fetching, filtering, and serializing Vendor data. It defines the queryset, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" + +#: core/viewsets.py:567 +msgid "" +"Representation of a view set handling Feedback objects. This class manages " +"operations related to Feedback objects, including listing, filtering, and " +"retrieving details. The purpose of this view set is to provide different " +"serializers for different actions and implement permission-based handling of " +"accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"use of Django's filtering system for querying data." +msgstr "" + +#: core/viewsets.py:593 +msgid "" +"ViewSet for managing orders and related operations. This class provides " +"functionality to retrieve, modify, and manage order objects. It includes " +"various endpoints for handling order operations such as adding or removing " +"products, performing purchases for registered as well as unregistered users, " +"and retrieving the current authenticated user's pending orders. The ViewSet " +"uses multiple serializers based on the specific action being performed and " +"enforces permissions accordingly while interacting with order data." +msgstr "" + +#: core/viewsets.py:782 +msgid "" +"Provides a viewset for managing OrderProduct entities. This viewset enables " +"CRUD operations and custom actions specific to the OrderProduct model. It " +"includes filtering, permission checks, and serializer switching based on the " +"requested action. Additionally, it provides a detailed action for handling " +"feedback on OrderProduct instances" +msgstr "" + +#: core/viewsets.py:833 +msgid "Manages operations related to Product images in the application. " +msgstr "" + +#: core/viewsets.py:845 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +msgstr "" + +#: core/viewsets.py:866 +msgid "Represents a view set for managing promotions. " +msgstr "" + +#: core/viewsets.py:878 +msgid "Handles operations related to Stock data in the system." +msgstr "" + +#: core/viewsets.py:892 +msgid "" +"ViewSet for managing Wishlist operations. The WishlistViewSet provides " +"endpoints for interacting with a user's wish list, allowing for the " +"retrieval, modification, and customization of products within the wish list. " +"This ViewSet facilitates functionality such as adding, removing, and bulk " +"actions for wishlist products. Permission checks are integrated to ensure " +"that users can only manage their own wishlists unless explicit permissions " +"are granted." +msgstr "" + +#: core/viewsets.py:1007 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" + +#: core/viewsets.py:1074 #, python-brace-format msgid "Geocoding error: {e}" msgstr "" + +#: core/viewsets.py:1081 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" diff --git a/core/locale/fr_FR/LC_MESSAGES/django.mo b/core/locale/fr_FR/LC_MESSAGES/django.mo index 0eac17a4bfebc3b265cb5a15077e52395a393692..d4a442c065c9e78c1acc94c687347c504db62429 100644 GIT binary patch delta 27341 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 delta 12297 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 diff --git a/core/locale/fr_FR/LC_MESSAGES/django.po b/core/locale/fr_FR/LC_MESSAGES/django.po index 905dab20..bcb874cf 100644 --- a/core/locale/fr_FR/LC_MESSAGES/django.po +++ b/core/locale/fr_FR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+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:11 +#: core/abstract.py:12 msgid "unique id" msgstr "Unique ID" -#: core/abstract.py:12 +#: 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:19 +#: core/abstract.py:20 msgid "is active" msgstr "Est actif" -#: core/abstract.py:20 +#: core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" @@ -35,19 +35,19 @@ 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:22 core/choices.py:18 +#: core/abstract.py:23 core/choices.py:18 msgid "created" msgstr "Créée" -#: core/abstract.py:22 +#: 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:23 +#: core/abstract.py:24 msgid "modified" msgstr "Modifié" -#: core/abstract.py:23 +#: core/abstract.py:24 msgid "when the object was last modified" msgstr "Date de la dernière modification de l'objet" @@ -90,11 +90,11 @@ msgid "selected items have been deactivated." msgstr "Les articles sélectionnés ont été désactivés !" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 +#: core/graphene/object_types.py:616 core/models.py:701 core/models.py:709 msgid "attribute value" msgstr "Valeur de l'attribut" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 msgid "attribute values" msgstr "Valeurs des attributs" @@ -106,7 +106,7 @@ msgstr "Image" msgid "images" msgstr "Images" -#: core/admin.py:155 core/models.py:445 +#: core/admin.py:155 core/models.py:459 msgid "stock" msgstr "Stock" @@ -114,11 +114,11 @@ msgstr "Stock" msgid "stocks" msgstr "Stocks" -#: core/admin.py:166 core/models.py:1609 +#: core/admin.py:166 core/models.py:1667 msgid "order product" msgstr "Commander un produit" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 msgid "order products" msgstr "Commander des produits" @@ -754,7 +754,7 @@ msgstr "" "ajouter ou supprimer un retour d'information sur une relation commande-" "produit" -#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 msgid "no search term provided." msgstr "Aucun terme de recherche n'est fourni." @@ -807,7 +807,7 @@ msgid "Quantity" msgstr "Quantité" #: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:287 core/models.py:369 core/models.py:522 +#: core/models.py:301 core/models.py:383 core/models.py:536 msgid "Slug" msgstr "Limace" @@ -823,7 +823,7 @@ msgstr "Inclure des sous-catégories" msgid "Include personal ordered" msgstr "Inclure les produits commandés par les particuliers" -#: core/filters.py:85 core/models.py:526 +#: core/filters.py:85 core/models.py:540 msgid "SKU" msgstr "SKU" @@ -898,7 +898,7 @@ msgstr "Données mises en cache" 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:65 core/views.py:360 +#: core/graphene/mutations.py:65 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "Seuls les URL commençant par http(s):// sont autorisés." @@ -931,7 +931,7 @@ msgstr "" "mutuellement !" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:839 +#: core/graphene/mutations.py:527 core/viewsets.py:679 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}" @@ -1011,9 +1011,9 @@ msgstr "Le produit {order_product_uuid} n'a pas été trouvé !" msgid "original address string provided by the user" msgstr "Chaîne d'adresse originale fournie par l'utilisateur" -#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 -#: core/models.py:1234 core/models.py:1263 core/models.py:1288 -#: core/viewsets.py:842 +#: core/graphene/mutations.py:656 core/models.py:849 core/models.py:862 +#: core/models.py:1281 core/models.py:1310 core/models.py:1335 +#: core/viewsets.py:682 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} n'existe pas : {uuid} !" @@ -1027,8 +1027,8 @@ msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - fonctionne comme un charme" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 -#: core/models.py:1686 +#: core/graphene/object_types.py:444 core/models.py:672 core/models.py:1144 +#: core/models.py:1744 msgid "attributes" msgstr "Attributs" @@ -1041,11 +1041,11 @@ 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:224 core/models.py:312 core/models.py:612 +#: core/graphene/object_types.py:224 core/models.py:326 core/models.py:626 msgid "categories" msgstr "Catégories" -#: core/graphene/object_types.py:124 core/models.py:383 +#: core/graphene/object_types.py:124 core/models.py:397 msgid "brands" msgstr "Marques" @@ -1054,7 +1054,7 @@ msgid "category image url" msgstr "Catégories" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:249 +#: core/models.py:263 msgid "markup percentage" msgstr "Markup Percentage" @@ -1079,7 +1079,7 @@ msgstr "Tags pour cette catégorie" msgid "products in this category" msgstr "Produits dans cette catégorie" -#: core/graphene/object_types.py:351 core/models.py:155 +#: core/graphene/object_types.py:351 core/models.py:169 msgid "vendors" msgstr "Vendeurs" @@ -1104,7 +1104,7 @@ msgid "represents feedback from a user." msgstr "Représente le retour d'information d'un utilisateur." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1110 +#: core/models.py:1138 msgid "notifications" msgstr "Notifications" @@ -1112,7 +1112,7 @@ msgstr "Notifications" 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:400 core/models.py:1791 +#: core/graphene/object_types.py:400 core/models.py:1860 msgid "feedback" msgstr "Retour d'information" @@ -1120,7 +1120,7 @@ msgstr "Retour d'information" msgid "a list of order products in this order" msgstr "Une liste des produits commandés dans cette commande" -#: core/graphene/object_types.py:436 core/models.py:1080 +#: core/graphene/object_types.py:436 core/models.py:1108 msgid "billing address" msgstr "Adresse de facturation" @@ -1148,7 +1148,7 @@ msgstr "Tous les produits de la commande sont-ils numériques ?" msgid "transactions for this order" msgstr "Transactions pour cette commande" -#: core/graphene/object_types.py:465 core/models.py:1144 +#: core/graphene/object_types.py:465 core/models.py:1172 msgid "orders" msgstr "Commandes" @@ -1160,15 +1160,15 @@ msgstr "Image URL" msgid "product's images" msgstr "Images du produit" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 +#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 msgid "category" msgstr "Catégorie" -#: core/graphene/object_types.py:502 core/models.py:1792 +#: core/graphene/object_types.py:502 core/models.py:1861 msgid "feedbacks" msgstr "Retour d'information" -#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 +#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 msgid "brand" msgstr "Marque" @@ -1200,7 +1200,7 @@ msgstr "Nombre de retours d'information" msgid "only available for personal orders" msgstr "Produits disponibles uniquement pour les commandes personnelles" -#: core/graphene/object_types.py:534 core/models.py:536 +#: core/graphene/object_types.py:534 core/models.py:550 msgid "products" msgstr "Produits" @@ -1212,15 +1212,15 @@ msgstr "Promocodes" msgid "products on sale" msgstr "Produits en vente" -#: core/graphene/object_types.py:651 core/models.py:784 +#: core/graphene/object_types.py:651 core/models.py:798 msgid "promotions" msgstr "Promotions" -#: core/graphene/object_types.py:655 core/models.py:154 +#: core/graphene/object_types.py:655 core/models.py:168 msgid "vendor" msgstr "Vendeur" -#: core/graphene/object_types.py:656 core/models.py:535 +#: core/graphene/object_types.py:656 core/models.py:549 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1228,11 +1228,11 @@ msgstr "Vendeur" msgid "product" msgstr "Produit" -#: core/graphene/object_types.py:667 core/models.py:807 +#: core/graphene/object_types.py:667 core/models.py:821 msgid "wishlisted products" msgstr "Produits en liste de souhaits" -#: core/graphene/object_types.py:673 core/models.py:824 +#: core/graphene/object_types.py:673 core/models.py:838 msgid "wishlists" msgstr "Liste de souhaits" @@ -1240,7 +1240,7 @@ msgstr "Liste de souhaits" msgid "tagged products" msgstr "Produits marqués" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 +#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 msgid "product tags" msgstr "Étiquettes du produit" @@ -1352,7 +1352,7 @@ msgstr "Groupe d'attributs parent" msgid "attribute group's name" msgstr "Nom du groupe d'attributs" -#: core/models.py:100 core/models.py:620 +#: core/models.py:100 core/models.py:634 msgid "attribute group" msgstr "Groupe d'attributs" @@ -1403,7 +1403,7 @@ msgstr "Nom de ce vendeur" msgid "vendor name" msgstr "Nom du vendeur" -#: core/models.py:163 +#: core/models.py:177 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1418,27 +1418,27 @@ msgstr "" "biais de mixins et permet de personnaliser les métadonnées à des fins " "administratives." -#: core/models.py:175 core/models.py:206 +#: core/models.py:189 core/models.py:220 msgid "internal tag identifier for the product tag" msgstr "Identifiant interne de l'étiquette du produit" -#: core/models.py:176 core/models.py:207 +#: core/models.py:190 core/models.py:221 msgid "tag name" msgstr "Nom du jour" -#: core/models.py:180 core/models.py:211 +#: core/models.py:194 core/models.py:225 msgid "user-friendly name for the product tag" msgstr "Nom convivial pour l'étiquette du produit" -#: core/models.py:181 core/models.py:212 +#: core/models.py:195 core/models.py:226 msgid "tag display name" msgstr "Nom d'affichage de l'étiquette" -#: core/models.py:189 +#: core/models.py:203 msgid "product tag" msgstr "Étiquette du produit" -#: core/models.py:195 +#: core/models.py:209 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 " @@ -1449,15 +1449,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:220 +#: core/models.py:234 msgid "category tag" msgstr "étiquette de catégorie" -#: core/models.py:221 core/models.py:293 +#: core/models.py:235 core/models.py:307 msgid "category tags" msgstr "balises de catégorie" -#: core/models.py:226 +#: core/models.py:240 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1481,52 +1481,52 @@ msgstr "" "catégories, ainsi que d'attribuer des attributs tels que des images, des " "balises ou une priorité." -#: core/models.py:240 +#: core/models.py:254 msgid "upload an image representing this category" msgstr "Télécharger une image représentant cette catégorie" -#: core/models.py:243 +#: core/models.py:257 msgid "category image" msgstr "Image de catégorie" -#: core/models.py:248 +#: core/models.py:262 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:257 +#: core/models.py:271 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:258 +#: core/models.py:272 msgid "parent category" msgstr "Catégorie de parents" -#: core/models.py:263 +#: core/models.py:277 msgid "category name" msgstr "Nom de la catégorie" -#: core/models.py:264 +#: core/models.py:278 msgid "provide a name for this category" msgstr "Donnez un nom à cette catégorie" -#: core/models.py:271 +#: core/models.py:285 msgid "add a detailed description for this category" msgstr "Ajouter une description détaillée pour cette catégorie" -#: core/models.py:272 +#: core/models.py:286 msgid "category description" msgstr "Description de la catégorie" -#: core/models.py:292 +#: core/models.py:306 msgid "tags that help describe or group this category" msgstr "les étiquettes qui aident à décrire ou à regrouper cette catégorie" -#: core/models.py:299 core/models.py:375 +#: core/models.py:313 core/models.py:389 msgid "priority" msgstr "Priorité" -#: core/models.py:318 +#: core/models.py:332 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1540,47 +1540,47 @@ msgstr "" "de priorité. Elle permet d'organiser et de représenter les données relatives" " à la marque dans l'application." -#: core/models.py:328 +#: core/models.py:342 msgid "name of this brand" msgstr "Nom de cette marque" -#: core/models.py:329 +#: core/models.py:343 msgid "brand name" msgstr "Nom de marque" -#: core/models.py:336 +#: core/models.py:350 msgid "upload a logo representing this brand" msgstr "Télécharger un logo représentant cette marque" -#: core/models.py:338 +#: core/models.py:352 msgid "brand small image" msgstr "Petite image de marque" -#: core/models.py:344 +#: core/models.py:358 msgid "upload a big logo representing this brand" msgstr "Télécharger un grand logo représentant cette marque" -#: core/models.py:346 +#: core/models.py:360 msgid "brand big image" msgstr "Une grande image de marque" -#: core/models.py:351 +#: core/models.py:365 msgid "add a detailed description of the brand" msgstr "Ajouter une description détaillée de la marque" -#: core/models.py:352 +#: core/models.py:366 msgid "brand description" msgstr "Description de la marque" -#: core/models.py:357 +#: core/models.py:371 msgid "optional categories that this brand is associated with" msgstr "Catégories facultatives auxquelles cette marque est associée" -#: core/models.py:358 +#: core/models.py:372 msgid "associated categories" msgstr "Catégories" -#: core/models.py:388 +#: core/models.py:402 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1596,68 +1596,68 @@ 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:400 +#: core/models.py:414 msgid "the vendor supplying this product stock" msgstr "Le vendeur qui fournit ce stock de produits" -#: core/models.py:401 +#: core/models.py:415 msgid "associated vendor" msgstr "Vendeur associé" -#: core/models.py:405 +#: core/models.py:419 msgid "final price to the customer after markups" msgstr "Prix final pour le client après majoration" -#: core/models.py:406 +#: core/models.py:420 msgid "selling price" msgstr "Prix de vente" -#: core/models.py:411 +#: core/models.py:425 msgid "the product associated with this stock entry" msgstr "Le produit associé à cette entrée de stock" -#: core/models.py:412 core/models.py:683 core/models.py:730 -#: core/models.py:1583 +#: core/models.py:426 core/models.py:697 core/models.py:744 +#: core/models.py:1641 msgid "associated product" msgstr "Produit associé" -#: core/models.py:419 +#: core/models.py:433 msgid "the price paid to the vendor for this product" msgstr "Le prix payé au vendeur pour ce produit" -#: core/models.py:420 +#: core/models.py:434 msgid "vendor purchase price" msgstr "Prix d'achat du vendeur" -#: core/models.py:424 +#: core/models.py:438 msgid "available quantity of the product in stock" msgstr "Quantité disponible du produit en stock" -#: core/models.py:425 +#: core/models.py:439 msgid "quantity in stock" msgstr "Quantité en stock" -#: core/models.py:429 +#: core/models.py:443 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU attribué par le fournisseur pour identifier le produit" -#: core/models.py:430 +#: core/models.py:444 msgid "vendor sku" msgstr "UGS du vendeur" -#: core/models.py:436 +#: core/models.py:450 msgid "digital file associated with this stock if applicable" msgstr "Fichier numérique associé à ce stock, le cas échéant" -#: core/models.py:437 +#: core/models.py:451 msgid "digital file" msgstr "Fichier numérique" -#: core/models.py:446 +#: core/models.py:460 msgid "stock entries" msgstr "Entrées de stock" -#: core/models.py:451 +#: core/models.py:465 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1679,55 +1679,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:464 +#: core/models.py:478 msgid "category this product belongs to" msgstr "Catégorie à laquelle appartient ce produit" -#: core/models.py:473 +#: core/models.py:487 msgid "optionally associate this product with a brand" msgstr "Possibilité d'associer ce produit à une marque" -#: core/models.py:479 +#: core/models.py:493 msgid "tags that help describe or group this product" msgstr "Étiquettes permettant de décrire ou de regrouper ce produit" -#: core/models.py:484 +#: core/models.py:498 msgid "indicates whether this product is digitally delivered" msgstr "Indique si ce produit est livré numériquement" -#: core/models.py:485 +#: core/models.py:499 msgid "is product digital" msgstr "Le produit est-il numérique ?" -#: core/models.py:491 +#: core/models.py:505 msgid "provide a clear identifying name for the product" msgstr "Fournir un nom d'identification clair pour le produit" -#: core/models.py:492 +#: core/models.py:506 msgid "product name" msgstr "Nom du produit" -#: core/models.py:497 core/models.py:772 +#: core/models.py:511 core/models.py:786 msgid "add a detailed description of the product" msgstr "Ajouter une description détaillée du produit" -#: core/models.py:498 +#: core/models.py:512 msgid "product description" msgstr "Description du produit" -#: core/models.py:505 +#: core/models.py:519 msgid "part number for this product" msgstr "Numéro de pièce pour ce produit" -#: core/models.py:506 +#: core/models.py:520 msgid "part number" msgstr "Numéro de pièce" -#: core/models.py:525 +#: core/models.py:539 msgid "stock keeping unit for this product" msgstr "Unité de gestion des stocks pour ce produit" -#: core/models.py:599 +#: core/models.py:613 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 " @@ -1744,70 +1744,70 @@ 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:611 +#: core/models.py:625 msgid "category of this attribute" msgstr "Catégorie de cet attribut" -#: core/models.py:619 +#: core/models.py:633 msgid "group of this attribute" msgstr "Groupe de cet attribut" -#: core/models.py:625 +#: core/models.py:639 msgid "string" msgstr "Chaîne" -#: core/models.py:626 +#: core/models.py:640 msgid "integer" msgstr "Entier" -#: core/models.py:627 +#: core/models.py:641 msgid "float" msgstr "Flotteur" -#: core/models.py:628 +#: core/models.py:642 msgid "boolean" msgstr "Booléen" -#: core/models.py:629 +#: core/models.py:643 msgid "array" msgstr "Tableau" -#: core/models.py:630 +#: core/models.py:644 msgid "object" msgstr "Objet" -#: core/models.py:632 +#: core/models.py:646 msgid "type of the attribute's value" msgstr "Type de la valeur de l'attribut" -#: core/models.py:633 +#: core/models.py:647 msgid "value type" msgstr "Type de valeur" -#: core/models.py:638 +#: core/models.py:652 msgid "name of this attribute" msgstr "Nom de cet attribut" -#: core/models.py:639 +#: core/models.py:653 msgid "attribute's name" msgstr "Nom de l'attribut" -#: core/models.py:645 +#: core/models.py:659 msgid "is filterable" msgstr "est filtrable" -#: core/models.py:646 +#: core/models.py:660 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:657 core/models.py:675 +#: core/models.py:671 core/models.py:689 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attribut" -#: core/models.py:663 +#: core/models.py:677 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" @@ -1818,19 +1818,19 @@ msgstr "" "organisation et une représentation dynamique des caractéristiques du " "produit." -#: core/models.py:674 +#: core/models.py:688 msgid "attribute of this value" msgstr "Attribut de cette valeur" -#: core/models.py:682 +#: core/models.py:696 msgid "the specific product associated with this attribute's value" msgstr "Le produit spécifique associé à la valeur de cet attribut" -#: core/models.py:688 +#: core/models.py:702 msgid "the specific value for this attribute" msgstr "La valeur spécifique de cet attribut" -#: core/models.py:701 +#: core/models.py:715 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -1845,39 +1845,39 @@ msgstr "" " comprend également une fonction d'accessibilité avec un texte alternatif " "pour les images." -#: core/models.py:712 +#: core/models.py:726 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:713 +#: core/models.py:727 msgid "image alt text" msgstr "Texte alt de l'image" -#: core/models.py:716 +#: core/models.py:730 msgid "upload the image file for this product" msgstr "Télécharger le fichier image pour ce produit" -#: core/models.py:717 core/models.py:742 +#: core/models.py:731 core/models.py:756 msgid "product image" msgstr "Image du produit" -#: core/models.py:723 +#: core/models.py:737 msgid "determines the order in which images are displayed" msgstr "Détermine l'ordre d'affichage des images" -#: core/models.py:724 +#: core/models.py:738 msgid "display priority" msgstr "Priorité à l'affichage" -#: core/models.py:729 +#: core/models.py:743 msgid "the product that this image represents" msgstr "Le produit que cette image représente" -#: core/models.py:743 +#: core/models.py:757 msgid "product images" msgstr "Images du produit" -#: core/models.py:748 +#: core/models.py:762 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1894,39 +1894,39 @@ msgstr "" "Elle s'intègre au catalogue de produits pour déterminer les articles " "concernés par la campagne." -#: core/models.py:760 +#: core/models.py:774 msgid "percentage discount for the selected products" msgstr "Pourcentage de réduction pour les produits sélectionnés" -#: core/models.py:761 +#: core/models.py:775 msgid "discount percentage" msgstr "Pourcentage de réduction" -#: core/models.py:766 +#: core/models.py:780 msgid "provide a unique name for this promotion" msgstr "Donnez un nom unique à cette promotion" -#: core/models.py:767 +#: core/models.py:781 msgid "promotion name" msgstr "Nom de la promotion" -#: core/models.py:773 +#: core/models.py:787 msgid "promotion description" msgstr "Promotion description" -#: core/models.py:778 +#: core/models.py:792 msgid "select which products are included in this promotion" msgstr "Sélectionnez les produits inclus dans cette promotion" -#: core/models.py:779 +#: core/models.py:793 msgid "included products" msgstr "Produits inclus" -#: core/models.py:783 +#: core/models.py:797 msgid "promotion" msgstr "Promotion" -#: core/models.py:794 +#: core/models.py:808 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1940,23 +1940,23 @@ msgstr "" "opérations permettant d'ajouter et de supprimer plusieurs produits à la " "fois." -#: core/models.py:806 +#: core/models.py:820 msgid "products that the user has marked as wanted" msgstr "Produits que l'utilisateur a marqués comme souhaités" -#: core/models.py:814 +#: core/models.py:828 msgid "user who owns this wishlist" msgstr "Utilisateur qui possède cette liste de souhaits" -#: core/models.py:815 +#: core/models.py:829 msgid "wishlist owner" msgstr "Propriétaire de la liste de souhaits" -#: core/models.py:823 +#: core/models.py:837 msgid "wishlist" msgstr "Liste de souhaits" -#: core/models.py:865 +#: core/models.py:879 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1973,19 +1973,19 @@ msgstr "" "documentaires. Elle étend les fonctionnalités de mixins spécifiques et " "fournit des fonctionnalités personnalisées supplémentaires." -#: core/models.py:878 +#: core/models.py:892 msgid "documentary" msgstr "Documentaire" -#: core/models.py:879 +#: core/models.py:893 msgid "documentaries" msgstr "Documentaires" -#: core/models.py:889 +#: core/models.py:903 msgid "unresolved" msgstr "Non résolu" -#: core/models.py:894 +#: core/models.py:908 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2008,59 +2008,59 @@ msgstr "" "adresse à un utilisateur, ce qui facilite le traitement personnalisé des " "données." -#: core/models.py:909 +#: core/models.py:923 msgid "address line for the customer" msgstr "Ligne d'adresse du client" -#: core/models.py:910 +#: core/models.py:924 msgid "address line" msgstr "Ligne d'adresse" -#: core/models.py:912 +#: core/models.py:926 msgid "street" msgstr "Rue" -#: core/models.py:913 +#: core/models.py:927 msgid "district" msgstr "District" -#: core/models.py:914 +#: core/models.py:928 msgid "city" msgstr "Ville" -#: core/models.py:915 +#: core/models.py:929 msgid "region" msgstr "Région" -#: core/models.py:916 +#: core/models.py:930 msgid "postal code" msgstr "Code postal" -#: core/models.py:917 +#: core/models.py:931 msgid "country" msgstr "Pays" -#: core/models.py:924 +#: core/models.py:938 msgid "geolocation point: (longitude, latitude)" msgstr "Point de géolocalisation (longitude, latitude)" -#: core/models.py:927 +#: core/models.py:941 msgid "full JSON response from geocoder for this address" msgstr "Réponse JSON complète du géocodeur pour cette adresse" -#: core/models.py:932 +#: core/models.py:946 msgid "stored JSON response from the geocoding service" msgstr "Réponse JSON stockée du service de géocodage" -#: core/models.py:940 +#: core/models.py:954 msgid "address" msgstr "Adresse" -#: core/models.py:941 +#: core/models.py:955 msgid "addresses" msgstr "Adresses" -#: core/models.py:953 +#: core/models.py:967 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2078,76 +2078,76 @@ msgstr "" "d'appliquer le code promotionnel à une commande tout en veillant à ce que " "les contraintes soient respectées." -#: core/models.py:967 +#: core/models.py:981 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:968 +#: core/models.py:982 msgid "promo code identifier" msgstr "Identifiant du code promotionnel" -#: core/models.py:975 +#: core/models.py:989 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:976 +#: core/models.py:990 msgid "fixed discount amount" msgstr "Montant de l'escompte fixe" -#: core/models.py:982 +#: core/models.py:996 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:983 +#: core/models.py:997 msgid "percentage discount" msgstr "Pourcentage de réduction" -#: core/models.py:988 +#: core/models.py:1002 msgid "timestamp when the promocode expires" msgstr "Date d'expiration du code promotionnel" -#: core/models.py:989 +#: core/models.py:1003 msgid "end validity time" msgstr "Heure de fin de validité" -#: core/models.py:994 +#: core/models.py:1008 msgid "timestamp from which this promocode is valid" msgstr "Date à partir de laquelle ce code promotionnel est valable" -#: core/models.py:995 +#: core/models.py:1009 msgid "start validity time" msgstr "Heure de début de validité" -#: core/models.py:1000 +#: core/models.py:1014 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:1001 +#: core/models.py:1015 msgid "usage timestamp" msgstr "Horodatage de l'utilisation" -#: core/models.py:1006 +#: core/models.py:1020 msgid "user assigned to this promocode if applicable" msgstr "Utilisateur assigné à ce code promo, le cas échéant" -#: core/models.py:1007 +#: core/models.py:1021 msgid "assigned user" msgstr "Utilisateur assigné" -#: core/models.py:1014 +#: core/models.py:1028 msgid "promo code" msgstr "Code promo" -#: core/models.py:1015 +#: core/models.py:1029 msgid "promo codes" msgstr "Codes promotionnels" -#: core/models.py:1022 +#: core/models.py:1044 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2155,16 +2155,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:1037 +#: core/models.py:1065 msgid "promocode already used" msgstr "Le code promotionnel a déjà été utilisé" -#: core/models.py:1053 +#: core/models.py:1081 #, 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:1062 +#: core/models.py:1090 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 " @@ -2182,145 +2182,145 @@ 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:1079 +#: core/models.py:1107 msgid "the billing address used for this order" msgstr "L'adresse de facturation utilisée pour cette commande" -#: core/models.py:1087 +#: core/models.py:1115 msgid "optional promo code applied to this order" msgstr "Code promo optionnel appliqué à cette commande" -#: core/models.py:1088 +#: core/models.py:1116 msgid "applied promo code" msgstr "Code promo appliqué" -#: core/models.py:1096 +#: core/models.py:1124 msgid "the shipping address used for this order" msgstr "L'adresse de livraison utilisée pour cette commande" -#: core/models.py:1097 +#: core/models.py:1125 msgid "shipping address" msgstr "Adresse de livraison" -#: core/models.py:1103 +#: core/models.py:1131 msgid "current status of the order in its lifecycle" msgstr "Statut actuel de la commande dans son cycle de vie" -#: core/models.py:1104 +#: core/models.py:1132 msgid "order status" msgstr "Statut de la commande" -#: core/models.py:1109 core/models.py:1560 +#: core/models.py:1137 core/models.py:1618 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:1115 +#: core/models.py:1143 msgid "json representation of order attributes for this order" msgstr "Représentation JSON des attributs de cette commande" -#: core/models.py:1121 +#: core/models.py:1149 msgid "the user who placed the order" msgstr "L'utilisateur qui a passé la commande" -#: core/models.py:1122 +#: core/models.py:1150 msgid "user" msgstr "Utilisateur" -#: core/models.py:1128 +#: core/models.py:1156 msgid "the timestamp when the order was finalized" msgstr "L'heure à laquelle la commande a été finalisée." -#: core/models.py:1129 +#: core/models.py:1157 msgid "buy time" msgstr "Temps d'achat" -#: core/models.py:1136 +#: core/models.py:1164 msgid "a human-readable identifier for the order" msgstr "Un identifiant lisible par l'homme pour la commande" -#: core/models.py:1137 +#: core/models.py:1165 msgid "human readable id" msgstr "ID lisible par l'homme" -#: core/models.py:1143 +#: core/models.py:1171 msgid "order" msgstr "Commande" -#: core/models.py:1168 +#: core/models.py:1209 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:1202 +#: core/models.py:1249 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:1207 +#: core/models.py:1254 msgid "you cannot add inactive products to order" msgstr "Vous ne pouvez pas ajouter des produits inactifs à la commande" -#: core/models.py:1224 +#: core/models.py:1271 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:1246 core/models.py:1271 core/models.py:1279 +#: core/models.py:1293 core/models.py:1318 core/models.py:1326 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:1267 +#: core/models.py:1314 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} n'existe pas avec la requête <{query}> !" -#: core/models.py:1299 +#: core/models.py:1346 msgid "promocode does not exist" msgstr "Le code promotionnel n'existe pas" -#: core/models.py:1305 +#: core/models.py:1352 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:1324 +#: core/models.py:1371 msgid "address does not exist" msgstr "L'adresse n'existe pas" -#: core/models.py:1345 core/models.py:1414 +#: core/models.py:1392 core/models.py:1461 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:1348 core/models.py:1410 +#: core/models.py:1395 core/models.py:1457 msgid "invalid force value" msgstr "Valeur de force non valide" -#: core/models.py:1354 core/models.py:1417 +#: core/models.py:1401 core/models.py:1464 msgid "you cannot purchase an empty order!" msgstr "Vous ne pouvez pas acheter une commande vide !" -#: core/models.py:1373 +#: core/models.py:1420 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:1387 +#: core/models.py:1434 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:1392 +#: core/models.py:1439 msgid "insufficient funds to complete the order" msgstr "Insuffisance de fonds pour compléter la commande" -#: core/models.py:1426 +#: core/models.py:1473 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2329,7 +2329,7 @@ msgstr "" "informations suivantes : nom du client, courriel du client, numéro de " "téléphone du client" -#: core/models.py:1435 +#: core/models.py:1482 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2337,7 +2337,7 @@ msgstr "" "Méthode de paiement non valide : {payment_method} de " "{available_payment_methods} !" -#: core/models.py:1533 +#: core/models.py:1591 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2361,111 +2361,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:1548 +#: core/models.py:1606 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:1549 +#: core/models.py:1607 msgid "purchase price at order time" msgstr "Prix d'achat au moment de la commande" -#: core/models.py:1554 +#: core/models.py:1612 msgid "internal comments for admins about this ordered product" msgstr "" "Commentaires internes pour les administrateurs sur ce produit commandé" -#: core/models.py:1555 +#: core/models.py:1613 msgid "internal comments" msgstr "Commentaires internes" -#: core/models.py:1561 +#: core/models.py:1619 msgid "user notifications" msgstr "Notifications aux utilisateurs" -#: core/models.py:1566 +#: core/models.py:1624 msgid "json representation of this item's attributes" msgstr "Représentation JSON des attributs de cet élément" -#: core/models.py:1567 +#: core/models.py:1625 msgid "ordered product attributes" msgstr "Attributs du produit ordonnés" -#: core/models.py:1572 +#: core/models.py:1630 msgid "reference to the parent order that contains this product" msgstr "Référence à l'ordre parent qui contient ce produit" -#: core/models.py:1573 +#: core/models.py:1631 msgid "parent order" msgstr "Ordonnance parentale" -#: core/models.py:1582 +#: core/models.py:1640 msgid "the specific product associated with this order line" msgstr "Le produit spécifique associé à cette ligne de commande" -#: core/models.py:1589 +#: core/models.py:1647 msgid "quantity of this specific product in the order" msgstr "Quantité de ce produit spécifique dans la commande" -#: core/models.py:1590 +#: core/models.py:1648 msgid "product quantity" msgstr "Quantité de produits" -#: core/models.py:1597 +#: core/models.py:1655 msgid "current status of this product in the order" msgstr "Statut actuel de ce produit dans la commande" -#: core/models.py:1598 +#: core/models.py:1656 msgid "product line status" msgstr "Statut de la ligne de produits" -#: core/models.py:1661 +#: core/models.py:1719 msgid "order product must have an order" msgstr "Le produit doit être associé à une commande !" -#: core/models.py:1663 +#: core/models.py:1721 #, 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:1677 +#: core/models.py:1735 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:1683 +#: core/models.py:1741 msgid "name" msgstr "Nom" -#: core/models.py:1684 +#: core/models.py:1742 msgid "URL of the integration" msgstr "URL de l'intégration" -#: core/models.py:1685 +#: core/models.py:1743 msgid "authentication credentials" msgstr "Références d'authentification" -#: core/models.py:1699 +#: core/models.py:1765 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:1703 +#: core/models.py:1775 msgid "CRM" msgstr "CRM" -#: core/models.py:1704 +#: core/models.py:1776 msgid "CRMs" msgstr "CRM" -#: core/models.py:1716 +#: core/models.py:1788 msgid "order CRM link" msgstr "Lien CRM de la commande" -#: core/models.py:1717 +#: core/models.py:1789 msgid "orders CRM links" msgstr "Liens CRM des commandes" -#: core/models.py:1722 +#: core/models.py:1794 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2482,21 +2482,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:1736 +#: core/models.py:1808 msgid "download" msgstr "Télécharger" -#: core/models.py:1737 +#: core/models.py:1809 msgid "downloads" msgstr "Téléchargements" -#: core/models.py:1745 -msgid "you can not download a digital asset for a non-finished order" -msgstr "" -"Vous ne pouvez pas télécharger un bien numérique pour une commande non " -"terminée." - -#: core/models.py:1754 +#: core/models.py:1823 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2512,30 +2506,30 @@ 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:1766 +#: core/models.py:1835 msgid "user-provided comments about their experience with the product" msgstr "Commentaires des utilisateurs sur leur expérience du produit" -#: core/models.py:1767 +#: core/models.py:1836 msgid "feedback comments" msgstr "Commentaires" -#: core/models.py:1774 +#: core/models.py:1843 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:1775 +#: core/models.py:1844 msgid "related order product" msgstr "Produit de commande apparenté" -#: core/models.py:1780 +#: core/models.py:1849 msgid "user-assigned rating for the product" msgstr "Note attribuée par l'utilisateur au produit" -#: core/models.py:1781 +#: core/models.py:1850 msgid "product rating" msgstr "Evaluation du produit" @@ -2742,11 +2736,11 @@ msgstr "" "tous les droits\n" " réservés" -#: core/utils/caching.py:41 +#: core/utils/caching.py:48 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:43 +#: core/utils/caching.py:50 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" @@ -2780,26 +2774,355 @@ msgstr "Vous n'êtes pas autorisé à effectuer cette action." msgid "NOMINATIM_URL must be configured." msgstr "Le paramètre NOMINATIM_URL doit être configuré !" -#: core/validators.py:16 +#: core/validators.py:14 #, 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/validators.py:22 -msgid "invalid phone number format" -msgstr "Format de numéro de téléphone non valide" +#: core/views.py:72 +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 "" +"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:489 +#: core/views.py:87 +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 "" +"Gère la réponse détaillée d'un plan du site. Cette fonction traite la " +"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 +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 +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 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +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 +msgid "Handles `contact us` form submissions." +msgstr "Gère les soumissions du formulaire `contact us`." + +#: core/views.py:215 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "" +"Gère les demandes de traitement et de validation des URL à partir des " +"requêtes POST entrantes." + +#: core/views.py:255 +msgid "Handles global search queries." +msgstr "Traite les demandes de recherche globales." + +#: core/views.py:270 +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:312 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:547 +#: core/views.py:315 +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:353 +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." +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:365 msgid "favicon not found" msgstr "favicon introuvable" -#: core/viewsets.py:1357 +#: core/views.py:370 +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." +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:382 +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 "" +"Redirige la requête vers la page d'index de l'interface d'administration. " +"Cette fonction gère les requêtes HTTP entrantes et les redirige vers la page" +" d'index de l'interface d'administration de Django. Elle utilise la fonction" +" `redirect` de Django pour gérer la redirection HTTP." + +#: core/viewsets.py:128 +msgid "" +"Defines a viewset for managing Evibes-related operations. The EvibesViewSet " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" +"Définit un jeu de vues pour la gestion des opérations liées à Evibes. La " +"classe EvibesViewSet hérite de ModelViewSet et fournit des fonctionnalités " +"permettant de gérer les actions et les opérations sur les entités Evibes. " +"Elle prend en charge les classes de sérialiseurs dynamiques en fonction de " +"l'action en cours, les autorisations personnalisables et les formats de " +"rendu." + +#: core/viewsets.py:147 +msgid "" +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." +msgstr "" +"Représente un jeu de vues pour la gestion des objets AttributeGroup. Gère " +"les opérations liées à l'AttributeGroup, notamment le filtrage, la " +"sérialisation et l'extraction des données. Cette classe fait partie de la " +"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:166 +msgid "" +"Handles operations related to Attribute objects within the application. " +"Provides a set of API endpoints to interact with Attribute data. This class " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"Gère les opérations liées aux objets Attribut au sein de l'application. " +"Fournit un ensemble de points d'accès à l'API pour interagir avec les " +"données d'attributs. Cette classe gère l'interrogation, le filtrage et la " +"sérialisation des objets Attribute, ce qui permet un contrôle dynamique des " +"données renvoyées, comme le filtrage par champs spécifiques ou la " +"récupération d'informations détaillées ou simplifiées en fonction de la " +"demande." + +#: core/viewsets.py:185 +msgid "" +"A viewset for managing AttributeValue objects. This viewset provides " +"functionality for listing, retrieving, creating, updating, and deleting " +"AttributeValue objects. It integrates with Django REST Framework's viewset " +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." +msgstr "" +"Un viewset pour la gestion des objets AttributeValue. Ce viewset fournit des" +" fonctionnalités pour lister, récupérer, créer, mettre à jour et supprimer " +"des objets AttributeValue. Il s'intègre aux mécanismes de viewset du cadre " +"REST de Django et utilise les sérialiseurs appropriés pour les différentes " +"actions. Les capacités de filtrage sont fournies par le backend " +"DjangoFilter." + +#: core/viewsets.py:204 +msgid "" +"Manages views for Category-related operations. The CategoryViewSet class is " +"responsible for handling operations related to the Category model in the " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" +"Gère les vues pour les opérations liées à la catégorie. La classe " +"CategoryViewSet est responsable de la gestion des opérations liées au modèle" +" Category dans le système. Elle permet d'extraire, de filtrer et de " +"sérialiser les données relatives aux catégories. Le jeu de vues applique " +"également des permissions pour s'assurer que seuls les utilisateurs " +"autorisés peuvent accéder à des données spécifiques." + +#: core/viewsets.py:315 +msgid "" +"Represents a viewset for managing Brand instances. This class provides " +"functionality for querying, filtering, and serializing Brand objects. It " +"uses Django's ViewSet framework to simplify the implementation of API " +"endpoints for Brand objects." +msgstr "" +"Représente un jeu de vues pour la gestion des instances de marque. Cette " +"classe fournit des fonctionnalités d'interrogation, de filtrage et de " +"sérialisation des objets Brand. Elle utilise le cadre ViewSet de Django pour" +" simplifier la mise en œuvre des points d'extrémité de l'API pour les objets" +" Brand." + +#: core/viewsets.py:427 +msgid "" +"Manages operations related to the `Product` model in the system. This class " +"provides a viewset for managing products, including their filtering, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" +"Gère les opérations liées au modèle `Product` dans le système. Cette classe " +"fournit un viewset pour gérer les produits, y compris leur filtrage, leur " +"sérialisation et les opérations sur des instances spécifiques. Elle s'étend " +"à partir de `EvibesViewSet` pour utiliser des fonctionnalités communes et " +"s'intègre au framework REST de Django pour les opérations API RESTful. Il " +"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:547 +msgid "" +"Represents a viewset for managing Vendor objects. This viewset allows " +"fetching, filtering, and serializing Vendor data. It defines the queryset, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" +"Représente un jeu de vues pour la gestion des objets Vendeur. Ce jeu de vues" +" permet d'extraire, de filtrer et de sérialiser les données relatives aux " +"vendeurs. Il définit l'ensemble de requêtes, les configurations de filtrage " +"et les classes de sérialisation utilisées pour gérer les différentes " +"actions. L'objectif de cette classe est de fournir un accès simplifié aux " +"ressources relatives aux vendeurs par l'intermédiaire du cadre REST de " +"Django." + +#: core/viewsets.py:567 +msgid "" +"Representation of a view set handling Feedback objects. This class manages " +"operations related to Feedback objects, including listing, filtering, and " +"retrieving details. The purpose of this view set is to provide different " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"use of Django's filtering system for querying data." +msgstr "" +"Représentation d'un ensemble de vues gérant des objets de retour " +"d'expérience. Cette classe gère les opérations liées aux objets de retour " +"d'information, notamment l'établissement de listes, le filtrage et " +"l'extraction de détails. L'objectif de ce jeu de vues est de fournir " +"différents sérialiseurs pour différentes actions et d'implémenter une " +"gestion basée sur les permissions des objets Feedback accessibles. Il étend " +"la classe de base `EvibesViewSet` et utilise le système de filtrage de " +"Django pour l'interrogation des données." + +#: core/viewsets.py:593 +msgid "" +"ViewSet for managing orders and related operations. This class provides " +"functionality to retrieve, modify, and manage order objects. It includes " +"various endpoints for handling order operations such as adding or removing " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " +"enforces permissions accordingly while interacting with order data." +msgstr "" +"ViewSet pour la gestion des commandes et des opérations connexes. Cette " +"classe permet de récupérer, de modifier et de gérer des objets de commande. " +"Elle comprend divers points d'accès pour traiter les opérations de commande " +"telles que l'ajout ou la suppression de produits, l'exécution d'achats pour " +"des utilisateurs enregistrés ou non, et la récupération des commandes en " +"attente de l'utilisateur authentifié actuel. Le ViewSet utilise plusieurs " +"sérialiseurs en fonction de l'action spécifique effectuée et applique les " +"autorisations en conséquence lors de l'interaction avec les données de la " +"commande." + +#: core/viewsets.py:782 +msgid "" +"Provides a viewset for managing OrderProduct entities. This viewset enables " +"CRUD operations and custom actions specific to the OrderProduct model. It " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " +"feedback on OrderProduct instances" +msgstr "" +"Fournit un jeu de vues pour la gestion des entités OrderProduct. Ce jeu de " +"vues permet d'effectuer des opérations CRUD et des actions personnalisées " +"spécifiques au modèle OrderProduct. Il inclut le filtrage, les contrôles de " +"permission et le changement de sérialiseur en fonction de l'action demandée." +" En outre, il fournit une action détaillée pour gérer le retour " +"d'informations sur les instances OrderProduct." + +#: core/viewsets.py:833 +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:845 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +msgstr "" +"Gère la récupération et le traitement des instances de PromoCode par le " +"biais de diverses actions API." + +#: core/viewsets.py:866 +msgid "Represents a view set for managing promotions. " +msgstr "Représente un jeu de vues pour la gestion des promotions." + +#: core/viewsets.py:878 +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:892 +msgid "" +"ViewSet for managing Wishlist operations. The WishlistViewSet provides " +"endpoints for interacting with a user's wish list, allowing for the " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " +"actions for wishlist products. Permission checks are integrated to ensure " +"that users can only manage their own wishlists unless explicit permissions " +"are granted." +msgstr "" +"Jeu de vues pour la gestion des opérations de la liste de souhaits. Le jeu " +"de vues WishlistViewSet fournit des points d'extrémité pour interagir avec " +"la liste de souhaits d'un utilisateur, permettant la récupération, la " +"modification et la personnalisation des produits de la liste de souhaits. Ce" +" jeu de vues facilite les fonctionnalités telles que l'ajout, la suppression" +" et les actions en bloc pour les produits de la liste de souhaits. Des " +"contrôles de permissions sont intégrés pour s'assurer que les utilisateurs " +"ne peuvent gérer que leur propre liste de souhaits, sauf si des permissions " +"explicites sont accordées." + +#: core/viewsets.py:1007 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" +"Cette classe fournit une fonctionnalité de viewset pour la gestion des " +"objets `Address`. La classe AddressViewSet permet d'effectuer des opérations" +" CRUD, des filtrages et des actions personnalisées liées aux entités " +"adresse. Elle inclut des comportements spécialisés pour différentes méthodes" +" HTTP, des dérogations au sérialiseur et une gestion des autorisations basée" +" sur le contexte de la demande." + +#: core/viewsets.py:1074 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Erreur de géocodage : {e}" + +#: core/viewsets.py:1081 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" +"Gère les opérations liées aux étiquettes de produits dans l'application. " +"Cette classe permet d'extraire, de filtrer et de sérialiser les étiquettes " +"de produits. Elle permet un filtrage flexible sur des attributs spécifiques " +"en utilisant le backend de filtrage spécifié et utilise dynamiquement " +"différents sérialiseurs en fonction de l'action effectuée." diff --git a/core/locale/he_IL/LC_MESSAGES/django.mo b/core/locale/he_IL/LC_MESSAGES/django.mo index dc4ada53dd37eac291c28eb6e7d05dd4ea07431d..958a9bb71f4badc15df13644b4d80a14aff0827d 100644 GIT binary patch delta 27571 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 PIkm|{w;mIjUjKgp0S!fV delta 12292 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,37 +13,37 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: core/abstract.py:11 +#: core/abstract.py:12 msgid "unique id" msgstr "מזהה ייחודי" -#: core/abstract.py:12 +#: core/abstract.py:13 msgid "unique id is used to surely identify any database object" msgstr "מזהה ייחודי משמש לזיהוי ודאי של כל אובייקט במסד הנתונים." -#: core/abstract.py:19 +#: core/abstract.py:20 msgid "is active" msgstr "פעיל" -#: core/abstract.py:20 +#: 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:22 core/choices.py:18 +#: core/abstract.py:23 core/choices.py:18 msgid "created" msgstr "נוצר" -#: core/abstract.py:22 +#: core/abstract.py:23 msgid "when the object first appeared on the database" msgstr "כאשר האובייקט הופיע לראשונה במסד הנתונים" -#: core/abstract.py:23 +#: core/abstract.py:24 msgid "modified" msgstr "משונה" -#: core/abstract.py:23 +#: core/abstract.py:24 msgid "when the object was last modified" msgstr "מתי האובייקט נערך לאחרונה" @@ -86,11 +86,11 @@ msgid "selected items have been deactivated." msgstr "פריטים נבחרים הושבתו!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 +#: core/graphene/object_types.py:616 core/models.py:701 core/models.py:709 msgid "attribute value" msgstr "ערך התכונה" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 msgid "attribute values" msgstr "ערכי תכונות" @@ -102,7 +102,7 @@ msgstr "תמונה" msgid "images" msgstr "תמונות" -#: core/admin.py:155 core/models.py:445 +#: core/admin.py:155 core/models.py:459 msgid "stock" msgstr "מלאי" @@ -110,11 +110,11 @@ msgstr "מלאי" msgid "stocks" msgstr "מניות" -#: core/admin.py:166 core/models.py:1609 +#: core/admin.py:166 core/models.py:1667 msgid "order product" msgstr "הזמן מוצר" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 msgid "order products" msgstr "הזמנת מוצרים" @@ -693,7 +693,7 @@ msgstr "מחיקת קשר בין הזמנה למוצר" msgid "add or remove feedback on an order–product relation" msgstr "הוספה או הסרה של משוב על קשר בין הזמנה למוצר" -#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 msgid "no search term provided." msgstr "לא צויין מונח חיפוש." @@ -746,7 +746,7 @@ msgid "Quantity" msgstr "כמות" #: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:287 core/models.py:369 core/models.py:522 +#: core/models.py:301 core/models.py:383 core/models.py:536 msgid "Slug" msgstr "שבלול" @@ -762,7 +762,7 @@ msgstr "כלול תת-קטגוריות" msgid "Include personal ordered" msgstr "כלול מוצרים שהוזמנו באופן אישי" -#: core/filters.py:85 core/models.py:526 +#: core/filters.py:85 core/models.py:540 msgid "SKU" msgstr "מספר קטלוגי" @@ -835,7 +835,7 @@ msgstr "נתונים במטמון" msgid "camelized JSON data from the requested URL" msgstr "נתוני JSON שעברו קמלאיזציה מה-URL המבוקש" -#: core/graphene/mutations.py:65 core/views.py:360 +#: core/graphene/mutations.py:65 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "רק כתובות URL המתחילות ב-http(s):// מותרות" @@ -866,7 +866,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "אנא ספק את order_uuid או order_hr_id - אחד מהם בלבד!" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:839 +#: core/graphene/mutations.py:527 core/viewsets.py:679 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "סוג שגוי הגיע משיטת order.buy(): {type(instance)!s}" @@ -940,9 +940,9 @@ msgstr "המוצר {order_product_uuid} לא נמצא!" msgid "original address string provided by the user" msgstr "מחרוזת הכתובת המקורית שסופקה על ידי המשתמש" -#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 -#: core/models.py:1234 core/models.py:1263 core/models.py:1288 -#: core/viewsets.py:842 +#: core/graphene/mutations.py:656 core/models.py:849 core/models.py:862 +#: core/models.py:1281 core/models.py:1310 core/models.py:1335 +#: core/viewsets.py:682 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} אינו קיים: {uuid}!" @@ -956,8 +956,8 @@ msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - עובד כמו קסם" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 -#: core/models.py:1686 +#: core/graphene/object_types.py:444 core/models.py:672 core/models.py:1144 +#: core/models.py:1744 msgid "attributes" msgstr "תכונות" @@ -970,11 +970,11 @@ msgid "groups of attributes" msgstr "קבוצות תכונות" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:612 +#: core/graphene/object_types.py:224 core/models.py:326 core/models.py:626 msgid "categories" msgstr "קטגוריות" -#: core/graphene/object_types.py:124 core/models.py:383 +#: core/graphene/object_types.py:124 core/models.py:397 msgid "brands" msgstr "מותגים" @@ -983,7 +983,7 @@ msgid "category image url" msgstr "קטגוריות" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:249 +#: core/models.py:263 msgid "markup percentage" msgstr "אחוז הסימון" @@ -1004,7 +1004,7 @@ msgstr "תגיות עבור קטגוריה זו" msgid "products in this category" msgstr "מוצרים בקטגוריה זו" -#: core/graphene/object_types.py:351 core/models.py:155 +#: core/graphene/object_types.py:351 core/models.py:169 msgid "vendors" msgstr "ספקים" @@ -1029,7 +1029,7 @@ msgid "represents feedback from a user." msgstr "מייצג משוב ממשתמש." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1110 +#: core/models.py:1138 msgid "notifications" msgstr "הודעות" @@ -1037,7 +1037,7 @@ msgstr "הודעות" msgid "download url for this order product if applicable" msgstr "כתובת URL להורדת המוצר שהוזמן, אם רלוונטי" -#: core/graphene/object_types.py:400 core/models.py:1791 +#: core/graphene/object_types.py:400 core/models.py:1860 msgid "feedback" msgstr "משוב" @@ -1045,7 +1045,7 @@ msgstr "משוב" msgid "a list of order products in this order" msgstr "רשימת המוצרים בהזמנה זו" -#: core/graphene/object_types.py:436 core/models.py:1080 +#: core/graphene/object_types.py:436 core/models.py:1108 msgid "billing address" msgstr "כתובת לחיוב" @@ -1072,7 +1072,7 @@ msgstr "האם כל המוצרים בהזמנה הם דיגיטליים?" msgid "transactions for this order" msgstr "עסקאות עבור הזמנה זו" -#: core/graphene/object_types.py:465 core/models.py:1144 +#: core/graphene/object_types.py:465 core/models.py:1172 msgid "orders" msgstr "הזמנות" @@ -1084,15 +1084,15 @@ msgstr "כתובת URL של התמונה" msgid "product's images" msgstr "תמונות המוצר" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 +#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 msgid "category" msgstr "קטגוריה" -#: core/graphene/object_types.py:502 core/models.py:1792 +#: core/graphene/object_types.py:502 core/models.py:1861 msgid "feedbacks" msgstr "משובים" -#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 +#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 msgid "brand" msgstr "מותג" @@ -1124,7 +1124,7 @@ msgstr "מספר המשובים" msgid "only available for personal orders" msgstr "מוצרים זמינים רק להזמנות אישיות" -#: core/graphene/object_types.py:534 core/models.py:536 +#: core/graphene/object_types.py:534 core/models.py:550 msgid "products" msgstr "מוצרים" @@ -1136,15 +1136,15 @@ msgstr "קודי קידום מכירות" msgid "products on sale" msgstr "מוצרים במבצע" -#: core/graphene/object_types.py:651 core/models.py:784 +#: core/graphene/object_types.py:651 core/models.py:798 msgid "promotions" msgstr "מבצעים" -#: core/graphene/object_types.py:655 core/models.py:154 +#: core/graphene/object_types.py:655 core/models.py:168 msgid "vendor" msgstr "ספק" -#: core/graphene/object_types.py:656 core/models.py:535 +#: core/graphene/object_types.py:656 core/models.py:549 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1152,11 +1152,11 @@ msgstr "ספק" msgid "product" msgstr "מוצר" -#: core/graphene/object_types.py:667 core/models.py:807 +#: core/graphene/object_types.py:667 core/models.py:821 msgid "wishlisted products" msgstr "מוצרים ברשימת המשאלות" -#: core/graphene/object_types.py:673 core/models.py:824 +#: core/graphene/object_types.py:673 core/models.py:838 msgid "wishlists" msgstr "רשימות משאלות" @@ -1164,7 +1164,7 @@ msgstr "רשימות משאלות" msgid "tagged products" msgstr "מוצרים מתויגים" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 +#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 msgid "product tags" msgstr "תגיות מוצר" @@ -1272,7 +1272,7 @@ msgstr "קבוצת תכונות הורה" msgid "attribute group's name" msgstr "שם קבוצת התכונות" -#: core/models.py:100 core/models.py:620 +#: core/models.py:100 core/models.py:634 msgid "attribute group" msgstr "קבוצת תכונות" @@ -1316,7 +1316,7 @@ msgstr "שם הספק הזה" msgid "vendor name" msgstr "שם הספק" -#: core/models.py:163 +#: core/models.py:177 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1329,27 +1329,27 @@ msgstr "" "ידידותי למשתמש. היא תומכת בפעולות המיוצאות באמצעות mixins ומספקת התאמה אישית" " של מטא-נתונים למטרות ניהוליות." -#: core/models.py:175 core/models.py:206 +#: core/models.py:189 core/models.py:220 msgid "internal tag identifier for the product tag" msgstr "מזהה תווית פנימי עבור תווית המוצר" -#: core/models.py:176 core/models.py:207 +#: core/models.py:190 core/models.py:221 msgid "tag name" msgstr "שם היום" -#: core/models.py:180 core/models.py:211 +#: core/models.py:194 core/models.py:225 msgid "user-friendly name for the product tag" msgstr "שם ידידותי למשתמש עבור תווית המוצר" -#: core/models.py:181 core/models.py:212 +#: core/models.py:195 core/models.py:226 msgid "tag display name" msgstr "שם תצוגה של התג" -#: core/models.py:189 +#: core/models.py:203 msgid "product tag" msgstr "תגית מוצר" -#: core/models.py:195 +#: core/models.py:209 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 " @@ -1359,15 +1359,15 @@ msgstr "" "להשתמש בה כדי לקשר ולסווג מוצרים. היא כוללת תכונות עבור מזהה תווית פנימי ושם" " תצוגה ידידותי למשתמש." -#: core/models.py:220 +#: core/models.py:234 msgid "category tag" msgstr "תגית קטגוריה" -#: core/models.py:221 core/models.py:293 +#: core/models.py:235 core/models.py:307 msgid "category tags" msgstr "תגיות קטגוריה" -#: core/models.py:226 +#: core/models.py:240 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1386,51 +1386,51 @@ msgstr "" "דומות אחרות בתוך יישום, ומאפשרת למשתמשים או למנהלים לציין את השם, התיאור " "וההיררכיה של הקטגוריות, וכן להקצות תכונות כגון תמונות, תגיות או עדיפות." -#: core/models.py:240 +#: core/models.py:254 msgid "upload an image representing this category" msgstr "העלה תמונה המייצגת קטגוריה זו" -#: core/models.py:243 +#: core/models.py:257 msgid "category image" msgstr "תמונה בקטגוריה" -#: core/models.py:248 +#: core/models.py:262 msgid "define a markup percentage for products in this category" msgstr "הגדר אחוז תוספת מחיר עבור מוצרים בקטגוריה זו" -#: core/models.py:257 +#: core/models.py:271 msgid "parent of this category to form a hierarchical structure" msgstr "הורה של קטגוריה זו כדי ליצור מבנה היררכי" -#: core/models.py:258 +#: core/models.py:272 msgid "parent category" msgstr "קטגוריה ראשית" -#: core/models.py:263 +#: core/models.py:277 msgid "category name" msgstr "שם הקטגוריה" -#: core/models.py:264 +#: core/models.py:278 msgid "provide a name for this category" msgstr "ציין שם לקטגוריה זו" -#: core/models.py:271 +#: core/models.py:285 msgid "add a detailed description for this category" msgstr "הוסף תיאור מפורט לקטגוריה זו" -#: core/models.py:272 +#: core/models.py:286 msgid "category description" msgstr "תיאור הקטגוריה" -#: core/models.py:292 +#: core/models.py:306 msgid "tags that help describe or group this category" msgstr "תגיות המסייעות לתאר או לקבץ קטגוריה זו" -#: core/models.py:299 core/models.py:375 +#: core/models.py:313 core/models.py:389 msgid "priority" msgstr "עדיפות" -#: core/models.py:318 +#: core/models.py:332 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1442,47 +1442,47 @@ msgstr "" " שמו, לוגואים, תיאור, קטגוריות קשורות, סלוגן ייחודי וסדר עדיפות. היא מאפשרת " "ארגון וייצוג של נתונים הקשורים למותג בתוך היישום." -#: core/models.py:328 +#: core/models.py:342 msgid "name of this brand" msgstr "שם המותג" -#: core/models.py:329 +#: core/models.py:343 msgid "brand name" msgstr "שם המותג" -#: core/models.py:336 +#: core/models.py:350 msgid "upload a logo representing this brand" msgstr "העלה לוגו המייצג את המותג הזה" -#: core/models.py:338 +#: core/models.py:352 msgid "brand small image" msgstr "תמונה קטנה של המותג" -#: core/models.py:344 +#: core/models.py:358 msgid "upload a big logo representing this brand" msgstr "העלה לוגו גדול המייצג את המותג הזה" -#: core/models.py:346 +#: core/models.py:360 msgid "brand big image" msgstr "תמונה גדולה של המותג" -#: core/models.py:351 +#: core/models.py:365 msgid "add a detailed description of the brand" msgstr "הוסף תיאור מפורט של המותג" -#: core/models.py:352 +#: core/models.py:366 msgid "brand description" msgstr "תיאור המותג" -#: core/models.py:357 +#: core/models.py:371 msgid "optional categories that this brand is associated with" msgstr "קטגוריות אופציונליות שהמותג הזה קשור אליהן" -#: core/models.py:358 +#: core/models.py:372 msgid "associated categories" msgstr "קטגוריות" -#: core/models.py:388 +#: core/models.py:402 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1496,68 +1496,68 @@ msgstr "" "רכישה, כמות, SKU ונכסים דיגיטליים. היא מהווה חלק ממערכת ניהול המלאי ומאפשרת " "מעקב והערכה של מוצרים הזמינים מספקים שונים." -#: core/models.py:400 +#: core/models.py:414 msgid "the vendor supplying this product stock" msgstr "הספק המספק את מלאי המוצר הזה" -#: core/models.py:401 +#: core/models.py:415 msgid "associated vendor" msgstr "ספק נלווה" -#: core/models.py:405 +#: core/models.py:419 msgid "final price to the customer after markups" msgstr "המחיר הסופי ללקוח לאחר תוספות" -#: core/models.py:406 +#: core/models.py:420 msgid "selling price" msgstr "מחיר המכירה" -#: core/models.py:411 +#: core/models.py:425 msgid "the product associated with this stock entry" msgstr "המוצר הקשור לרישום המלאי הזה" -#: core/models.py:412 core/models.py:683 core/models.py:730 -#: core/models.py:1583 +#: core/models.py:426 core/models.py:697 core/models.py:744 +#: core/models.py:1641 msgid "associated product" msgstr "מוצר נלווה" -#: core/models.py:419 +#: core/models.py:433 msgid "the price paid to the vendor for this product" msgstr "המחיר ששולם למוכר עבור מוצר זה" -#: core/models.py:420 +#: core/models.py:434 msgid "vendor purchase price" msgstr "מחיר הרכישה של הספק" -#: core/models.py:424 +#: core/models.py:438 msgid "available quantity of the product in stock" msgstr "כמות המוצר הזמינה במלאי" -#: core/models.py:425 +#: core/models.py:439 msgid "quantity in stock" msgstr "כמות במלאי" -#: core/models.py:429 +#: core/models.py:443 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU שהוקצה על ידי הספק לזיהוי המוצר" -#: core/models.py:430 +#: core/models.py:444 msgid "vendor sku" msgstr "מק\"ט הספק" -#: core/models.py:436 +#: core/models.py:450 msgid "digital file associated with this stock if applicable" msgstr "קובץ דיגיטלי הקשור למלאי זה, אם רלוונטי" -#: core/models.py:437 +#: core/models.py:451 msgid "digital file" msgstr "קובץ דיגיטלי" -#: core/models.py:446 +#: core/models.py:460 msgid "stock entries" msgstr "רישומים במלאי" -#: core/models.py:451 +#: core/models.py:465 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1575,55 +1575,55 @@ msgstr "" "ומנהלת את המטמון עבור תכונות הנגישות בתדירות גבוהה כדי לשפר את הביצועים. הוא" " משמש להגדרה ולעיבוד נתוני מוצר והמידע הקשור אליו בתוך יישום." -#: core/models.py:464 +#: core/models.py:478 msgid "category this product belongs to" msgstr "הקטגוריה אליה שייך מוצר זה" -#: core/models.py:473 +#: core/models.py:487 msgid "optionally associate this product with a brand" msgstr "באופן אופציונלי, ניתן לשייך מוצר זה למותג" -#: core/models.py:479 +#: core/models.py:493 msgid "tags that help describe or group this product" msgstr "תגיות המסייעות לתאר או לקבץ מוצר זה" -#: core/models.py:484 +#: core/models.py:498 msgid "indicates whether this product is digitally delivered" msgstr "מציין אם מוצר זה נמסר באופן דיגיטלי" -#: core/models.py:485 +#: core/models.py:499 msgid "is product digital" msgstr "האם המוצר הוא דיגיטלי?" -#: core/models.py:491 +#: core/models.py:505 msgid "provide a clear identifying name for the product" msgstr "ספק שם מזהה ברור למוצר" -#: core/models.py:492 +#: core/models.py:506 msgid "product name" msgstr "שם המוצר" -#: core/models.py:497 core/models.py:772 +#: core/models.py:511 core/models.py:786 msgid "add a detailed description of the product" msgstr "הוסף תיאור מפורט של המוצר" -#: core/models.py:498 +#: core/models.py:512 msgid "product description" msgstr "תיאור המוצר" -#: core/models.py:505 +#: core/models.py:519 msgid "part number for this product" msgstr "מספר חלק עבור מוצר זה" -#: core/models.py:506 +#: core/models.py:520 msgid "part number" msgstr "מספר חלק" -#: core/models.py:525 +#: core/models.py:539 msgid "stock keeping unit for this product" msgstr "יחידת אחסון מלאי עבור מוצר זה" -#: core/models.py:599 +#: core/models.py:613 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 " @@ -1638,68 +1638,68 @@ msgstr "" "מספר שלם, מספר צף, בוליאני, מערך ואובייקט. הדבר מאפשר בניית נתונים דינמית " "וגמישה." -#: core/models.py:611 +#: core/models.py:625 msgid "category of this attribute" msgstr "קטגוריה של תכונה זו" -#: core/models.py:619 +#: core/models.py:633 msgid "group of this attribute" msgstr "קבוצה של תכונה זו" -#: core/models.py:625 +#: core/models.py:639 msgid "string" msgstr "מחרוזת" -#: core/models.py:626 +#: core/models.py:640 msgid "integer" msgstr "יושרה" -#: core/models.py:627 +#: core/models.py:641 msgid "float" msgstr "צף" -#: core/models.py:628 +#: core/models.py:642 msgid "boolean" msgstr "בוליאני" -#: core/models.py:629 +#: core/models.py:643 msgid "array" msgstr "מערך" -#: core/models.py:630 +#: core/models.py:644 msgid "object" msgstr "אובייקט" -#: core/models.py:632 +#: core/models.py:646 msgid "type of the attribute's value" msgstr "סוג ערך התכונה" -#: core/models.py:633 +#: core/models.py:647 msgid "value type" msgstr "סוג ערך" -#: core/models.py:638 +#: core/models.py:652 msgid "name of this attribute" msgstr "שם התכונה הזו" -#: core/models.py:639 +#: core/models.py:653 msgid "attribute's name" msgstr "שם התכונה" -#: core/models.py:645 +#: core/models.py:659 msgid "is filterable" msgstr "ניתן לסינון" -#: core/models.py:646 +#: core/models.py:660 msgid "designates whether this attribute can be used for filtering or not" msgstr "מציין אם ניתן להשתמש בתכונה זו לצורך סינון או לא" -#: core/models.py:657 core/models.py:675 +#: core/models.py:671 core/models.py:689 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "תכונה" -#: core/models.py:663 +#: core/models.py:677 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" @@ -1708,19 +1708,19 @@ msgstr "" "מייצג ערך ספציפי עבור תכונה המקושרת למוצר. הוא מקשר את ה\"תכונה\" ל\"ערך\" " "ייחודי, ומאפשר ארגון טוב יותר וייצוג דינמי של מאפייני המוצר." -#: core/models.py:674 +#: core/models.py:688 msgid "attribute of this value" msgstr "תכונה של ערך זה" -#: core/models.py:682 +#: core/models.py:696 msgid "the specific product associated with this attribute's value" msgstr "המוצר הספציפי הקשור לערך של תכונה זו" -#: core/models.py:688 +#: core/models.py:702 msgid "the specific value for this attribute" msgstr "הערך הספציפי עבור תכונה זו" -#: core/models.py:701 +#: core/models.py:715 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -1732,39 +1732,39 @@ msgstr "" "כולל פונקציונליות להעלאת קבצי תמונה, שיוכם למוצרים ספציפיים וקביעת סדר " "התצוגה שלהם. היא כוללת גם תכונת נגישות עם טקסט חלופי לתמונות." -#: core/models.py:712 +#: core/models.py:726 msgid "provide alternative text for the image for accessibility" msgstr "ספק טקסט חלופי לתמונה לצורך נגישות" -#: core/models.py:713 +#: core/models.py:727 msgid "image alt text" msgstr "טקסט חלופי לתמונה" -#: core/models.py:716 +#: core/models.py:730 msgid "upload the image file for this product" msgstr "העלה את קובץ התמונה עבור מוצר זה" -#: core/models.py:717 core/models.py:742 +#: core/models.py:731 core/models.py:756 msgid "product image" msgstr "תמונת מוצר" -#: core/models.py:723 +#: core/models.py:737 msgid "determines the order in which images are displayed" msgstr "קובע את סדר הצגת התמונות" -#: core/models.py:724 +#: core/models.py:738 msgid "display priority" msgstr "עדיפות תצוגה" -#: core/models.py:729 +#: core/models.py:743 msgid "the product that this image represents" msgstr "המוצר שהדימוי הזה מייצג" -#: core/models.py:743 +#: core/models.py:757 msgid "product images" msgstr "תמונות מוצרים" -#: core/models.py:748 +#: core/models.py:762 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1778,39 +1778,39 @@ msgstr "" "להגדרת שיעור ההנחה, מתן פרטים על המבצע וקישורו למוצרים הרלוונטיים. היא " "משתלבת בקטלוג המוצרים כדי לקבוע את הפריטים המושפעים בקמפיין." -#: core/models.py:760 +#: core/models.py:774 msgid "percentage discount for the selected products" msgstr "אחוז ההנחה עבור המוצרים שנבחרו" -#: core/models.py:761 +#: core/models.py:775 msgid "discount percentage" msgstr "אחוז ההנחה" -#: core/models.py:766 +#: core/models.py:780 msgid "provide a unique name for this promotion" msgstr "ציין שם ייחודי לקידום מכירות זה" -#: core/models.py:767 +#: core/models.py:781 msgid "promotion name" msgstr "שם המבצע" -#: core/models.py:773 +#: core/models.py:787 msgid "promotion description" msgstr "תיאור המבצע" -#: core/models.py:778 +#: core/models.py:792 msgid "select which products are included in this promotion" msgstr "בחר אילו מוצרים כלולים במבצע זה" -#: core/models.py:779 +#: core/models.py:793 msgid "included products" msgstr "מוצרים כלולים" -#: core/models.py:783 +#: core/models.py:797 msgid "promotion" msgstr "קידום" -#: core/models.py:794 +#: core/models.py:808 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1821,23 +1821,23 @@ msgstr "" "פונקציונליות לניהול אוסף מוצרים, תומכת בפעולות כגון הוספה והסרה של מוצרים, " "וכן תומכת בפעולות להוספה והסרה של מספר מוצרים בבת אחת." -#: core/models.py:806 +#: core/models.py:820 msgid "products that the user has marked as wanted" msgstr "מוצרים שהמשתמש סימן כנחשקים" -#: core/models.py:814 +#: core/models.py:828 msgid "user who owns this wishlist" msgstr "המשתמש שבבעלותו רשימת המשאלות הזו" -#: core/models.py:815 +#: core/models.py:829 msgid "wishlist owner" msgstr "בעל רשימת המשאלות" -#: core/models.py:823 +#: core/models.py:837 msgid "wishlist" msgstr "רשימת משאלות" -#: core/models.py:865 +#: core/models.py:879 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1851,19 +1851,19 @@ msgstr "" "בסוג הקובץ ובנתיב האחסון של קבצי התיעוד. היא מרחיבה את הפונקציונליות של " "מיקסים ספציפיים ומספקת תכונות מותאמות אישית נוספות." -#: core/models.py:878 +#: core/models.py:892 msgid "documentary" msgstr "סרט תיעודי" -#: core/models.py:879 +#: core/models.py:893 msgid "documentaries" msgstr "סרטים תיעודיים" -#: core/models.py:889 +#: core/models.py:903 msgid "unresolved" msgstr "לא פתור" -#: core/models.py:894 +#: core/models.py:908 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1882,59 +1882,59 @@ msgstr "" "נוספים. הסוג גם מאפשר לקשר כתובת למשתמש, מה שמקל על טיפול בנתונים מותאמים " "אישית." -#: core/models.py:909 +#: core/models.py:923 msgid "address line for the customer" msgstr "שורת כתובת עבור הלקוח" -#: core/models.py:910 +#: core/models.py:924 msgid "address line" msgstr "שורת כתובת" -#: core/models.py:912 +#: core/models.py:926 msgid "street" msgstr "רחוב" -#: core/models.py:913 +#: core/models.py:927 msgid "district" msgstr "מחוז" -#: core/models.py:914 +#: core/models.py:928 msgid "city" msgstr "עיר" -#: core/models.py:915 +#: core/models.py:929 msgid "region" msgstr "אזור" -#: core/models.py:916 +#: core/models.py:930 msgid "postal code" msgstr "מיקוד" -#: core/models.py:917 +#: core/models.py:931 msgid "country" msgstr "מדינה" -#: core/models.py:924 +#: core/models.py:938 msgid "geolocation point: (longitude, latitude)" msgstr "נקודת מיקום גיאוגרפי (אורך, רוחב)" -#: core/models.py:927 +#: core/models.py:941 msgid "full JSON response from geocoder for this address" msgstr "תגובה JSON מלאה מ-geocoder עבור כתובת זו" -#: core/models.py:932 +#: core/models.py:946 msgid "stored JSON response from the geocoding service" msgstr "תגובת JSON שמורה משירות הגיאו-קידוד" -#: core/models.py:940 +#: core/models.py:954 msgid "address" msgstr "כתובת" -#: core/models.py:941 +#: core/models.py:955 msgid "addresses" msgstr "כתובות" -#: core/models.py:953 +#: core/models.py:967 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -1949,87 +1949,87 @@ msgstr "" "יש) ומצב השימוש בו. היא כוללת פונקציונליות לאימות והחלת קוד הקידום על הזמנה," " תוך הקפדה על עמידה באילוצים." -#: core/models.py:967 +#: core/models.py:981 msgid "unique code used by a user to redeem a discount" msgstr "קוד ייחודי המשמש את המשתמש למימוש הנחה" -#: core/models.py:968 +#: core/models.py:982 msgid "promo code identifier" msgstr "מזהה קוד קידום מכירות" -#: core/models.py:975 +#: core/models.py:989 msgid "fixed discount amount applied if percent is not used" msgstr "סכום הנחה קבוע המוחל אם לא נעשה שימוש באחוזים" -#: core/models.py:976 +#: core/models.py:990 msgid "fixed discount amount" msgstr "סכום הנחה קבוע" -#: core/models.py:982 +#: core/models.py:996 msgid "percentage discount applied if fixed amount is not used" msgstr "אחוז ההנחה שיחול אם לא ייעשה שימוש בסכום הקבוע" -#: core/models.py:983 +#: core/models.py:997 msgid "percentage discount" msgstr "אחוז ההנחה" -#: core/models.py:988 +#: core/models.py:1002 msgid "timestamp when the promocode expires" msgstr "חותמת זמן לתוקף הקוד המקדם מכירות" -#: core/models.py:989 +#: core/models.py:1003 msgid "end validity time" msgstr "תוקף הסוף" -#: core/models.py:994 +#: core/models.py:1008 msgid "timestamp from which this promocode is valid" msgstr "תאריך התחילה של תוקף קוד המבצע" -#: core/models.py:995 +#: core/models.py:1009 msgid "start validity time" msgstr "תחילת תוקף" -#: core/models.py:1000 +#: core/models.py:1014 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "חותמת זמן שבה נעשה שימוש בקוד המבצע, ריק אם טרם נעשה בו שימוש" -#: core/models.py:1001 +#: core/models.py:1015 msgid "usage timestamp" msgstr "חותמת זמן שימוש" -#: core/models.py:1006 +#: core/models.py:1020 msgid "user assigned to this promocode if applicable" msgstr "משתמש שהוקצה לקוד קידום מכירות זה, אם רלוונטי" -#: core/models.py:1007 +#: core/models.py:1021 msgid "assigned user" msgstr "משתמש שהוקצה" -#: core/models.py:1014 +#: core/models.py:1028 msgid "promo code" msgstr "קוד קידום מכירות" -#: core/models.py:1015 +#: core/models.py:1029 msgid "promo codes" msgstr "קודי קידום מכירות" -#: core/models.py:1022 +#: core/models.py:1044 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "" "יש להגדיר סוג הנחה אחד בלבד (סכום או אחוז), אך לא את שניהם או אף אחד מהם." -#: core/models.py:1037 +#: core/models.py:1065 msgid "promocode already used" msgstr "קוד המבצע כבר נוצל" -#: core/models.py:1053 +#: core/models.py:1081 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "סוג הנחה לא חוקי עבור קוד קידום מכירות {self.uuid}!" -#: core/models.py:1062 +#: core/models.py:1090 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 " @@ -2044,134 +2044,134 @@ msgstr "" "כתובות ולעדכן פרטי משלוח או חיוב. כמו כן, הפונקציונליות תומכת בניהול המוצרים" " במחזור החיים של ההזמנה." -#: core/models.py:1079 +#: core/models.py:1107 msgid "the billing address used for this order" msgstr "כתובת החיוב המשמשת להזמנה זו" -#: core/models.py:1087 +#: core/models.py:1115 msgid "optional promo code applied to this order" msgstr "קוד קידום מכירות אופציונלי שהוחל על הזמנה זו" -#: core/models.py:1088 +#: core/models.py:1116 msgid "applied promo code" msgstr "קוד קידום מכירות שהוחל" -#: core/models.py:1096 +#: core/models.py:1124 msgid "the shipping address used for this order" msgstr "כתובת המשלוח המשמשת להזמנה זו" -#: core/models.py:1097 +#: core/models.py:1125 msgid "shipping address" msgstr "כתובת למשלוח" -#: core/models.py:1103 +#: core/models.py:1131 msgid "current status of the order in its lifecycle" msgstr "הסטטוס הנוכחי של ההזמנה במחזור החיים שלה" -#: core/models.py:1104 +#: core/models.py:1132 msgid "order status" msgstr "סטטוס ההזמנה" -#: core/models.py:1109 core/models.py:1560 +#: core/models.py:1137 core/models.py:1618 msgid "json structure of notifications to display to users" msgstr "" "מבנה JSON של הודעות שיוצגו למשתמשים, בממשק המשתמש המנהלי נעשה שימוש בתצוגת " "טבלה." -#: core/models.py:1115 +#: core/models.py:1143 msgid "json representation of order attributes for this order" msgstr "ייצוג JSON של תכונות ההזמנה עבור הזמנה זו" -#: core/models.py:1121 +#: core/models.py:1149 msgid "the user who placed the order" msgstr "המשתמש שהזמין את ההזמנה" -#: core/models.py:1122 +#: core/models.py:1150 msgid "user" msgstr "משתמש" -#: core/models.py:1128 +#: core/models.py:1156 msgid "the timestamp when the order was finalized" msgstr "החותמת הזמן שבה הושלמה ההזמנה" -#: core/models.py:1129 +#: core/models.py:1157 msgid "buy time" msgstr "לקנות זמן" -#: core/models.py:1136 +#: core/models.py:1164 msgid "a human-readable identifier for the order" msgstr "מזהה קריא לאדם עבור ההזמנה" -#: core/models.py:1137 +#: core/models.py:1165 msgid "human readable id" msgstr "מזהה קריא על ידי בני אדם" -#: core/models.py:1143 +#: core/models.py:1171 msgid "order" msgstr "הזמנה" -#: core/models.py:1168 +#: core/models.py:1209 msgid "a user must have only one pending order at a time" msgstr "למשתמש יכול להיות רק הזמנה אחת בהמתנה בכל פעם!" -#: core/models.py:1202 +#: core/models.py:1249 msgid "you cannot add products to an order that is not a pending one" msgstr "לא ניתן להוסיף מוצרים להזמנה שאינה בהמתנה." -#: core/models.py:1207 +#: core/models.py:1254 msgid "you cannot add inactive products to order" msgstr "לא ניתן להוסיף מוצרים לא פעילים להזמנה" -#: core/models.py:1224 +#: core/models.py:1271 msgid "you cannot add more products than available in stock" msgstr "לא ניתן להוסיף מוצרים מעבר למלאי הזמין" -#: core/models.py:1246 core/models.py:1271 core/models.py:1279 +#: core/models.py:1293 core/models.py:1318 core/models.py:1326 msgid "you cannot remove products from an order that is not a pending one" msgstr "לא ניתן להסיר מוצרים מהזמנה שאינה בהמתנה." -#: core/models.py:1267 +#: core/models.py:1314 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} אינו קיים בשאילתה <{query}>!" -#: core/models.py:1299 +#: core/models.py:1346 msgid "promocode does not exist" msgstr "קוד קידום מכירות אינו קיים" -#: core/models.py:1305 +#: core/models.py:1352 msgid "you can only buy physical products with shipping address specified" msgstr "ניתן לרכוש מוצרים פיזיים רק עם ציון כתובת משלוח!" -#: core/models.py:1324 +#: core/models.py:1371 msgid "address does not exist" msgstr "הכתובת אינה קיימת" -#: core/models.py:1345 core/models.py:1414 +#: core/models.py:1392 core/models.py:1461 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "לא ניתן לבצע רכישה כרגע, אנא נסה שוב בעוד מספר דקות." -#: core/models.py:1348 core/models.py:1410 +#: core/models.py:1395 core/models.py:1457 msgid "invalid force value" msgstr "ערך כוח לא חוקי" -#: core/models.py:1354 core/models.py:1417 +#: core/models.py:1401 core/models.py:1464 msgid "you cannot purchase an empty order!" msgstr "אי אפשר לרכוש הזמנה ריקה!" -#: core/models.py:1373 +#: core/models.py:1420 msgid "you cannot buy an order without a user" msgstr "אי אפשר לקנות הזמנה בלי משתמש!" -#: core/models.py:1387 +#: core/models.py:1434 msgid "a user without a balance cannot buy with balance" msgstr "משתמש ללא יתרה לא יכול לקנות עם יתרה!" -#: core/models.py:1392 +#: core/models.py:1439 msgid "insufficient funds to complete the order" msgstr "אין מספיק כסף כדי להשלים את ההזמנה" -#: core/models.py:1426 +#: core/models.py:1473 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2179,13 +2179,13 @@ msgstr "" "אינך יכול לרכוש ללא רישום, אנא ספק את הפרטים הבאים: שם הלקוח, דוא\"ל הלקוח, " "מספר הטלפון של הלקוח" -#: core/models.py:1435 +#: core/models.py:1482 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "אמצעי תשלום לא חוקי: {payment_method} מ-{available_payment_methods}!" -#: core/models.py:1533 +#: core/models.py:1591 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2204,108 +2204,108 @@ msgstr "" "הכולל או יצירת כתובת URL להורדה עבור מוצרים דיגיטליים. המודל משתלב עם מודלי " "Order ו-Product ומאחסן הפניה אליהם." -#: core/models.py:1548 +#: core/models.py:1606 msgid "the price paid by the customer for this product at purchase time" msgstr "המחיר ששילם הלקוח עבור מוצר זה בעת הרכישה" -#: core/models.py:1549 +#: core/models.py:1607 msgid "purchase price at order time" msgstr "מחיר הרכישה בעת ההזמנה" -#: core/models.py:1554 +#: core/models.py:1612 msgid "internal comments for admins about this ordered product" msgstr "הערות פנימיות למנהלים אודות מוצר זה שהוזמן" -#: core/models.py:1555 +#: core/models.py:1613 msgid "internal comments" msgstr "הערות פנימיות" -#: core/models.py:1561 +#: core/models.py:1619 msgid "user notifications" msgstr "הודעות למשתמשים" -#: core/models.py:1566 +#: core/models.py:1624 msgid "json representation of this item's attributes" msgstr "ייצוג JSON של תכונות פריט זה" -#: core/models.py:1567 +#: core/models.py:1625 msgid "ordered product attributes" msgstr "תכונות המוצר שהוזמן" -#: core/models.py:1572 +#: core/models.py:1630 msgid "reference to the parent order that contains this product" msgstr "הפניה להזמנה הראשית המכילה מוצר זה" -#: core/models.py:1573 +#: core/models.py:1631 msgid "parent order" msgstr "הזמנת הורים" -#: core/models.py:1582 +#: core/models.py:1640 msgid "the specific product associated with this order line" msgstr "המוצר הספציפי הקשור לשורת הזמנה זו" -#: core/models.py:1589 +#: core/models.py:1647 msgid "quantity of this specific product in the order" msgstr "כמות המוצר הספציפי הזה בהזמנה" -#: core/models.py:1590 +#: core/models.py:1648 msgid "product quantity" msgstr "כמות המוצר" -#: core/models.py:1597 +#: core/models.py:1655 msgid "current status of this product in the order" msgstr "הסטטוס הנוכחי של מוצר זה בהזמנה" -#: core/models.py:1598 +#: core/models.py:1656 msgid "product line status" msgstr "סטטוס קו המוצרים" -#: core/models.py:1661 +#: core/models.py:1719 msgid "order product must have an order" msgstr "המוצר בהזמנה חייב להיות קשור להזמנה!" -#: core/models.py:1663 +#: core/models.py:1721 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "פעולה שגויה שצוינה עבור משוב: {action}!" -#: core/models.py:1677 +#: core/models.py:1735 msgid "you cannot feedback an order which is not received" msgstr "אינך יכול להחזיר הזמנה שלא התקבלה" -#: core/models.py:1683 +#: core/models.py:1741 msgid "name" msgstr "שם" -#: core/models.py:1684 +#: core/models.py:1742 msgid "URL of the integration" msgstr "כתובת ה-URL של האינטגרציה" -#: core/models.py:1685 +#: core/models.py:1743 msgid "authentication credentials" msgstr "אישורי אימות" -#: core/models.py:1699 +#: core/models.py:1765 msgid "you can only have one default CRM provider" msgstr "ניתן להגדיר ספק CRM ברירת מחדל אחד בלבד" -#: core/models.py:1703 +#: core/models.py:1775 msgid "CRM" msgstr "CRM" -#: core/models.py:1704 +#: core/models.py:1776 msgid "CRMs" msgstr "CRM" -#: core/models.py:1716 +#: core/models.py:1788 msgid "order CRM link" msgstr "קישור CRM של ההזמנה" -#: core/models.py:1717 +#: core/models.py:1789 msgid "orders CRM links" msgstr "קישורי CRM של הזמנות" -#: core/models.py:1722 +#: core/models.py:1794 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2320,19 +2320,15 @@ msgstr "" " היא כוללת שיטה ליצירת כתובת URL להורדת הנכס כאשר ההזמנה הקשורה נמצאת במצב " "'הושלמה'." -#: core/models.py:1736 +#: core/models.py:1808 msgid "download" msgstr "הורדה" -#: core/models.py:1737 +#: core/models.py:1809 msgid "downloads" msgstr "הורדות" -#: core/models.py:1745 -msgid "you can not download a digital asset for a non-finished order" -msgstr "לא ניתן להוריד נכס דיגיטלי עבור הזמנה שלא הושלמה." - -#: core/models.py:1754 +#: core/models.py:1823 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2345,28 +2341,28 @@ msgstr "" "הקשור בהזמנה ודירוג שהוקצה על ידי המשתמש. המחלקה משתמשת בשדות מסד נתונים כדי" " למדל ולנהל ביעילות נתוני משוב." -#: core/models.py:1766 +#: core/models.py:1835 msgid "user-provided comments about their experience with the product" msgstr "הערות שסיפקו המשתמשים על חווייתם עם המוצר" -#: core/models.py:1767 +#: core/models.py:1836 msgid "feedback comments" msgstr "הערות משוב" -#: core/models.py:1774 +#: core/models.py:1843 msgid "" "references the specific product in an order that this feedback is about" msgstr "מתייחס למוצר הספציפי בהזמנה שעליה מתייחס משוב זה." -#: core/models.py:1775 +#: core/models.py:1844 msgid "related order product" msgstr "מוצר בהזמנה קשורה" -#: core/models.py:1780 +#: core/models.py:1849 msgid "user-assigned rating for the product" msgstr "דירוג שהוקצה על ידי המשתמש למוצר" -#: core/models.py:1781 +#: core/models.py:1850 msgid "product rating" msgstr "דירוג מוצר" @@ -2556,11 +2552,11 @@ msgid "" " reserved" msgstr "כל הזכויות שמורות" -#: core/utils/caching.py:41 +#: core/utils/caching.py:48 msgid "both data and timeout are required" msgstr "נדרשים הן הנתונים והן זמן ההמתנה" -#: core/utils/caching.py:43 +#: core/utils/caching.py:50 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "ערך זמן המתנה לא חוקי, הוא חייב להיות בין 0 ל-216000 שניות" @@ -2592,24 +2588,315 @@ msgstr "אין לך הרשאה לבצע פעולה זו." msgid "NOMINATIM_URL must be configured." msgstr "יש להגדיר את הפרמטר NOMINATIM_URL!" -#: core/validators.py:16 +#: core/validators.py:14 #, 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/validators.py:22 -msgid "invalid phone number format" -msgstr "פורמט מספר טלפון לא חוקי" +#: core/views.py:72 +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:489 +#: core/views.py:87 +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 +msgid "" +"Returns a list of supported languages and their corresponding information." +msgstr "מחזיר רשימה של שפות נתמכות והמידע המתאים להן." + +#: core/views.py:148 +msgid "Returns the parameters of the website as a JSON object." +msgstr "מחזיר את הפרמטרים של האתר כאובייקט JSON." + +#: core/views.py:167 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +msgstr "" +"מטפל בפעולות מטמון כגון קריאה והגדרת נתוני מטמון עם מפתח וזמן המתנה מוגדרים." + +#: core/views.py:194 +msgid "Handles `contact us` form submissions." +msgstr "מטפל בהגשת טפסי \"צור קשר\"." + +#: core/views.py:215 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "מטפל בבקשות לעיבוד ואימות כתובות URL מבקשות POST נכנסות." + +#: core/views.py:255 +msgid "Handles global search queries." +msgstr "מטפל בשאילתות חיפוש גלובליות." + +#: core/views.py:270 +msgid "Handles the logic of buying as a business without registration." +msgstr "מטפל בהיגיון הרכישה כעסק ללא רישום." + +#: core/views.py:312 msgid "you can only download the digital asset once" msgstr "ניתן להוריד את הנכס הדיגיטלי פעם אחת בלבד" -#: core/views.py:547 +#: core/views.py:315 +msgid "the order must be paid before downloading the digital asset" +msgstr "יש לשלם את ההזמנה לפני הורדת הנכס הדיגיטלי" + +#: core/views.py:353 +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." +msgstr "" +"מטפל בהורדת נכס דיגיטלי הקשור להזמנה. פונקציה זו מנסה להציג את קובץ הנכס " +"הדיגיטלי הנמצא בספריית האחסון של הפרויקט. אם הקובץ לא נמצא, מתקבלת שגיאת " +"HTTP 404 המציינת שהמשאב אינו זמין." + +#: core/views.py:365 msgid "favicon not found" msgstr "לא נמצא סמל מועדף" -#: core/viewsets.py:1357 +#: core/views.py:370 +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." +msgstr "" +"מטפל בבקשות לסמל המועדף של אתר אינטרנט. פונקציה זו מנסה להציג את קובץ הסמל " +"המועדף הנמצא בספרייה הסטטית של הפרויקט. אם קובץ הסמל המועדף לא נמצא, מתקבלת " +"שגיאת HTTP 404 המציינת שהמשאב אינו זמין." + +#: core/views.py:382 +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 "" +"מנתב את הבקשה לדף האינדקס של המנהל. הפונקציה מטפלת בבקשות HTTP נכנסות ומנתבת" +" אותן לדף האינדקס של ממשק המנהל של Django. היא משתמשת בפונקציית `redirect` " +"של Django לטיפול בהפניה HTTP." + +#: core/viewsets.py:128 +msgid "" +"Defines a viewset for managing Evibes-related operations. The EvibesViewSet " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" +"מגדיר קבוצת תצוגות לניהול פעולות הקשורות ל-Evibes. מחלקת EvibesViewSet יורשת" +" מ-ModelViewSet ומספקת פונקציונליות לטיפול בפעולות ובפעולות על ישויות " +"Evibes. היא כוללת תמיכה במחלוקות סריאליזציה דינמיות המבוססות על הפעולה " +"הנוכחית, הרשאות הניתנות להתאמה אישית ופורמטים של עיבוד." + +#: core/viewsets.py:147 +msgid "" +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." +msgstr "" +"מייצג קבוצת תצוגות לניהול אובייקטי AttributeGroup. מטפל בפעולות הקשורות " +"ל-AttributeGroup, כולל סינון, סידור סדרתי ואחזור נתונים. מחלקה זו היא חלק " +"משכבת ה-API של היישום ומספקת דרך סטנדרטית לעיבוד בקשות ותגובות עבור נתוני " +"AttributeGroup." + +#: core/viewsets.py:166 +msgid "" +"Handles operations related to Attribute objects within the application. " +"Provides a set of API endpoints to interact with Attribute data. This class " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"מטפל בפעולות הקשורות לאובייקטי Attribute בתוך היישום. מספק קבוצת נקודות קצה " +"API לתקשורת עם נתוני Attribute. מחלקה זו מנהלת שאילתות, סינון וסידור סדרתי " +"של אובייקטי Attribute, ומאפשרת שליטה דינמית על הנתונים המוחזרים, כגון סינון " +"לפי שדות ספציפיים או אחזור מידע מפורט לעומת מידע מפושט, בהתאם לבקשה." + +#: core/viewsets.py:185 +msgid "" +"A viewset for managing AttributeValue objects. This viewset provides " +"functionality for listing, retrieving, creating, updating, and deleting " +"AttributeValue objects. It integrates with Django REST Framework's viewset " +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." +msgstr "" +"סט תצוגה לניהול אובייקטי AttributeValue. סט תצוגה זה מספק פונקציונליות " +"לרישום, אחזור, יצירה, עדכון ומחיקה של אובייקטי AttributeValue. הוא משתלב " +"במנגנוני סט התצוגה של Django REST Framework ומשתמש בממירים מתאימים לפעולות " +"שונות. יכולות סינון מסופקות באמצעות DjangoFilterBackend." + +#: core/viewsets.py:204 +msgid "" +"Manages views for Category-related operations. The CategoryViewSet class is " +"responsible for handling operations related to the Category model in the " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" +"מנהל תצוגות עבור פעולות הקשורות לקטגוריות. מחלקת CategoryViewSet אחראית " +"לטיפול בפעולות הקשורות למודל הקטגוריות במערכת. היא תומכת באחזור, סינון " +"וסידור נתוני קטגוריות. מערך התצוגות גם אוכף הרשאות כדי להבטיח שרק משתמשים " +"מורשים יוכלו לגשת לנתונים ספציפיים." + +#: core/viewsets.py:315 +msgid "" +"Represents a viewset for managing Brand instances. This class provides " +"functionality for querying, filtering, and serializing Brand objects. It " +"uses Django's ViewSet framework to simplify the implementation of API " +"endpoints for Brand objects." +msgstr "" +"מייצג קבוצת תצוגות לניהול מופעים של מותג. מחלקה זו מספקת פונקציונליות " +"לשאילתה, סינון וסידור אובייקטים של מותג. היא משתמשת במערך ViewSet של Django " +"כדי לפשט את היישום של נקודות קצה API לאובייקטים של מותג." + +#: core/viewsets.py:427 +msgid "" +"Manages operations related to the `Product` model in the system. This class " +"provides a viewset for managing products, including their filtering, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" +"מנהל פעולות הקשורות למודל `Product` במערכת. מחלקה זו מספקת מערך תצוגה לניהול" +" מוצרים, כולל סינון, סידור סדרתי ופעולות על מופעים ספציפיים. היא מרחיבה את " +"`EvibesViewSet` כדי להשתמש בפונקציונליות משותפת ומשתלבת עם מסגרת Django REST" +" עבור פעולות RESTful API. כוללת שיטות לאחזור פרטי מוצר, החלת הרשאות וגישה " +"למשוב הקשור למוצר." + +#: core/viewsets.py:547 +msgid "" +"Represents a viewset for managing Vendor objects. This viewset allows " +"fetching, filtering, and serializing Vendor data. It defines the queryset, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" +"מייצג קבוצת תצוגות לניהול אובייקטי ספק. קבוצת תצוגות זו מאפשרת לאחזר, לסנן " +"ולסדר נתוני ספק. היא מגדירה את קבוצת השאילתות, תצורות המסננים ומחלקות הסידור" +" המשמשות לטיפול בפעולות שונות. מטרת מחלקה זו היא לספק גישה יעילה למשאבים " +"הקשורים לספק באמצעות מסגרת Django REST." + +#: core/viewsets.py:567 +msgid "" +"Representation of a view set handling Feedback objects. This class manages " +"operations related to Feedback objects, including listing, filtering, and " +"retrieving details. The purpose of this view set is to provide different " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"use of Django's filtering system for querying data." +msgstr "" +"ייצוג של קבוצת תצוגה המטפלת באובייקטי משוב. מחלקה זו מנהלת פעולות הקשורות " +"לאובייקטי משוב, כולל רישום, סינון ואחזור פרטים. מטרת קבוצת תצוגה זו היא לספק" +" סדרנים שונים לפעולות שונות וליישם טיפול מבוסס הרשאות באובייקטי משוב נגישים." +" היא מרחיבה את `EvibesViewSet` הבסיסי ומשתמשת במערכת הסינון של Django " +"לשאילתת נתונים." + +#: core/viewsets.py:593 +msgid "" +"ViewSet for managing orders and related operations. This class provides " +"functionality to retrieve, modify, and manage order objects. It includes " +"various endpoints for handling order operations such as adding or removing " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " +"enforces permissions accordingly while interacting with order data." +msgstr "" +"ViewSet לניהול הזמנות ופעולות נלוות. מחלקה זו מספקת פונקציונליות לאחזור, " +"שינוי וניהול אובייקטי הזמנה. היא כוללת נקודות קצה שונות לטיפול בפעולות הזמנה" +" כגון הוספה או הסרה של מוצרים, ביצוע רכישות עבור משתמשים רשומים ולא רשומים, " +"ואחזור הזמנות ממתנות של המשתמש המאושר הנוכחי. ViewSet משתמש במספר סדרנים " +"בהתאם לפעולה הספציפית המתבצעת ומאכוף הרשאות בהתאם בעת אינטראקציה עם נתוני " +"הזמנה." + +#: core/viewsets.py:782 +msgid "" +"Provides a viewset for managing OrderProduct entities. This viewset enables " +"CRUD operations and custom actions specific to the OrderProduct model. It " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " +"feedback on OrderProduct instances" +msgstr "" +"מספק סט תצוגה לניהול ישויות OrderProduct. סט תצוגה זה מאפשר פעולות CRUD " +"ופעולות מותאמות אישית ספציפיות למודל OrderProduct. הוא כולל סינון, בדיקות " +"הרשאות והחלפת סריאלייזר בהתאם לפעולה המבוקשת. בנוסף, הוא מספק פעולה מפורטת " +"לטיפול במשוב על מופעים של OrderProduct." + +#: core/viewsets.py:833 +msgid "Manages operations related to Product images in the application. " +msgstr "מנהל פעולות הקשורות לתמונות מוצרים ביישום." + +#: core/viewsets.py:845 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +msgstr "מנהל את אחזור וטיפול במקרי PromoCode באמצעות פעולות API שונות." + +#: core/viewsets.py:866 +msgid "Represents a view set for managing promotions. " +msgstr "מייצג קבוצת תצוגות לניהול מבצעים." + +#: core/viewsets.py:878 +msgid "Handles operations related to Stock data in the system." +msgstr "מטפל בפעולות הקשורות לנתוני המלאי במערכת." + +#: core/viewsets.py:892 +msgid "" +"ViewSet for managing Wishlist operations. The WishlistViewSet provides " +"endpoints for interacting with a user's wish list, allowing for the " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " +"actions for wishlist products. Permission checks are integrated to ensure " +"that users can only manage their own wishlists unless explicit permissions " +"are granted." +msgstr "" +"ViewSet לניהול פעולות רשימת המשאלות. WishlistViewSet מספק נקודות קצה " +"לאינטראקציה עם רשימת המשאלות של המשתמש, ומאפשר אחזור, שינוי והתאמה אישית של " +"מוצרים ברשימת המשאלות. ViewSet זה מאפשר פונקציונליות כגון הוספה, הסרה " +"ופעולות מרובות עבור מוצרים ברשימת המשאלות. בדיקות הרשאה משולבות כדי להבטיח " +"שמשתמשים יוכלו לנהל רק את רשימות המשאלות שלהם, אלא אם כן ניתנו הרשאות " +"מפורשות." + +#: core/viewsets.py:1007 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" +"מחלקת זו מספקת פונקציונליות של קבוצת תצוגה לניהול אובייקטי `Address`. מחלקת " +"AddressViewSet מאפשרת פעולות CRUD, סינון ופעולות מותאמות אישית הקשורות " +"לישויות כתובת. היא כוללת התנהגויות מיוחדות עבור שיטות HTTP שונות, עקיפת " +"סריאלייזר וטיפול בהרשאות בהתבסס על הקשר הבקשה." + +#: core/viewsets.py:1074 #, python-brace-format msgid "Geocoding error: {e}" msgstr "שגיאת קידוד גיאוגרפי: {e}" + +#: core/viewsets.py:1081 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" +"מטפל בפעולות הקשורות לתגי מוצר בתוך היישום. מחלקה זו מספקת פונקציונליות " +"לאחזור, סינון וסידור אובייקטי תגי מוצר. היא תומכת בסינון גמיש של תכונות " +"ספציפיות באמצעות מנגנון הסינון שצוין, ומשתמשת באופן דינמי במנגנוני סידור " +"שונים בהתאם לפעולה המבוצעת." diff --git a/core/locale/hi_IN/LC_MESSAGES/django.po b/core/locale/hi_IN/LC_MESSAGES/django.po index 6c0be631..caaea813 100644 --- a/core/locale/hi_IN/LC_MESSAGES/django.po +++ b/core/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" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -16,36 +16,36 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: core/abstract.py:11 +#: core/abstract.py:12 msgid "unique id" msgstr "" -#: core/abstract.py:12 +#: core/abstract.py:13 msgid "unique id is used to surely identify any database object" msgstr "" -#: core/abstract.py:19 +#: core/abstract.py:20 msgid "is active" msgstr "" -#: core/abstract.py:20 +#: core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed permission" msgstr "" -#: core/abstract.py:22 core/choices.py:18 +#: core/abstract.py:23 core/choices.py:18 msgid "created" msgstr "" -#: core/abstract.py:22 +#: core/abstract.py:23 msgid "when the object first appeared on the database" msgstr "" -#: core/abstract.py:23 +#: core/abstract.py:24 msgid "modified" msgstr "" -#: core/abstract.py:23 +#: core/abstract.py:24 msgid "when the object was last modified" msgstr "" @@ -88,11 +88,11 @@ msgid "selected items have been deactivated." msgstr "" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 +#: core/graphene/object_types.py:616 core/models.py:701 core/models.py:709 msgid "attribute value" msgstr "" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 msgid "attribute values" msgstr "" @@ -104,7 +104,7 @@ msgstr "" msgid "images" msgstr "" -#: core/admin.py:155 core/models.py:445 +#: core/admin.py:155 core/models.py:459 msgid "stock" msgstr "" @@ -112,11 +112,11 @@ msgstr "" msgid "stocks" msgstr "" -#: core/admin.py:166 core/models.py:1609 +#: core/admin.py:166 core/models.py:1667 msgid "order product" msgstr "" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 msgid "order products" msgstr "" @@ -678,7 +678,7 @@ msgstr "" msgid "add or remove feedback on an order–product relation" msgstr "" -#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 msgid "no search term provided." msgstr "" @@ -731,7 +731,7 @@ msgid "Quantity" msgstr "" #: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:287 core/models.py:369 core/models.py:522 +#: core/models.py:301 core/models.py:383 core/models.py:536 msgid "Slug" msgstr "" @@ -747,7 +747,7 @@ msgstr "" msgid "Include personal ordered" msgstr "" -#: core/filters.py:85 core/models.py:526 +#: core/filters.py:85 core/models.py:540 msgid "SKU" msgstr "" @@ -820,7 +820,7 @@ msgstr "" msgid "camelized JSON data from the requested URL" msgstr "" -#: core/graphene/mutations.py:65 core/views.py:360 +#: core/graphene/mutations.py:65 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "" @@ -851,7 +851,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:839 +#: core/graphene/mutations.py:527 core/viewsets.py:679 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" @@ -925,9 +925,9 @@ msgstr "" msgid "original address string provided by the user" msgstr "" -#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 -#: core/models.py:1234 core/models.py:1263 core/models.py:1288 -#: core/viewsets.py:842 +#: core/graphene/mutations.py:656 core/models.py:849 core/models.py:862 +#: core/models.py:1281 core/models.py:1310 core/models.py:1335 +#: core/viewsets.py:682 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" @@ -941,8 +941,8 @@ msgid "elasticsearch - works like a charm" msgstr "" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 -#: core/models.py:1686 +#: core/graphene/object_types.py:444 core/models.py:672 core/models.py:1144 +#: core/models.py:1744 msgid "attributes" msgstr "" @@ -955,11 +955,11 @@ msgid "groups of attributes" msgstr "" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:612 +#: core/graphene/object_types.py:224 core/models.py:326 core/models.py:626 msgid "categories" msgstr "" -#: core/graphene/object_types.py:124 core/models.py:383 +#: core/graphene/object_types.py:124 core/models.py:397 msgid "brands" msgstr "" @@ -968,7 +968,7 @@ msgid "category image url" msgstr "" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:249 +#: core/models.py:263 msgid "markup percentage" msgstr "" @@ -988,7 +988,7 @@ msgstr "" msgid "products in this category" msgstr "" -#: core/graphene/object_types.py:351 core/models.py:155 +#: core/graphene/object_types.py:351 core/models.py:169 msgid "vendors" msgstr "" @@ -1013,7 +1013,7 @@ msgid "represents feedback from a user." msgstr "" #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1110 +#: core/models.py:1138 msgid "notifications" msgstr "" @@ -1021,7 +1021,7 @@ msgstr "" msgid "download url for this order product if applicable" msgstr "" -#: core/graphene/object_types.py:400 core/models.py:1791 +#: core/graphene/object_types.py:400 core/models.py:1860 msgid "feedback" msgstr "" @@ -1029,7 +1029,7 @@ msgstr "" msgid "a list of order products in this order" msgstr "" -#: core/graphene/object_types.py:436 core/models.py:1080 +#: core/graphene/object_types.py:436 core/models.py:1108 msgid "billing address" msgstr "" @@ -1055,7 +1055,7 @@ msgstr "" msgid "transactions for this order" msgstr "" -#: core/graphene/object_types.py:465 core/models.py:1144 +#: core/graphene/object_types.py:465 core/models.py:1172 msgid "orders" msgstr "" @@ -1067,15 +1067,15 @@ msgstr "" msgid "product's images" msgstr "" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 +#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 msgid "category" msgstr "" -#: core/graphene/object_types.py:502 core/models.py:1792 +#: core/graphene/object_types.py:502 core/models.py:1861 msgid "feedbacks" msgstr "" -#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 +#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 msgid "brand" msgstr "" @@ -1107,7 +1107,7 @@ msgstr "" msgid "only available for personal orders" msgstr "" -#: core/graphene/object_types.py:534 core/models.py:536 +#: core/graphene/object_types.py:534 core/models.py:550 msgid "products" msgstr "" @@ -1119,15 +1119,15 @@ msgstr "" msgid "products on sale" msgstr "" -#: core/graphene/object_types.py:651 core/models.py:784 +#: core/graphene/object_types.py:651 core/models.py:798 msgid "promotions" msgstr "" -#: core/graphene/object_types.py:655 core/models.py:154 +#: core/graphene/object_types.py:655 core/models.py:168 msgid "vendor" msgstr "" -#: core/graphene/object_types.py:656 core/models.py:535 +#: core/graphene/object_types.py:656 core/models.py:549 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1135,11 +1135,11 @@ msgstr "" msgid "product" msgstr "" -#: core/graphene/object_types.py:667 core/models.py:807 +#: core/graphene/object_types.py:667 core/models.py:821 msgid "wishlisted products" msgstr "" -#: core/graphene/object_types.py:673 core/models.py:824 +#: core/graphene/object_types.py:673 core/models.py:838 msgid "wishlists" msgstr "" @@ -1147,7 +1147,7 @@ msgstr "" msgid "tagged products" msgstr "" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 +#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 msgid "product tags" msgstr "" @@ -1252,7 +1252,7 @@ msgstr "" msgid "attribute group's name" msgstr "" -#: core/models.py:100 core/models.py:620 +#: core/models.py:100 core/models.py:634 msgid "attribute group" msgstr "" @@ -1291,7 +1291,7 @@ msgstr "" msgid "vendor name" msgstr "" -#: core/models.py:163 +#: core/models.py:177 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1300,42 +1300,42 @@ msgid "" "metadata customization for administrative purposes." msgstr "" -#: core/models.py:175 core/models.py:206 +#: core/models.py:189 core/models.py:220 msgid "internal tag identifier for the product tag" msgstr "" -#: core/models.py:176 core/models.py:207 +#: core/models.py:190 core/models.py:221 msgid "tag name" msgstr "" -#: core/models.py:180 core/models.py:211 +#: core/models.py:194 core/models.py:225 msgid "user-friendly name for the product tag" msgstr "" -#: core/models.py:181 core/models.py:212 +#: core/models.py:195 core/models.py:226 msgid "tag display name" msgstr "" -#: core/models.py:189 +#: core/models.py:203 msgid "product tag" msgstr "" -#: core/models.py:195 +#: core/models.py:209 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:220 +#: core/models.py:234 msgid "category tag" msgstr "" -#: core/models.py:221 core/models.py:293 +#: core/models.py:235 core/models.py:307 msgid "category tags" msgstr "" -#: core/models.py:226 +#: core/models.py:240 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1348,51 +1348,51 @@ msgid "" "priority." msgstr "" -#: core/models.py:240 +#: core/models.py:254 msgid "upload an image representing this category" msgstr "" -#: core/models.py:243 +#: core/models.py:257 msgid "category image" msgstr "" -#: core/models.py:248 +#: core/models.py:262 msgid "define a markup percentage for products in this category" msgstr "" -#: core/models.py:257 +#: core/models.py:271 msgid "parent of this category to form a hierarchical structure" msgstr "" -#: core/models.py:258 +#: core/models.py:272 msgid "parent category" msgstr "" -#: core/models.py:263 +#: core/models.py:277 msgid "category name" msgstr "" -#: core/models.py:264 +#: core/models.py:278 msgid "provide a name for this category" msgstr "" -#: core/models.py:271 +#: core/models.py:285 msgid "add a detailed description for this category" msgstr "" -#: core/models.py:272 +#: core/models.py:286 msgid "category description" msgstr "" -#: core/models.py:292 +#: core/models.py:306 msgid "tags that help describe or group this category" msgstr "" -#: core/models.py:299 core/models.py:375 +#: core/models.py:313 core/models.py:389 msgid "priority" msgstr "" -#: core/models.py:318 +#: core/models.py:332 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1400,47 +1400,47 @@ msgid "" "organization and representation of brand-related data within the application." msgstr "" -#: core/models.py:328 +#: core/models.py:342 msgid "name of this brand" msgstr "" -#: core/models.py:329 +#: core/models.py:343 msgid "brand name" msgstr "" -#: core/models.py:336 +#: core/models.py:350 msgid "upload a logo representing this brand" msgstr "" -#: core/models.py:338 +#: core/models.py:352 msgid "brand small image" msgstr "" -#: core/models.py:344 +#: core/models.py:358 msgid "upload a big logo representing this brand" msgstr "" -#: core/models.py:346 +#: core/models.py:360 msgid "brand big image" msgstr "" -#: core/models.py:351 +#: core/models.py:365 msgid "add a detailed description of the brand" msgstr "" -#: core/models.py:352 +#: core/models.py:366 msgid "brand description" msgstr "" -#: core/models.py:357 +#: core/models.py:371 msgid "optional categories that this brand is associated with" msgstr "" -#: core/models.py:358 +#: core/models.py:372 msgid "associated categories" msgstr "" -#: core/models.py:388 +#: core/models.py:402 msgid "" "Represents the stock of a product managed in the system. This class provides " "details about the relationship between vendors, products, and their stock " @@ -1450,67 +1450,67 @@ msgid "" "from various vendors." msgstr "" -#: core/models.py:400 +#: core/models.py:414 msgid "the vendor supplying this product stock" msgstr "" -#: core/models.py:401 +#: core/models.py:415 msgid "associated vendor" msgstr "" -#: core/models.py:405 +#: core/models.py:419 msgid "final price to the customer after markups" msgstr "" -#: core/models.py:406 +#: core/models.py:420 msgid "selling price" msgstr "" -#: core/models.py:411 +#: core/models.py:425 msgid "the product associated with this stock entry" msgstr "" -#: core/models.py:412 core/models.py:683 core/models.py:730 core/models.py:1583 +#: core/models.py:426 core/models.py:697 core/models.py:744 core/models.py:1641 msgid "associated product" msgstr "" -#: core/models.py:419 +#: core/models.py:433 msgid "the price paid to the vendor for this product" msgstr "" -#: core/models.py:420 +#: core/models.py:434 msgid "vendor purchase price" msgstr "" -#: core/models.py:424 +#: core/models.py:438 msgid "available quantity of the product in stock" msgstr "" -#: core/models.py:425 +#: core/models.py:439 msgid "quantity in stock" msgstr "" -#: core/models.py:429 +#: core/models.py:443 msgid "vendor-assigned SKU for identifying the product" msgstr "" -#: core/models.py:430 +#: core/models.py:444 msgid "vendor sku" msgstr "" -#: core/models.py:436 +#: core/models.py:450 msgid "digital file associated with this stock if applicable" msgstr "" -#: core/models.py:437 +#: core/models.py:451 msgid "digital file" msgstr "" -#: core/models.py:446 +#: core/models.py:460 msgid "stock entries" msgstr "" -#: core/models.py:451 +#: core/models.py:465 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1522,55 +1522,55 @@ msgid "" "product data and its associated information within an application." msgstr "" -#: core/models.py:464 +#: core/models.py:478 msgid "category this product belongs to" msgstr "" -#: core/models.py:473 +#: core/models.py:487 msgid "optionally associate this product with a brand" msgstr "" -#: core/models.py:479 +#: core/models.py:493 msgid "tags that help describe or group this product" msgstr "" -#: core/models.py:484 +#: core/models.py:498 msgid "indicates whether this product is digitally delivered" msgstr "" -#: core/models.py:485 +#: core/models.py:499 msgid "is product digital" msgstr "" -#: core/models.py:491 +#: core/models.py:505 msgid "provide a clear identifying name for the product" msgstr "" -#: core/models.py:492 +#: core/models.py:506 msgid "product name" msgstr "" -#: core/models.py:497 core/models.py:772 +#: core/models.py:511 core/models.py:786 msgid "add a detailed description of the product" msgstr "" -#: core/models.py:498 +#: core/models.py:512 msgid "product description" msgstr "" -#: core/models.py:505 +#: core/models.py:519 msgid "part number for this product" msgstr "" -#: core/models.py:506 +#: core/models.py:520 msgid "part number" msgstr "" -#: core/models.py:525 +#: core/models.py:539 msgid "stock keeping unit for this product" msgstr "" -#: core/models.py:599 +#: core/models.py:613 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 " @@ -1580,87 +1580,87 @@ msgid "" "for dynamic and flexible data structuring." msgstr "" -#: core/models.py:611 +#: core/models.py:625 msgid "category of this attribute" msgstr "" -#: core/models.py:619 +#: core/models.py:633 msgid "group of this attribute" msgstr "" -#: core/models.py:625 +#: core/models.py:639 msgid "string" msgstr "" -#: core/models.py:626 +#: core/models.py:640 msgid "integer" msgstr "" -#: core/models.py:627 +#: core/models.py:641 msgid "float" msgstr "" -#: core/models.py:628 +#: core/models.py:642 msgid "boolean" msgstr "" -#: core/models.py:629 +#: core/models.py:643 msgid "array" msgstr "" -#: core/models.py:630 +#: core/models.py:644 msgid "object" msgstr "" -#: core/models.py:632 +#: core/models.py:646 msgid "type of the attribute's value" msgstr "" -#: core/models.py:633 +#: core/models.py:647 msgid "value type" msgstr "" -#: core/models.py:638 +#: core/models.py:652 msgid "name of this attribute" msgstr "" -#: core/models.py:639 +#: core/models.py:653 msgid "attribute's name" msgstr "" -#: core/models.py:645 +#: core/models.py:659 msgid "is filterable" msgstr "" -#: core/models.py:646 +#: core/models.py:660 msgid "designates whether this attribute can be used for filtering or not" msgstr "" -#: core/models.py:657 core/models.py:675 +#: core/models.py:671 core/models.py:689 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "" -#: core/models.py:663 +#: core/models.py:677 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:674 +#: core/models.py:688 msgid "attribute of this value" msgstr "" -#: core/models.py:682 +#: core/models.py:696 msgid "the specific product associated with this attribute's value" msgstr "" -#: core/models.py:688 +#: core/models.py:702 msgid "the specific value for this attribute" msgstr "" -#: core/models.py:701 +#: core/models.py:715 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for " @@ -1669,39 +1669,39 @@ msgid "" "with alternative text for the images." msgstr "" -#: core/models.py:712 +#: core/models.py:726 msgid "provide alternative text for the image for accessibility" msgstr "" -#: core/models.py:713 +#: core/models.py:727 msgid "image alt text" msgstr "" -#: core/models.py:716 +#: core/models.py:730 msgid "upload the image file for this product" msgstr "" -#: core/models.py:717 core/models.py:742 +#: core/models.py:731 core/models.py:756 msgid "product image" msgstr "" -#: core/models.py:723 +#: core/models.py:737 msgid "determines the order in which images are displayed" msgstr "" -#: core/models.py:724 +#: core/models.py:738 msgid "display priority" msgstr "" -#: core/models.py:729 +#: core/models.py:743 msgid "the product that this image represents" msgstr "" -#: core/models.py:743 +#: core/models.py:757 msgid "product images" msgstr "" -#: core/models.py:748 +#: core/models.py:762 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1711,39 +1711,39 @@ msgid "" "affected items in the campaign." msgstr "" -#: core/models.py:760 +#: core/models.py:774 msgid "percentage discount for the selected products" msgstr "" -#: core/models.py:761 +#: core/models.py:775 msgid "discount percentage" msgstr "" -#: core/models.py:766 +#: core/models.py:780 msgid "provide a unique name for this promotion" msgstr "" -#: core/models.py:767 +#: core/models.py:781 msgid "promotion name" msgstr "" -#: core/models.py:773 +#: core/models.py:787 msgid "promotion description" msgstr "" -#: core/models.py:778 +#: core/models.py:792 msgid "select which products are included in this promotion" msgstr "" -#: core/models.py:779 +#: core/models.py:793 msgid "included products" msgstr "" -#: core/models.py:783 +#: core/models.py:797 msgid "promotion" msgstr "" -#: core/models.py:794 +#: core/models.py:808 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1751,23 +1751,23 @@ msgid "" "operations for adding and removing multiple products at once." msgstr "" -#: core/models.py:806 +#: core/models.py:820 msgid "products that the user has marked as wanted" msgstr "" -#: core/models.py:814 +#: core/models.py:828 msgid "user who owns this wishlist" msgstr "" -#: core/models.py:815 +#: core/models.py:829 msgid "wishlist owner" msgstr "" -#: core/models.py:823 +#: core/models.py:837 msgid "wishlist" msgstr "" -#: core/models.py:865 +#: core/models.py:879 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1777,19 +1777,19 @@ msgid "" "custom features." msgstr "" -#: core/models.py:878 +#: core/models.py:892 msgid "documentary" msgstr "" -#: core/models.py:879 +#: core/models.py:893 msgid "documentaries" msgstr "" -#: core/models.py:889 +#: core/models.py:903 msgid "unresolved" msgstr "" -#: core/models.py:894 +#: core/models.py:908 msgid "" "Represents an address entity that includes location details and associations " "with a user. Provides functionality for geographic and address data storage, " @@ -1801,59 +1801,59 @@ msgid "" "address with a user, facilitating personalized data handling." msgstr "" -#: core/models.py:909 +#: core/models.py:923 msgid "address line for the customer" msgstr "" -#: core/models.py:910 +#: core/models.py:924 msgid "address line" msgstr "" -#: core/models.py:912 +#: core/models.py:926 msgid "street" msgstr "" -#: core/models.py:913 +#: core/models.py:927 msgid "district" msgstr "" -#: core/models.py:914 +#: core/models.py:928 msgid "city" msgstr "" -#: core/models.py:915 +#: core/models.py:929 msgid "region" msgstr "" -#: core/models.py:916 +#: core/models.py:930 msgid "postal code" msgstr "" -#: core/models.py:917 +#: core/models.py:931 msgid "country" msgstr "" -#: core/models.py:924 +#: core/models.py:938 msgid "geolocation point: (longitude, latitude)" msgstr "" -#: core/models.py:927 +#: core/models.py:941 msgid "full JSON response from geocoder for this address" msgstr "" -#: core/models.py:932 +#: core/models.py:946 msgid "stored JSON response from the geocoding service" msgstr "" -#: core/models.py:940 +#: core/models.py:954 msgid "address" msgstr "" -#: core/models.py:941 +#: core/models.py:955 msgid "addresses" msgstr "" -#: core/models.py:953 +#: core/models.py:967 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -1863,86 +1863,86 @@ msgid "" "apply the promo code to an order while ensuring constraints are met." msgstr "" -#: core/models.py:967 +#: core/models.py:981 msgid "unique code used by a user to redeem a discount" msgstr "" -#: core/models.py:968 +#: core/models.py:982 msgid "promo code identifier" msgstr "" -#: core/models.py:975 +#: core/models.py:989 msgid "fixed discount amount applied if percent is not used" msgstr "" -#: core/models.py:976 +#: core/models.py:990 msgid "fixed discount amount" msgstr "" -#: core/models.py:982 +#: core/models.py:996 msgid "percentage discount applied if fixed amount is not used" msgstr "" -#: core/models.py:983 +#: core/models.py:997 msgid "percentage discount" msgstr "" -#: core/models.py:988 +#: core/models.py:1002 msgid "timestamp when the promocode expires" msgstr "" -#: core/models.py:989 +#: core/models.py:1003 msgid "end validity time" msgstr "" -#: core/models.py:994 +#: core/models.py:1008 msgid "timestamp from which this promocode is valid" msgstr "" -#: core/models.py:995 +#: core/models.py:1009 msgid "start validity time" msgstr "" -#: core/models.py:1000 +#: core/models.py:1014 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" -#: core/models.py:1001 +#: core/models.py:1015 msgid "usage timestamp" msgstr "" -#: core/models.py:1006 +#: core/models.py:1020 msgid "user assigned to this promocode if applicable" msgstr "" -#: core/models.py:1007 +#: core/models.py:1021 msgid "assigned user" msgstr "" -#: core/models.py:1014 +#: core/models.py:1028 msgid "promo code" msgstr "" -#: core/models.py:1015 +#: core/models.py:1029 msgid "promo codes" msgstr "" -#: core/models.py:1022 +#: core/models.py:1044 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "" -#: core/models.py:1037 +#: core/models.py:1065 msgid "promocode already used" msgstr "" -#: core/models.py:1053 +#: core/models.py:1081 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "" -#: core/models.py:1062 +#: core/models.py:1090 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 " @@ -1952,144 +1952,144 @@ msgid "" "supports managing the products in the order lifecycle." msgstr "" -#: core/models.py:1079 +#: core/models.py:1107 msgid "the billing address used for this order" msgstr "" -#: core/models.py:1087 +#: core/models.py:1115 msgid "optional promo code applied to this order" msgstr "" -#: core/models.py:1088 +#: core/models.py:1116 msgid "applied promo code" msgstr "" -#: core/models.py:1096 +#: core/models.py:1124 msgid "the shipping address used for this order" msgstr "" -#: core/models.py:1097 +#: core/models.py:1125 msgid "shipping address" msgstr "" -#: core/models.py:1103 +#: core/models.py:1131 msgid "current status of the order in its lifecycle" msgstr "" -#: core/models.py:1104 +#: core/models.py:1132 msgid "order status" msgstr "" -#: core/models.py:1109 core/models.py:1560 +#: core/models.py:1137 core/models.py:1618 msgid "json structure of notifications to display to users" msgstr "" -#: core/models.py:1115 +#: core/models.py:1143 msgid "json representation of order attributes for this order" msgstr "" -#: core/models.py:1121 +#: core/models.py:1149 msgid "the user who placed the order" msgstr "" -#: core/models.py:1122 +#: core/models.py:1150 msgid "user" msgstr "" -#: core/models.py:1128 +#: core/models.py:1156 msgid "the timestamp when the order was finalized" msgstr "" -#: core/models.py:1129 +#: core/models.py:1157 msgid "buy time" msgstr "" -#: core/models.py:1136 +#: core/models.py:1164 msgid "a human-readable identifier for the order" msgstr "" -#: core/models.py:1137 +#: core/models.py:1165 msgid "human readable id" msgstr "" -#: core/models.py:1143 +#: core/models.py:1171 msgid "order" msgstr "" -#: core/models.py:1168 +#: core/models.py:1209 msgid "a user must have only one pending order at a time" msgstr "" -#: core/models.py:1202 +#: core/models.py:1249 msgid "you cannot add products to an order that is not a pending one" msgstr "" -#: core/models.py:1207 +#: core/models.py:1254 msgid "you cannot add inactive products to order" msgstr "" -#: core/models.py:1224 +#: core/models.py:1271 msgid "you cannot add more products than available in stock" msgstr "" -#: core/models.py:1246 core/models.py:1271 core/models.py:1279 +#: core/models.py:1293 core/models.py:1318 core/models.py:1326 msgid "you cannot remove products from an order that is not a pending one" msgstr "" -#: core/models.py:1267 +#: core/models.py:1314 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "" -#: core/models.py:1299 +#: core/models.py:1346 msgid "promocode does not exist" msgstr "" -#: core/models.py:1305 +#: core/models.py:1352 msgid "you can only buy physical products with shipping address specified" msgstr "" -#: core/models.py:1324 +#: core/models.py:1371 msgid "address does not exist" msgstr "" -#: core/models.py:1345 core/models.py:1414 +#: core/models.py:1392 core/models.py:1461 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" -#: core/models.py:1348 core/models.py:1410 +#: core/models.py:1395 core/models.py:1457 msgid "invalid force value" msgstr "" -#: core/models.py:1354 core/models.py:1417 +#: core/models.py:1401 core/models.py:1464 msgid "you cannot purchase an empty order!" msgstr "" -#: core/models.py:1373 +#: core/models.py:1420 msgid "you cannot buy an order without a user" msgstr "" -#: core/models.py:1387 +#: core/models.py:1434 msgid "a user without a balance cannot buy with balance" msgstr "" -#: core/models.py:1392 +#: core/models.py:1439 msgid "insufficient funds to complete the order" msgstr "" -#: core/models.py:1426 +#: core/models.py:1473 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "" -#: core/models.py:1435 +#: core/models.py:1482 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" -#: core/models.py:1533 +#: core/models.py:1591 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2102,108 +2102,108 @@ msgid "" "Product models and stores a reference to them." msgstr "" -#: core/models.py:1548 +#: core/models.py:1606 msgid "the price paid by the customer for this product at purchase time" msgstr "" -#: core/models.py:1549 +#: core/models.py:1607 msgid "purchase price at order time" msgstr "" -#: core/models.py:1554 +#: core/models.py:1612 msgid "internal comments for admins about this ordered product" msgstr "" -#: core/models.py:1555 +#: core/models.py:1613 msgid "internal comments" msgstr "" -#: core/models.py:1561 +#: core/models.py:1619 msgid "user notifications" msgstr "" -#: core/models.py:1566 +#: core/models.py:1624 msgid "json representation of this item's attributes" msgstr "" -#: core/models.py:1567 +#: core/models.py:1625 msgid "ordered product attributes" msgstr "" -#: core/models.py:1572 +#: core/models.py:1630 msgid "reference to the parent order that contains this product" msgstr "" -#: core/models.py:1573 +#: core/models.py:1631 msgid "parent order" msgstr "" -#: core/models.py:1582 +#: core/models.py:1640 msgid "the specific product associated with this order line" msgstr "" -#: core/models.py:1589 +#: core/models.py:1647 msgid "quantity of this specific product in the order" msgstr "" -#: core/models.py:1590 +#: core/models.py:1648 msgid "product quantity" msgstr "" -#: core/models.py:1597 +#: core/models.py:1655 msgid "current status of this product in the order" msgstr "" -#: core/models.py:1598 +#: core/models.py:1656 msgid "product line status" msgstr "" -#: core/models.py:1661 +#: core/models.py:1719 msgid "order product must have an order" msgstr "" -#: core/models.py:1663 +#: core/models.py:1721 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "" -#: core/models.py:1677 +#: core/models.py:1735 msgid "you cannot feedback an order which is not received" msgstr "" -#: core/models.py:1683 +#: core/models.py:1741 msgid "name" msgstr "" -#: core/models.py:1684 +#: core/models.py:1742 msgid "URL of the integration" msgstr "" -#: core/models.py:1685 +#: core/models.py:1743 msgid "authentication credentials" msgstr "" -#: core/models.py:1699 +#: core/models.py:1765 msgid "you can only have one default CRM provider" msgstr "" -#: core/models.py:1703 +#: core/models.py:1775 msgid "CRM" msgstr "" -#: core/models.py:1704 +#: core/models.py:1776 msgid "CRMs" msgstr "" -#: core/models.py:1716 +#: core/models.py:1788 msgid "order CRM link" msgstr "" -#: core/models.py:1717 +#: core/models.py:1789 msgid "orders CRM links" msgstr "" -#: core/models.py:1722 +#: core/models.py:1794 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2213,19 +2213,15 @@ msgid "" "the asset when the associated order is in a completed status." msgstr "" -#: core/models.py:1736 +#: core/models.py:1808 msgid "download" msgstr "" -#: core/models.py:1737 +#: core/models.py:1809 msgid "downloads" msgstr "" -#: core/models.py:1745 -msgid "you can not download a digital asset for a non-finished order" -msgstr "" - -#: core/models.py:1754 +#: core/models.py:1823 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2234,27 +2230,27 @@ msgid "" "fields to effectively model and manage feedback data." msgstr "" -#: core/models.py:1766 +#: core/models.py:1835 msgid "user-provided comments about their experience with the product" msgstr "" -#: core/models.py:1767 +#: core/models.py:1836 msgid "feedback comments" msgstr "" -#: core/models.py:1774 +#: core/models.py:1843 msgid "references the specific product in an order that this feedback is about" msgstr "" -#: core/models.py:1775 +#: core/models.py:1844 msgid "related order product" msgstr "" -#: core/models.py:1780 +#: core/models.py:1849 msgid "user-assigned rating for the product" msgstr "" -#: core/models.py:1781 +#: core/models.py:1850 msgid "product rating" msgstr "" @@ -2443,11 +2439,11 @@ msgid "" " reserved" msgstr "" -#: core/utils/caching.py:41 +#: core/utils/caching.py:48 msgid "both data and timeout are required" msgstr "" -#: core/utils/caching.py:43 +#: core/utils/caching.py:50 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "" @@ -2479,24 +2475,243 @@ msgstr "" msgid "NOMINATIM_URL must be configured." msgstr "" -#: core/validators.py:16 +#: core/validators.py:14 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" -#: core/validators.py:22 -msgid "invalid phone number format" +#: core/views.py:72 +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:489 +#: core/views.py:87 +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 +msgid "" +"Returns a list of supported languages and their corresponding information." +msgstr "" + +#: core/views.py:148 +msgid "Returns the parameters of the website as a JSON object." +msgstr "" + +#: core/views.py:167 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +msgstr "" + +#: core/views.py:194 +msgid "Handles `contact us` form submissions." +msgstr "" + +#: core/views.py:215 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "" + +#: core/views.py:255 +msgid "Handles global search queries." +msgstr "" + +#: core/views.py:270 +msgid "Handles the logic of buying as a business without registration." +msgstr "" + +#: core/views.py:312 msgid "you can only download the digital asset once" msgstr "" -#: core/views.py:547 +#: core/views.py:315 +msgid "the order must be paid before downloading the digital asset" +msgstr "" + +#: core/views.py:353 +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." +msgstr "" + +#: core/views.py:365 msgid "favicon not found" msgstr "" -#: core/viewsets.py:1357 +#: core/views.py:370 +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." +msgstr "" + +#: core/views.py:382 +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/viewsets.py:128 +msgid "" +"Defines a viewset for managing Evibes-related operations. The EvibesViewSet " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" + +#: core/viewsets.py:147 +msgid "" +"Represents a viewset for managing AttributeGroup objects. Handles operations " +"related to AttributeGroup, including filtering, serialization, and retrieval " +"of data. This class is part of the application's API layer and provides a " +"standardized way to process requests and responses for AttributeGroup data." +msgstr "" + +#: core/viewsets.py:166 +msgid "" +"Handles operations related to Attribute objects within the application. " +"Provides a set of API endpoints to interact with Attribute data. This class " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" + +#: core/viewsets.py:185 +msgid "" +"A viewset for managing AttributeValue objects. This viewset provides " +"functionality for listing, retrieving, creating, updating, and deleting " +"AttributeValue objects. It integrates with Django REST Framework's viewset " +"mechanisms and uses appropriate serializers for different actions. Filtering " +"capabilities are provided through the DjangoFilterBackend." +msgstr "" + +#: core/viewsets.py:204 +msgid "" +"Manages views for Category-related operations. The CategoryViewSet class is " +"responsible for handling operations related to the Category model in the " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" + +#: core/viewsets.py:315 +msgid "" +"Represents a viewset for managing Brand instances. This class provides " +"functionality for querying, filtering, and serializing Brand objects. It " +"uses Django's ViewSet framework to simplify the implementation of API " +"endpoints for Brand objects." +msgstr "" + +#: core/viewsets.py:427 +msgid "" +"Manages operations related to the `Product` model in the system. This class " +"provides a viewset for managing products, including their filtering, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" + +#: core/viewsets.py:547 +msgid "" +"Represents a viewset for managing Vendor objects. This viewset allows " +"fetching, filtering, and serializing Vendor data. It defines the queryset, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" + +#: core/viewsets.py:567 +msgid "" +"Representation of a view set handling Feedback objects. This class manages " +"operations related to Feedback objects, including listing, filtering, and " +"retrieving details. The purpose of this view set is to provide different " +"serializers for different actions and implement permission-based handling of " +"accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"use of Django's filtering system for querying data." +msgstr "" + +#: core/viewsets.py:593 +msgid "" +"ViewSet for managing orders and related operations. This class provides " +"functionality to retrieve, modify, and manage order objects. It includes " +"various endpoints for handling order operations such as adding or removing " +"products, performing purchases for registered as well as unregistered users, " +"and retrieving the current authenticated user's pending orders. The ViewSet " +"uses multiple serializers based on the specific action being performed and " +"enforces permissions accordingly while interacting with order data." +msgstr "" + +#: core/viewsets.py:782 +msgid "" +"Provides a viewset for managing OrderProduct entities. This viewset enables " +"CRUD operations and custom actions specific to the OrderProduct model. It " +"includes filtering, permission checks, and serializer switching based on the " +"requested action. Additionally, it provides a detailed action for handling " +"feedback on OrderProduct instances" +msgstr "" + +#: core/viewsets.py:833 +msgid "Manages operations related to Product images in the application. " +msgstr "" + +#: core/viewsets.py:845 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +msgstr "" + +#: core/viewsets.py:866 +msgid "Represents a view set for managing promotions. " +msgstr "" + +#: core/viewsets.py:878 +msgid "Handles operations related to Stock data in the system." +msgstr "" + +#: core/viewsets.py:892 +msgid "" +"ViewSet for managing Wishlist operations. The WishlistViewSet provides " +"endpoints for interacting with a user's wish list, allowing for the " +"retrieval, modification, and customization of products within the wish list. " +"This ViewSet facilitates functionality such as adding, removing, and bulk " +"actions for wishlist products. Permission checks are integrated to ensure " +"that users can only manage their own wishlists unless explicit permissions " +"are granted." +msgstr "" + +#: core/viewsets.py:1007 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" + +#: core/viewsets.py:1074 #, python-brace-format msgid "Geocoding error: {e}" msgstr "" + +#: core/viewsets.py:1081 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" diff --git a/core/locale/hr_HR/LC_MESSAGES/django.po b/core/locale/hr_HR/LC_MESSAGES/django.po index c7b687b4..fdd945e6 100644 --- a/core/locale/hr_HR/LC_MESSAGES/django.po +++ b/core/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-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,36 +16,36 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: core/abstract.py:11 +#: core/abstract.py:12 msgid "unique id" msgstr "" -#: core/abstract.py:12 +#: core/abstract.py:13 msgid "unique id is used to surely identify any database object" msgstr "" -#: core/abstract.py:19 +#: core/abstract.py:20 msgid "is active" msgstr "" -#: core/abstract.py:20 +#: core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed permission" msgstr "" -#: core/abstract.py:22 core/choices.py:18 +#: core/abstract.py:23 core/choices.py:18 msgid "created" msgstr "" -#: core/abstract.py:22 +#: core/abstract.py:23 msgid "when the object first appeared on the database" msgstr "" -#: core/abstract.py:23 +#: core/abstract.py:24 msgid "modified" msgstr "" -#: core/abstract.py:23 +#: core/abstract.py:24 msgid "when the object was last modified" msgstr "" @@ -88,11 +88,11 @@ msgid "selected items have been deactivated." msgstr "" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 +#: core/graphene/object_types.py:616 core/models.py:701 core/models.py:709 msgid "attribute value" msgstr "" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 msgid "attribute values" msgstr "" @@ -104,7 +104,7 @@ msgstr "" msgid "images" msgstr "" -#: core/admin.py:155 core/models.py:445 +#: core/admin.py:155 core/models.py:459 msgid "stock" msgstr "" @@ -112,11 +112,11 @@ msgstr "" msgid "stocks" msgstr "" -#: core/admin.py:166 core/models.py:1609 +#: core/admin.py:166 core/models.py:1667 msgid "order product" msgstr "" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 msgid "order products" msgstr "" @@ -678,7 +678,7 @@ msgstr "" msgid "add or remove feedback on an order–product relation" msgstr "" -#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 msgid "no search term provided." msgstr "" @@ -731,7 +731,7 @@ msgid "Quantity" msgstr "" #: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:287 core/models.py:369 core/models.py:522 +#: core/models.py:301 core/models.py:383 core/models.py:536 msgid "Slug" msgstr "" @@ -747,7 +747,7 @@ msgstr "" msgid "Include personal ordered" msgstr "" -#: core/filters.py:85 core/models.py:526 +#: core/filters.py:85 core/models.py:540 msgid "SKU" msgstr "" @@ -820,7 +820,7 @@ msgstr "" msgid "camelized JSON data from the requested URL" msgstr "" -#: core/graphene/mutations.py:65 core/views.py:360 +#: core/graphene/mutations.py:65 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "" @@ -851,7 +851,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:839 +#: core/graphene/mutations.py:527 core/viewsets.py:679 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" @@ -925,9 +925,9 @@ msgstr "" msgid "original address string provided by the user" msgstr "" -#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 -#: core/models.py:1234 core/models.py:1263 core/models.py:1288 -#: core/viewsets.py:842 +#: core/graphene/mutations.py:656 core/models.py:849 core/models.py:862 +#: core/models.py:1281 core/models.py:1310 core/models.py:1335 +#: core/viewsets.py:682 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" @@ -941,8 +941,8 @@ msgid "elasticsearch - works like a charm" msgstr "" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 -#: core/models.py:1686 +#: core/graphene/object_types.py:444 core/models.py:672 core/models.py:1144 +#: core/models.py:1744 msgid "attributes" msgstr "" @@ -955,11 +955,11 @@ msgid "groups of attributes" msgstr "" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:612 +#: core/graphene/object_types.py:224 core/models.py:326 core/models.py:626 msgid "categories" msgstr "" -#: core/graphene/object_types.py:124 core/models.py:383 +#: core/graphene/object_types.py:124 core/models.py:397 msgid "brands" msgstr "" @@ -968,7 +968,7 @@ msgid "category image url" msgstr "" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:249 +#: core/models.py:263 msgid "markup percentage" msgstr "" @@ -988,7 +988,7 @@ msgstr "" msgid "products in this category" msgstr "" -#: core/graphene/object_types.py:351 core/models.py:155 +#: core/graphene/object_types.py:351 core/models.py:169 msgid "vendors" msgstr "" @@ -1013,7 +1013,7 @@ msgid "represents feedback from a user." msgstr "" #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1110 +#: core/models.py:1138 msgid "notifications" msgstr "" @@ -1021,7 +1021,7 @@ msgstr "" msgid "download url for this order product if applicable" msgstr "" -#: core/graphene/object_types.py:400 core/models.py:1791 +#: core/graphene/object_types.py:400 core/models.py:1860 msgid "feedback" msgstr "" @@ -1029,7 +1029,7 @@ msgstr "" msgid "a list of order products in this order" msgstr "" -#: core/graphene/object_types.py:436 core/models.py:1080 +#: core/graphene/object_types.py:436 core/models.py:1108 msgid "billing address" msgstr "" @@ -1055,7 +1055,7 @@ msgstr "" msgid "transactions for this order" msgstr "" -#: core/graphene/object_types.py:465 core/models.py:1144 +#: core/graphene/object_types.py:465 core/models.py:1172 msgid "orders" msgstr "" @@ -1067,15 +1067,15 @@ msgstr "" msgid "product's images" msgstr "" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 +#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 msgid "category" msgstr "" -#: core/graphene/object_types.py:502 core/models.py:1792 +#: core/graphene/object_types.py:502 core/models.py:1861 msgid "feedbacks" msgstr "" -#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 +#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 msgid "brand" msgstr "" @@ -1107,7 +1107,7 @@ msgstr "" msgid "only available for personal orders" msgstr "" -#: core/graphene/object_types.py:534 core/models.py:536 +#: core/graphene/object_types.py:534 core/models.py:550 msgid "products" msgstr "" @@ -1119,15 +1119,15 @@ msgstr "" msgid "products on sale" msgstr "" -#: core/graphene/object_types.py:651 core/models.py:784 +#: core/graphene/object_types.py:651 core/models.py:798 msgid "promotions" msgstr "" -#: core/graphene/object_types.py:655 core/models.py:154 +#: core/graphene/object_types.py:655 core/models.py:168 msgid "vendor" msgstr "" -#: core/graphene/object_types.py:656 core/models.py:535 +#: core/graphene/object_types.py:656 core/models.py:549 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1135,11 +1135,11 @@ msgstr "" msgid "product" msgstr "" -#: core/graphene/object_types.py:667 core/models.py:807 +#: core/graphene/object_types.py:667 core/models.py:821 msgid "wishlisted products" msgstr "" -#: core/graphene/object_types.py:673 core/models.py:824 +#: core/graphene/object_types.py:673 core/models.py:838 msgid "wishlists" msgstr "" @@ -1147,7 +1147,7 @@ msgstr "" msgid "tagged products" msgstr "" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 +#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 msgid "product tags" msgstr "" @@ -1252,7 +1252,7 @@ msgstr "" msgid "attribute group's name" msgstr "" -#: core/models.py:100 core/models.py:620 +#: core/models.py:100 core/models.py:634 msgid "attribute group" msgstr "" @@ -1291,7 +1291,7 @@ msgstr "" msgid "vendor name" msgstr "" -#: core/models.py:163 +#: core/models.py:177 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1300,42 +1300,42 @@ msgid "" "metadata customization for administrative purposes." msgstr "" -#: core/models.py:175 core/models.py:206 +#: core/models.py:189 core/models.py:220 msgid "internal tag identifier for the product tag" msgstr "" -#: core/models.py:176 core/models.py:207 +#: core/models.py:190 core/models.py:221 msgid "tag name" msgstr "" -#: core/models.py:180 core/models.py:211 +#: core/models.py:194 core/models.py:225 msgid "user-friendly name for the product tag" msgstr "" -#: core/models.py:181 core/models.py:212 +#: core/models.py:195 core/models.py:226 msgid "tag display name" msgstr "" -#: core/models.py:189 +#: core/models.py:203 msgid "product tag" msgstr "" -#: core/models.py:195 +#: core/models.py:209 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:220 +#: core/models.py:234 msgid "category tag" msgstr "" -#: core/models.py:221 core/models.py:293 +#: core/models.py:235 core/models.py:307 msgid "category tags" msgstr "" -#: core/models.py:226 +#: core/models.py:240 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1348,51 +1348,51 @@ msgid "" "priority." msgstr "" -#: core/models.py:240 +#: core/models.py:254 msgid "upload an image representing this category" msgstr "" -#: core/models.py:243 +#: core/models.py:257 msgid "category image" msgstr "" -#: core/models.py:248 +#: core/models.py:262 msgid "define a markup percentage for products in this category" msgstr "" -#: core/models.py:257 +#: core/models.py:271 msgid "parent of this category to form a hierarchical structure" msgstr "" -#: core/models.py:258 +#: core/models.py:272 msgid "parent category" msgstr "" -#: core/models.py:263 +#: core/models.py:277 msgid "category name" msgstr "" -#: core/models.py:264 +#: core/models.py:278 msgid "provide a name for this category" msgstr "" -#: core/models.py:271 +#: core/models.py:285 msgid "add a detailed description for this category" msgstr "" -#: core/models.py:272 +#: core/models.py:286 msgid "category description" msgstr "" -#: core/models.py:292 +#: core/models.py:306 msgid "tags that help describe or group this category" msgstr "" -#: core/models.py:299 core/models.py:375 +#: core/models.py:313 core/models.py:389 msgid "priority" msgstr "" -#: core/models.py:318 +#: core/models.py:332 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1400,47 +1400,47 @@ msgid "" "organization and representation of brand-related data within the application." msgstr "" -#: core/models.py:328 +#: core/models.py:342 msgid "name of this brand" msgstr "" -#: core/models.py:329 +#: core/models.py:343 msgid "brand name" msgstr "" -#: core/models.py:336 +#: core/models.py:350 msgid "upload a logo representing this brand" msgstr "" -#: core/models.py:338 +#: core/models.py:352 msgid "brand small image" msgstr "" -#: core/models.py:344 +#: core/models.py:358 msgid "upload a big logo representing this brand" msgstr "" -#: core/models.py:346 +#: core/models.py:360 msgid "brand big image" msgstr "" -#: core/models.py:351 +#: core/models.py:365 msgid "add a detailed description of the brand" msgstr "" -#: core/models.py:352 +#: core/models.py:366 msgid "brand description" msgstr "" -#: core/models.py:357 +#: core/models.py:371 msgid "optional categories that this brand is associated with" msgstr "" -#: core/models.py:358 +#: core/models.py:372 msgid "associated categories" msgstr "" -#: core/models.py:388 +#: core/models.py:402 msgid "" "Represents the stock of a product managed in the system. This class provides " "details about the relationship between vendors, products, and their stock " @@ -1450,67 +1450,67 @@ msgid "" "from various vendors." msgstr "" -#: core/models.py:400 +#: core/models.py:414 msgid "the vendor supplying this product stock" msgstr "" -#: core/models.py:401 +#: core/models.py:415 msgid "associated vendor" msgstr "" -#: core/models.py:405 +#: core/models.py:419 msgid "final price to the customer after markups" msgstr "" -#: core/models.py:406 +#: core/models.py:420 msgid "selling price" msgstr "" -#: core/models.py:411 +#: core/models.py:425 msgid "the product associated with this stock entry" msgstr "" -#: core/models.py:412 core/models.py:683 core/models.py:730 core/models.py:1583 +#: core/models.py:426 core/models.py:697 core/models.py:744 core/models.py:1641 msgid "associated product" msgstr "" -#: core/models.py:419 +#: core/models.py:433 msgid "the price paid to the vendor for this product" msgstr "" -#: core/models.py:420 +#: core/models.py:434 msgid "vendor purchase price" msgstr "" -#: core/models.py:424 +#: core/models.py:438 msgid "available quantity of the product in stock" msgstr "" -#: core/models.py:425 +#: core/models.py:439 msgid "quantity in stock" msgstr "" -#: core/models.py:429 +#: core/models.py:443 msgid "vendor-assigned SKU for identifying the product" msgstr "" -#: core/models.py:430 +#: core/models.py:444 msgid "vendor sku" msgstr "" -#: core/models.py:436 +#: core/models.py:450 msgid "digital file associated with this stock if applicable" msgstr "" -#: core/models.py:437 +#: core/models.py:451 msgid "digital file" msgstr "" -#: core/models.py:446 +#: core/models.py:460 msgid "stock entries" msgstr "" -#: core/models.py:451 +#: core/models.py:465 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1522,55 +1522,55 @@ msgid "" "product data and its associated information within an application." msgstr "" -#: core/models.py:464 +#: core/models.py:478 msgid "category this product belongs to" msgstr "" -#: core/models.py:473 +#: core/models.py:487 msgid "optionally associate this product with a brand" msgstr "" -#: core/models.py:479 +#: core/models.py:493 msgid "tags that help describe or group this product" msgstr "" -#: core/models.py:484 +#: core/models.py:498 msgid "indicates whether this product is digitally delivered" msgstr "" -#: core/models.py:485 +#: core/models.py:499 msgid "is product digital" msgstr "" -#: core/models.py:491 +#: core/models.py:505 msgid "provide a clear identifying name for the product" msgstr "" -#: core/models.py:492 +#: core/models.py:506 msgid "product name" msgstr "" -#: core/models.py:497 core/models.py:772 +#: core/models.py:511 core/models.py:786 msgid "add a detailed description of the product" msgstr "" -#: core/models.py:498 +#: core/models.py:512 msgid "product description" msgstr "" -#: core/models.py:505 +#: core/models.py:519 msgid "part number for this product" msgstr "" -#: core/models.py:506 +#: core/models.py:520 msgid "part number" msgstr "" -#: core/models.py:525 +#: core/models.py:539 msgid "stock keeping unit for this product" msgstr "" -#: core/models.py:599 +#: core/models.py:613 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 " @@ -1580,87 +1580,87 @@ msgid "" "for dynamic and flexible data structuring." msgstr "" -#: core/models.py:611 +#: core/models.py:625 msgid "category of this attribute" msgstr "" -#: core/models.py:619 +#: core/models.py:633 msgid "group of this attribute" msgstr "" -#: core/models.py:625 +#: core/models.py:639 msgid "string" msgstr "" -#: core/models.py:626 +#: core/models.py:640 msgid "integer" msgstr "" -#: core/models.py:627 +#: core/models.py:641 msgid "float" msgstr "" -#: core/models.py:628 +#: core/models.py:642 msgid "boolean" msgstr "" -#: core/models.py:629 +#: core/models.py:643 msgid "array" msgstr "" -#: core/models.py:630 +#: core/models.py:644 msgid "object" msgstr "" -#: core/models.py:632 +#: core/models.py:646 msgid "type of the attribute's value" msgstr "" -#: core/models.py:633 +#: core/models.py:647 msgid "value type" msgstr "" -#: core/models.py:638 +#: core/models.py:652 msgid "name of this attribute" msgstr "" -#: core/models.py:639 +#: core/models.py:653 msgid "attribute's name" msgstr "" -#: core/models.py:645 +#: core/models.py:659 msgid "is filterable" msgstr "" -#: core/models.py:646 +#: core/models.py:660 msgid "designates whether this attribute can be used for filtering or not" msgstr "" -#: core/models.py:657 core/models.py:675 +#: core/models.py:671 core/models.py:689 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "" -#: core/models.py:663 +#: core/models.py:677 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:674 +#: core/models.py:688 msgid "attribute of this value" msgstr "" -#: core/models.py:682 +#: core/models.py:696 msgid "the specific product associated with this attribute's value" msgstr "" -#: core/models.py:688 +#: core/models.py:702 msgid "the specific value for this attribute" msgstr "" -#: core/models.py:701 +#: core/models.py:715 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for " @@ -1669,39 +1669,39 @@ msgid "" "with alternative text for the images." msgstr "" -#: core/models.py:712 +#: core/models.py:726 msgid "provide alternative text for the image for accessibility" msgstr "" -#: core/models.py:713 +#: core/models.py:727 msgid "image alt text" msgstr "" -#: core/models.py:716 +#: core/models.py:730 msgid "upload the image file for this product" msgstr "" -#: core/models.py:717 core/models.py:742 +#: core/models.py:731 core/models.py:756 msgid "product image" msgstr "" -#: core/models.py:723 +#: core/models.py:737 msgid "determines the order in which images are displayed" msgstr "" -#: core/models.py:724 +#: core/models.py:738 msgid "display priority" msgstr "" -#: core/models.py:729 +#: core/models.py:743 msgid "the product that this image represents" msgstr "" -#: core/models.py:743 +#: core/models.py:757 msgid "product images" msgstr "" -#: core/models.py:748 +#: core/models.py:762 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1711,39 +1711,39 @@ msgid "" "affected items in the campaign." msgstr "" -#: core/models.py:760 +#: core/models.py:774 msgid "percentage discount for the selected products" msgstr "" -#: core/models.py:761 +#: core/models.py:775 msgid "discount percentage" msgstr "" -#: core/models.py:766 +#: core/models.py:780 msgid "provide a unique name for this promotion" msgstr "" -#: core/models.py:767 +#: core/models.py:781 msgid "promotion name" msgstr "" -#: core/models.py:773 +#: core/models.py:787 msgid "promotion description" msgstr "" -#: core/models.py:778 +#: core/models.py:792 msgid "select which products are included in this promotion" msgstr "" -#: core/models.py:779 +#: core/models.py:793 msgid "included products" msgstr "" -#: core/models.py:783 +#: core/models.py:797 msgid "promotion" msgstr "" -#: core/models.py:794 +#: core/models.py:808 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1751,23 +1751,23 @@ msgid "" "operations for adding and removing multiple products at once." msgstr "" -#: core/models.py:806 +#: core/models.py:820 msgid "products that the user has marked as wanted" msgstr "" -#: core/models.py:814 +#: core/models.py:828 msgid "user who owns this wishlist" msgstr "" -#: core/models.py:815 +#: core/models.py:829 msgid "wishlist owner" msgstr "" -#: core/models.py:823 +#: core/models.py:837 msgid "wishlist" msgstr "" -#: core/models.py:865 +#: core/models.py:879 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1777,19 +1777,19 @@ msgid "" "custom features." msgstr "" -#: core/models.py:878 +#: core/models.py:892 msgid "documentary" msgstr "" -#: core/models.py:879 +#: core/models.py:893 msgid "documentaries" msgstr "" -#: core/models.py:889 +#: core/models.py:903 msgid "unresolved" msgstr "" -#: core/models.py:894 +#: core/models.py:908 msgid "" "Represents an address entity that includes location details and associations " "with a user. Provides functionality for geographic and address data storage, " @@ -1801,59 +1801,59 @@ msgid "" "address with a user, facilitating personalized data handling." msgstr "" -#: core/models.py:909 +#: core/models.py:923 msgid "address line for the customer" msgstr "" -#: core/models.py:910 +#: core/models.py:924 msgid "address line" msgstr "" -#: core/models.py:912 +#: core/models.py:926 msgid "street" msgstr "" -#: core/models.py:913 +#: core/models.py:927 msgid "district" msgstr "" -#: core/models.py:914 +#: core/models.py:928 msgid "city" msgstr "" -#: core/models.py:915 +#: core/models.py:929 msgid "region" msgstr "" -#: core/models.py:916 +#: core/models.py:930 msgid "postal code" msgstr "" -#: core/models.py:917 +#: core/models.py:931 msgid "country" msgstr "" -#: core/models.py:924 +#: core/models.py:938 msgid "geolocation point: (longitude, latitude)" msgstr "" -#: core/models.py:927 +#: core/models.py:941 msgid "full JSON response from geocoder for this address" msgstr "" -#: core/models.py:932 +#: core/models.py:946 msgid "stored JSON response from the geocoding service" msgstr "" -#: core/models.py:940 +#: core/models.py:954 msgid "address" msgstr "" -#: core/models.py:941 +#: core/models.py:955 msgid "addresses" msgstr "" -#: core/models.py:953 +#: core/models.py:967 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -1863,86 +1863,86 @@ msgid "" "apply the promo code to an order while ensuring constraints are met." msgstr "" -#: core/models.py:967 +#: core/models.py:981 msgid "unique code used by a user to redeem a discount" msgstr "" -#: core/models.py:968 +#: core/models.py:982 msgid "promo code identifier" msgstr "" -#: core/models.py:975 +#: core/models.py:989 msgid "fixed discount amount applied if percent is not used" msgstr "" -#: core/models.py:976 +#: core/models.py:990 msgid "fixed discount amount" msgstr "" -#: core/models.py:982 +#: core/models.py:996 msgid "percentage discount applied if fixed amount is not used" msgstr "" -#: core/models.py:983 +#: core/models.py:997 msgid "percentage discount" msgstr "" -#: core/models.py:988 +#: core/models.py:1002 msgid "timestamp when the promocode expires" msgstr "" -#: core/models.py:989 +#: core/models.py:1003 msgid "end validity time" msgstr "" -#: core/models.py:994 +#: core/models.py:1008 msgid "timestamp from which this promocode is valid" msgstr "" -#: core/models.py:995 +#: core/models.py:1009 msgid "start validity time" msgstr "" -#: core/models.py:1000 +#: core/models.py:1014 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" -#: core/models.py:1001 +#: core/models.py:1015 msgid "usage timestamp" msgstr "" -#: core/models.py:1006 +#: core/models.py:1020 msgid "user assigned to this promocode if applicable" msgstr "" -#: core/models.py:1007 +#: core/models.py:1021 msgid "assigned user" msgstr "" -#: core/models.py:1014 +#: core/models.py:1028 msgid "promo code" msgstr "" -#: core/models.py:1015 +#: core/models.py:1029 msgid "promo codes" msgstr "" -#: core/models.py:1022 +#: core/models.py:1044 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "" -#: core/models.py:1037 +#: core/models.py:1065 msgid "promocode already used" msgstr "" -#: core/models.py:1053 +#: core/models.py:1081 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "" -#: core/models.py:1062 +#: core/models.py:1090 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 " @@ -1952,144 +1952,144 @@ msgid "" "supports managing the products in the order lifecycle." msgstr "" -#: core/models.py:1079 +#: core/models.py:1107 msgid "the billing address used for this order" msgstr "" -#: core/models.py:1087 +#: core/models.py:1115 msgid "optional promo code applied to this order" msgstr "" -#: core/models.py:1088 +#: core/models.py:1116 msgid "applied promo code" msgstr "" -#: core/models.py:1096 +#: core/models.py:1124 msgid "the shipping address used for this order" msgstr "" -#: core/models.py:1097 +#: core/models.py:1125 msgid "shipping address" msgstr "" -#: core/models.py:1103 +#: core/models.py:1131 msgid "current status of the order in its lifecycle" msgstr "" -#: core/models.py:1104 +#: core/models.py:1132 msgid "order status" msgstr "" -#: core/models.py:1109 core/models.py:1560 +#: core/models.py:1137 core/models.py:1618 msgid "json structure of notifications to display to users" msgstr "" -#: core/models.py:1115 +#: core/models.py:1143 msgid "json representation of order attributes for this order" msgstr "" -#: core/models.py:1121 +#: core/models.py:1149 msgid "the user who placed the order" msgstr "" -#: core/models.py:1122 +#: core/models.py:1150 msgid "user" msgstr "" -#: core/models.py:1128 +#: core/models.py:1156 msgid "the timestamp when the order was finalized" msgstr "" -#: core/models.py:1129 +#: core/models.py:1157 msgid "buy time" msgstr "" -#: core/models.py:1136 +#: core/models.py:1164 msgid "a human-readable identifier for the order" msgstr "" -#: core/models.py:1137 +#: core/models.py:1165 msgid "human readable id" msgstr "" -#: core/models.py:1143 +#: core/models.py:1171 msgid "order" msgstr "" -#: core/models.py:1168 +#: core/models.py:1209 msgid "a user must have only one pending order at a time" msgstr "" -#: core/models.py:1202 +#: core/models.py:1249 msgid "you cannot add products to an order that is not a pending one" msgstr "" -#: core/models.py:1207 +#: core/models.py:1254 msgid "you cannot add inactive products to order" msgstr "" -#: core/models.py:1224 +#: core/models.py:1271 msgid "you cannot add more products than available in stock" msgstr "" -#: core/models.py:1246 core/models.py:1271 core/models.py:1279 +#: core/models.py:1293 core/models.py:1318 core/models.py:1326 msgid "you cannot remove products from an order that is not a pending one" msgstr "" -#: core/models.py:1267 +#: core/models.py:1314 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "" -#: core/models.py:1299 +#: core/models.py:1346 msgid "promocode does not exist" msgstr "" -#: core/models.py:1305 +#: core/models.py:1352 msgid "you can only buy physical products with shipping address specified" msgstr "" -#: core/models.py:1324 +#: core/models.py:1371 msgid "address does not exist" msgstr "" -#: core/models.py:1345 core/models.py:1414 +#: core/models.py:1392 core/models.py:1461 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" -#: core/models.py:1348 core/models.py:1410 +#: core/models.py:1395 core/models.py:1457 msgid "invalid force value" msgstr "" -#: core/models.py:1354 core/models.py:1417 +#: core/models.py:1401 core/models.py:1464 msgid "you cannot purchase an empty order!" msgstr "" -#: core/models.py:1373 +#: core/models.py:1420 msgid "you cannot buy an order without a user" msgstr "" -#: core/models.py:1387 +#: core/models.py:1434 msgid "a user without a balance cannot buy with balance" msgstr "" -#: core/models.py:1392 +#: core/models.py:1439 msgid "insufficient funds to complete the order" msgstr "" -#: core/models.py:1426 +#: core/models.py:1473 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "" -#: core/models.py:1435 +#: core/models.py:1482 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" -#: core/models.py:1533 +#: core/models.py:1591 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2102,108 +2102,108 @@ msgid "" "Product models and stores a reference to them." msgstr "" -#: core/models.py:1548 +#: core/models.py:1606 msgid "the price paid by the customer for this product at purchase time" msgstr "" -#: core/models.py:1549 +#: core/models.py:1607 msgid "purchase price at order time" msgstr "" -#: core/models.py:1554 +#: core/models.py:1612 msgid "internal comments for admins about this ordered product" msgstr "" -#: core/models.py:1555 +#: core/models.py:1613 msgid "internal comments" msgstr "" -#: core/models.py:1561 +#: core/models.py:1619 msgid "user notifications" msgstr "" -#: core/models.py:1566 +#: core/models.py:1624 msgid "json representation of this item's attributes" msgstr "" -#: core/models.py:1567 +#: core/models.py:1625 msgid "ordered product attributes" msgstr "" -#: core/models.py:1572 +#: core/models.py:1630 msgid "reference to the parent order that contains this product" msgstr "" -#: core/models.py:1573 +#: core/models.py:1631 msgid "parent order" msgstr "" -#: core/models.py:1582 +#: core/models.py:1640 msgid "the specific product associated with this order line" msgstr "" -#: core/models.py:1589 +#: core/models.py:1647 msgid "quantity of this specific product in the order" msgstr "" -#: core/models.py:1590 +#: core/models.py:1648 msgid "product quantity" msgstr "" -#: core/models.py:1597 +#: core/models.py:1655 msgid "current status of this product in the order" msgstr "" -#: core/models.py:1598 +#: core/models.py:1656 msgid "product line status" msgstr "" -#: core/models.py:1661 +#: core/models.py:1719 msgid "order product must have an order" msgstr "" -#: core/models.py:1663 +#: core/models.py:1721 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "" -#: core/models.py:1677 +#: core/models.py:1735 msgid "you cannot feedback an order which is not received" msgstr "" -#: core/models.py:1683 +#: core/models.py:1741 msgid "name" msgstr "" -#: core/models.py:1684 +#: core/models.py:1742 msgid "URL of the integration" msgstr "" -#: core/models.py:1685 +#: core/models.py:1743 msgid "authentication credentials" msgstr "" -#: core/models.py:1699 +#: core/models.py:1765 msgid "you can only have one default CRM provider" msgstr "" -#: core/models.py:1703 +#: core/models.py:1775 msgid "CRM" msgstr "" -#: core/models.py:1704 +#: core/models.py:1776 msgid "CRMs" msgstr "" -#: core/models.py:1716 +#: core/models.py:1788 msgid "order CRM link" msgstr "" -#: core/models.py:1717 +#: core/models.py:1789 msgid "orders CRM links" msgstr "" -#: core/models.py:1722 +#: core/models.py:1794 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2213,19 +2213,15 @@ msgid "" "the asset when the associated order is in a completed status." msgstr "" -#: core/models.py:1736 +#: core/models.py:1808 msgid "download" msgstr "" -#: core/models.py:1737 +#: core/models.py:1809 msgid "downloads" msgstr "" -#: core/models.py:1745 -msgid "you can not download a digital asset for a non-finished order" -msgstr "" - -#: core/models.py:1754 +#: core/models.py:1823 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2234,27 +2230,27 @@ msgid "" "fields to effectively model and manage feedback data." msgstr "" -#: core/models.py:1766 +#: core/models.py:1835 msgid "user-provided comments about their experience with the product" msgstr "" -#: core/models.py:1767 +#: core/models.py:1836 msgid "feedback comments" msgstr "" -#: core/models.py:1774 +#: core/models.py:1843 msgid "references the specific product in an order that this feedback is about" msgstr "" -#: core/models.py:1775 +#: core/models.py:1844 msgid "related order product" msgstr "" -#: core/models.py:1780 +#: core/models.py:1849 msgid "user-assigned rating for the product" msgstr "" -#: core/models.py:1781 +#: core/models.py:1850 msgid "product rating" msgstr "" @@ -2443,11 +2439,11 @@ msgid "" " reserved" msgstr "" -#: core/utils/caching.py:41 +#: core/utils/caching.py:48 msgid "both data and timeout are required" msgstr "" -#: core/utils/caching.py:43 +#: core/utils/caching.py:50 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "" @@ -2479,24 +2475,243 @@ msgstr "" msgid "NOMINATIM_URL must be configured." msgstr "" -#: core/validators.py:16 +#: core/validators.py:14 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" -#: core/validators.py:22 -msgid "invalid phone number format" +#: core/views.py:72 +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:489 +#: core/views.py:87 +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 +msgid "" +"Returns a list of supported languages and their corresponding information." +msgstr "" + +#: core/views.py:148 +msgid "Returns the parameters of the website as a JSON object." +msgstr "" + +#: core/views.py:167 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +msgstr "" + +#: core/views.py:194 +msgid "Handles `contact us` form submissions." +msgstr "" + +#: core/views.py:215 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "" + +#: core/views.py:255 +msgid "Handles global search queries." +msgstr "" + +#: core/views.py:270 +msgid "Handles the logic of buying as a business without registration." +msgstr "" + +#: core/views.py:312 msgid "you can only download the digital asset once" msgstr "" -#: core/views.py:547 +#: core/views.py:315 +msgid "the order must be paid before downloading the digital asset" +msgstr "" + +#: core/views.py:353 +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." +msgstr "" + +#: core/views.py:365 msgid "favicon not found" msgstr "" -#: core/viewsets.py:1357 +#: core/views.py:370 +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." +msgstr "" + +#: core/views.py:382 +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/viewsets.py:128 +msgid "" +"Defines a viewset for managing Evibes-related operations. The EvibesViewSet " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" + +#: core/viewsets.py:147 +msgid "" +"Represents a viewset for managing AttributeGroup objects. Handles operations " +"related to AttributeGroup, including filtering, serialization, and retrieval " +"of data. This class is part of the application's API layer and provides a " +"standardized way to process requests and responses for AttributeGroup data." +msgstr "" + +#: core/viewsets.py:166 +msgid "" +"Handles operations related to Attribute objects within the application. " +"Provides a set of API endpoints to interact with Attribute data. This class " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" + +#: core/viewsets.py:185 +msgid "" +"A viewset for managing AttributeValue objects. This viewset provides " +"functionality for listing, retrieving, creating, updating, and deleting " +"AttributeValue objects. It integrates with Django REST Framework's viewset " +"mechanisms and uses appropriate serializers for different actions. Filtering " +"capabilities are provided through the DjangoFilterBackend." +msgstr "" + +#: core/viewsets.py:204 +msgid "" +"Manages views for Category-related operations. The CategoryViewSet class is " +"responsible for handling operations related to the Category model in the " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" + +#: core/viewsets.py:315 +msgid "" +"Represents a viewset for managing Brand instances. This class provides " +"functionality for querying, filtering, and serializing Brand objects. It " +"uses Django's ViewSet framework to simplify the implementation of API " +"endpoints for Brand objects." +msgstr "" + +#: core/viewsets.py:427 +msgid "" +"Manages operations related to the `Product` model in the system. This class " +"provides a viewset for managing products, including their filtering, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" + +#: core/viewsets.py:547 +msgid "" +"Represents a viewset for managing Vendor objects. This viewset allows " +"fetching, filtering, and serializing Vendor data. It defines the queryset, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" + +#: core/viewsets.py:567 +msgid "" +"Representation of a view set handling Feedback objects. This class manages " +"operations related to Feedback objects, including listing, filtering, and " +"retrieving details. The purpose of this view set is to provide different " +"serializers for different actions and implement permission-based handling of " +"accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"use of Django's filtering system for querying data." +msgstr "" + +#: core/viewsets.py:593 +msgid "" +"ViewSet for managing orders and related operations. This class provides " +"functionality to retrieve, modify, and manage order objects. It includes " +"various endpoints for handling order operations such as adding or removing " +"products, performing purchases for registered as well as unregistered users, " +"and retrieving the current authenticated user's pending orders. The ViewSet " +"uses multiple serializers based on the specific action being performed and " +"enforces permissions accordingly while interacting with order data." +msgstr "" + +#: core/viewsets.py:782 +msgid "" +"Provides a viewset for managing OrderProduct entities. This viewset enables " +"CRUD operations and custom actions specific to the OrderProduct model. It " +"includes filtering, permission checks, and serializer switching based on the " +"requested action. Additionally, it provides a detailed action for handling " +"feedback on OrderProduct instances" +msgstr "" + +#: core/viewsets.py:833 +msgid "Manages operations related to Product images in the application. " +msgstr "" + +#: core/viewsets.py:845 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +msgstr "" + +#: core/viewsets.py:866 +msgid "Represents a view set for managing promotions. " +msgstr "" + +#: core/viewsets.py:878 +msgid "Handles operations related to Stock data in the system." +msgstr "" + +#: core/viewsets.py:892 +msgid "" +"ViewSet for managing Wishlist operations. The WishlistViewSet provides " +"endpoints for interacting with a user's wish list, allowing for the " +"retrieval, modification, and customization of products within the wish list. " +"This ViewSet facilitates functionality such as adding, removing, and bulk " +"actions for wishlist products. Permission checks are integrated to ensure " +"that users can only manage their own wishlists unless explicit permissions " +"are granted." +msgstr "" + +#: core/viewsets.py:1007 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" + +#: core/viewsets.py:1074 #, python-brace-format msgid "Geocoding error: {e}" msgstr "" + +#: core/viewsets.py:1081 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" diff --git a/core/locale/id_ID/LC_MESSAGES/django.mo b/core/locale/id_ID/LC_MESSAGES/django.mo index cfede42c35a9be8a0953facf3600f4648b301194..89df9716b4de8e59cccb3d796c7ba6b7cbc4cb03 100644 GIT binary patch delta 26352 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 delta 12265 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 Zn0rX_=&TfX2B*kK7_mLPiR%a7{{s~~A7cOj diff --git a/core/locale/id_ID/LC_MESSAGES/django.po b/core/locale/id_ID/LC_MESSAGES/django.po index 3bcd9e93..d7c5d2f9 100644 --- a/core/locale/id_ID/LC_MESSAGES/django.po +++ b/core/locale/id_ID/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+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:11 +#: core/abstract.py:12 msgid "unique id" msgstr "ID unik" -#: core/abstract.py:12 +#: 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:19 +#: core/abstract.py:20 msgid "is active" msgstr "Aktif" -#: core/abstract.py:20 +#: core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" @@ -34,19 +34,19 @@ msgstr "" "Jika diset ke false, objek ini tidak dapat dilihat oleh pengguna tanpa izin " "yang diperlukan" -#: core/abstract.py:22 core/choices.py:18 +#: core/abstract.py:23 core/choices.py:18 msgid "created" msgstr "Dibuat" -#: core/abstract.py:22 +#: core/abstract.py:23 msgid "when the object first appeared on the database" msgstr "Saat objek pertama kali muncul di database" -#: core/abstract.py:23 +#: core/abstract.py:24 msgid "modified" msgstr "Dimodifikasi" -#: core/abstract.py:23 +#: core/abstract.py:24 msgid "when the object was last modified" msgstr "Kapan objek terakhir kali diedit" @@ -89,11 +89,11 @@ msgid "selected items have been deactivated." msgstr "Item yang dipilih telah dinonaktifkan!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 +#: core/graphene/object_types.py:616 core/models.py:701 core/models.py:709 msgid "attribute value" msgstr "Nilai Atribut" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 msgid "attribute values" msgstr "Nilai Atribut" @@ -105,7 +105,7 @@ msgstr "Gambar" msgid "images" msgstr "Gambar" -#: core/admin.py:155 core/models.py:445 +#: core/admin.py:155 core/models.py:459 msgid "stock" msgstr "Stok" @@ -113,11 +113,11 @@ msgstr "Stok" msgid "stocks" msgstr "Saham" -#: core/admin.py:166 core/models.py:1609 +#: core/admin.py:166 core/models.py:1667 msgid "order product" msgstr "Pesan Produk" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 msgid "order products" msgstr "Pesan Produk" @@ -753,7 +753,7 @@ msgstr "menghapus relasi pesanan-produk" msgid "add or remove feedback on an order–product relation" msgstr "menambah atau menghapus umpan balik pada relasi pesanan-produk" -#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 msgid "no search term provided." msgstr "Tidak ada istilah pencarian yang disediakan." @@ -806,7 +806,7 @@ msgid "Quantity" msgstr "Kuantitas" #: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:287 core/models.py:369 core/models.py:522 +#: core/models.py:301 core/models.py:383 core/models.py:536 msgid "Slug" msgstr "Siput" @@ -822,7 +822,7 @@ msgstr "Sertakan sub-kategori" msgid "Include personal ordered" msgstr "Menyertakan produk pesanan pribadi" -#: core/filters.py:85 core/models.py:526 +#: core/filters.py:85 core/models.py:540 msgid "SKU" msgstr "SKU" @@ -895,7 +895,7 @@ msgstr "Data yang di-cache" msgid "camelized JSON data from the requested URL" msgstr "Data JSON yang di-camel dari URL yang diminta" -#: core/graphene/mutations.py:65 core/views.py:360 +#: core/graphene/mutations.py:65 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "Hanya URL yang dimulai dengan http(s):// yang diperbolehkan" @@ -927,7 +927,7 @@ msgstr "" "Harap berikan order_uuid atau order_hr_id - tidak boleh lebih dari satu!" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:839 +#: core/graphene/mutations.py:527 core/viewsets.py:679 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Tipe yang salah berasal dari metode order.buy(): {type(instance)!s}" @@ -1002,9 +1002,9 @@ msgstr "Orderproduct {order_product_uuid} tidak ditemukan!" msgid "original address string provided by the user" msgstr "String alamat asli yang diberikan oleh pengguna" -#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 -#: core/models.py:1234 core/models.py:1263 core/models.py:1288 -#: core/viewsets.py:842 +#: core/graphene/mutations.py:656 core/models.py:849 core/models.py:862 +#: core/models.py:1281 core/models.py:1310 core/models.py:1335 +#: core/viewsets.py:682 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} tidak ada: {uuid}!" @@ -1018,8 +1018,8 @@ msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - bekerja dengan sangat baik" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 -#: core/models.py:1686 +#: core/graphene/object_types.py:444 core/models.py:672 core/models.py:1144 +#: core/models.py:1744 msgid "attributes" msgstr "Atribut" @@ -1032,11 +1032,11 @@ msgid "groups of attributes" msgstr "Kelompok atribut" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:612 +#: core/graphene/object_types.py:224 core/models.py:326 core/models.py:626 msgid "categories" msgstr "Kategori" -#: core/graphene/object_types.py:124 core/models.py:383 +#: core/graphene/object_types.py:124 core/models.py:397 msgid "brands" msgstr "Merek" @@ -1045,7 +1045,7 @@ msgid "category image url" msgstr "Kategori" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:249 +#: core/models.py:263 msgid "markup percentage" msgstr "Persentase Markup" @@ -1068,7 +1068,7 @@ msgstr "Tag untuk kategori ini" msgid "products in this category" msgstr "Produk dalam kategori ini" -#: core/graphene/object_types.py:351 core/models.py:155 +#: core/graphene/object_types.py:351 core/models.py:169 msgid "vendors" msgstr "Vendor" @@ -1094,7 +1094,7 @@ msgid "represents feedback from a user." msgstr "Merupakan umpan balik dari pengguna." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1110 +#: core/models.py:1138 msgid "notifications" msgstr "Pemberitahuan" @@ -1102,7 +1102,7 @@ msgstr "Pemberitahuan" msgid "download url for this order product if applicable" msgstr "Unduh url untuk produk pesanan ini jika ada" -#: core/graphene/object_types.py:400 core/models.py:1791 +#: core/graphene/object_types.py:400 core/models.py:1860 msgid "feedback" msgstr "Umpan balik" @@ -1110,7 +1110,7 @@ msgstr "Umpan balik" msgid "a list of order products in this order" msgstr "Daftar produk pesanan dalam urutan ini" -#: core/graphene/object_types.py:436 core/models.py:1080 +#: core/graphene/object_types.py:436 core/models.py:1108 msgid "billing address" msgstr "Alamat penagihan" @@ -1138,7 +1138,7 @@ msgstr "Apakah semua produk dalam pesanan digital" msgid "transactions for this order" msgstr "Transaksi untuk pesanan ini" -#: core/graphene/object_types.py:465 core/models.py:1144 +#: core/graphene/object_types.py:465 core/models.py:1172 msgid "orders" msgstr "Pesanan" @@ -1150,15 +1150,15 @@ msgstr "URL gambar" msgid "product's images" msgstr "Gambar produk" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 +#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 msgid "category" msgstr "Kategori" -#: core/graphene/object_types.py:502 core/models.py:1792 +#: core/graphene/object_types.py:502 core/models.py:1861 msgid "feedbacks" msgstr "Umpan balik" -#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 +#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 msgid "brand" msgstr "Merek" @@ -1190,7 +1190,7 @@ msgstr "Jumlah umpan balik" msgid "only available for personal orders" msgstr "Produk hanya tersedia untuk pesanan pribadi" -#: core/graphene/object_types.py:534 core/models.py:536 +#: core/graphene/object_types.py:534 core/models.py:550 msgid "products" msgstr "Produk" @@ -1202,15 +1202,15 @@ msgstr "Kode promosi" msgid "products on sale" msgstr "Produk yang dijual" -#: core/graphene/object_types.py:651 core/models.py:784 +#: core/graphene/object_types.py:651 core/models.py:798 msgid "promotions" msgstr "Promosi" -#: core/graphene/object_types.py:655 core/models.py:154 +#: core/graphene/object_types.py:655 core/models.py:168 msgid "vendor" msgstr "Vendor" -#: core/graphene/object_types.py:656 core/models.py:535 +#: core/graphene/object_types.py:656 core/models.py:549 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1218,11 +1218,11 @@ msgstr "Vendor" msgid "product" msgstr "Produk" -#: core/graphene/object_types.py:667 core/models.py:807 +#: core/graphene/object_types.py:667 core/models.py:821 msgid "wishlisted products" msgstr "Produk yang diinginkan" -#: core/graphene/object_types.py:673 core/models.py:824 +#: core/graphene/object_types.py:673 core/models.py:838 msgid "wishlists" msgstr "Daftar keinginan" @@ -1230,7 +1230,7 @@ msgstr "Daftar keinginan" msgid "tagged products" msgstr "Produk yang ditandai" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 +#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 msgid "product tags" msgstr "Label produk" @@ -1342,7 +1342,7 @@ msgstr "Grup atribut induk" msgid "attribute group's name" msgstr "Nama grup atribut" -#: core/models.py:100 core/models.py:620 +#: core/models.py:100 core/models.py:634 msgid "attribute group" msgstr "Kelompok atribut" @@ -1391,7 +1391,7 @@ msgstr "Nama vendor ini" msgid "vendor name" msgstr "Nama vendor" -#: core/models.py:163 +#: core/models.py:177 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1406,27 +1406,27 @@ msgstr "" " yang diekspor melalui mixin dan menyediakan penyesuaian metadata untuk " "tujuan administratif." -#: core/models.py:175 core/models.py:206 +#: core/models.py:189 core/models.py:220 msgid "internal tag identifier for the product tag" msgstr "Pengidentifikasi tag internal untuk tag produk" -#: core/models.py:176 core/models.py:207 +#: core/models.py:190 core/models.py:221 msgid "tag name" msgstr "Nama tag" -#: core/models.py:180 core/models.py:211 +#: core/models.py:194 core/models.py:225 msgid "user-friendly name for the product tag" msgstr "Nama yang mudah digunakan untuk label produk" -#: core/models.py:181 core/models.py:212 +#: core/models.py:195 core/models.py:226 msgid "tag display name" msgstr "Nama tampilan tag" -#: core/models.py:189 +#: core/models.py:203 msgid "product tag" msgstr "Label produk" -#: core/models.py:195 +#: core/models.py:209 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 " @@ -1437,15 +1437,15 @@ msgstr "" "produk. Kelas ini mencakup atribut untuk pengenal tag internal dan nama " "tampilan yang mudah digunakan." -#: core/models.py:220 +#: core/models.py:234 msgid "category tag" msgstr "tag kategori" -#: core/models.py:221 core/models.py:293 +#: core/models.py:235 core/models.py:307 msgid "category tags" msgstr "tag kategori" -#: core/models.py:226 +#: core/models.py:240 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1467,51 +1467,51 @@ msgstr "" "menentukan nama, deskripsi, dan hierarki kategori, serta menetapkan atribut " "seperti gambar, tag, atau prioritas." -#: core/models.py:240 +#: core/models.py:254 msgid "upload an image representing this category" msgstr "Unggah gambar yang mewakili kategori ini" -#: core/models.py:243 +#: core/models.py:257 msgid "category image" msgstr "Kategori gambar" -#: core/models.py:248 +#: core/models.py:262 msgid "define a markup percentage for products in this category" msgstr "Tentukan persentase markup untuk produk dalam kategori ini" -#: core/models.py:257 +#: core/models.py:271 msgid "parent of this category to form a hierarchical structure" msgstr "Induk dari kategori ini untuk membentuk struktur hirarki" -#: core/models.py:258 +#: core/models.py:272 msgid "parent category" msgstr "Kategori induk" -#: core/models.py:263 +#: core/models.py:277 msgid "category name" msgstr "Nama kategori" -#: core/models.py:264 +#: core/models.py:278 msgid "provide a name for this category" msgstr "Berikan nama untuk kategori ini" -#: core/models.py:271 +#: core/models.py:285 msgid "add a detailed description for this category" msgstr "Tambahkan deskripsi terperinci untuk kategori ini" -#: core/models.py:272 +#: core/models.py:286 msgid "category description" msgstr "Deskripsi kategori" -#: core/models.py:292 +#: core/models.py:306 msgid "tags that help describe or group this category" msgstr "tag yang membantu mendeskripsikan atau mengelompokkan kategori ini" -#: core/models.py:299 core/models.py:375 +#: core/models.py:313 core/models.py:389 msgid "priority" msgstr "Prioritas" -#: core/models.py:318 +#: core/models.py:332 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1524,47 +1524,47 @@ msgstr "" "terkait, siput unik, dan urutan prioritas. Kelas ini memungkinkan pengaturan" " dan representasi data yang terkait dengan merek di dalam aplikasi." -#: core/models.py:328 +#: core/models.py:342 msgid "name of this brand" msgstr "Nama merek ini" -#: core/models.py:329 +#: core/models.py:343 msgid "brand name" msgstr "Nama merek" -#: core/models.py:336 +#: core/models.py:350 msgid "upload a logo representing this brand" msgstr "Unggah logo yang mewakili merek ini" -#: core/models.py:338 +#: core/models.py:352 msgid "brand small image" msgstr "Merek gambar kecil" -#: core/models.py:344 +#: core/models.py:358 msgid "upload a big logo representing this brand" msgstr "Unggah logo besar yang mewakili merek ini" -#: core/models.py:346 +#: core/models.py:360 msgid "brand big image" msgstr "Citra besar merek" -#: core/models.py:351 +#: core/models.py:365 msgid "add a detailed description of the brand" msgstr "Tambahkan deskripsi terperinci tentang merek" -#: core/models.py:352 +#: core/models.py:366 msgid "brand description" msgstr "Deskripsi merek" -#: core/models.py:357 +#: core/models.py:371 msgid "optional categories that this brand is associated with" msgstr "Kategori opsional yang dikaitkan dengan merek ini" -#: core/models.py:358 +#: core/models.py:372 msgid "associated categories" msgstr "Kategori" -#: core/models.py:388 +#: core/models.py:402 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1580,68 +1580,68 @@ msgstr "" "untuk memungkinkan pelacakan dan evaluasi produk yang tersedia dari berbagai" " vendor." -#: core/models.py:400 +#: core/models.py:414 msgid "the vendor supplying this product stock" msgstr "Vendor yang memasok stok produk ini" -#: core/models.py:401 +#: core/models.py:415 msgid "associated vendor" msgstr "Vendor terkait" -#: core/models.py:405 +#: core/models.py:419 msgid "final price to the customer after markups" msgstr "Harga akhir kepada pelanggan setelah markup" -#: core/models.py:406 +#: core/models.py:420 msgid "selling price" msgstr "Harga jual" -#: core/models.py:411 +#: core/models.py:425 msgid "the product associated with this stock entry" msgstr "Produk yang terkait dengan entri saham ini" -#: core/models.py:412 core/models.py:683 core/models.py:730 -#: core/models.py:1583 +#: core/models.py:426 core/models.py:697 core/models.py:744 +#: core/models.py:1641 msgid "associated product" msgstr "Produk terkait" -#: core/models.py:419 +#: core/models.py:433 msgid "the price paid to the vendor for this product" msgstr "Harga yang dibayarkan kepada vendor untuk produk ini" -#: core/models.py:420 +#: core/models.py:434 msgid "vendor purchase price" msgstr "Harga pembelian vendor" -#: core/models.py:424 +#: core/models.py:438 msgid "available quantity of the product in stock" msgstr "Jumlah produk yang tersedia dalam stok" -#: core/models.py:425 +#: core/models.py:439 msgid "quantity in stock" msgstr "Jumlah dalam stok" -#: core/models.py:429 +#: core/models.py:443 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU yang ditetapkan vendor untuk mengidentifikasi produk" -#: core/models.py:430 +#: core/models.py:444 msgid "vendor sku" msgstr "SKU Vendor" -#: core/models.py:436 +#: core/models.py:450 msgid "digital file associated with this stock if applicable" msgstr "File digital yang terkait dengan saham ini jika ada" -#: core/models.py:437 +#: core/models.py:451 msgid "digital file" msgstr "File digital" -#: core/models.py:446 +#: core/models.py:460 msgid "stock entries" msgstr "Entri saham" -#: core/models.py:451 +#: core/models.py:465 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1662,55 +1662,55 @@ msgstr "" "ini digunakan untuk mendefinisikan dan memanipulasi data produk dan " "informasi terkait di dalam aplikasi." -#: core/models.py:464 +#: core/models.py:478 msgid "category this product belongs to" msgstr "Kategori produk ini termasuk dalam" -#: core/models.py:473 +#: core/models.py:487 msgid "optionally associate this product with a brand" msgstr "Secara opsional mengaitkan produk ini dengan merek" -#: core/models.py:479 +#: core/models.py:493 msgid "tags that help describe or group this product" msgstr "Tag yang membantu mendeskripsikan atau mengelompokkan produk ini" -#: core/models.py:484 +#: core/models.py:498 msgid "indicates whether this product is digitally delivered" msgstr "Menunjukkan apakah produk ini dikirimkan secara digital" -#: core/models.py:485 +#: core/models.py:499 msgid "is product digital" msgstr "Apakah produk digital" -#: core/models.py:491 +#: core/models.py:505 msgid "provide a clear identifying name for the product" msgstr "Berikan nama pengenal yang jelas untuk produk" -#: core/models.py:492 +#: core/models.py:506 msgid "product name" msgstr "Nama produk" -#: core/models.py:497 core/models.py:772 +#: core/models.py:511 core/models.py:786 msgid "add a detailed description of the product" msgstr "Menambahkan deskripsi rinci tentang produk" -#: core/models.py:498 +#: core/models.py:512 msgid "product description" msgstr "Deskripsi produk" -#: core/models.py:505 +#: core/models.py:519 msgid "part number for this product" msgstr "Nomor komponen untuk produk ini" -#: core/models.py:506 +#: core/models.py:520 msgid "part number" msgstr "Nomor bagian" -#: core/models.py:525 +#: core/models.py:539 msgid "stock keeping unit for this product" msgstr "Unit Penyimpanan Stok untuk produk ini" -#: core/models.py:599 +#: core/models.py:613 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 " @@ -1726,69 +1726,69 @@ msgstr "" "termasuk string, integer, float, boolean, array, dan objek. Hal ini " "memungkinkan penataan data yang dinamis dan fleksibel." -#: core/models.py:611 +#: core/models.py:625 msgid "category of this attribute" msgstr "Kategori atribut ini" -#: core/models.py:619 +#: core/models.py:633 msgid "group of this attribute" msgstr "Kelompok atribut ini" -#: core/models.py:625 +#: core/models.py:639 msgid "string" msgstr "String" -#: core/models.py:626 +#: core/models.py:640 msgid "integer" msgstr "Bilangan bulat" -#: core/models.py:627 +#: core/models.py:641 msgid "float" msgstr "Mengapung" -#: core/models.py:628 +#: core/models.py:642 msgid "boolean" msgstr "Boolean" -#: core/models.py:629 +#: core/models.py:643 msgid "array" msgstr "Array" -#: core/models.py:630 +#: core/models.py:644 msgid "object" msgstr "Objek" -#: core/models.py:632 +#: core/models.py:646 msgid "type of the attribute's value" msgstr "Jenis nilai atribut" -#: core/models.py:633 +#: core/models.py:647 msgid "value type" msgstr "Jenis nilai" -#: core/models.py:638 +#: core/models.py:652 msgid "name of this attribute" msgstr "Nama atribut ini" -#: core/models.py:639 +#: core/models.py:653 msgid "attribute's name" msgstr "Nama atribut" -#: core/models.py:645 +#: core/models.py:659 msgid "is filterable" msgstr "dapat disaring" -#: core/models.py:646 +#: core/models.py:660 msgid "designates whether this attribute can be used for filtering or not" msgstr "" "Atribut dan nilai mana yang dapat digunakan untuk memfilter kategori ini." -#: core/models.py:657 core/models.py:675 +#: core/models.py:671 core/models.py:689 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Atribut" -#: core/models.py:663 +#: core/models.py:677 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" @@ -1798,19 +1798,19 @@ msgstr "" "menghubungkan 'atribut' dengan 'nilai' yang unik, memungkinkan pengaturan " "yang lebih baik dan representasi karakteristik produk yang dinamis." -#: core/models.py:674 +#: core/models.py:688 msgid "attribute of this value" msgstr "Atribut dari nilai ini" -#: core/models.py:682 +#: core/models.py:696 msgid "the specific product associated with this attribute's value" msgstr "Produk spesifik yang terkait dengan nilai atribut ini" -#: core/models.py:688 +#: core/models.py:702 msgid "the specific value for this attribute" msgstr "Nilai spesifik untuk atribut ini" -#: core/models.py:701 +#: core/models.py:715 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -1824,39 +1824,39 @@ msgstr "" "menentukan urutan tampilannya. Kelas ini juga mencakup fitur aksesibilitas " "dengan teks alternatif untuk gambar." -#: core/models.py:712 +#: core/models.py:726 msgid "provide alternative text for the image for accessibility" msgstr "Menyediakan teks alternatif untuk gambar agar mudah diakses" -#: core/models.py:713 +#: core/models.py:727 msgid "image alt text" msgstr "Teks alt gambar" -#: core/models.py:716 +#: core/models.py:730 msgid "upload the image file for this product" msgstr "Unggah file gambar untuk produk ini" -#: core/models.py:717 core/models.py:742 +#: core/models.py:731 core/models.py:756 msgid "product image" msgstr "Gambar produk" -#: core/models.py:723 +#: core/models.py:737 msgid "determines the order in which images are displayed" msgstr "Menentukan urutan gambar yang ditampilkan" -#: core/models.py:724 +#: core/models.py:738 msgid "display priority" msgstr "Prioritas tampilan" -#: core/models.py:729 +#: core/models.py:743 msgid "the product that this image represents" msgstr "Produk yang diwakili oleh gambar ini" -#: core/models.py:743 +#: core/models.py:757 msgid "product images" msgstr "Gambar produk" -#: core/models.py:748 +#: core/models.py:762 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1872,39 +1872,39 @@ msgstr "" "produk yang berlaku. Kelas ini terintegrasi dengan katalog produk untuk " "menentukan item yang terpengaruh dalam kampanye." -#: core/models.py:760 +#: core/models.py:774 msgid "percentage discount for the selected products" msgstr "Persentase diskon untuk produk yang dipilih" -#: core/models.py:761 +#: core/models.py:775 msgid "discount percentage" msgstr "Persentase diskon" -#: core/models.py:766 +#: core/models.py:780 msgid "provide a unique name for this promotion" msgstr "Berikan nama unik untuk promosi ini" -#: core/models.py:767 +#: core/models.py:781 msgid "promotion name" msgstr "Nama promosi" -#: core/models.py:773 +#: core/models.py:787 msgid "promotion description" msgstr "Deskripsi promosi" -#: core/models.py:778 +#: core/models.py:792 msgid "select which products are included in this promotion" msgstr "Pilih produk mana yang termasuk dalam promosi ini" -#: core/models.py:779 +#: core/models.py:793 msgid "included products" msgstr "Produk yang disertakan" -#: core/models.py:783 +#: core/models.py:797 msgid "promotion" msgstr "Promosi" -#: core/models.py:794 +#: core/models.py:808 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1917,23 +1917,23 @@ msgstr "" "serta mendukung operasi untuk menambah dan menghapus beberapa produk " "sekaligus." -#: core/models.py:806 +#: core/models.py:820 msgid "products that the user has marked as wanted" msgstr "Produk yang telah ditandai pengguna sebagai yang diinginkan" -#: core/models.py:814 +#: core/models.py:828 msgid "user who owns this wishlist" msgstr "Pengguna yang memiliki daftar keinginan ini" -#: core/models.py:815 +#: core/models.py:829 msgid "wishlist owner" msgstr "Pemilik Wishlist" -#: core/models.py:823 +#: core/models.py:837 msgid "wishlist" msgstr "Daftar keinginan" -#: core/models.py:865 +#: core/models.py:879 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1949,19 +1949,19 @@ msgstr "" "untuk file dokumenter. Kelas ini memperluas fungsionalitas dari mixin " "tertentu dan menyediakan fitur khusus tambahan." -#: core/models.py:878 +#: core/models.py:892 msgid "documentary" msgstr "Dokumenter" -#: core/models.py:879 +#: core/models.py:893 msgid "documentaries" msgstr "Dokumenter" -#: core/models.py:889 +#: core/models.py:903 msgid "unresolved" msgstr "Belum terselesaikan" -#: core/models.py:894 +#: core/models.py:908 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1982,59 +1982,59 @@ msgstr "" "memungkinkan untuk mengasosiasikan alamat dengan pengguna, sehingga " "memudahkan penanganan data yang dipersonalisasi." -#: core/models.py:909 +#: core/models.py:923 msgid "address line for the customer" msgstr "Baris alamat untuk pelanggan" -#: core/models.py:910 +#: core/models.py:924 msgid "address line" msgstr "Baris alamat" -#: core/models.py:912 +#: core/models.py:926 msgid "street" msgstr "Jalan" -#: core/models.py:913 +#: core/models.py:927 msgid "district" msgstr "Distrik" -#: core/models.py:914 +#: core/models.py:928 msgid "city" msgstr "Kota" -#: core/models.py:915 +#: core/models.py:929 msgid "region" msgstr "Wilayah" -#: core/models.py:916 +#: core/models.py:930 msgid "postal code" msgstr "Kode pos" -#: core/models.py:917 +#: core/models.py:931 msgid "country" msgstr "Negara" -#: core/models.py:924 +#: core/models.py:938 msgid "geolocation point: (longitude, latitude)" msgstr "Titik Geolokasi (Bujur, Lintang)" -#: core/models.py:927 +#: core/models.py:941 msgid "full JSON response from geocoder for this address" msgstr "Tanggapan JSON lengkap dari geocoder untuk alamat ini" -#: core/models.py:932 +#: core/models.py:946 msgid "stored JSON response from the geocoding service" msgstr "Respons JSON yang tersimpan dari layanan geocoding" -#: core/models.py:940 +#: core/models.py:954 msgid "address" msgstr "Alamat" -#: core/models.py:941 +#: core/models.py:955 msgid "addresses" msgstr "Alamat" -#: core/models.py:953 +#: core/models.py:967 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2050,72 +2050,72 @@ msgstr "" "penggunaannya. Ini termasuk fungsionalitas untuk memvalidasi dan menerapkan " "kode promo ke pesanan sambil memastikan batasan terpenuhi." -#: core/models.py:967 +#: core/models.py:981 msgid "unique code used by a user to redeem a discount" msgstr "Kode unik yang digunakan oleh pengguna untuk menukarkan diskon" -#: core/models.py:968 +#: core/models.py:982 msgid "promo code identifier" msgstr "Pengenal kode promo" -#: core/models.py:975 +#: core/models.py:989 msgid "fixed discount amount applied if percent is not used" msgstr "Jumlah diskon tetap berlaku jika persen tidak digunakan" -#: core/models.py:976 +#: core/models.py:990 msgid "fixed discount amount" msgstr "Jumlah diskon tetap" -#: core/models.py:982 +#: core/models.py:996 msgid "percentage discount applied if fixed amount is not used" msgstr "Persentase diskon diterapkan jika jumlah tetap tidak digunakan" -#: core/models.py:983 +#: core/models.py:997 msgid "percentage discount" msgstr "Persentase diskon" -#: core/models.py:988 +#: core/models.py:1002 msgid "timestamp when the promocode expires" msgstr "Cap waktu saat kode promo berakhir" -#: core/models.py:989 +#: core/models.py:1003 msgid "end validity time" msgstr "Akhiri waktu validitas" -#: core/models.py:994 +#: core/models.py:1008 msgid "timestamp from which this promocode is valid" msgstr "Stempel waktu dari mana kode promo ini valid" -#: core/models.py:995 +#: core/models.py:1009 msgid "start validity time" msgstr "Mulai waktu validitas" -#: core/models.py:1000 +#: core/models.py:1014 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Stempel waktu ketika promocode digunakan, kosongkan jika belum digunakan" -#: core/models.py:1001 +#: core/models.py:1015 msgid "usage timestamp" msgstr "Cap waktu penggunaan" -#: core/models.py:1006 +#: core/models.py:1020 msgid "user assigned to this promocode if applicable" msgstr "Pengguna yang ditugaskan ke kode promo ini jika berlaku" -#: core/models.py:1007 +#: core/models.py:1021 msgid "assigned user" msgstr "Pengguna yang ditugaskan" -#: core/models.py:1014 +#: core/models.py:1028 msgid "promo code" msgstr "Kode promo" -#: core/models.py:1015 +#: core/models.py:1029 msgid "promo codes" msgstr "Kode promo" -#: core/models.py:1022 +#: core/models.py:1044 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2123,16 +2123,16 @@ msgstr "" "Hanya satu jenis diskon yang harus ditentukan (jumlah atau persen), tetapi " "tidak boleh keduanya atau tidak sama sekali." -#: core/models.py:1037 +#: core/models.py:1065 msgid "promocode already used" msgstr "Promocode telah digunakan" -#: core/models.py:1053 +#: core/models.py:1081 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Jenis diskon tidak valid untuk kode promo {self.uuid}!" -#: core/models.py:1062 +#: core/models.py:1090 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 " @@ -2149,144 +2149,144 @@ msgstr "" "Fungsionalitas yang sama juga mendukung pengelolaan produk dalam siklus " "hidup pesanan." -#: core/models.py:1079 +#: core/models.py:1107 msgid "the billing address used for this order" msgstr "Alamat penagihan yang digunakan untuk pesanan ini" -#: core/models.py:1087 +#: core/models.py:1115 msgid "optional promo code applied to this order" msgstr "Kode promo opsional berlaku untuk pesanan ini" -#: core/models.py:1088 +#: core/models.py:1116 msgid "applied promo code" msgstr "Kode promo yang diterapkan" -#: core/models.py:1096 +#: core/models.py:1124 msgid "the shipping address used for this order" msgstr "Alamat pengiriman yang digunakan untuk pesanan ini" -#: core/models.py:1097 +#: core/models.py:1125 msgid "shipping address" msgstr "Alamat pengiriman" -#: core/models.py:1103 +#: core/models.py:1131 msgid "current status of the order in its lifecycle" msgstr "Status pesanan saat ini dalam siklus hidupnya" -#: core/models.py:1104 +#: core/models.py:1132 msgid "order status" msgstr "Status pesanan" -#: core/models.py:1109 core/models.py:1560 +#: core/models.py:1137 core/models.py:1618 msgid "json structure of notifications to display to users" msgstr "" "Struktur JSON dari notifikasi untuk ditampilkan kepada pengguna, di UI admin" " digunakan table-view" -#: core/models.py:1115 +#: core/models.py:1143 msgid "json representation of order attributes for this order" msgstr "Representasi JSON dari atribut pesanan untuk pesanan ini" -#: core/models.py:1121 +#: core/models.py:1149 msgid "the user who placed the order" msgstr "Pengguna yang melakukan pemesanan" -#: core/models.py:1122 +#: core/models.py:1150 msgid "user" msgstr "Pengguna" -#: core/models.py:1128 +#: core/models.py:1156 msgid "the timestamp when the order was finalized" msgstr "Stempel waktu saat pesanan diselesaikan" -#: core/models.py:1129 +#: core/models.py:1157 msgid "buy time" msgstr "Beli waktu" -#: core/models.py:1136 +#: core/models.py:1164 msgid "a human-readable identifier for the order" msgstr "Pengenal yang dapat dibaca manusia untuk pesanan" -#: core/models.py:1137 +#: core/models.py:1165 msgid "human readable id" msgstr "ID yang dapat dibaca manusia" -#: core/models.py:1143 +#: core/models.py:1171 msgid "order" msgstr "Pesan" -#: core/models.py:1168 +#: core/models.py:1209 msgid "a user must have only one pending order at a time" msgstr "" "Seorang pengguna hanya boleh memiliki satu pending order dalam satu waktu!" -#: core/models.py:1202 +#: core/models.py:1249 msgid "you cannot add products to an order that is not a pending one" msgstr "" "Anda tidak dapat menambahkan produk ke pesanan yang bukan merupakan pesanan " "yang tertunda" -#: core/models.py:1207 +#: core/models.py:1254 msgid "you cannot add inactive products to order" msgstr "Anda tidak dapat menambahkan produk yang tidak aktif ke dalam pesanan" -#: core/models.py:1224 +#: core/models.py:1271 msgid "you cannot add more products than available in stock" msgstr "" "Anda tidak dapat menambahkan lebih banyak produk daripada yang tersedia " "dalam stok" -#: core/models.py:1246 core/models.py:1271 core/models.py:1279 +#: core/models.py:1293 core/models.py:1318 core/models.py:1326 msgid "you cannot remove products from an order that is not a pending one" msgstr "" "Anda tidak dapat menghapus produk dari pesanan yang bukan merupakan pesanan " "yang tertunda" -#: core/models.py:1267 +#: core/models.py:1314 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} tidak ada dengan kueri <{query}>!" -#: core/models.py:1299 +#: core/models.py:1346 msgid "promocode does not exist" msgstr "Kode promosi tidak ada" -#: core/models.py:1305 +#: core/models.py:1352 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:1324 +#: core/models.py:1371 msgid "address does not exist" msgstr "Alamat tidak ada" -#: core/models.py:1345 core/models.py:1414 +#: core/models.py:1392 core/models.py:1461 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:1348 core/models.py:1410 +#: core/models.py:1395 core/models.py:1457 msgid "invalid force value" msgstr "Nilai gaya tidak valid" -#: core/models.py:1354 core/models.py:1417 +#: core/models.py:1401 core/models.py:1464 msgid "you cannot purchase an empty order!" msgstr "Anda tidak dapat membeli pesanan kosong!" -#: core/models.py:1373 +#: core/models.py:1420 msgid "you cannot buy an order without a user" msgstr "Anda tidak dapat membeli pesanan tanpa pengguna!" -#: core/models.py:1387 +#: core/models.py:1434 msgid "a user without a balance cannot buy with balance" msgstr "Pengguna tanpa saldo tidak dapat membeli dengan saldo!" -#: core/models.py:1392 +#: core/models.py:1439 msgid "insufficient funds to complete the order" msgstr "Dana tidak mencukupi untuk menyelesaikan pesanan" -#: core/models.py:1426 +#: core/models.py:1473 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2294,7 +2294,7 @@ msgstr "" "Anda tidak dapat membeli tanpa registrasi, berikan informasi berikut: nama " "pelanggan, email pelanggan, nomor telepon pelanggan" -#: core/models.py:1435 +#: core/models.py:1482 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2302,7 +2302,7 @@ msgstr "" "Metode pembayaran tidak valid: {payment_method} dari " "{available_payment_methods}!" -#: core/models.py:1533 +#: core/models.py:1591 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2324,110 +2324,110 @@ msgstr "" "URL unduhan untuk produk digital. Model ini terintegrasi dengan model " "Pesanan dan Produk dan menyimpan referensi ke keduanya." -#: core/models.py:1548 +#: core/models.py:1606 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:1549 +#: core/models.py:1607 msgid "purchase price at order time" msgstr "Harga pembelian pada saat pemesanan" -#: core/models.py:1554 +#: core/models.py:1612 msgid "internal comments for admins about this ordered product" msgstr "Komentar internal untuk admin tentang produk yang dipesan ini" -#: core/models.py:1555 +#: core/models.py:1613 msgid "internal comments" msgstr "Komentar internal" -#: core/models.py:1561 +#: core/models.py:1619 msgid "user notifications" msgstr "Pemberitahuan pengguna" -#: core/models.py:1566 +#: core/models.py:1624 msgid "json representation of this item's attributes" msgstr "Representasi JSON dari atribut item ini" -#: core/models.py:1567 +#: core/models.py:1625 msgid "ordered product attributes" msgstr "Atribut produk yang dipesan" -#: core/models.py:1572 +#: core/models.py:1630 msgid "reference to the parent order that contains this product" msgstr "Referensi ke pesanan induk yang berisi produk ini" -#: core/models.py:1573 +#: core/models.py:1631 msgid "parent order" msgstr "Urutan induk" -#: core/models.py:1582 +#: core/models.py:1640 msgid "the specific product associated with this order line" msgstr "Produk spesifik yang terkait dengan baris pesanan ini" -#: core/models.py:1589 +#: core/models.py:1647 msgid "quantity of this specific product in the order" msgstr "Jumlah produk spesifik ini dalam pesanan" -#: core/models.py:1590 +#: core/models.py:1648 msgid "product quantity" msgstr "Kuantitas produk" -#: core/models.py:1597 +#: core/models.py:1655 msgid "current status of this product in the order" msgstr "Status saat ini dari produk ini dalam pesanan" -#: core/models.py:1598 +#: core/models.py:1656 msgid "product line status" msgstr "Status lini produk" -#: core/models.py:1661 +#: core/models.py:1719 msgid "order product must have an order" msgstr "Pesananproduk harus memiliki pesanan terkait!" -#: core/models.py:1663 +#: core/models.py:1721 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Tindakan yang salah ditentukan untuk umpan balik: {action}!" -#: core/models.py:1677 +#: core/models.py:1735 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:1683 +#: core/models.py:1741 msgid "name" msgstr "Nama" -#: core/models.py:1684 +#: core/models.py:1742 msgid "URL of the integration" msgstr "URL integrasi" -#: core/models.py:1685 +#: core/models.py:1743 msgid "authentication credentials" msgstr "Kredensial otentikasi" -#: core/models.py:1699 +#: core/models.py:1765 msgid "you can only have one default CRM provider" msgstr "Anda hanya dapat memiliki satu penyedia CRM default" -#: core/models.py:1703 +#: core/models.py:1775 msgid "CRM" msgstr "CRM" -#: core/models.py:1704 +#: core/models.py:1776 msgid "CRMs" msgstr "CRM" -#: core/models.py:1716 +#: core/models.py:1788 msgid "order CRM link" msgstr "Tautan CRM pesanan" -#: core/models.py:1717 +#: core/models.py:1789 msgid "orders CRM links" msgstr "Tautan CRM Pesanan" -#: core/models.py:1722 +#: core/models.py:1794 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2444,20 +2444,15 @@ msgstr "" "untuk menghasilkan URL untuk mengunduh aset ketika pesanan terkait dalam " "status selesai." -#: core/models.py:1736 +#: core/models.py:1808 msgid "download" msgstr "Unduh" -#: core/models.py:1737 +#: core/models.py:1809 msgid "downloads" msgstr "Unduhan" -#: core/models.py:1745 -msgid "you can not download a digital asset for a non-finished order" -msgstr "" -"Anda tidak dapat mengunduh aset digital untuk pesanan yang belum selesai" - -#: core/models.py:1754 +#: core/models.py:1823 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2472,29 +2467,29 @@ msgstr "" "ditetapkan pengguna. Kelas ini menggunakan bidang basis data untuk " "memodelkan dan mengelola data umpan balik secara efektif." -#: core/models.py:1766 +#: core/models.py:1835 msgid "user-provided comments about their experience with the product" msgstr "" "Komentar yang diberikan pengguna tentang pengalaman mereka dengan produk" -#: core/models.py:1767 +#: core/models.py:1836 msgid "feedback comments" msgstr "Komentar umpan balik" -#: core/models.py:1774 +#: core/models.py:1843 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:1775 +#: core/models.py:1844 msgid "related order product" msgstr "Produk pesanan terkait" -#: core/models.py:1780 +#: core/models.py:1849 msgid "user-assigned rating for the product" msgstr "Peringkat yang ditetapkan pengguna untuk produk" -#: core/models.py:1781 +#: core/models.py:1850 msgid "product rating" msgstr "Peringkat produk" @@ -2700,11 +2695,11 @@ msgstr "" "Semua hak cipta\n" " dilindungi undang-undang" -#: core/utils/caching.py:41 +#: core/utils/caching.py:48 msgid "both data and timeout are required" msgstr "Data dan batas waktu diperlukan" -#: core/utils/caching.py:43 +#: core/utils/caching.py:50 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "Nilai batas waktu tidak valid, harus antara 0 dan 216000 detik" @@ -2736,25 +2731,340 @@ msgstr "Anda tidak memiliki izin untuk melakukan tindakan ini." msgid "NOMINATIM_URL must be configured." msgstr "Parameter NOMINATIM_URL harus dikonfigurasi!" -#: core/validators.py:16 +#: core/validators.py:14 #, 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/validators.py:22 -msgid "invalid phone number format" -msgstr "Format nomor telepon tidak valid" +#: core/views.py:72 +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 "" +"Menangani permintaan indeks peta situs dan mengembalikan respons XML. " +"Memastikan respons menyertakan header jenis konten yang sesuai untuk XML." -#: core/views.py:489 +#: core/views.py:87 +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 "" +"Menangani respons tampilan detail untuk peta situs. Fungsi ini memproses " +"permintaan, mengambil respons detail peta situs yang sesuai, dan menetapkan " +"header Jenis Konten untuk XML." + +#: core/views.py:116 +msgid "" +"Returns a list of supported languages and their corresponding information." +msgstr "Mengembalikan daftar bahasa yang didukung dan informasi terkait." + +#: core/views.py:148 +msgid "Returns the parameters of the website as a JSON object." +msgstr "Mengembalikan parameter situs web sebagai objek JSON." + +#: core/views.py:167 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +msgstr "" +"Menangani operasi cache seperti membaca dan mengatur data cache dengan kunci" +" dan batas waktu tertentu." + +#: core/views.py:194 +msgid "Handles `contact us` form submissions." +msgstr "Menangani pengiriman formulir `hubungi kami`." + +#: core/views.py:215 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "" +"Menangani permintaan untuk memproses dan memvalidasi URL dari permintaan " +"POST yang masuk." + +#: core/views.py:255 +msgid "Handles global search queries." +msgstr "Menangani kueri penelusuran global." + +#: core/views.py:270 +msgid "Handles the logic of buying as a business without registration." +msgstr "Menangani logika pembelian sebagai bisnis tanpa registrasi." + +#: core/views.py:312 msgid "you can only download the digital asset once" msgstr "Anda hanya dapat mengunduh aset digital sekali saja" -#: core/views.py:547 +#: core/views.py:315 +msgid "the order must be paid before downloading the digital asset" +msgstr "pesanan harus dibayar sebelum mengunduh aset digital" + +#: core/views.py:353 +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." +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:365 msgid "favicon not found" msgstr "favicon tidak ditemukan" -#: core/viewsets.py:1357 +#: core/views.py:370 +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." +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:382 +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 "" +"Mengalihkan permintaan ke halaman indeks admin. Fungsi ini menangani " +"permintaan HTTP yang masuk dan mengalihkannya ke halaman indeks antarmuka " +"admin Django. Fungsi ini menggunakan fungsi `redirect` Django untuk " +"menangani pengalihan HTTP." + +#: core/viewsets.py:128 +msgid "" +"Defines a viewset for managing Evibes-related operations. The EvibesViewSet " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" +"Mendefinisikan sebuah viewset untuk mengelola operasi terkait Evibes. Kelas " +"EvibesViewSet diwarisi dari ModelViewSet dan menyediakan fungsionalitas " +"untuk menangani tindakan dan operasi pada entitas Evibes. Ini termasuk " +"dukungan untuk kelas serializer dinamis berdasarkan tindakan saat ini, izin " +"yang dapat disesuaikan, dan format rendering." + +#: core/viewsets.py:147 +msgid "" +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." +msgstr "" +"Mewakili sebuah viewset untuk mengelola objek AttributeGroup. Menangani " +"operasi yang terkait dengan AttributeGroup, termasuk pemfilteran, " +"serialisasi, dan pengambilan data. Kelas ini merupakan bagian dari lapisan " +"API aplikasi dan menyediakan cara standar untuk memproses permintaan dan " +"respons untuk data AttributeGroup." + +#: core/viewsets.py:166 +msgid "" +"Handles operations related to Attribute objects within the application. " +"Provides a set of API endpoints to interact with Attribute data. This class " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"Menangani operasi yang terkait dengan objek Atribut di dalam aplikasi. " +"Menyediakan sekumpulan titik akhir API untuk berinteraksi dengan data " +"Atribut. Kelas ini mengelola kueri, pemfilteran, dan serialisasi objek " +"Atribut, yang memungkinkan kontrol dinamis atas data yang dikembalikan, " +"seperti pemfilteran berdasarkan bidang tertentu atau mengambil informasi " +"yang terperinci versus yang disederhanakan tergantung pada permintaan." + +#: core/viewsets.py:185 +msgid "" +"A viewset for managing AttributeValue objects. This viewset provides " +"functionality for listing, retrieving, creating, updating, and deleting " +"AttributeValue objects. It integrates with Django REST Framework's viewset " +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." +msgstr "" +"Sebuah viewset untuk mengelola objek AttributeValue. Viewset ini menyediakan" +" fungsionalitas untuk mendaftarkan, mengambil, membuat, memperbarui, dan " +"menghapus objek AttributeValue. Ini terintegrasi dengan mekanisme viewset " +"Django REST Framework dan menggunakan serializer yang sesuai untuk tindakan " +"yang berbeda. Kemampuan pemfilteran disediakan melalui DjangoFilterBackend." + +#: core/viewsets.py:204 +msgid "" +"Manages views for Category-related operations. The CategoryViewSet class is " +"responsible for handling operations related to the Category model in the " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" +"Mengelola tampilan untuk operasi terkait Kategori. Kelas CategoryViewSet " +"bertanggung jawab untuk menangani operasi yang terkait dengan model Kategori" +" dalam sistem. Kelas ini mendukung pengambilan, pemfilteran, dan serialisasi" +" data kategori. ViewSet juga memberlakukan izin untuk memastikan bahwa hanya" +" pengguna yang memiliki izin yang dapat mengakses data tertentu." + +#: core/viewsets.py:315 +msgid "" +"Represents a viewset for managing Brand instances. This class provides " +"functionality for querying, filtering, and serializing Brand objects. It " +"uses Django's ViewSet framework to simplify the implementation of API " +"endpoints for Brand objects." +msgstr "" +"Mewakili sebuah viewset untuk mengelola instance Brand. Kelas ini " +"menyediakan fungsionalitas untuk melakukan kueri, penyaringan, dan " +"serialisasi objek Brand. Kelas ini menggunakan kerangka kerja ViewSet Django" +" untuk menyederhanakan implementasi titik akhir API untuk objek Brand." + +#: core/viewsets.py:427 +msgid "" +"Manages operations related to the `Product` model in the system. This class " +"provides a viewset for managing products, including their filtering, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" +"Mengelola operasi yang terkait dengan model `Product` dalam sistem. Kelas " +"ini menyediakan sebuah viewset untuk mengelola produk, termasuk pemfilteran," +" serialisasi, dan operasi pada instance tertentu. Kelas ini diperluas dari " +"`EvibesViewSet` untuk menggunakan fungsionalitas umum dan terintegrasi " +"dengan kerangka kerja Django REST untuk operasi RESTful API. Termasuk metode" +" untuk mengambil detail produk, menerapkan izin, dan mengakses umpan balik " +"terkait produk." + +#: core/viewsets.py:547 +msgid "" +"Represents a viewset for managing Vendor objects. This viewset allows " +"fetching, filtering, and serializing Vendor data. It defines the queryset, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" +"Merupakan kumpulan tampilan untuk mengelola objek Vendor. Viewset ini " +"memungkinkan pengambilan, pemfilteran, dan serialisasi data Vendor. Ini " +"mendefinisikan queryset, konfigurasi filter, dan kelas serializer yang " +"digunakan untuk menangani tindakan yang berbeda. Tujuan dari kelas ini " +"adalah untuk menyediakan akses yang efisien ke sumber daya yang berhubungan " +"dengan Vendor melalui kerangka kerja Django REST." + +#: core/viewsets.py:567 +msgid "" +"Representation of a view set handling Feedback objects. This class manages " +"operations related to Feedback objects, including listing, filtering, and " +"retrieving details. The purpose of this view set is to provide different " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"use of Django's filtering system for querying data." +msgstr "" +"Representasi set tampilan yang menangani objek Umpan Balik. Kelas ini " +"mengelola operasi yang terkait dengan objek Umpan Balik, termasuk " +"mendaftarkan, memfilter, dan mengambil detail. Tujuan dari set tampilan ini " +"adalah untuk menyediakan serializer yang berbeda untuk tindakan yang berbeda" +" dan mengimplementasikan penanganan berbasis izin untuk objek Umpan Balik " +"yang dapat diakses. Kelas ini memperluas `EvibesViewSet` dasar dan " +"menggunakan sistem penyaringan Django untuk meminta data." + +#: core/viewsets.py:593 +msgid "" +"ViewSet for managing orders and related operations. This class provides " +"functionality to retrieve, modify, and manage order objects. It includes " +"various endpoints for handling order operations such as adding or removing " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " +"enforces permissions accordingly while interacting with order data." +msgstr "" +"ViewSet untuk mengelola pesanan dan operasi terkait. Kelas ini menyediakan " +"fungsionalitas untuk mengambil, memodifikasi, dan mengelola objek pesanan. " +"Kelas ini mencakup berbagai titik akhir untuk menangani operasi pesanan " +"seperti menambah atau menghapus produk, melakukan pembelian untuk pengguna " +"yang terdaftar maupun yang tidak terdaftar, dan mengambil pesanan yang " +"tertunda dari pengguna yang diautentikasi saat ini. ViewSet menggunakan " +"beberapa serializer berdasarkan tindakan spesifik yang dilakukan dan " +"memberlakukan izin yang sesuai saat berinteraksi dengan data pesanan." + +#: core/viewsets.py:782 +msgid "" +"Provides a viewset for managing OrderProduct entities. This viewset enables " +"CRUD operations and custom actions specific to the OrderProduct model. It " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " +"feedback on OrderProduct instances" +msgstr "" +"Menyediakan viewset untuk mengelola entitas OrderProduct. Viewset ini " +"memungkinkan operasi CRUD dan tindakan khusus yang spesifik untuk model " +"OrderProduct. Ini termasuk pemfilteran, pemeriksaan izin, dan pengalihan " +"serializer berdasarkan tindakan yang diminta. Selain itu, ini menyediakan " +"tindakan terperinci untuk menangani umpan balik pada instance OrderProduct" + +#: core/viewsets.py:833 +msgid "Manages operations related to Product images in the application. " +msgstr "Mengelola operasi yang terkait dengan gambar Produk dalam aplikasi." + +#: core/viewsets.py:845 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +msgstr "" +"Mengelola pengambilan dan penanganan contoh PromoCode melalui berbagai " +"tindakan API." + +#: core/viewsets.py:866 +msgid "Represents a view set for managing promotions. " +msgstr "Merupakan set tampilan untuk mengelola promosi." + +#: core/viewsets.py:878 +msgid "Handles operations related to Stock data in the system." +msgstr "Menangani operasi yang terkait dengan data Stok di dalam sistem." + +#: core/viewsets.py:892 +msgid "" +"ViewSet for managing Wishlist operations. The WishlistViewSet provides " +"endpoints for interacting with a user's wish list, allowing for the " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " +"actions for wishlist products. Permission checks are integrated to ensure " +"that users can only manage their own wishlists unless explicit permissions " +"are granted." +msgstr "" +"ViewSet untuk mengelola operasi Wishlist. WishlistViewSet menyediakan titik " +"akhir untuk berinteraksi dengan daftar keinginan pengguna, yang memungkinkan" +" pengambilan, modifikasi, dan penyesuaian produk dalam daftar keinginan. " +"ViewSet ini memfasilitasi fungsionalitas seperti menambahkan, menghapus, dan" +" tindakan massal untuk produk daftar keinginan. Pemeriksaan izin " +"diintegrasikan untuk memastikan bahwa pengguna hanya dapat mengelola daftar " +"keinginan mereka sendiri kecuali jika izin eksplisit diberikan." + +#: core/viewsets.py:1007 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" +"Kelas ini menyediakan fungsionalitas viewset untuk mengelola objek `Alamat`." +" Kelas AddressViewSet memungkinkan operasi CRUD, pemfilteran, dan tindakan " +"khusus yang terkait dengan entitas alamat. Kelas ini mencakup perilaku " +"khusus untuk metode HTTP yang berbeda, penggantian serializer, dan " +"penanganan izin berdasarkan konteks permintaan." + +#: core/viewsets.py:1074 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Kesalahan pengodean geografis: {e}" + +#: core/viewsets.py:1081 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" +"Menangani operasi yang terkait dengan Tag Produk dalam aplikasi. Kelas ini " +"menyediakan fungsionalitas untuk mengambil, memfilter, dan menserialisasi " +"objek Tag Produk. Kelas ini mendukung pemfilteran fleksibel pada atribut " +"tertentu menggunakan backend filter yang ditentukan dan secara dinamis " +"menggunakan serializer yang berbeda berdasarkan tindakan yang dilakukan." diff --git a/core/locale/it_IT/LC_MESSAGES/django.mo b/core/locale/it_IT/LC_MESSAGES/django.mo index ea7b660ada3d6c9715e78812a7dc844fea8e7eab..a98c4658086eb3b16f0340dbbaf8c092e2f268e1 100644 GIT binary patch delta 27147 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 diff --git a/core/locale/it_IT/LC_MESSAGES/django.po b/core/locale/it_IT/LC_MESSAGES/django.po index 69411323..4caa7c37 100644 --- a/core/locale/it_IT/LC_MESSAGES/django.po +++ b/core/locale/it_IT/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+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:11 +#: core/abstract.py:12 msgid "unique id" msgstr "ID univoco" -#: core/abstract.py:12 +#: 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:19 +#: core/abstract.py:20 msgid "is active" msgstr "È attivo" -#: core/abstract.py:20 +#: core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" @@ -35,19 +35,19 @@ msgstr "" "Se impostato a false, questo oggetto non può essere visto dagli utenti senza" " i necessari permessi." -#: core/abstract.py:22 core/choices.py:18 +#: core/abstract.py:23 core/choices.py:18 msgid "created" msgstr "Creato" -#: core/abstract.py:22 +#: 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:23 +#: core/abstract.py:24 msgid "modified" msgstr "Modificato" -#: core/abstract.py:23 +#: core/abstract.py:24 msgid "when the object was last modified" msgstr "Quando l'oggetto è stato modificato per l'ultima volta" @@ -90,11 +90,11 @@ msgid "selected items have been deactivated." msgstr "Gli articoli selezionati sono stati disattivati!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 +#: core/graphene/object_types.py:616 core/models.py:701 core/models.py:709 msgid "attribute value" msgstr "Valore dell'attributo" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 msgid "attribute values" msgstr "Valori degli attributi" @@ -106,7 +106,7 @@ msgstr "Immagine" msgid "images" msgstr "Immagini" -#: core/admin.py:155 core/models.py:445 +#: core/admin.py:155 core/models.py:459 msgid "stock" msgstr "Stock" @@ -114,11 +114,11 @@ msgstr "Stock" msgid "stocks" msgstr "Le scorte" -#: core/admin.py:166 core/models.py:1609 +#: core/admin.py:166 core/models.py:1667 msgid "order product" msgstr "Ordina il prodotto" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 msgid "order products" msgstr "Ordinare i prodotti" @@ -752,7 +752,7 @@ msgstr "eliminare una relazione ordine-prodotto" msgid "add or remove feedback on an order–product relation" msgstr "aggiungere o rimuovere un feedback su una relazione ordine-prodotto" -#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 msgid "no search term provided." msgstr "Non è stato fornito alcun termine di ricerca." @@ -805,7 +805,7 @@ msgid "Quantity" msgstr "Quantità" #: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:287 core/models.py:369 core/models.py:522 +#: core/models.py:301 core/models.py:383 core/models.py:536 msgid "Slug" msgstr "Lumaca" @@ -821,7 +821,7 @@ msgstr "Includere le sottocategorie" msgid "Include personal ordered" msgstr "Includere prodotti ordinati personalmente" -#: core/filters.py:85 core/models.py:526 +#: core/filters.py:85 core/models.py:540 msgid "SKU" msgstr "SKU" @@ -895,7 +895,7 @@ msgstr "Dati in cache" msgid "camelized JSON data from the requested URL" msgstr "Dati JSON camelizzati dall'URL richiesto" -#: core/graphene/mutations.py:65 core/views.py:360 +#: core/graphene/mutations.py:65 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "Sono consentiti solo gli URL che iniziano con http(s)://" @@ -927,7 +927,7 @@ msgstr "" "Si prega di fornire order_uuid o order_hr_id, che si escludono a vicenda!" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:839 +#: core/graphene/mutations.py:527 core/viewsets.py:679 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" "Il metodo order.buy() ha fornito un tipo sbagliato: {type(instance)!s}" @@ -1004,9 +1004,9 @@ msgstr "Prodotto dell'ordine {order_product_uuid} non trovato!" msgid "original address string provided by the user" msgstr "Stringa di indirizzo originale fornita dall'utente" -#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 -#: core/models.py:1234 core/models.py:1263 core/models.py:1288 -#: core/viewsets.py:842 +#: core/graphene/mutations.py:656 core/models.py:849 core/models.py:862 +#: core/models.py:1281 core/models.py:1310 core/models.py:1335 +#: core/viewsets.py:682 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} non esiste: {uuid}!" @@ -1020,8 +1020,8 @@ msgid "elasticsearch - works like a charm" msgstr "ElasticSearch: funziona a meraviglia" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 -#: core/models.py:1686 +#: core/graphene/object_types.py:444 core/models.py:672 core/models.py:1144 +#: core/models.py:1744 msgid "attributes" msgstr "Attributi" @@ -1034,11 +1034,11 @@ 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:224 core/models.py:312 core/models.py:612 +#: core/graphene/object_types.py:224 core/models.py:326 core/models.py:626 msgid "categories" msgstr "Categorie" -#: core/graphene/object_types.py:124 core/models.py:383 +#: core/graphene/object_types.py:124 core/models.py:397 msgid "brands" msgstr "Marche" @@ -1047,7 +1047,7 @@ msgid "category image url" msgstr "Categorie" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:249 +#: core/models.py:263 msgid "markup percentage" msgstr "Percentuale di markup" @@ -1071,7 +1071,7 @@ msgstr "Tag per questa categoria" msgid "products in this category" msgstr "Prodotti in questa categoria" -#: core/graphene/object_types.py:351 core/models.py:155 +#: core/graphene/object_types.py:351 core/models.py:169 msgid "vendors" msgstr "Venditori" @@ -1096,7 +1096,7 @@ msgid "represents feedback from a user." msgstr "Rappresenta il feedback di un utente." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1110 +#: core/models.py:1138 msgid "notifications" msgstr "Notifiche" @@ -1104,7 +1104,7 @@ msgstr "Notifiche" 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:400 core/models.py:1791 +#: core/graphene/object_types.py:400 core/models.py:1860 msgid "feedback" msgstr "Feedback" @@ -1112,7 +1112,7 @@ msgstr "Feedback" msgid "a list of order products in this order" msgstr "Un elenco di prodotti ordinati in questo ordine" -#: core/graphene/object_types.py:436 core/models.py:1080 +#: core/graphene/object_types.py:436 core/models.py:1108 msgid "billing address" msgstr "Indirizzo di fatturazione" @@ -1140,7 +1140,7 @@ msgstr "Tutti i prodotti sono presenti nell'ordine digitale" msgid "transactions for this order" msgstr "Transazioni per questo ordine" -#: core/graphene/object_types.py:465 core/models.py:1144 +#: core/graphene/object_types.py:465 core/models.py:1172 msgid "orders" msgstr "Ordini" @@ -1152,15 +1152,15 @@ msgstr "URL immagine" msgid "product's images" msgstr "Immagini del prodotto" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 +#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 msgid "category" msgstr "Categoria" -#: core/graphene/object_types.py:502 core/models.py:1792 +#: core/graphene/object_types.py:502 core/models.py:1861 msgid "feedbacks" msgstr "Feedback" -#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 +#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 msgid "brand" msgstr "Marchio" @@ -1192,7 +1192,7 @@ msgstr "Numero di feedback" msgid "only available for personal orders" msgstr "Prodotti disponibili solo per ordini personali" -#: core/graphene/object_types.py:534 core/models.py:536 +#: core/graphene/object_types.py:534 core/models.py:550 msgid "products" msgstr "Prodotti" @@ -1204,15 +1204,15 @@ msgstr "Codici promozionali" msgid "products on sale" msgstr "Prodotti in vendita" -#: core/graphene/object_types.py:651 core/models.py:784 +#: core/graphene/object_types.py:651 core/models.py:798 msgid "promotions" msgstr "Promozioni" -#: core/graphene/object_types.py:655 core/models.py:154 +#: core/graphene/object_types.py:655 core/models.py:168 msgid "vendor" msgstr "Venditore" -#: core/graphene/object_types.py:656 core/models.py:535 +#: core/graphene/object_types.py:656 core/models.py:549 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1220,11 +1220,11 @@ msgstr "Venditore" msgid "product" msgstr "Prodotto" -#: core/graphene/object_types.py:667 core/models.py:807 +#: core/graphene/object_types.py:667 core/models.py:821 msgid "wishlisted products" msgstr "Prodotti desiderati" -#: core/graphene/object_types.py:673 core/models.py:824 +#: core/graphene/object_types.py:673 core/models.py:838 msgid "wishlists" msgstr "Liste dei desideri" @@ -1232,7 +1232,7 @@ msgstr "Liste dei desideri" msgid "tagged products" msgstr "Prodotti contrassegnati" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 +#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 msgid "product tags" msgstr "Tag del prodotto" @@ -1343,7 +1343,7 @@ msgstr "Gruppo di attributi padre" msgid "attribute group's name" msgstr "Nome del gruppo di attributi" -#: core/models.py:100 core/models.py:620 +#: core/models.py:100 core/models.py:634 msgid "attribute group" msgstr "Gruppo di attributi" @@ -1392,7 +1392,7 @@ msgstr "Nome del fornitore" msgid "vendor name" msgstr "Nome del fornitore" -#: core/models.py:163 +#: core/models.py:177 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1407,27 +1407,27 @@ msgstr "" "operazioni esportate attraverso i mixin e fornisce la personalizzazione dei " "metadati per scopi amministrativi." -#: core/models.py:175 core/models.py:206 +#: core/models.py:189 core/models.py:220 msgid "internal tag identifier for the product tag" msgstr "Identificatore interno dell'etichetta del prodotto" -#: core/models.py:176 core/models.py:207 +#: core/models.py:190 core/models.py:221 msgid "tag name" msgstr "Nome del tag" -#: core/models.py:180 core/models.py:211 +#: core/models.py:194 core/models.py:225 msgid "user-friendly name for the product tag" msgstr "Nome intuitivo per l'etichetta del prodotto" -#: core/models.py:181 core/models.py:212 +#: core/models.py:195 core/models.py:226 msgid "tag display name" msgstr "Nome del tag" -#: core/models.py:189 +#: core/models.py:203 msgid "product tag" msgstr "Etichetta del prodotto" -#: core/models.py:195 +#: core/models.py:209 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 " @@ -1438,15 +1438,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:220 +#: core/models.py:234 msgid "category tag" msgstr "tag categoria" -#: core/models.py:221 core/models.py:293 +#: core/models.py:235 core/models.py:307 msgid "category tags" msgstr "tag di categoria" -#: core/models.py:226 +#: core/models.py:240 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1469,52 +1469,52 @@ msgstr "" "specificare il nome, la descrizione e la gerarchia delle categorie, nonché " "di assegnare attributi come immagini, tag o priorità." -#: core/models.py:240 +#: core/models.py:254 msgid "upload an image representing this category" msgstr "Caricare un'immagine che rappresenti questa categoria" -#: core/models.py:243 +#: core/models.py:257 msgid "category image" msgstr "Categoria immagine" -#: core/models.py:248 +#: core/models.py:262 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:257 +#: core/models.py:271 msgid "parent of this category to form a hierarchical structure" msgstr "Genitore di questa categoria per formare una struttura gerarchica" -#: core/models.py:258 +#: core/models.py:272 msgid "parent category" msgstr "Categoria di genitori" -#: core/models.py:263 +#: core/models.py:277 msgid "category name" msgstr "Nome della categoria" -#: core/models.py:264 +#: core/models.py:278 msgid "provide a name for this category" msgstr "Indicare un nome per questa categoria" -#: core/models.py:271 +#: core/models.py:285 msgid "add a detailed description for this category" msgstr "Aggiungere una descrizione dettagliata per questa categoria" -#: core/models.py:272 +#: core/models.py:286 msgid "category description" msgstr "Descrizione della categoria" -#: core/models.py:292 +#: core/models.py:306 msgid "tags that help describe or group this category" msgstr "tag che aiutano a descrivere o raggruppare questa categoria" -#: core/models.py:299 core/models.py:375 +#: core/models.py:313 core/models.py:389 msgid "priority" msgstr "Priorità" -#: core/models.py:318 +#: core/models.py:332 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1528,47 +1528,47 @@ msgstr "" "priorità. Permette di organizzare e rappresentare i dati relativi al marchio" " all'interno dell'applicazione." -#: core/models.py:328 +#: core/models.py:342 msgid "name of this brand" msgstr "Nome del marchio" -#: core/models.py:329 +#: core/models.py:343 msgid "brand name" msgstr "Nome del marchio" -#: core/models.py:336 +#: core/models.py:350 msgid "upload a logo representing this brand" msgstr "Caricare un logo che rappresenti questo marchio" -#: core/models.py:338 +#: core/models.py:352 msgid "brand small image" msgstr "Immagine piccola del marchio" -#: core/models.py:344 +#: core/models.py:358 msgid "upload a big logo representing this brand" msgstr "Caricare un grande logo che rappresenti questo marchio" -#: core/models.py:346 +#: core/models.py:360 msgid "brand big image" msgstr "Grande immagine del marchio" -#: core/models.py:351 +#: core/models.py:365 msgid "add a detailed description of the brand" msgstr "Aggiungere una descrizione dettagliata del marchio" -#: core/models.py:352 +#: core/models.py:366 msgid "brand description" msgstr "Descrizione del marchio" -#: core/models.py:357 +#: core/models.py:371 msgid "optional categories that this brand is associated with" msgstr "Categorie opzionali a cui questo marchio è associato" -#: core/models.py:358 +#: core/models.py:372 msgid "associated categories" msgstr "Categorie" -#: core/models.py:388 +#: core/models.py:402 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1584,68 +1584,68 @@ msgstr "" "dell'inventario per consentire il monitoraggio e la valutazione dei prodotti" " disponibili presso i vari fornitori." -#: core/models.py:400 +#: core/models.py:414 msgid "the vendor supplying this product stock" msgstr "Il venditore che fornisce questo stock di prodotti" -#: core/models.py:401 +#: core/models.py:415 msgid "associated vendor" msgstr "Venditore associato" -#: core/models.py:405 +#: core/models.py:419 msgid "final price to the customer after markups" msgstr "Prezzo finale al cliente dopo i ricarichi" -#: core/models.py:406 +#: core/models.py:420 msgid "selling price" msgstr "Prezzo di vendita" -#: core/models.py:411 +#: core/models.py:425 msgid "the product associated with this stock entry" msgstr "Il prodotto associato a questa voce di magazzino" -#: core/models.py:412 core/models.py:683 core/models.py:730 -#: core/models.py:1583 +#: core/models.py:426 core/models.py:697 core/models.py:744 +#: core/models.py:1641 msgid "associated product" msgstr "Prodotto associato" -#: core/models.py:419 +#: core/models.py:433 msgid "the price paid to the vendor for this product" msgstr "Il prezzo pagato al venditore per questo prodotto" -#: core/models.py:420 +#: core/models.py:434 msgid "vendor purchase price" msgstr "Prezzo di acquisto del fornitore" -#: core/models.py:424 +#: core/models.py:438 msgid "available quantity of the product in stock" msgstr "Quantità disponibile del prodotto in magazzino" -#: core/models.py:425 +#: core/models.py:439 msgid "quantity in stock" msgstr "Quantità in magazzino" -#: core/models.py:429 +#: core/models.py:443 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU assegnato dal fornitore per identificare il prodotto" -#: core/models.py:430 +#: core/models.py:444 msgid "vendor sku" msgstr "SKU del venditore" -#: core/models.py:436 +#: core/models.py:450 msgid "digital file associated with this stock if applicable" msgstr "File digitale associato a questo stock, se applicabile" -#: core/models.py:437 +#: core/models.py:451 msgid "digital file" msgstr "File digitale" -#: core/models.py:446 +#: core/models.py:460 msgid "stock entries" msgstr "Voci di magazzino" -#: core/models.py:451 +#: core/models.py:465 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1667,55 +1667,55 @@ msgstr "" " dei prodotti e le informazioni ad essi associate all'interno di " "un'applicazione." -#: core/models.py:464 +#: core/models.py:478 msgid "category this product belongs to" msgstr "Categoria a cui appartiene questo prodotto" -#: core/models.py:473 +#: core/models.py:487 msgid "optionally associate this product with a brand" msgstr "Associare facoltativamente questo prodotto a un marchio" -#: core/models.py:479 +#: core/models.py:493 msgid "tags that help describe or group this product" msgstr "Tag che aiutano a descrivere o raggruppare questo prodotto" -#: core/models.py:484 +#: core/models.py:498 msgid "indicates whether this product is digitally delivered" msgstr "Indica se il prodotto è consegnato in formato digitale" -#: core/models.py:485 +#: core/models.py:499 msgid "is product digital" msgstr "Il prodotto è digitale" -#: core/models.py:491 +#: core/models.py:505 msgid "provide a clear identifying name for the product" msgstr "Fornire un nome identificativo chiaro per il prodotto" -#: core/models.py:492 +#: core/models.py:506 msgid "product name" msgstr "Nome del prodotto" -#: core/models.py:497 core/models.py:772 +#: core/models.py:511 core/models.py:786 msgid "add a detailed description of the product" msgstr "Aggiungere una descrizione dettagliata del prodotto" -#: core/models.py:498 +#: core/models.py:512 msgid "product description" msgstr "Descrizione del prodotto" -#: core/models.py:505 +#: core/models.py:519 msgid "part number for this product" msgstr "Numero di parte per questo prodotto" -#: core/models.py:506 +#: core/models.py:520 msgid "part number" msgstr "Numero di parte" -#: core/models.py:525 +#: core/models.py:539 msgid "stock keeping unit for this product" msgstr "Unità di mantenimento delle scorte per questo prodotto" -#: core/models.py:599 +#: core/models.py:613 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 " @@ -1731,70 +1731,70 @@ msgstr "" " tra cui stringa, intero, float, booleano, array e oggetto. Ciò consente una" " strutturazione dinamica e flessibile dei dati." -#: core/models.py:611 +#: core/models.py:625 msgid "category of this attribute" msgstr "Categoria di questo attributo" -#: core/models.py:619 +#: core/models.py:633 msgid "group of this attribute" msgstr "Gruppo di questo attributo" -#: core/models.py:625 +#: core/models.py:639 msgid "string" msgstr "Stringa" -#: core/models.py:626 +#: core/models.py:640 msgid "integer" msgstr "Intero" -#: core/models.py:627 +#: core/models.py:641 msgid "float" msgstr "Galleggiante" -#: core/models.py:628 +#: core/models.py:642 msgid "boolean" msgstr "Booleano" -#: core/models.py:629 +#: core/models.py:643 msgid "array" msgstr "Array" -#: core/models.py:630 +#: core/models.py:644 msgid "object" msgstr "Oggetto" -#: core/models.py:632 +#: core/models.py:646 msgid "type of the attribute's value" msgstr "Tipo di valore dell'attributo" -#: core/models.py:633 +#: core/models.py:647 msgid "value type" msgstr "Tipo di valore" -#: core/models.py:638 +#: core/models.py:652 msgid "name of this attribute" msgstr "Nome dell'attributo" -#: core/models.py:639 +#: core/models.py:653 msgid "attribute's name" msgstr "Nome dell'attributo" -#: core/models.py:645 +#: core/models.py:659 msgid "is filterable" msgstr "è filtrabile" -#: core/models.py:646 +#: core/models.py:660 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:657 core/models.py:675 +#: core/models.py:671 core/models.py:689 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attributo" -#: core/models.py:663 +#: core/models.py:677 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" @@ -1805,19 +1805,19 @@ msgstr "" "organizzazione e rappresentazione dinamica delle caratteristiche del " "prodotto." -#: core/models.py:674 +#: core/models.py:688 msgid "attribute of this value" msgstr "Attributo di questo valore" -#: core/models.py:682 +#: core/models.py:696 msgid "the specific product associated with this attribute's value" msgstr "Il prodotto specifico associato al valore di questo attributo" -#: core/models.py:688 +#: core/models.py:702 msgid "the specific value for this attribute" msgstr "Il valore specifico per questo attributo" -#: core/models.py:701 +#: core/models.py:715 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -1831,40 +1831,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:712 +#: core/models.py:726 msgid "provide alternative text for the image for accessibility" msgstr "" "Fornire un testo alternativo per l'immagine ai fini dell'accessibilità." -#: core/models.py:713 +#: core/models.py:727 msgid "image alt text" msgstr "Testo alt dell'immagine" -#: core/models.py:716 +#: core/models.py:730 msgid "upload the image file for this product" msgstr "Caricare il file immagine per questo prodotto" -#: core/models.py:717 core/models.py:742 +#: core/models.py:731 core/models.py:756 msgid "product image" msgstr "Immagine del prodotto" -#: core/models.py:723 +#: core/models.py:737 msgid "determines the order in which images are displayed" msgstr "Determina l'ordine di visualizzazione delle immagini" -#: core/models.py:724 +#: core/models.py:738 msgid "display priority" msgstr "Priorità del display" -#: core/models.py:729 +#: core/models.py:743 msgid "the product that this image represents" msgstr "Il prodotto che questa immagine rappresenta" -#: core/models.py:743 +#: core/models.py:757 msgid "product images" msgstr "Immagini del prodotto" -#: core/models.py:748 +#: core/models.py:762 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1880,39 +1880,39 @@ msgstr "" "collegarla ai prodotti applicabili. Si integra con il catalogo dei prodotti " "per determinare gli articoli interessati dalla campagna." -#: core/models.py:760 +#: core/models.py:774 msgid "percentage discount for the selected products" msgstr "Percentuale di sconto per i prodotti selezionati" -#: core/models.py:761 +#: core/models.py:775 msgid "discount percentage" msgstr "Percentuale di sconto" -#: core/models.py:766 +#: core/models.py:780 msgid "provide a unique name for this promotion" msgstr "Fornite un nome unico per questa promozione" -#: core/models.py:767 +#: core/models.py:781 msgid "promotion name" msgstr "Nome della promozione" -#: core/models.py:773 +#: core/models.py:787 msgid "promotion description" msgstr "Descrizione della promozione" -#: core/models.py:778 +#: core/models.py:792 msgid "select which products are included in this promotion" msgstr "Selezionare i prodotti inclusi in questa promozione" -#: core/models.py:779 +#: core/models.py:793 msgid "included products" msgstr "Prodotti inclusi" -#: core/models.py:783 +#: core/models.py:797 msgid "promotion" msgstr "Promozione" -#: core/models.py:794 +#: core/models.py:808 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1925,23 +1925,23 @@ msgstr "" "rimozione di prodotti, nonché operazioni per l'aggiunta e la rimozione di " "più prodotti contemporaneamente." -#: core/models.py:806 +#: core/models.py:820 msgid "products that the user has marked as wanted" msgstr "Prodotti che l'utente ha contrassegnato come desiderati" -#: core/models.py:814 +#: core/models.py:828 msgid "user who owns this wishlist" msgstr "Utente che possiede questa wishlist" -#: core/models.py:815 +#: core/models.py:829 msgid "wishlist owner" msgstr "Proprietario della lista dei desideri" -#: core/models.py:823 +#: core/models.py:837 msgid "wishlist" msgstr "Lista dei desideri" -#: core/models.py:865 +#: core/models.py:879 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1957,19 +1957,19 @@ msgstr "" "file documentari. Estende le funzionalità di mixin specifici e fornisce " "ulteriori caratteristiche personalizzate." -#: core/models.py:878 +#: core/models.py:892 msgid "documentary" msgstr "Documentario" -#: core/models.py:879 +#: core/models.py:893 msgid "documentaries" msgstr "Documentari" -#: core/models.py:889 +#: core/models.py:903 msgid "unresolved" msgstr "Non risolto" -#: core/models.py:894 +#: core/models.py:908 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1991,59 +1991,59 @@ msgstr "" "classe consente inoltre di associare un indirizzo a un utente, facilitando " "la gestione personalizzata dei dati." -#: core/models.py:909 +#: core/models.py:923 msgid "address line for the customer" msgstr "Indirizzo del cliente" -#: core/models.py:910 +#: core/models.py:924 msgid "address line" msgstr "Linea di indirizzo" -#: core/models.py:912 +#: core/models.py:926 msgid "street" msgstr "Via" -#: core/models.py:913 +#: core/models.py:927 msgid "district" msgstr "Distretto" -#: core/models.py:914 +#: core/models.py:928 msgid "city" msgstr "Città" -#: core/models.py:915 +#: core/models.py:929 msgid "region" msgstr "Regione" -#: core/models.py:916 +#: core/models.py:930 msgid "postal code" msgstr "Codice postale" -#: core/models.py:917 +#: core/models.py:931 msgid "country" msgstr "Paese" -#: core/models.py:924 +#: core/models.py:938 msgid "geolocation point: (longitude, latitude)" msgstr "Punto di geolocalizzazione(Longitudine, Latitudine)" -#: core/models.py:927 +#: core/models.py:941 msgid "full JSON response from geocoder for this address" msgstr "Risposta JSON completa di geocoder per questo indirizzo" -#: core/models.py:932 +#: core/models.py:946 msgid "stored JSON response from the geocoding service" msgstr "Risposta JSON memorizzata dal servizio di geocodifica" -#: core/models.py:940 +#: core/models.py:954 msgid "address" msgstr "Indirizzo" -#: core/models.py:941 +#: core/models.py:955 msgid "addresses" msgstr "Indirizzi" -#: core/models.py:953 +#: core/models.py:967 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2060,74 +2060,74 @@ msgstr "" "utilizzo. Include funzionalità per convalidare e applicare il codice " "promozionale a un ordine, assicurando il rispetto dei vincoli." -#: core/models.py:967 +#: core/models.py:981 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:968 +#: core/models.py:982 msgid "promo code identifier" msgstr "Identificatore del codice promozionale" -#: core/models.py:975 +#: core/models.py:989 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:976 +#: core/models.py:990 msgid "fixed discount amount" msgstr "Importo fisso dello sconto" -#: core/models.py:982 +#: core/models.py:996 msgid "percentage discount applied if fixed amount is not used" msgstr "Sconto percentuale applicato se l'importo fisso non viene utilizzato" -#: core/models.py:983 +#: core/models.py:997 msgid "percentage discount" msgstr "Sconto percentuale" -#: core/models.py:988 +#: core/models.py:1002 msgid "timestamp when the promocode expires" msgstr "Data di scadenza del codice promozionale" -#: core/models.py:989 +#: core/models.py:1003 msgid "end validity time" msgstr "Tempo di validità finale" -#: core/models.py:994 +#: core/models.py:1008 msgid "timestamp from which this promocode is valid" msgstr "Data a partire dalla quale il codice promozionale è valido" -#: core/models.py:995 +#: core/models.py:1009 msgid "start validity time" msgstr "Ora di inizio validità" -#: core/models.py:1000 +#: core/models.py:1014 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:1001 +#: core/models.py:1015 msgid "usage timestamp" msgstr "Timestamp d'uso" -#: core/models.py:1006 +#: core/models.py:1020 msgid "user assigned to this promocode if applicable" msgstr "Utente assegnato a questo codice promozionale, se applicabile" -#: core/models.py:1007 +#: core/models.py:1021 msgid "assigned user" msgstr "Utente assegnato" -#: core/models.py:1014 +#: core/models.py:1028 msgid "promo code" msgstr "Codice promozionale" -#: core/models.py:1015 +#: core/models.py:1029 msgid "promo codes" msgstr "Codici promozionali" -#: core/models.py:1022 +#: core/models.py:1044 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2135,16 +2135,16 @@ msgstr "" "È necessario definire un solo tipo di sconto (importo o percentuale), ma non" " entrambi o nessuno." -#: core/models.py:1037 +#: core/models.py:1065 msgid "promocode already used" msgstr "Il codice promozionale è già stato utilizzato" -#: core/models.py:1053 +#: core/models.py:1081 #, 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:1062 +#: core/models.py:1090 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 " @@ -2162,139 +2162,139 @@ msgstr "" "funzionalità supporta la gestione dei prodotti nel ciclo di vita " "dell'ordine." -#: core/models.py:1079 +#: core/models.py:1107 msgid "the billing address used for this order" msgstr "L'indirizzo di fatturazione utilizzato per questo ordine" -#: core/models.py:1087 +#: core/models.py:1115 msgid "optional promo code applied to this order" msgstr "Codice promozionale opzionale applicato a questo ordine" -#: core/models.py:1088 +#: core/models.py:1116 msgid "applied promo code" msgstr "Codice promozionale applicato" -#: core/models.py:1096 +#: core/models.py:1124 msgid "the shipping address used for this order" msgstr "L'indirizzo di spedizione utilizzato per questo ordine" -#: core/models.py:1097 +#: core/models.py:1125 msgid "shipping address" msgstr "Indirizzo di spedizione" -#: core/models.py:1103 +#: core/models.py:1131 msgid "current status of the order in its lifecycle" msgstr "Stato attuale dell'ordine nel suo ciclo di vita" -#: core/models.py:1104 +#: core/models.py:1132 msgid "order status" msgstr "Stato dell'ordine" -#: core/models.py:1109 core/models.py:1560 +#: core/models.py:1137 core/models.py:1618 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:1115 +#: core/models.py:1143 msgid "json representation of order attributes for this order" msgstr "Rappresentazione JSON degli attributi dell'ordine per questo ordine" -#: core/models.py:1121 +#: core/models.py:1149 msgid "the user who placed the order" msgstr "L'utente che ha effettuato l'ordine" -#: core/models.py:1122 +#: core/models.py:1150 msgid "user" msgstr "Utente" -#: core/models.py:1128 +#: core/models.py:1156 msgid "the timestamp when the order was finalized" msgstr "Il timestamp del momento in cui l'ordine è stato finalizzato" -#: core/models.py:1129 +#: core/models.py:1157 msgid "buy time" msgstr "Acquista tempo" -#: core/models.py:1136 +#: core/models.py:1164 msgid "a human-readable identifier for the order" msgstr "Un identificatore leggibile dall'uomo per l'ordine" -#: core/models.py:1137 +#: core/models.py:1165 msgid "human readable id" msgstr "ID leggibile dall'uomo" -#: core/models.py:1143 +#: core/models.py:1171 msgid "order" msgstr "Ordine" -#: core/models.py:1168 +#: core/models.py:1209 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:1202 +#: core/models.py:1249 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:1207 +#: core/models.py:1254 msgid "you cannot add inactive products to order" msgstr "Non è possibile aggiungere all'ordine prodotti inattivi" -#: core/models.py:1224 +#: core/models.py:1271 msgid "you cannot add more products than available in stock" msgstr "" "Non è possibile aggiungere più prodotti di quelli disponibili in magazzino" -#: core/models.py:1246 core/models.py:1271 core/models.py:1279 +#: core/models.py:1293 core/models.py:1318 core/models.py:1326 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:1267 +#: core/models.py:1314 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} non esiste con la query <{query}>!" -#: core/models.py:1299 +#: core/models.py:1346 msgid "promocode does not exist" msgstr "Il codice promozionale non esiste" -#: core/models.py:1305 +#: core/models.py:1352 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:1324 +#: core/models.py:1371 msgid "address does not exist" msgstr "L'indirizzo non esiste" -#: core/models.py:1345 core/models.py:1414 +#: core/models.py:1392 core/models.py:1461 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:1348 core/models.py:1410 +#: core/models.py:1395 core/models.py:1457 msgid "invalid force value" msgstr "Valore di forza non valido" -#: core/models.py:1354 core/models.py:1417 +#: core/models.py:1401 core/models.py:1464 msgid "you cannot purchase an empty order!" msgstr "Non è possibile acquistare un ordine vuoto!" -#: core/models.py:1373 +#: core/models.py:1420 msgid "you cannot buy an order without a user" msgstr "Non è possibile acquistare un ordine senza un utente!" -#: core/models.py:1387 +#: core/models.py:1434 msgid "a user without a balance cannot buy with balance" msgstr "Un utente senza saldo non può acquistare con il saldo!" -#: core/models.py:1392 +#: core/models.py:1439 msgid "insufficient funds to complete the order" msgstr "Fondi insufficienti per completare l'ordine" -#: core/models.py:1426 +#: core/models.py:1473 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2303,7 +2303,7 @@ msgstr "" "seguenti informazioni: nome del cliente, e-mail del cliente, numero di " "telefono del cliente" -#: core/models.py:1435 +#: core/models.py:1482 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2311,7 +2311,7 @@ msgstr "" "Metodo di pagamento non valido: {payment_method} da " "{available_payment_methods}!" -#: core/models.py:1533 +#: core/models.py:1591 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2334,109 +2334,109 @@ msgstr "" "modello si integra con i modelli Ordine e Prodotto e memorizza un " "riferimento ad essi." -#: core/models.py:1548 +#: core/models.py:1606 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:1549 +#: core/models.py:1607 msgid "purchase price at order time" msgstr "Prezzo di acquisto al momento dell'ordine" -#: core/models.py:1554 +#: core/models.py:1612 msgid "internal comments for admins about this ordered product" msgstr "Commenti interni per gli amministratori su questo prodotto ordinato" -#: core/models.py:1555 +#: core/models.py:1613 msgid "internal comments" msgstr "Commenti interni" -#: core/models.py:1561 +#: core/models.py:1619 msgid "user notifications" msgstr "Notifiche degli utenti" -#: core/models.py:1566 +#: core/models.py:1624 msgid "json representation of this item's attributes" msgstr "Rappresentazione JSON degli attributi di questo elemento" -#: core/models.py:1567 +#: core/models.py:1625 msgid "ordered product attributes" msgstr "Attributi del prodotto ordinati" -#: core/models.py:1572 +#: core/models.py:1630 msgid "reference to the parent order that contains this product" msgstr "Riferimento all'ordine padre che contiene questo prodotto" -#: core/models.py:1573 +#: core/models.py:1631 msgid "parent order" msgstr "Ordine dei genitori" -#: core/models.py:1582 +#: core/models.py:1640 msgid "the specific product associated with this order line" msgstr "Il prodotto specifico associato a questa riga d'ordine" -#: core/models.py:1589 +#: core/models.py:1647 msgid "quantity of this specific product in the order" msgstr "Quantità di questo prodotto specifico nell'ordine" -#: core/models.py:1590 +#: core/models.py:1648 msgid "product quantity" msgstr "Quantità di prodotto" -#: core/models.py:1597 +#: core/models.py:1655 msgid "current status of this product in the order" msgstr "Stato attuale di questo prodotto nell'ordine" -#: core/models.py:1598 +#: core/models.py:1656 msgid "product line status" msgstr "Stato della linea di prodotti" -#: core/models.py:1661 +#: core/models.py:1719 msgid "order product must have an order" msgstr "L'ordine-prodotto deve avere un ordine associato!" -#: core/models.py:1663 +#: core/models.py:1721 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Azione errata specificata per il feedback: {action}!" -#: core/models.py:1677 +#: core/models.py:1735 msgid "you cannot feedback an order which is not received" msgstr "non è possibile dare un riscontro a un ordine non ricevuto" -#: core/models.py:1683 +#: core/models.py:1741 msgid "name" msgstr "Nome" -#: core/models.py:1684 +#: core/models.py:1742 msgid "URL of the integration" msgstr "URL dell'integrazione" -#: core/models.py:1685 +#: core/models.py:1743 msgid "authentication credentials" msgstr "Credenziali di autenticazione" -#: core/models.py:1699 +#: core/models.py:1765 msgid "you can only have one default CRM provider" msgstr "È possibile avere un solo provider CRM predefinito" -#: core/models.py:1703 +#: core/models.py:1775 msgid "CRM" msgstr "CRM" -#: core/models.py:1704 +#: core/models.py:1776 msgid "CRMs" msgstr "CRM" -#: core/models.py:1716 +#: core/models.py:1788 msgid "order CRM link" msgstr "Link al CRM dell'ordine" -#: core/models.py:1717 +#: core/models.py:1789 msgid "orders CRM links" msgstr "Link al CRM degli ordini" -#: core/models.py:1722 +#: core/models.py:1794 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2453,19 +2453,15 @@ msgstr "" "il download della risorsa quando l'ordine associato è in uno stato " "completato." -#: core/models.py:1736 +#: core/models.py:1808 msgid "download" msgstr "Scaricare" -#: core/models.py:1737 +#: core/models.py:1809 msgid "downloads" msgstr "Scaricamento" -#: core/models.py:1745 -msgid "you can not download a digital asset for a non-finished order" -msgstr "Non è possibile scaricare un bene digitale per un ordine non finito." - -#: core/models.py:1754 +#: core/models.py:1823 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2480,29 +2476,29 @@ msgstr "" "assegnata dall'utente. La classe utilizza campi del database per modellare e" " gestire efficacemente i dati di feedback." -#: core/models.py:1766 +#: core/models.py:1835 msgid "user-provided comments about their experience with the product" msgstr "Commenti degli utenti sulla loro esperienza con il prodotto" -#: core/models.py:1767 +#: core/models.py:1836 msgid "feedback comments" msgstr "Commenti di feedback" -#: core/models.py:1774 +#: core/models.py:1843 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:1775 +#: core/models.py:1844 msgid "related order product" msgstr "Prodotto correlato all'ordine" -#: core/models.py:1780 +#: core/models.py:1849 msgid "user-assigned rating for the product" msgstr "Valutazione del prodotto assegnata dall'utente" -#: core/models.py:1781 +#: core/models.py:1850 msgid "product rating" msgstr "Valutazione del prodotto" @@ -2708,11 +2704,11 @@ msgstr "" "tutti i diritti\n" " riservato" -#: core/utils/caching.py:41 +#: core/utils/caching.py:48 msgid "both data and timeout are required" msgstr "Sono richiesti sia i dati che il timeout" -#: core/utils/caching.py:43 +#: core/utils/caching.py:50 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." @@ -2745,26 +2741,351 @@ msgstr "Non si ha il permesso di eseguire questa azione." msgid "NOMINATIM_URL must be configured." msgstr "Il parametro NOMINATIM_URL deve essere configurato!" -#: core/validators.py:16 +#: core/validators.py:14 #, 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/validators.py:22 -msgid "invalid phone number format" -msgstr "Formato del numero di telefono non valido" +#: core/views.py:72 +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 "" +"Gestisce la richiesta per l'indice della sitemap e restituisce una risposta " +"XML. Assicura che la risposta includa l'intestazione del tipo di contenuto " +"appropriato per XML." -#: core/views.py:489 +#: core/views.py:87 +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 "" +"Gestisce la risposta di visualizzazione dettagliata di una sitemap. Questa " +"funzione elabora la richiesta, recupera la risposta dettagliata della " +"sitemap e imposta l'intestazione Content-Type per XML." + +#: core/views.py:116 +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 +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 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +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 +msgid "Handles `contact us` form submissions." +msgstr "Gestisce l'invio del modulo `contatti`." + +#: core/views.py:215 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "" +"Gestisce le richieste di elaborazione e validazione degli URL dalle " +"richieste POST in arrivo." + +#: core/views.py:255 +msgid "Handles global search queries." +msgstr "Gestisce le query di ricerca globali." + +#: core/views.py:270 +msgid "Handles the logic of buying as a business without registration." +msgstr "Gestisce la logica dell'acquisto come azienda senza registrazione." + +#: core/views.py:312 msgid "you can only download the digital asset once" msgstr "È possibile scaricare l'asset digitale una sola volta" -#: core/views.py:547 +#: core/views.py:315 +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:353 +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." +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:365 msgid "favicon not found" msgstr "favicon non trovata" -#: core/viewsets.py:1357 +#: core/views.py:370 +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." +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:382 +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 "" +"Reindirizza la richiesta alla pagina indice dell'amministrazione. La " +"funzione gestisce le richieste HTTP in arrivo e le reindirizza alla pagina " +"indice dell'interfaccia di amministrazione di Django. Utilizza la funzione " +"`redirect` di Django per gestire il reindirizzamento HTTP." + +#: core/viewsets.py:128 +msgid "" +"Defines a viewset for managing Evibes-related operations. The EvibesViewSet " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" +"Definisce un insieme di viste per la gestione delle operazioni relative a " +"Evibes. La classe EvibesViewSet eredita da ModelViewSet e fornisce " +"funzionalità per la gestione di azioni e operazioni sulle entità Evibes. " +"Include il supporto per classi di serializzatori dinamici in base all'azione" +" corrente, permessi personalizzabili e formati di rendering." + +#: core/viewsets.py:147 +msgid "" +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." +msgstr "" +"Rappresenta un insieme di viste per la gestione degli oggetti " +"AttributeGroup. Gestisce le operazioni relative agli AttributeGroup, tra cui" +" il filtraggio, la serializzazione e il recupero dei dati. Questa classe fa " +"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:166 +msgid "" +"Handles operations related to Attribute objects within the application. " +"Provides a set of API endpoints to interact with Attribute data. This class " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"Gestisce le operazioni relative agli oggetti Attribute all'interno " +"dell'applicazione. Fornisce un insieme di endpoint API per interagire con i " +"dati Attribute. Questa classe gestisce l'interrogazione, il filtraggio e la " +"serializzazione degli oggetti Attribute, consentendo un controllo dinamico " +"sui dati restituiti, come il filtraggio per campi specifici o il recupero di" +" informazioni dettagliate o semplificate, a seconda della richiesta." + +#: core/viewsets.py:185 +msgid "" +"A viewset for managing AttributeValue objects. This viewset provides " +"functionality for listing, retrieving, creating, updating, and deleting " +"AttributeValue objects. It integrates with Django REST Framework's viewset " +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." +msgstr "" +"Un insieme di viste per la gestione degli oggetti AttributeValue. Questo " +"insieme di viste fornisce funzionalità per elencare, recuperare, creare, " +"aggiornare e cancellare oggetti AttributeValue. Si integra con i meccanismi " +"del viewset di Django REST Framework e utilizza serializzatori appropriati " +"per le diverse azioni. Le funzionalità di filtraggio sono fornite da " +"DjangoFilterBackend." + +#: core/viewsets.py:204 +msgid "" +"Manages views for Category-related operations. The CategoryViewSet class is " +"responsible for handling operations related to the Category model in the " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" +"Gestisce le viste per le operazioni relative alle categorie. La classe " +"CategoryViewSet è responsabile della gestione delle operazioni relative al " +"modello di categoria nel sistema. Supporta il recupero, il filtraggio e la " +"serializzazione dei dati delle categorie. L'insieme di viste applica anche " +"le autorizzazioni per garantire che solo gli utenti autorizzati possano " +"accedere a dati specifici." + +#: core/viewsets.py:315 +msgid "" +"Represents a viewset for managing Brand instances. This class provides " +"functionality for querying, filtering, and serializing Brand objects. It " +"uses Django's ViewSet framework to simplify the implementation of API " +"endpoints for Brand objects." +msgstr "" +"Rappresenta un insieme di viste per la gestione delle istanze del marchio. " +"Questa classe fornisce funzionalità per interrogare, filtrare e serializzare" +" gli oggetti Brand. Utilizza il framework ViewSet di Django per semplificare" +" l'implementazione di endpoint API per gli oggetti Brand." + +#: core/viewsets.py:427 +msgid "" +"Manages operations related to the `Product` model in the system. This class " +"provides a viewset for managing products, including their filtering, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" +"Gestisce le operazioni relative al modello `Product` nel sistema. Questa " +"classe fornisce un insieme di viste per la gestione dei prodotti, compreso " +"il loro filtraggio, la serializzazione e le operazioni su istanze " +"specifiche. Si estende da `EvibesViewSet` per utilizzare funzionalità comuni" +" e si integra con il framework Django REST per le operazioni API RESTful. " +"Include metodi per recuperare i dettagli del prodotto, applicare i permessi " +"e accedere ai feedback correlati di un prodotto." + +#: core/viewsets.py:547 +msgid "" +"Represents a viewset for managing Vendor objects. This viewset allows " +"fetching, filtering, and serializing Vendor data. It defines the queryset, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" +"Rappresenta un insieme di viste per la gestione degli oggetti Vendor. Questo" +" insieme di viste consente di recuperare, filtrare e serializzare i dati del" +" fornitore. Definisce il queryset, le configurazioni dei filtri e le classi " +"di serializzazione utilizzate per gestire le diverse azioni. Lo scopo di " +"questa classe è fornire un accesso semplificato alle risorse relative a " +"Vendor attraverso il framework REST di Django." + +#: core/viewsets.py:567 +msgid "" +"Representation of a view set handling Feedback objects. This class manages " +"operations related to Feedback objects, including listing, filtering, and " +"retrieving details. The purpose of this view set is to provide different " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"use of Django's filtering system for querying data." +msgstr "" +"Rappresentazione di un insieme di viste che gestisce gli oggetti Feedback. " +"Questa classe gestisce le operazioni relative agli oggetti Feedback, tra cui" +" l'elencazione, il filtraggio e il recupero dei dettagli. Lo scopo di questo" +" insieme di viste è fornire serializzatori diversi per azioni diverse e " +"implementare una gestione basata sui permessi degli oggetti Feedback " +"accessibili. Estende l'insieme di base `EvibesViewSet` e fa uso del sistema " +"di filtraggio di Django per interrogare i dati." + +#: core/viewsets.py:593 +msgid "" +"ViewSet for managing orders and related operations. This class provides " +"functionality to retrieve, modify, and manage order objects. It includes " +"various endpoints for handling order operations such as adding or removing " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " +"enforces permissions accordingly while interacting with order data." +msgstr "" +"ViewSet per la gestione degli ordini e delle operazioni correlate. Questa " +"classe fornisce funzionalità per recuperare, modificare e gestire gli " +"oggetti ordine. Include vari endpoint per gestire le operazioni relative " +"agli ordini, come l'aggiunta o la rimozione di prodotti, l'esecuzione di " +"acquisti per utenti registrati e non registrati e il recupero degli ordini " +"in sospeso dell'utente attualmente autenticato. Il ViewSet utilizza diversi " +"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:782 +msgid "" +"Provides a viewset for managing OrderProduct entities. This viewset enables " +"CRUD operations and custom actions specific to the OrderProduct model. It " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " +"feedback on OrderProduct instances" +msgstr "" +"Fornisce un insieme di viste per la gestione delle entità OrderProduct. " +"Questo insieme di viste consente operazioni CRUD e azioni personalizzate " +"specifiche per il modello OrderProduct. Include il filtraggio, il controllo " +"dei permessi e la commutazione del serializzatore in base all'azione " +"richiesta. Inoltre, fornisce un'azione dettagliata per gestire il feedback " +"sulle istanze di OrderProduct." + +#: core/viewsets.py:833 +msgid "Manages operations related to Product images in the application. " +msgstr "" +"Gestisce le operazioni relative alle immagini dei prodotti " +"nell'applicazione." + +#: core/viewsets.py:845 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +msgstr "" +"Gestisce il recupero e la gestione delle istanze di PromoCode attraverso " +"varie azioni API." + +#: core/viewsets.py:866 +msgid "Represents a view set for managing promotions. " +msgstr "Rappresenta un insieme di viste per la gestione delle promozioni." + +#: core/viewsets.py:878 +msgid "Handles operations related to Stock data in the system." +msgstr "Gestisce le operazioni relative ai dati delle scorte nel sistema." + +#: core/viewsets.py:892 +msgid "" +"ViewSet for managing Wishlist operations. The WishlistViewSet provides " +"endpoints for interacting with a user's wish list, allowing for the " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " +"actions for wishlist products. Permission checks are integrated to ensure " +"that users can only manage their own wishlists unless explicit permissions " +"are granted." +msgstr "" +"ViewSet per la gestione delle operazioni della Lista dei desideri. Il " +"WishlistViewSet fornisce gli endpoint per interagire con la lista dei " +"desideri di un utente, consentendo il recupero, la modifica e la " +"personalizzazione dei prodotti all'interno della lista dei desideri. Questo " +"ViewSet facilita funzionalità quali l'aggiunta, la rimozione e le azioni di " +"massa per i prodotti della lista dei desideri. I controlli delle " +"autorizzazioni sono integrati per garantire che gli utenti possano gestire " +"solo la propria lista dei desideri, a meno che non vengano concessi permessi" +" espliciti." + +#: core/viewsets.py:1007 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" +"Questa classe fornisce la funzionalità viewset per la gestione degli oggetti" +" `Address`. La classe AddressViewSet consente operazioni CRUD, filtri e " +"azioni personalizzate relative alle entità indirizzo. Include comportamenti " +"specializzati per diversi metodi HTTP, override del serializzatore e " +"gestione dei permessi in base al contesto della richiesta." + +#: core/viewsets.py:1074 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Errore di geocodifica: {e}" + +#: core/viewsets.py:1081 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" +"Gestisce le operazioni relative ai Tag prodotto all'interno " +"dell'applicazione. Questa classe fornisce funzionalità per recuperare, " +"filtrare e serializzare gli oggetti Tag prodotto. Supporta un filtraggio " +"flessibile su attributi specifici, utilizzando il backend del filtro " +"specificato e utilizzando dinamicamente diversi serializzatori in base " +"all'azione da eseguire." diff --git a/core/locale/ja_JP/LC_MESSAGES/django.mo b/core/locale/ja_JP/LC_MESSAGES/django.mo index fe3dee4edc01f64a4557d412bbe49e3ca1c04f96..f0b7b569376a2646d1a8353cd8ee6bac015937c0 100644 GIT binary patch delta 27068 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 diff --git a/core/locale/ja_JP/LC_MESSAGES/django.po b/core/locale/ja_JP/LC_MESSAGES/django.po index e73cd004..a50b54d9 100644 --- a/core/locale/ja_JP/LC_MESSAGES/django.po +++ b/core/locale/ja_JP/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,37 +13,37 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: core/abstract.py:11 +#: core/abstract.py:12 msgid "unique id" msgstr "ユニークID" -#: core/abstract.py:12 +#: core/abstract.py:13 msgid "unique id is used to surely identify any database object" msgstr "ユニークIDは、データベースオブジェクトを確実に識別するために使用されます。" -#: core/abstract.py:19 +#: core/abstract.py:20 msgid "is active" msgstr "アクティブ" -#: core/abstract.py:20 +#: 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:22 core/choices.py:18 +#: core/abstract.py:23 core/choices.py:18 msgid "created" msgstr "作成" -#: core/abstract.py:22 +#: core/abstract.py:23 msgid "when the object first appeared on the database" msgstr "そのオブジェクトが初めてデータベースに登場した時" -#: core/abstract.py:23 +#: core/abstract.py:24 msgid "modified" msgstr "変形" -#: core/abstract.py:23 +#: core/abstract.py:24 msgid "when the object was last modified" msgstr "オブジェクトの最終編集日時" @@ -86,11 +86,11 @@ msgid "selected items have been deactivated." msgstr "選択されたアイテムは無効化されました!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 +#: core/graphene/object_types.py:616 core/models.py:701 core/models.py:709 msgid "attribute value" msgstr "属性値" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 msgid "attribute values" msgstr "属性値" @@ -102,7 +102,7 @@ msgstr "画像" msgid "images" msgstr "画像" -#: core/admin.py:155 core/models.py:445 +#: core/admin.py:155 core/models.py:459 msgid "stock" msgstr "在庫" @@ -110,11 +110,11 @@ msgstr "在庫" msgid "stocks" msgstr "株式" -#: core/admin.py:166 core/models.py:1609 +#: core/admin.py:166 core/models.py:1667 msgid "order product" msgstr "商品のご注文" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 msgid "order products" msgstr "商品のご注文" @@ -692,7 +692,7 @@ msgstr "注文と商品の関係を削除する" msgid "add or remove feedback on an order–product relation" msgstr "注文と商品の関係に関するフィードバックを追加または削除する。" -#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 msgid "no search term provided." msgstr "検索語はありません。" @@ -745,7 +745,7 @@ msgid "Quantity" msgstr "数量" #: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:287 core/models.py:369 core/models.py:522 +#: core/models.py:301 core/models.py:383 core/models.py:536 msgid "Slug" msgstr "スラッグ" @@ -761,7 +761,7 @@ msgstr "サブカテゴリーを含む" msgid "Include personal ordered" msgstr "個人注文商品を含む" -#: core/filters.py:85 core/models.py:526 +#: core/filters.py:85 core/models.py:540 msgid "SKU" msgstr "SKU" @@ -834,7 +834,7 @@ msgstr "キャッシュ・データ" msgid "camelized JSON data from the requested URL" msgstr "リクエストされたURLからキャメル化されたJSONデータ" -#: core/graphene/mutations.py:65 core/views.py:360 +#: core/graphene/mutations.py:65 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "http(s)://で始まるURLのみが許可されます。" @@ -865,7 +865,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "order_uuidまたはorder_hr_idを入力してください!" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:839 +#: core/graphene/mutations.py:527 core/viewsets.py:679 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "order.buy()メソッドから間違った型が来た:{type(instance)!s}。" @@ -939,9 +939,9 @@ msgstr "Orderproduct {order_product_uuid} が見つかりません!" msgid "original address string provided by the user" msgstr "ユーザーが提供したオリジナルのアドレス文字列" -#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 -#: core/models.py:1234 core/models.py:1263 core/models.py:1288 -#: core/viewsets.py:842 +#: core/graphene/mutations.py:656 core/models.py:849 core/models.py:862 +#: core/models.py:1281 core/models.py:1310 core/models.py:1335 +#: core/viewsets.py:682 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name}は存在しません:{uuid}が存在しません!" @@ -955,8 +955,8 @@ msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - 魅力のように動作" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 -#: core/models.py:1686 +#: core/graphene/object_types.py:444 core/models.py:672 core/models.py:1144 +#: core/models.py:1744 msgid "attributes" msgstr "属性" @@ -969,11 +969,11 @@ msgid "groups of attributes" msgstr "属性のグループ" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:612 +#: core/graphene/object_types.py:224 core/models.py:326 core/models.py:626 msgid "categories" msgstr "カテゴリー" -#: core/graphene/object_types.py:124 core/models.py:383 +#: core/graphene/object_types.py:124 core/models.py:397 msgid "brands" msgstr "ブランド" @@ -982,7 +982,7 @@ msgid "category image url" msgstr "カテゴリー" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:249 +#: core/models.py:263 msgid "markup percentage" msgstr "マークアップ率" @@ -1003,7 +1003,7 @@ msgstr "このカテゴリのタグ" msgid "products in this category" msgstr "このカテゴリの製品" -#: core/graphene/object_types.py:351 core/models.py:155 +#: core/graphene/object_types.py:351 core/models.py:169 msgid "vendors" msgstr "ベンダー" @@ -1028,7 +1028,7 @@ msgid "represents feedback from a user." msgstr "ユーザーからのフィードバックを表す。" #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1110 +#: core/models.py:1138 msgid "notifications" msgstr "お知らせ" @@ -1036,7 +1036,7 @@ msgstr "お知らせ" msgid "download url for this order product if applicable" msgstr "該当する場合は、この注文商品のダウンロードURLを入力してください。" -#: core/graphene/object_types.py:400 core/models.py:1791 +#: core/graphene/object_types.py:400 core/models.py:1860 msgid "feedback" msgstr "フィードバック" @@ -1044,7 +1044,7 @@ msgstr "フィードバック" msgid "a list of order products in this order" msgstr "注文商品のリスト" -#: core/graphene/object_types.py:436 core/models.py:1080 +#: core/graphene/object_types.py:436 core/models.py:1108 msgid "billing address" msgstr "請求先住所" @@ -1070,7 +1070,7 @@ msgstr "ご注文の商品はすべてデジタルですか?" msgid "transactions for this order" msgstr "この注文の取引" -#: core/graphene/object_types.py:465 core/models.py:1144 +#: core/graphene/object_types.py:465 core/models.py:1172 msgid "orders" msgstr "受注状況" @@ -1082,15 +1082,15 @@ msgstr "画像URL" msgid "product's images" msgstr "製品画像" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 +#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 msgid "category" msgstr "カテゴリー" -#: core/graphene/object_types.py:502 core/models.py:1792 +#: core/graphene/object_types.py:502 core/models.py:1861 msgid "feedbacks" msgstr "フィードバック" -#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 +#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 msgid "brand" msgstr "ブランド" @@ -1122,7 +1122,7 @@ msgstr "フィードバック数" msgid "only available for personal orders" msgstr "個人注文のみの商品" -#: core/graphene/object_types.py:534 core/models.py:536 +#: core/graphene/object_types.py:534 core/models.py:550 msgid "products" msgstr "製品紹介" @@ -1134,15 +1134,15 @@ msgstr "プロモコード" msgid "products on sale" msgstr "販売商品" -#: core/graphene/object_types.py:651 core/models.py:784 +#: core/graphene/object_types.py:651 core/models.py:798 msgid "promotions" msgstr "プロモーション" -#: core/graphene/object_types.py:655 core/models.py:154 +#: core/graphene/object_types.py:655 core/models.py:168 msgid "vendor" msgstr "ベンダー" -#: core/graphene/object_types.py:656 core/models.py:535 +#: core/graphene/object_types.py:656 core/models.py:549 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1150,11 +1150,11 @@ msgstr "ベンダー" msgid "product" msgstr "製品" -#: core/graphene/object_types.py:667 core/models.py:807 +#: core/graphene/object_types.py:667 core/models.py:821 msgid "wishlisted products" msgstr "ウィッシュリスト掲載商品" -#: core/graphene/object_types.py:673 core/models.py:824 +#: core/graphene/object_types.py:673 core/models.py:838 msgid "wishlists" msgstr "ウィッシュリスト" @@ -1162,7 +1162,7 @@ msgstr "ウィッシュリスト" msgid "tagged products" msgstr "タグ別アーカイブ" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 +#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 msgid "product tags" msgstr "商品タグ" @@ -1268,7 +1268,7 @@ msgstr "親属性グループ" msgid "attribute group's name" msgstr "属性グループ名" -#: core/models.py:100 core/models.py:620 +#: core/models.py:100 core/models.py:634 msgid "attribute group" msgstr "属性グループ" @@ -1309,7 +1309,7 @@ msgstr "このベンダーの名前" msgid "vendor name" msgstr "ベンダー名" -#: core/models.py:163 +#: core/models.py:177 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1320,27 +1320,27 @@ msgstr "" "製品を分類または識別するために使用される製品タグを表します。ProductTag " "クラスは、内部タグ識別子とユーザーフレンドリーな表示名の組み合わせによって、製品を一意に識別および分類するように設計されています。ミキシンを通じてエクスポートされる操作をサポートし、管理目的のためにメタデータのカスタマイズを提供します。" -#: core/models.py:175 core/models.py:206 +#: core/models.py:189 core/models.py:220 msgid "internal tag identifier for the product tag" msgstr "商品タグの内部タグ識別子" -#: core/models.py:176 core/models.py:207 +#: core/models.py:190 core/models.py:221 msgid "tag name" msgstr "タグ名" -#: core/models.py:180 core/models.py:211 +#: core/models.py:194 core/models.py:225 msgid "user-friendly name for the product tag" msgstr "商品タグのユーザーフレンドリーな名前" -#: core/models.py:181 core/models.py:212 +#: core/models.py:195 core/models.py:226 msgid "tag display name" msgstr "タグ表示名" -#: core/models.py:189 +#: core/models.py:203 msgid "product tag" msgstr "商品タグ" -#: core/models.py:195 +#: core/models.py:209 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 " @@ -1348,15 +1348,15 @@ msgid "" msgstr "" "商品に使用されるカテゴリータグを表します。このクラスは、商品の関連付けと分類に使用できるカテゴリタグをモデル化します。内部タグ識別子とユーザーフレンドリーな表示名の属性が含まれます。" -#: core/models.py:220 +#: core/models.py:234 msgid "category tag" msgstr "カテゴリタグ" -#: core/models.py:221 core/models.py:293 +#: core/models.py:235 core/models.py:307 msgid "category tags" msgstr "カテゴリータグ" -#: core/models.py:226 +#: core/models.py:240 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1370,51 +1370,51 @@ msgid "" msgstr "" "関連するアイテムを階層構造で整理し、グループ化するためのカテゴリ・エンティティを表します。カテゴリは、親子関係をサポートする他のカテゴリとの階層関係を持つことができます。このクラスには、カテゴリ関連機能の基盤となるメタデータおよび視覚表現のためのフィールドが含まれます。このクラスは通常、アプリケーション内で商品カテゴリやその他の類似のグループ化を定義および管理するために使用され、ユーザや管理者がカテゴリの名前、説明、階層を指定したり、画像、タグ、優先度などの属性を割り当てることができます。" -#: core/models.py:240 +#: core/models.py:254 msgid "upload an image representing this category" msgstr "このカテゴリーを表す画像をアップロードする" -#: core/models.py:243 +#: core/models.py:257 msgid "category image" msgstr "カテゴリーイメージ" -#: core/models.py:248 +#: core/models.py:262 msgid "define a markup percentage for products in this category" msgstr "このカテゴリの商品のマークアップ率を定義する" -#: core/models.py:257 +#: core/models.py:271 msgid "parent of this category to form a hierarchical structure" msgstr "階層構造を形成するこのカテゴリの親" -#: core/models.py:258 +#: core/models.py:272 msgid "parent category" msgstr "親カテゴリー" -#: core/models.py:263 +#: core/models.py:277 msgid "category name" msgstr "カテゴリー名" -#: core/models.py:264 +#: core/models.py:278 msgid "provide a name for this category" msgstr "このカテゴリの名前を入力してください。" -#: core/models.py:271 +#: core/models.py:285 msgid "add a detailed description for this category" msgstr "このカテゴリの詳細説明を追加する" -#: core/models.py:272 +#: core/models.py:286 msgid "category description" msgstr "カテゴリー説明" -#: core/models.py:292 +#: core/models.py:306 msgid "tags that help describe or group this category" msgstr "このカテゴリーを説明またはグループ化するのに役立つタグ" -#: core/models.py:299 core/models.py:375 +#: core/models.py:313 core/models.py:389 msgid "priority" msgstr "優先順位" -#: core/models.py:318 +#: core/models.py:332 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1424,47 +1424,47 @@ msgid "" msgstr "" "システム内のブランド・オブジェクトを表します。このクラスは、名前、ロゴ、説明、関連カテゴリ、一意のスラッグ、および優先順位など、ブランドに関連する情報と属性を処理します。このクラスによって、アプリケーション内でブランド関連データを整理し、表現することができます。" -#: core/models.py:328 +#: core/models.py:342 msgid "name of this brand" msgstr "ブランド名" -#: core/models.py:329 +#: core/models.py:343 msgid "brand name" msgstr "ブランド名" -#: core/models.py:336 +#: core/models.py:350 msgid "upload a logo representing this brand" msgstr "このブランドを代表するロゴをアップロードする" -#: core/models.py:338 +#: core/models.py:352 msgid "brand small image" msgstr "小さなブランドイメージ" -#: core/models.py:344 +#: core/models.py:358 msgid "upload a big logo representing this brand" msgstr "このブランドを象徴する大きなロゴをアップロードする" -#: core/models.py:346 +#: core/models.py:360 msgid "brand big image" msgstr "大きなブランドイメージ" -#: core/models.py:351 +#: core/models.py:365 msgid "add a detailed description of the brand" msgstr "ブランドの詳細な説明を加える" -#: core/models.py:352 +#: core/models.py:366 msgid "brand description" msgstr "ブランド説明" -#: core/models.py:357 +#: core/models.py:371 msgid "optional categories that this brand is associated with" msgstr "このブランドが関連するオプション・カテゴリー" -#: core/models.py:358 +#: core/models.py:372 msgid "associated categories" msgstr "カテゴリー" -#: core/models.py:388 +#: core/models.py:402 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1475,68 +1475,68 @@ msgid "" msgstr "" "システムで管理されている商品の在庫を表します。このクラスは、ベンダー、商品、およびそれらの在庫情報間の関係の詳細や、価格、購入価格、数量、SKU、デジタル資産などの在庫関連プロパティを提供します。これは在庫管理システムの一部で、さまざまなベンダーから入手可能な製品の追跡と評価を可能にします。" -#: core/models.py:400 +#: core/models.py:414 msgid "the vendor supplying this product stock" msgstr "この製品の在庫を供給しているベンダー" -#: core/models.py:401 +#: core/models.py:415 msgid "associated vendor" msgstr "関連ベンダー" -#: core/models.py:405 +#: core/models.py:419 msgid "final price to the customer after markups" msgstr "マークアップ後の顧客への最終価格" -#: core/models.py:406 +#: core/models.py:420 msgid "selling price" msgstr "販売価格" -#: core/models.py:411 +#: core/models.py:425 msgid "the product associated with this stock entry" msgstr "このストックエントリーに関連する製品" -#: core/models.py:412 core/models.py:683 core/models.py:730 -#: core/models.py:1583 +#: core/models.py:426 core/models.py:697 core/models.py:744 +#: core/models.py:1641 msgid "associated product" msgstr "関連製品" -#: core/models.py:419 +#: core/models.py:433 msgid "the price paid to the vendor for this product" msgstr "この製品に対してベンダーに支払われた価格" -#: core/models.py:420 +#: core/models.py:434 msgid "vendor purchase price" msgstr "ベンダーの購入価格" -#: core/models.py:424 +#: core/models.py:438 msgid "available quantity of the product in stock" msgstr "在庫数" -#: core/models.py:425 +#: core/models.py:439 msgid "quantity in stock" msgstr "在庫数" -#: core/models.py:429 +#: core/models.py:443 msgid "vendor-assigned SKU for identifying the product" msgstr "製品を識別するためにベンダーが割り当てたSKU" -#: core/models.py:430 +#: core/models.py:444 msgid "vendor sku" msgstr "ベンダーのSKU" -#: core/models.py:436 +#: core/models.py:450 msgid "digital file associated with this stock if applicable" msgstr "この銘柄に関連するデジタルファイル(該当する場合" -#: core/models.py:437 +#: core/models.py:451 msgid "digital file" msgstr "デジタルファイル" -#: core/models.py:446 +#: core/models.py:460 msgid "stock entries" msgstr "ストックエントリー" -#: core/models.py:451 +#: core/models.py:465 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1551,55 +1551,55 @@ msgstr "" " (Category、Brand、ProductTag など) " "と相互作用し、パフォーマンスを向上させるために、頻繁にアクセスされるプロパティのキャッシュを管理します。アプリケーション内で商品データとその関連情報を定義し、操作するために使用されます。" -#: core/models.py:464 +#: core/models.py:478 msgid "category this product belongs to" msgstr "この製品が属するカテゴリ" -#: core/models.py:473 +#: core/models.py:487 msgid "optionally associate this product with a brand" msgstr "オプションでこの製品をブランドと関連付ける" -#: core/models.py:479 +#: core/models.py:493 msgid "tags that help describe or group this product" msgstr "この商品の説明やグループ分けに役立つタグ" -#: core/models.py:484 +#: core/models.py:498 msgid "indicates whether this product is digitally delivered" msgstr "この製品がデジタル配信されるかどうかを示す" -#: core/models.py:485 +#: core/models.py:499 msgid "is product digital" msgstr "製品はデジタルか" -#: core/models.py:491 +#: core/models.py:505 msgid "provide a clear identifying name for the product" msgstr "製品の明確な識別名を提供する" -#: core/models.py:492 +#: core/models.py:506 msgid "product name" msgstr "商品名" -#: core/models.py:497 core/models.py:772 +#: core/models.py:511 core/models.py:786 msgid "add a detailed description of the product" msgstr "商品の詳細説明を追加する" -#: core/models.py:498 +#: core/models.py:512 msgid "product description" msgstr "商品説明" -#: core/models.py:505 +#: core/models.py:519 msgid "part number for this product" msgstr "この製品の品番" -#: core/models.py:506 +#: core/models.py:520 msgid "part number" msgstr "品番" -#: core/models.py:525 +#: core/models.py:539 msgid "stock keeping unit for this product" msgstr "この製品の在庫管理単位" -#: core/models.py:599 +#: core/models.py:613 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 " @@ -1611,68 +1611,68 @@ msgstr "" "システム内の属性を表します。このクラスは、属性を定義および管理するために使用されます。属性は、他のエンティティに関連付けることができる、カスタマイズ可能なデータの部分です。属性には、関連するカテゴリ、グループ、値型、および名前があります。このモデルは、string、integer、float、boolean、array、object" " などの複数の型の値をサポートしています。これにより、動的で柔軟なデータ構造化が可能になります。" -#: core/models.py:611 +#: core/models.py:625 msgid "category of this attribute" msgstr "この属性のカテゴリー" -#: core/models.py:619 +#: core/models.py:633 msgid "group of this attribute" msgstr "この属性のグループ" -#: core/models.py:625 +#: core/models.py:639 msgid "string" msgstr "ストリング" -#: core/models.py:626 +#: core/models.py:640 msgid "integer" msgstr "整数" -#: core/models.py:627 +#: core/models.py:641 msgid "float" msgstr "フロート" -#: core/models.py:628 +#: core/models.py:642 msgid "boolean" msgstr "ブーリアン" -#: core/models.py:629 +#: core/models.py:643 msgid "array" msgstr "配列" -#: core/models.py:630 +#: core/models.py:644 msgid "object" msgstr "対象" -#: core/models.py:632 +#: core/models.py:646 msgid "type of the attribute's value" msgstr "属性値のタイプ" -#: core/models.py:633 +#: core/models.py:647 msgid "value type" msgstr "値の種類" -#: core/models.py:638 +#: core/models.py:652 msgid "name of this attribute" msgstr "この属性の名前" -#: core/models.py:639 +#: core/models.py:653 msgid "attribute's name" msgstr "属性名" -#: core/models.py:645 +#: core/models.py:659 msgid "is filterable" msgstr "フィルタリング可能" -#: core/models.py:646 +#: core/models.py:660 msgid "designates whether this attribute can be used for filtering or not" msgstr "この属性がフィルタリングに使用できるかどうかを指定する。" -#: core/models.py:657 core/models.py:675 +#: core/models.py:671 core/models.py:689 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "属性" -#: core/models.py:663 +#: core/models.py:677 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" @@ -1680,19 +1680,19 @@ msgid "" msgstr "" "製品にリンクされている属性の特定の値を表します。これは、「属性」を一意の「値」にリンクし、製品特性のより良い編成と動的な表現を可能にします。" -#: core/models.py:674 +#: core/models.py:688 msgid "attribute of this value" msgstr "この値の属性" -#: core/models.py:682 +#: core/models.py:696 msgid "the specific product associated with this attribute's value" msgstr "この属性の値に関連する特定の製品" -#: core/models.py:688 +#: core/models.py:702 msgid "the specific value for this attribute" msgstr "この属性の具体的な値" -#: core/models.py:701 +#: core/models.py:715 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -1702,39 +1702,39 @@ msgid "" msgstr "" "システム内の商品に関連付けられた商品画像を表します。このクラスは商品の画像を管理するために設計されており、画像ファイルのアップロード、特定の商品との関連付け、表示順の決定などの機能を提供します。また、画像の代替テキストによるアクセシビリティ機能も備えています。" -#: core/models.py:712 +#: core/models.py:726 msgid "provide alternative text for the image for accessibility" msgstr "アクセシビリティのために、画像に代替テキストを提供する。" -#: core/models.py:713 +#: core/models.py:727 msgid "image alt text" msgstr "画像のaltテキスト" -#: core/models.py:716 +#: core/models.py:730 msgid "upload the image file for this product" msgstr "この商品の画像ファイルをアップロードする" -#: core/models.py:717 core/models.py:742 +#: core/models.py:731 core/models.py:756 msgid "product image" msgstr "商品画像" -#: core/models.py:723 +#: core/models.py:737 msgid "determines the order in which images are displayed" msgstr "画像の表示順を決める" -#: core/models.py:724 +#: core/models.py:738 msgid "display priority" msgstr "表示優先度" -#: core/models.py:729 +#: core/models.py:743 msgid "the product that this image represents" msgstr "この画像が表す製品" -#: core/models.py:743 +#: core/models.py:757 msgid "product images" msgstr "商品画像" -#: core/models.py:748 +#: core/models.py:762 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1745,39 +1745,39 @@ msgid "" msgstr "" "割引を伴う商品の販促キャンペーンを表します。このクラスは、商品に対してパーセンテージベースの割引を提供する販促キャンペーンを定義および管理するために使用します。このクラスには、割引率を設定し、プロモーションの詳細を提供し、該当する商品にリンクするための属性が含まれます。商品カタログと統合して、キャンペーンの対象商品を決定します。" -#: core/models.py:760 +#: core/models.py:774 msgid "percentage discount for the selected products" msgstr "選択した商品の割引率" -#: core/models.py:761 +#: core/models.py:775 msgid "discount percentage" msgstr "割引率" -#: core/models.py:766 +#: core/models.py:780 msgid "provide a unique name for this promotion" msgstr "このプロモーションのユニークな名前を入力してください。" -#: core/models.py:767 +#: core/models.py:781 msgid "promotion name" msgstr "プロモーション名" -#: core/models.py:773 +#: core/models.py:787 msgid "promotion description" msgstr "プロモーション内容" -#: core/models.py:778 +#: core/models.py:792 msgid "select which products are included in this promotion" msgstr "キャンペーン対象商品をお選びください。" -#: core/models.py:779 +#: core/models.py:793 msgid "included products" msgstr "含まれる製品" -#: core/models.py:783 +#: core/models.py:797 msgid "promotion" msgstr "プロモーション" -#: core/models.py:794 +#: core/models.py:808 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1786,23 +1786,23 @@ msgid "" msgstr "" "希望する商品を保存・管理するためのユーザーのウィッシュリストを表します。このクラスは、商品のコレクションを管理する機能を提供し、商品の追加や削除などの操作をサポートし、複数の商品を一度に追加したり削除したりする操作をサポートします。" -#: core/models.py:806 +#: core/models.py:820 msgid "products that the user has marked as wanted" msgstr "ユーザーが欲しいとマークした商品" -#: core/models.py:814 +#: core/models.py:828 msgid "user who owns this wishlist" msgstr "このウィッシュリストを所有しているユーザー" -#: core/models.py:815 +#: core/models.py:829 msgid "wishlist owner" msgstr "ウィッシュリストのオーナー" -#: core/models.py:823 +#: core/models.py:837 msgid "wishlist" msgstr "ウィッシュリスト" -#: core/models.py:865 +#: core/models.py:879 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1813,19 +1813,19 @@ msgid "" msgstr "" "商品に関連付けられたドキュメンタリーのレコードを表します。このクラスは、ファイルのアップロードとそのメタデータを含む、特定の商品に関連するドキュメンタリーに関する情報を格納するために使用されます。ドキュメントファイルのファイルタイプと保存パスを処理するメソッドとプロパティが含まれています。特定のミックスインから機能を拡張し、追加のカスタム機能を提供します。" -#: core/models.py:878 +#: core/models.py:892 msgid "documentary" msgstr "ドキュメンタリー" -#: core/models.py:879 +#: core/models.py:893 msgid "documentaries" msgstr "ドキュメンタリー" -#: core/models.py:889 +#: core/models.py:903 msgid "unresolved" msgstr "未解決" -#: core/models.py:894 +#: core/models.py:908 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1842,59 +1842,59 @@ msgstr "" "レスポンスを保存してさらなる処理や検査を行うことができます。また、このクラスは住所とユーザを関連付けることができ、 " "パーソナライズされたデータの取り扱いを容易にします。" -#: core/models.py:909 +#: core/models.py:923 msgid "address line for the customer" msgstr "お客様の住所" -#: core/models.py:910 +#: core/models.py:924 msgid "address line" msgstr "住所" -#: core/models.py:912 +#: core/models.py:926 msgid "street" msgstr "ストリート" -#: core/models.py:913 +#: core/models.py:927 msgid "district" msgstr "地区" -#: core/models.py:914 +#: core/models.py:928 msgid "city" msgstr "都市" -#: core/models.py:915 +#: core/models.py:929 msgid "region" msgstr "地域" -#: core/models.py:916 +#: core/models.py:930 msgid "postal code" msgstr "郵便番号" -#: core/models.py:917 +#: core/models.py:931 msgid "country" msgstr "国名" -#: core/models.py:924 +#: core/models.py:938 msgid "geolocation point: (longitude, latitude)" msgstr "ジオロケーションポイント(経度、緯度)" -#: core/models.py:927 +#: core/models.py:941 msgid "full JSON response from geocoder for this address" msgstr "この住所に対するジオコーダーからの完全なJSON応答" -#: core/models.py:932 +#: core/models.py:946 msgid "stored JSON response from the geocoding service" msgstr "ジオコーディング・サービスからの保存されたJSONレスポンス" -#: core/models.py:940 +#: core/models.py:954 msgid "address" msgstr "住所" -#: core/models.py:941 +#: core/models.py:955 msgid "addresses" msgstr "住所" -#: core/models.py:953 +#: core/models.py:967 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -1907,86 +1907,86 @@ msgstr "" "(金額またはパーセンテージ)、有効期間、関連するユーザ " "(もしあれば)、および使用状況など、プロモーションコードに関する詳細を格納します。これは、制約が満たされていることを保証しながら、プロモコードを検証し、注文に適用する機能を含んでいます。" -#: core/models.py:967 +#: core/models.py:981 msgid "unique code used by a user to redeem a discount" msgstr "ユーザーが割引を利用する際に使用する固有のコード" -#: core/models.py:968 +#: core/models.py:982 msgid "promo code identifier" msgstr "プロモコード識別子" -#: core/models.py:975 +#: core/models.py:989 msgid "fixed discount amount applied if percent is not used" msgstr "パーセントを使用しない場合に適用される固定割引額" -#: core/models.py:976 +#: core/models.py:990 msgid "fixed discount amount" msgstr "固定割引額" -#: core/models.py:982 +#: core/models.py:996 msgid "percentage discount applied if fixed amount is not used" msgstr "定額を使用しない場合に適用される割引率" -#: core/models.py:983 +#: core/models.py:997 msgid "percentage discount" msgstr "割引率" -#: core/models.py:988 +#: core/models.py:1002 msgid "timestamp when the promocode expires" msgstr "プロモコードの有効期限が切れるタイムスタンプ" -#: core/models.py:989 +#: core/models.py:1003 msgid "end validity time" msgstr "終了有効時間" -#: core/models.py:994 +#: core/models.py:1008 msgid "timestamp from which this promocode is valid" msgstr "このプロモコードが有効なタイムスタンプ" -#: core/models.py:995 +#: core/models.py:1009 msgid "start validity time" msgstr "開始有効時間" -#: core/models.py:1000 +#: core/models.py:1014 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "プロモコードが使用されたタイムスタンプ、未使用の場合は空白" -#: core/models.py:1001 +#: core/models.py:1015 msgid "usage timestamp" msgstr "使用タイムスタンプ" -#: core/models.py:1006 +#: core/models.py:1020 msgid "user assigned to this promocode if applicable" msgstr "該当する場合、このプロモコードに割り当てられたユーザー" -#: core/models.py:1007 +#: core/models.py:1021 msgid "assigned user" msgstr "担当ユーザー" -#: core/models.py:1014 +#: core/models.py:1028 msgid "promo code" msgstr "プロモコード" -#: core/models.py:1015 +#: core/models.py:1029 msgid "promo codes" msgstr "プロモコード" -#: core/models.py:1022 +#: core/models.py:1044 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "割引の種類は1つだけ(金額またはパーセント)定義されるべきで、両方またはどちらも定義してはならない。" -#: core/models.py:1037 +#: core/models.py:1065 msgid "promocode already used" msgstr "プロモコードはすでに使用されています" -#: core/models.py:1053 +#: core/models.py:1081 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "プロモコード {self.uuid} の割引タイプが無効です!" -#: core/models.py:1062 +#: core/models.py:1090 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 " @@ -1997,144 +1997,144 @@ msgid "" msgstr "" "ユーザーによる注文を表します。このクラスは、請求や配送情報、ステータス、関連するユーザ、通知、関連する操作などのさまざまな属性を含む、アプリケーション内の注文をモデル化します。注文は関連する商品を持つことができ、プロモーションを適用し、住所を設定し、配送または請求の詳細を更新することができます。同様に、注文のライフサイクルにおける商品の管理もサポートします。" -#: core/models.py:1079 +#: core/models.py:1107 msgid "the billing address used for this order" msgstr "この注文に使用される請求先住所" -#: core/models.py:1087 +#: core/models.py:1115 msgid "optional promo code applied to this order" msgstr "この注文に適用されるプロモコード" -#: core/models.py:1088 +#: core/models.py:1116 msgid "applied promo code" msgstr "プロモーションコード適用" -#: core/models.py:1096 +#: core/models.py:1124 msgid "the shipping address used for this order" msgstr "この注文に使用された配送先住所" -#: core/models.py:1097 +#: core/models.py:1125 msgid "shipping address" msgstr "配送先住所" -#: core/models.py:1103 +#: core/models.py:1131 msgid "current status of the order in its lifecycle" msgstr "ライフサイクルにおける現在の注文状況" -#: core/models.py:1104 +#: core/models.py:1132 msgid "order status" msgstr "注文状況" -#: core/models.py:1109 core/models.py:1560 +#: core/models.py:1137 core/models.py:1618 msgid "json structure of notifications to display to users" msgstr "ユーザーに表示する通知のJSON構造、管理UIではテーブルビューが使用されます。" -#: core/models.py:1115 +#: core/models.py:1143 msgid "json representation of order attributes for this order" msgstr "この注文の注文属性のJSON表現" -#: core/models.py:1121 +#: core/models.py:1149 msgid "the user who placed the order" msgstr "注文を行ったユーザー" -#: core/models.py:1122 +#: core/models.py:1150 msgid "user" msgstr "ユーザー" -#: core/models.py:1128 +#: core/models.py:1156 msgid "the timestamp when the order was finalized" msgstr "注文が確定したタイムスタンプ" -#: core/models.py:1129 +#: core/models.py:1157 msgid "buy time" msgstr "時間を買う" -#: core/models.py:1136 +#: core/models.py:1164 msgid "a human-readable identifier for the order" msgstr "オーダーの人間が読み取り可能な識別子。" -#: core/models.py:1137 +#: core/models.py:1165 msgid "human readable id" msgstr "人間が読めるID" -#: core/models.py:1143 +#: core/models.py:1171 msgid "order" msgstr "オーダー" -#: core/models.py:1168 +#: core/models.py:1209 msgid "a user must have only one pending order at a time" msgstr "ユーザーは一度に1つの未決注文しか持つことができません!" -#: core/models.py:1202 +#: core/models.py:1249 msgid "you cannot add products to an order that is not a pending one" msgstr "保留中の注文以外の注文に商品を追加することはできません。" -#: core/models.py:1207 +#: core/models.py:1254 msgid "you cannot add inactive products to order" msgstr "アクティブでない商品を注文に追加することはできません。" -#: core/models.py:1224 +#: core/models.py:1271 msgid "you cannot add more products than available in stock" msgstr "在庫以上の商品を追加することはできません。" -#: core/models.py:1246 core/models.py:1271 core/models.py:1279 +#: core/models.py:1293 core/models.py:1318 core/models.py:1326 msgid "you cannot remove products from an order that is not a pending one" msgstr "保留中の注文以外の注文から商品を削除することはできません。" -#: core/models.py:1267 +#: core/models.py:1314 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name}はクエリ<{query}と一緒に存在しません!" -#: core/models.py:1299 +#: core/models.py:1346 msgid "promocode does not exist" msgstr "プロモコードが存在しない" -#: core/models.py:1305 +#: core/models.py:1352 msgid "you can only buy physical products with shipping address specified" msgstr "配送先住所が指定された現物商品のみ購入可能!" -#: core/models.py:1324 +#: core/models.py:1371 msgid "address does not exist" msgstr "アドレスが存在しない" -#: core/models.py:1345 core/models.py:1414 +#: core/models.py:1392 core/models.py:1461 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "現在ご購入いただけません。数分後にもう一度お試しください。" -#: core/models.py:1348 core/models.py:1410 +#: core/models.py:1395 core/models.py:1457 msgid "invalid force value" msgstr "無効なフォース値" -#: core/models.py:1354 core/models.py:1417 +#: core/models.py:1401 core/models.py:1464 msgid "you cannot purchase an empty order!" msgstr "空注文はできません!" -#: core/models.py:1373 +#: core/models.py:1420 msgid "you cannot buy an order without a user" msgstr "ユーザーがいない注文は購入できない!" -#: core/models.py:1387 +#: core/models.py:1434 msgid "a user without a balance cannot buy with balance" msgstr "残高のないユーザーは、残高で購入することはできない!" -#: core/models.py:1392 +#: core/models.py:1439 msgid "insufficient funds to complete the order" msgstr "注文を完了するための資金不足" -#: core/models.py:1426 +#: core/models.py:1473 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "ご登録がない場合はご購入いただけませんので、以下の情報をお知らせください:お客様のお名前、お客様のEメール、お客様の電話番号" -#: core/models.py:1435 +#: core/models.py:1482 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "支払方法が無効です:{available_payment_methods}からの{payment_method}が無効です!" -#: core/models.py:1533 +#: core/models.py:1591 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2148,108 +2148,108 @@ msgid "" msgstr "" "注文に関連する商品とその属性を表す。OrderProductモデルは、購入価格、数量、商品属性、ステータスなどの詳細を含む、注文の一部である商品に関する情報を保持します。ユーザーや管理者への通知を管理し、商品残高の返却やフィードバックの追加などの操作を処理します。このモデルはまた、合計価格の計算やデジタル商品のダウンロードURLの生成など、ビジネスロジックをサポートするメソッドやプロパティも提供します。このモデルはOrderモデルとProductモデルと統合され、それらへの参照を保存します。" -#: core/models.py:1548 +#: core/models.py:1606 msgid "the price paid by the customer for this product at purchase time" msgstr "この商品の購入時に顧客が支払った価格" -#: core/models.py:1549 +#: core/models.py:1607 msgid "purchase price at order time" msgstr "注文時の購入価格" -#: core/models.py:1554 +#: core/models.py:1612 msgid "internal comments for admins about this ordered product" msgstr "この注文商品に関する管理者への内部コメント" -#: core/models.py:1555 +#: core/models.py:1613 msgid "internal comments" msgstr "社内コメント" -#: core/models.py:1561 +#: core/models.py:1619 msgid "user notifications" msgstr "ユーザー通知" -#: core/models.py:1566 +#: core/models.py:1624 msgid "json representation of this item's attributes" msgstr "このアイテムの属性のJSON表現" -#: core/models.py:1567 +#: core/models.py:1625 msgid "ordered product attributes" msgstr "製品属性の順序" -#: core/models.py:1572 +#: core/models.py:1630 msgid "reference to the parent order that contains this product" msgstr "この商品を含む親注文への参照" -#: core/models.py:1573 +#: core/models.py:1631 msgid "parent order" msgstr "親注文" -#: core/models.py:1582 +#: core/models.py:1640 msgid "the specific product associated with this order line" msgstr "この注文ラインに関連する特定の製品" -#: core/models.py:1589 +#: core/models.py:1647 msgid "quantity of this specific product in the order" msgstr "注文に含まれる特定の商品の数量" -#: core/models.py:1590 +#: core/models.py:1648 msgid "product quantity" msgstr "製品数量" -#: core/models.py:1597 +#: core/models.py:1655 msgid "current status of this product in the order" msgstr "この商品の現在のご注文状況" -#: core/models.py:1598 +#: core/models.py:1656 msgid "product line status" msgstr "製品ラインの状況" -#: core/models.py:1661 +#: core/models.py:1719 msgid "order product must have an order" msgstr "Orderproductには関連する注文がなければならない!" -#: core/models.py:1663 +#: core/models.py:1721 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "フィードバックに指定されたアクションが間違っています:{action}です!" -#: core/models.py:1677 +#: core/models.py:1735 msgid "you cannot feedback an order which is not received" msgstr "受信していない注文をフィードバックすることはできません。" -#: core/models.py:1683 +#: core/models.py:1741 msgid "name" msgstr "名称" -#: core/models.py:1684 +#: core/models.py:1742 msgid "URL of the integration" msgstr "統合のURL" -#: core/models.py:1685 +#: core/models.py:1743 msgid "authentication credentials" msgstr "認証情報" -#: core/models.py:1699 +#: core/models.py:1765 msgid "you can only have one default CRM provider" msgstr "デフォルトのCRMプロバイダーは1つだけです。" -#: core/models.py:1703 +#: core/models.py:1775 msgid "CRM" msgstr "CRM" -#: core/models.py:1704 +#: core/models.py:1776 msgid "CRMs" msgstr "CRM" -#: core/models.py:1716 +#: core/models.py:1788 msgid "order CRM link" msgstr "注文のCRMリンク" -#: core/models.py:1717 +#: core/models.py:1789 msgid "orders CRM links" msgstr "オーダーのCRMリンク" -#: core/models.py:1722 +#: core/models.py:1794 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2261,19 +2261,15 @@ msgstr "" "注文に関連するデジタル資産のダウンロード機能を表します。DigitalAssetDownloadクラスは、注文商品に関連するダウンロードを管理し、アクセスする機能を提供します。このクラスは、関連する注文商品、ダウンロード数、およびアセットが公開されているかどうかの情報を保持します。関連する注文が完了したステータスのときに、アセットをダウンロードするための" " URL を生成するメソッドも含まれています。" -#: core/models.py:1736 +#: core/models.py:1808 msgid "download" msgstr "ダウンロード" -#: core/models.py:1737 +#: core/models.py:1809 msgid "downloads" msgstr "ダウンロード" -#: core/models.py:1745 -msgid "you can not download a digital asset for a non-finished order" -msgstr "未完成の注文のデジタル資産をダウンロードすることはできません。" - -#: core/models.py:1754 +#: core/models.py:1823 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2283,28 +2279,28 @@ msgid "" msgstr "" "製品に対するユーザのフィードバックを管理します。このクラスは、購入した特定の商品に対するユーザのフィードバックを取得し、保存するために設計されています。ユーザのコメント、注文の関連商品への参照、そしてユーザが割り当てた評価を保存する属性を含みます。このクラスは、フィードバックデータを効果的にモデル化し、管理するためにデータベースフィールドを使用します。" -#: core/models.py:1766 +#: core/models.py:1835 msgid "user-provided comments about their experience with the product" msgstr "ユーザーから寄せられた製品使用体験に関するコメント" -#: core/models.py:1767 +#: core/models.py:1836 msgid "feedback comments" msgstr "フィードバック・コメント" -#: core/models.py:1774 +#: core/models.py:1843 msgid "" "references the specific product in an order that this feedback is about" msgstr "このフィードバックが対象としている注文の特定の製品を参照する。" -#: core/models.py:1775 +#: core/models.py:1844 msgid "related order product" msgstr "関連注文商品" -#: core/models.py:1780 +#: core/models.py:1849 msgid "user-assigned rating for the product" msgstr "ユーザーによる製品の評価" -#: core/models.py:1781 +#: core/models.py:1850 msgid "product rating" msgstr "製品評価" @@ -2497,11 +2493,11 @@ msgstr "" "すべての権利\n" " 予約済み" -#: core/utils/caching.py:41 +#: core/utils/caching.py:48 msgid "both data and timeout are required" msgstr "データとタイムアウトの両方が必要" -#: core/utils/caching.py:43 +#: core/utils/caching.py:50 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "無効なタイムアウト値です。" @@ -2533,24 +2529,288 @@ msgstr "この操作を行う権限がありません。" msgid "NOMINATIM_URL must be configured." msgstr "NOMINATIM_URLパラメータを設定する必要があります!" -#: core/validators.py:16 +#: core/validators.py:14 #, 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/validators.py:22 -msgid "invalid phone number format" -msgstr "無効な電話番号形式" +#: core/views.py:72 +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:489 +#: core/views.py:87 +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 "" +"サイトマップの詳細表示レスポンスを処理します。この関数はリクエストを処理し、適切なサイトマップ詳細レスポンスを取得し、XML の Content-" +"Type ヘッダを設定します。" + +#: core/views.py:116 +msgid "" +"Returns a list of supported languages and their corresponding information." +msgstr "サポートされている言語の一覧と対応する情報を返します。" + +#: core/views.py:148 +msgid "Returns the parameters of the website as a JSON object." +msgstr "ウェブサイトのパラメータをJSONオブジェクトとして返します。" + +#: core/views.py:167 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +msgstr "指定されたキーとタイムアウトで、キャッシュ・データの読み取りや設定などのキャッシュ操作を行う。" + +#: core/views.py:194 +msgid "Handles `contact us` form submissions." +msgstr "お問い合わせフォームの送信を処理する。" + +#: core/views.py:215 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "入ってくる POST リクエストからの URL の処理と検証のリクエストを処理します。" + +#: core/views.py:255 +msgid "Handles global search queries." +msgstr "グローバル検索クエリを処理する。" + +#: core/views.py:270 +msgid "Handles the logic of buying as a business without registration." +msgstr "登録なしでビジネスとして購入するロジックを扱う。" + +#: core/views.py:312 msgid "you can only download the digital asset once" msgstr "デジタルアセットのダウンロードは1回限りです。" -#: core/views.py:547 +#: core/views.py:315 +msgid "the order must be paid before downloading the digital asset" +msgstr "デジタル資産をダウンロードする前に、注文を支払う必要があります。" + +#: core/views.py:353 +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." +msgstr "" +"注文に関連付けられたデジタルアセットのダウンロードを処理します。\n" +"この関数は、プロジェクトのストレージディレクトリにあるデジタルアセットファイルの提供を試みます。ファイルが見つからない場合、リソースが利用できないことを示すHTTP 404エラーが発生します。" + +#: core/views.py:365 msgid "favicon not found" msgstr "ファビコンが見つかりません" -#: core/viewsets.py:1357 +#: core/views.py:370 +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." +msgstr "" +"ウェブサイトのファビコンへのリクエストを処理します。\n" +"この関数は、プロジェクトの静的ディレクトリにあるファビコンファイルの提供を試みます。ファビコンファイルが見つからない場合、リソースが利用できないことを示す HTTP 404 エラーが発生します。" + +#: core/views.py:382 +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 "" +"リクエストを admin インデックスページにリダイレクトします。この関数は、HTTP リクエストを処理し、 Django の admin " +"インタフェースインデッ クスページにリダイレクトします。HTTP リダイレクトの処理には Django の `redirect` 関数を使います。" + +#: core/viewsets.py:128 +msgid "" +"Defines a viewset for managing Evibes-related operations. The EvibesViewSet " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" +"Evibes 関連の操作を管理するためのビューセットを定義します。EvibesViewSet クラスは ModelViewSet を継承し、Evibes" +" エンティティに対する アクションや操作を扱うための機能を提供します。現在のアクションに基づいた動的なシリアライザークラスのサポート、 " +"カスタマイズ可能なパーミッション、レンダリングフォーマットが含まれます。" + +#: core/viewsets.py:147 +msgid "" +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." +msgstr "" +"AttributeGroup " +"オブジェクトを管理するためのビューセットを表します。データのフィルタリング、シリアライズ、取得など、AttributeGroup " +"に関連する操作を処理します。このクラスは、アプリケーションのAPIレイヤの一部であり、AttributeGroupデータの要求と応答を処理する標準化された方法を提供します。" + +#: core/viewsets.py:166 +msgid "" +"Handles operations related to Attribute objects within the application. " +"Provides a set of API endpoints to interact with Attribute data. This class " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"アプリケーション内でAttributeオブジェクトに関連する操作を処理する。Attribute データと対話するための API " +"エンドポイントのセットを提供します。このクラスは、Attribute " +"オブジェクトのクエリ、フィルタリング、およびシリアライズを管理し、特定のフィールドによるフィルタリングや、リクエストに応じた詳細情報と簡略化された情報の取得など、返されるデータの動的な制御を可能にします。" + +#: core/viewsets.py:185 +msgid "" +"A viewset for managing AttributeValue objects. This viewset provides " +"functionality for listing, retrieving, creating, updating, and deleting " +"AttributeValue objects. It integrates with Django REST Framework's viewset " +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." +msgstr "" +"AttributeValue オブジェクトを管理するためのビューセットです。このビューセットは、 AttributeValue " +"オブジェクトの一覧表示、取得、作成、更新、削除の機能を提供し ます。Django REST Framework " +"のビューセット機構と統合され、異なるアクションに適切なシリアライザを使います。フィルタリング機能は DjangoFilterBackend " +"を通して提供されます。" + +#: core/viewsets.py:204 +msgid "" +"Manages views for Category-related operations. The CategoryViewSet class is " +"responsible for handling operations related to the Category model in the " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" +"Category関連の操作のためのビューを管理します。CategoryViewSetクラスは、システム内のCategoryモデルに関連する操作を処理する責任があります。カテゴリデータの取得、フィルタリング、シリアライズをサポートします。ビューセットはまた、許可されたユーザーだけが特定のデータにアクセスできるようにパーミッションを強制します。" + +#: core/viewsets.py:315 +msgid "" +"Represents a viewset for managing Brand instances. This class provides " +"functionality for querying, filtering, and serializing Brand objects. It " +"uses Django's ViewSet framework to simplify the implementation of API " +"endpoints for Brand objects." +msgstr "" +"Brandインスタンスを管理するためのビューセットを表します。このクラスは Brand " +"オブジェクトのクエリ、フィルタリング、シリアライズの機能を提供します。Django の ViewSet フレームワークを使い、 Brand " +"オブジェクトの API エンドポイントの実装を簡素化します。" + +#: core/viewsets.py:427 +msgid "" +"Manages operations related to the `Product` model in the system. This class " +"provides a viewset for managing products, including their filtering, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" +"システム内の `Product` " +"モデルに関連する操作を管理する。このクラスは、商品のフィルタリング、シリアライズ、特定のインスタンスに対する操作など、商品を管理するためのビューセットを提供します。共通の機能を使うために" +" `EvibesViewSet` を継承し、 RESTful API 操作のために Django REST " +"フレームワークと統合しています。商品の詳細を取得したり、パーミッションを適用したり、商品の関連するフィードバックにアクセスするためのメソッドを含みます。" + +#: core/viewsets.py:547 +msgid "" +"Represents a viewset for managing Vendor objects. This viewset allows " +"fetching, filtering, and serializing Vendor data. It defines the queryset, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" +"Vendor オブジェクトを管理するためのビューセットを表します。このビューセットを使用すると、 Vendor " +"のデータを取得したりフィルタリングしたりシリアライズしたりすることができます。さまざまなアクションを処理するためのクエリセット、 " +"フィルタ設定、シリアライザクラスを定義します。このクラスの目的は、 Django REST フレームワークを通して Vendor " +"関連リソースへの合理的なアクセスを提供することです。" + +#: core/viewsets.py:567 +msgid "" +"Representation of a view set handling Feedback objects. This class manages " +"operations related to Feedback objects, including listing, filtering, and " +"retrieving details. The purpose of this view set is to provide different " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"use of Django's filtering system for querying data." +msgstr "" +"Feedback オブジェクトを扱うビューセットの表現。このクラスは、一覧表示、フィルタリング、詳細の取得など、Feedback " +"オブジェクトに関する操作を管理します。このビューセットの目的は、アクションごとに異なるシリアライザを提供し、アクセス可能な Feedback " +"オブジェクトのパーミッションベースの処理を実装することです。ベースとなる `EvibesViewSet` を拡張し、Django " +"のフィルタリングシステムを利用してデータを取得します。" + +#: core/viewsets.py:593 +msgid "" +"ViewSet for managing orders and related operations. This class provides " +"functionality to retrieve, modify, and manage order objects. It includes " +"various endpoints for handling order operations such as adding or removing " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " +"enforces permissions accordingly while interacting with order data." +msgstr "" +"注文と関連する操作を管理するための " +"ViewSet。このクラスは、注文オブジェクトを取得、変更、管理する機能を提供します。商品の追加や削除、登録ユーザや未登録ユーザの購入の実行、現在の認証ユーザの保留中の注文の取得など、注文操作を処理するためのさまざまなエンドポイントを含みます。ViewSetは、実行される特定のアクションに基づいて複数のシリアライザを使用し、注文データを操作している間、それに応じてパーミッションを強制します。" + +#: core/viewsets.py:782 +msgid "" +"Provides a viewset for managing OrderProduct entities. This viewset enables " +"CRUD operations and custom actions specific to the OrderProduct model. It " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " +"feedback on OrderProduct instances" +msgstr "" +"OrderProduct エンティティを管理するためのビューセットを提供します。このビューセットは、OrderProduct モデルに固有の CRUD " +"操作とカスタムアクションを可能にします。これは、要求されたアクションに基づくフィルタリング、パーミッションチェック、シリアライザーの切り替えを含みます。さらに、OrderProduct" +" インスタンスに関するフィードバックを処理するための詳細なアクションを提供します。" + +#: core/viewsets.py:833 +msgid "Manages operations related to Product images in the application. " +msgstr "アプリケーション内の商品画像に関する操作を管理します。" + +#: core/viewsets.py:845 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +msgstr "様々なAPIアクションによるプロモコードインスタンスの取得と処理を管理します。" + +#: core/viewsets.py:866 +msgid "Represents a view set for managing promotions. " +msgstr "プロモーションを管理するためのビューセットを表します。" + +#: core/viewsets.py:878 +msgid "Handles operations related to Stock data in the system." +msgstr "システム内のストックデータに関する操作を行う。" + +#: core/viewsets.py:892 +msgid "" +"ViewSet for managing Wishlist operations. The WishlistViewSet provides " +"endpoints for interacting with a user's wish list, allowing for the " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " +"actions for wishlist products. Permission checks are integrated to ensure " +"that users can only manage their own wishlists unless explicit permissions " +"are granted." +msgstr "" +"ウィッシュリスト操作を管理するためのViewSet。WishlistViewSetは、ユーザーのウィッシュリストと対話するためのエンドポイントを提供し、ウィッシュリスト内の商品の検索、変更、カスタマイズを可能にします。このViewSetは、ウィッシュリスト商品の追加、削除、一括アクションなどの機能を容易にします。明示的なパーミッションが付与されていない限り、ユーザーが自分のウィッシュリストのみを管理できるよう、パーミッションチェックが統合されています。" + +#: core/viewsets.py:1007 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" +"このクラスは `Address` オブジェクトを管理するためのビューセット機能を提供する。AddressViewSet " +"クラスは、住所エンティティに関連する CRUD 操作、フィルタリング、カスタムアクションを可能にします。異なる HTTP " +"メソッドに特化した振る舞いや、シリアライザのオーバーライド、 リクエストコンテキストに基づいたパーミッション処理などを含みます。" + +#: core/viewsets.py:1074 #, python-brace-format msgid "Geocoding error: {e}" msgstr "ジオコーディングエラー:{e}" + +#: core/viewsets.py:1081 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" +"アプリケーション内で商品タグに関連する操作を処理します。このクラスは、商品タグオブジェクトの取得、フィルタリング、シリアライズの機能を提供します。指定されたフィルタバックエンドを使用して特定の属性に対する柔軟なフィルタリングをサポートし、実行されるアクションに基づいて動的に異なるシリアライザを使用します。" diff --git a/core/locale/kk_KZ/LC_MESSAGES/django.po b/core/locale/kk_KZ/LC_MESSAGES/django.po index 6c0be631..caaea813 100644 --- a/core/locale/kk_KZ/LC_MESSAGES/django.po +++ b/core/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" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -16,36 +16,36 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: core/abstract.py:11 +#: core/abstract.py:12 msgid "unique id" msgstr "" -#: core/abstract.py:12 +#: core/abstract.py:13 msgid "unique id is used to surely identify any database object" msgstr "" -#: core/abstract.py:19 +#: core/abstract.py:20 msgid "is active" msgstr "" -#: core/abstract.py:20 +#: core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed permission" msgstr "" -#: core/abstract.py:22 core/choices.py:18 +#: core/abstract.py:23 core/choices.py:18 msgid "created" msgstr "" -#: core/abstract.py:22 +#: core/abstract.py:23 msgid "when the object first appeared on the database" msgstr "" -#: core/abstract.py:23 +#: core/abstract.py:24 msgid "modified" msgstr "" -#: core/abstract.py:23 +#: core/abstract.py:24 msgid "when the object was last modified" msgstr "" @@ -88,11 +88,11 @@ msgid "selected items have been deactivated." msgstr "" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 +#: core/graphene/object_types.py:616 core/models.py:701 core/models.py:709 msgid "attribute value" msgstr "" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 msgid "attribute values" msgstr "" @@ -104,7 +104,7 @@ msgstr "" msgid "images" msgstr "" -#: core/admin.py:155 core/models.py:445 +#: core/admin.py:155 core/models.py:459 msgid "stock" msgstr "" @@ -112,11 +112,11 @@ msgstr "" msgid "stocks" msgstr "" -#: core/admin.py:166 core/models.py:1609 +#: core/admin.py:166 core/models.py:1667 msgid "order product" msgstr "" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 msgid "order products" msgstr "" @@ -678,7 +678,7 @@ msgstr "" msgid "add or remove feedback on an order–product relation" msgstr "" -#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 msgid "no search term provided." msgstr "" @@ -731,7 +731,7 @@ msgid "Quantity" msgstr "" #: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:287 core/models.py:369 core/models.py:522 +#: core/models.py:301 core/models.py:383 core/models.py:536 msgid "Slug" msgstr "" @@ -747,7 +747,7 @@ msgstr "" msgid "Include personal ordered" msgstr "" -#: core/filters.py:85 core/models.py:526 +#: core/filters.py:85 core/models.py:540 msgid "SKU" msgstr "" @@ -820,7 +820,7 @@ msgstr "" msgid "camelized JSON data from the requested URL" msgstr "" -#: core/graphene/mutations.py:65 core/views.py:360 +#: core/graphene/mutations.py:65 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "" @@ -851,7 +851,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:839 +#: core/graphene/mutations.py:527 core/viewsets.py:679 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" @@ -925,9 +925,9 @@ msgstr "" msgid "original address string provided by the user" msgstr "" -#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 -#: core/models.py:1234 core/models.py:1263 core/models.py:1288 -#: core/viewsets.py:842 +#: core/graphene/mutations.py:656 core/models.py:849 core/models.py:862 +#: core/models.py:1281 core/models.py:1310 core/models.py:1335 +#: core/viewsets.py:682 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" @@ -941,8 +941,8 @@ msgid "elasticsearch - works like a charm" msgstr "" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 -#: core/models.py:1686 +#: core/graphene/object_types.py:444 core/models.py:672 core/models.py:1144 +#: core/models.py:1744 msgid "attributes" msgstr "" @@ -955,11 +955,11 @@ msgid "groups of attributes" msgstr "" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:612 +#: core/graphene/object_types.py:224 core/models.py:326 core/models.py:626 msgid "categories" msgstr "" -#: core/graphene/object_types.py:124 core/models.py:383 +#: core/graphene/object_types.py:124 core/models.py:397 msgid "brands" msgstr "" @@ -968,7 +968,7 @@ msgid "category image url" msgstr "" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:249 +#: core/models.py:263 msgid "markup percentage" msgstr "" @@ -988,7 +988,7 @@ msgstr "" msgid "products in this category" msgstr "" -#: core/graphene/object_types.py:351 core/models.py:155 +#: core/graphene/object_types.py:351 core/models.py:169 msgid "vendors" msgstr "" @@ -1013,7 +1013,7 @@ msgid "represents feedback from a user." msgstr "" #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1110 +#: core/models.py:1138 msgid "notifications" msgstr "" @@ -1021,7 +1021,7 @@ msgstr "" msgid "download url for this order product if applicable" msgstr "" -#: core/graphene/object_types.py:400 core/models.py:1791 +#: core/graphene/object_types.py:400 core/models.py:1860 msgid "feedback" msgstr "" @@ -1029,7 +1029,7 @@ msgstr "" msgid "a list of order products in this order" msgstr "" -#: core/graphene/object_types.py:436 core/models.py:1080 +#: core/graphene/object_types.py:436 core/models.py:1108 msgid "billing address" msgstr "" @@ -1055,7 +1055,7 @@ msgstr "" msgid "transactions for this order" msgstr "" -#: core/graphene/object_types.py:465 core/models.py:1144 +#: core/graphene/object_types.py:465 core/models.py:1172 msgid "orders" msgstr "" @@ -1067,15 +1067,15 @@ msgstr "" msgid "product's images" msgstr "" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 +#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 msgid "category" msgstr "" -#: core/graphene/object_types.py:502 core/models.py:1792 +#: core/graphene/object_types.py:502 core/models.py:1861 msgid "feedbacks" msgstr "" -#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 +#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 msgid "brand" msgstr "" @@ -1107,7 +1107,7 @@ msgstr "" msgid "only available for personal orders" msgstr "" -#: core/graphene/object_types.py:534 core/models.py:536 +#: core/graphene/object_types.py:534 core/models.py:550 msgid "products" msgstr "" @@ -1119,15 +1119,15 @@ msgstr "" msgid "products on sale" msgstr "" -#: core/graphene/object_types.py:651 core/models.py:784 +#: core/graphene/object_types.py:651 core/models.py:798 msgid "promotions" msgstr "" -#: core/graphene/object_types.py:655 core/models.py:154 +#: core/graphene/object_types.py:655 core/models.py:168 msgid "vendor" msgstr "" -#: core/graphene/object_types.py:656 core/models.py:535 +#: core/graphene/object_types.py:656 core/models.py:549 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1135,11 +1135,11 @@ msgstr "" msgid "product" msgstr "" -#: core/graphene/object_types.py:667 core/models.py:807 +#: core/graphene/object_types.py:667 core/models.py:821 msgid "wishlisted products" msgstr "" -#: core/graphene/object_types.py:673 core/models.py:824 +#: core/graphene/object_types.py:673 core/models.py:838 msgid "wishlists" msgstr "" @@ -1147,7 +1147,7 @@ msgstr "" msgid "tagged products" msgstr "" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 +#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 msgid "product tags" msgstr "" @@ -1252,7 +1252,7 @@ msgstr "" msgid "attribute group's name" msgstr "" -#: core/models.py:100 core/models.py:620 +#: core/models.py:100 core/models.py:634 msgid "attribute group" msgstr "" @@ -1291,7 +1291,7 @@ msgstr "" msgid "vendor name" msgstr "" -#: core/models.py:163 +#: core/models.py:177 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1300,42 +1300,42 @@ msgid "" "metadata customization for administrative purposes." msgstr "" -#: core/models.py:175 core/models.py:206 +#: core/models.py:189 core/models.py:220 msgid "internal tag identifier for the product tag" msgstr "" -#: core/models.py:176 core/models.py:207 +#: core/models.py:190 core/models.py:221 msgid "tag name" msgstr "" -#: core/models.py:180 core/models.py:211 +#: core/models.py:194 core/models.py:225 msgid "user-friendly name for the product tag" msgstr "" -#: core/models.py:181 core/models.py:212 +#: core/models.py:195 core/models.py:226 msgid "tag display name" msgstr "" -#: core/models.py:189 +#: core/models.py:203 msgid "product tag" msgstr "" -#: core/models.py:195 +#: core/models.py:209 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:220 +#: core/models.py:234 msgid "category tag" msgstr "" -#: core/models.py:221 core/models.py:293 +#: core/models.py:235 core/models.py:307 msgid "category tags" msgstr "" -#: core/models.py:226 +#: core/models.py:240 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1348,51 +1348,51 @@ msgid "" "priority." msgstr "" -#: core/models.py:240 +#: core/models.py:254 msgid "upload an image representing this category" msgstr "" -#: core/models.py:243 +#: core/models.py:257 msgid "category image" msgstr "" -#: core/models.py:248 +#: core/models.py:262 msgid "define a markup percentage for products in this category" msgstr "" -#: core/models.py:257 +#: core/models.py:271 msgid "parent of this category to form a hierarchical structure" msgstr "" -#: core/models.py:258 +#: core/models.py:272 msgid "parent category" msgstr "" -#: core/models.py:263 +#: core/models.py:277 msgid "category name" msgstr "" -#: core/models.py:264 +#: core/models.py:278 msgid "provide a name for this category" msgstr "" -#: core/models.py:271 +#: core/models.py:285 msgid "add a detailed description for this category" msgstr "" -#: core/models.py:272 +#: core/models.py:286 msgid "category description" msgstr "" -#: core/models.py:292 +#: core/models.py:306 msgid "tags that help describe or group this category" msgstr "" -#: core/models.py:299 core/models.py:375 +#: core/models.py:313 core/models.py:389 msgid "priority" msgstr "" -#: core/models.py:318 +#: core/models.py:332 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1400,47 +1400,47 @@ msgid "" "organization and representation of brand-related data within the application." msgstr "" -#: core/models.py:328 +#: core/models.py:342 msgid "name of this brand" msgstr "" -#: core/models.py:329 +#: core/models.py:343 msgid "brand name" msgstr "" -#: core/models.py:336 +#: core/models.py:350 msgid "upload a logo representing this brand" msgstr "" -#: core/models.py:338 +#: core/models.py:352 msgid "brand small image" msgstr "" -#: core/models.py:344 +#: core/models.py:358 msgid "upload a big logo representing this brand" msgstr "" -#: core/models.py:346 +#: core/models.py:360 msgid "brand big image" msgstr "" -#: core/models.py:351 +#: core/models.py:365 msgid "add a detailed description of the brand" msgstr "" -#: core/models.py:352 +#: core/models.py:366 msgid "brand description" msgstr "" -#: core/models.py:357 +#: core/models.py:371 msgid "optional categories that this brand is associated with" msgstr "" -#: core/models.py:358 +#: core/models.py:372 msgid "associated categories" msgstr "" -#: core/models.py:388 +#: core/models.py:402 msgid "" "Represents the stock of a product managed in the system. This class provides " "details about the relationship between vendors, products, and their stock " @@ -1450,67 +1450,67 @@ msgid "" "from various vendors." msgstr "" -#: core/models.py:400 +#: core/models.py:414 msgid "the vendor supplying this product stock" msgstr "" -#: core/models.py:401 +#: core/models.py:415 msgid "associated vendor" msgstr "" -#: core/models.py:405 +#: core/models.py:419 msgid "final price to the customer after markups" msgstr "" -#: core/models.py:406 +#: core/models.py:420 msgid "selling price" msgstr "" -#: core/models.py:411 +#: core/models.py:425 msgid "the product associated with this stock entry" msgstr "" -#: core/models.py:412 core/models.py:683 core/models.py:730 core/models.py:1583 +#: core/models.py:426 core/models.py:697 core/models.py:744 core/models.py:1641 msgid "associated product" msgstr "" -#: core/models.py:419 +#: core/models.py:433 msgid "the price paid to the vendor for this product" msgstr "" -#: core/models.py:420 +#: core/models.py:434 msgid "vendor purchase price" msgstr "" -#: core/models.py:424 +#: core/models.py:438 msgid "available quantity of the product in stock" msgstr "" -#: core/models.py:425 +#: core/models.py:439 msgid "quantity in stock" msgstr "" -#: core/models.py:429 +#: core/models.py:443 msgid "vendor-assigned SKU for identifying the product" msgstr "" -#: core/models.py:430 +#: core/models.py:444 msgid "vendor sku" msgstr "" -#: core/models.py:436 +#: core/models.py:450 msgid "digital file associated with this stock if applicable" msgstr "" -#: core/models.py:437 +#: core/models.py:451 msgid "digital file" msgstr "" -#: core/models.py:446 +#: core/models.py:460 msgid "stock entries" msgstr "" -#: core/models.py:451 +#: core/models.py:465 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1522,55 +1522,55 @@ msgid "" "product data and its associated information within an application." msgstr "" -#: core/models.py:464 +#: core/models.py:478 msgid "category this product belongs to" msgstr "" -#: core/models.py:473 +#: core/models.py:487 msgid "optionally associate this product with a brand" msgstr "" -#: core/models.py:479 +#: core/models.py:493 msgid "tags that help describe or group this product" msgstr "" -#: core/models.py:484 +#: core/models.py:498 msgid "indicates whether this product is digitally delivered" msgstr "" -#: core/models.py:485 +#: core/models.py:499 msgid "is product digital" msgstr "" -#: core/models.py:491 +#: core/models.py:505 msgid "provide a clear identifying name for the product" msgstr "" -#: core/models.py:492 +#: core/models.py:506 msgid "product name" msgstr "" -#: core/models.py:497 core/models.py:772 +#: core/models.py:511 core/models.py:786 msgid "add a detailed description of the product" msgstr "" -#: core/models.py:498 +#: core/models.py:512 msgid "product description" msgstr "" -#: core/models.py:505 +#: core/models.py:519 msgid "part number for this product" msgstr "" -#: core/models.py:506 +#: core/models.py:520 msgid "part number" msgstr "" -#: core/models.py:525 +#: core/models.py:539 msgid "stock keeping unit for this product" msgstr "" -#: core/models.py:599 +#: core/models.py:613 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 " @@ -1580,87 +1580,87 @@ msgid "" "for dynamic and flexible data structuring." msgstr "" -#: core/models.py:611 +#: core/models.py:625 msgid "category of this attribute" msgstr "" -#: core/models.py:619 +#: core/models.py:633 msgid "group of this attribute" msgstr "" -#: core/models.py:625 +#: core/models.py:639 msgid "string" msgstr "" -#: core/models.py:626 +#: core/models.py:640 msgid "integer" msgstr "" -#: core/models.py:627 +#: core/models.py:641 msgid "float" msgstr "" -#: core/models.py:628 +#: core/models.py:642 msgid "boolean" msgstr "" -#: core/models.py:629 +#: core/models.py:643 msgid "array" msgstr "" -#: core/models.py:630 +#: core/models.py:644 msgid "object" msgstr "" -#: core/models.py:632 +#: core/models.py:646 msgid "type of the attribute's value" msgstr "" -#: core/models.py:633 +#: core/models.py:647 msgid "value type" msgstr "" -#: core/models.py:638 +#: core/models.py:652 msgid "name of this attribute" msgstr "" -#: core/models.py:639 +#: core/models.py:653 msgid "attribute's name" msgstr "" -#: core/models.py:645 +#: core/models.py:659 msgid "is filterable" msgstr "" -#: core/models.py:646 +#: core/models.py:660 msgid "designates whether this attribute can be used for filtering or not" msgstr "" -#: core/models.py:657 core/models.py:675 +#: core/models.py:671 core/models.py:689 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "" -#: core/models.py:663 +#: core/models.py:677 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:674 +#: core/models.py:688 msgid "attribute of this value" msgstr "" -#: core/models.py:682 +#: core/models.py:696 msgid "the specific product associated with this attribute's value" msgstr "" -#: core/models.py:688 +#: core/models.py:702 msgid "the specific value for this attribute" msgstr "" -#: core/models.py:701 +#: core/models.py:715 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for " @@ -1669,39 +1669,39 @@ msgid "" "with alternative text for the images." msgstr "" -#: core/models.py:712 +#: core/models.py:726 msgid "provide alternative text for the image for accessibility" msgstr "" -#: core/models.py:713 +#: core/models.py:727 msgid "image alt text" msgstr "" -#: core/models.py:716 +#: core/models.py:730 msgid "upload the image file for this product" msgstr "" -#: core/models.py:717 core/models.py:742 +#: core/models.py:731 core/models.py:756 msgid "product image" msgstr "" -#: core/models.py:723 +#: core/models.py:737 msgid "determines the order in which images are displayed" msgstr "" -#: core/models.py:724 +#: core/models.py:738 msgid "display priority" msgstr "" -#: core/models.py:729 +#: core/models.py:743 msgid "the product that this image represents" msgstr "" -#: core/models.py:743 +#: core/models.py:757 msgid "product images" msgstr "" -#: core/models.py:748 +#: core/models.py:762 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1711,39 +1711,39 @@ msgid "" "affected items in the campaign." msgstr "" -#: core/models.py:760 +#: core/models.py:774 msgid "percentage discount for the selected products" msgstr "" -#: core/models.py:761 +#: core/models.py:775 msgid "discount percentage" msgstr "" -#: core/models.py:766 +#: core/models.py:780 msgid "provide a unique name for this promotion" msgstr "" -#: core/models.py:767 +#: core/models.py:781 msgid "promotion name" msgstr "" -#: core/models.py:773 +#: core/models.py:787 msgid "promotion description" msgstr "" -#: core/models.py:778 +#: core/models.py:792 msgid "select which products are included in this promotion" msgstr "" -#: core/models.py:779 +#: core/models.py:793 msgid "included products" msgstr "" -#: core/models.py:783 +#: core/models.py:797 msgid "promotion" msgstr "" -#: core/models.py:794 +#: core/models.py:808 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1751,23 +1751,23 @@ msgid "" "operations for adding and removing multiple products at once." msgstr "" -#: core/models.py:806 +#: core/models.py:820 msgid "products that the user has marked as wanted" msgstr "" -#: core/models.py:814 +#: core/models.py:828 msgid "user who owns this wishlist" msgstr "" -#: core/models.py:815 +#: core/models.py:829 msgid "wishlist owner" msgstr "" -#: core/models.py:823 +#: core/models.py:837 msgid "wishlist" msgstr "" -#: core/models.py:865 +#: core/models.py:879 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1777,19 +1777,19 @@ msgid "" "custom features." msgstr "" -#: core/models.py:878 +#: core/models.py:892 msgid "documentary" msgstr "" -#: core/models.py:879 +#: core/models.py:893 msgid "documentaries" msgstr "" -#: core/models.py:889 +#: core/models.py:903 msgid "unresolved" msgstr "" -#: core/models.py:894 +#: core/models.py:908 msgid "" "Represents an address entity that includes location details and associations " "with a user. Provides functionality for geographic and address data storage, " @@ -1801,59 +1801,59 @@ msgid "" "address with a user, facilitating personalized data handling." msgstr "" -#: core/models.py:909 +#: core/models.py:923 msgid "address line for the customer" msgstr "" -#: core/models.py:910 +#: core/models.py:924 msgid "address line" msgstr "" -#: core/models.py:912 +#: core/models.py:926 msgid "street" msgstr "" -#: core/models.py:913 +#: core/models.py:927 msgid "district" msgstr "" -#: core/models.py:914 +#: core/models.py:928 msgid "city" msgstr "" -#: core/models.py:915 +#: core/models.py:929 msgid "region" msgstr "" -#: core/models.py:916 +#: core/models.py:930 msgid "postal code" msgstr "" -#: core/models.py:917 +#: core/models.py:931 msgid "country" msgstr "" -#: core/models.py:924 +#: core/models.py:938 msgid "geolocation point: (longitude, latitude)" msgstr "" -#: core/models.py:927 +#: core/models.py:941 msgid "full JSON response from geocoder for this address" msgstr "" -#: core/models.py:932 +#: core/models.py:946 msgid "stored JSON response from the geocoding service" msgstr "" -#: core/models.py:940 +#: core/models.py:954 msgid "address" msgstr "" -#: core/models.py:941 +#: core/models.py:955 msgid "addresses" msgstr "" -#: core/models.py:953 +#: core/models.py:967 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -1863,86 +1863,86 @@ msgid "" "apply the promo code to an order while ensuring constraints are met." msgstr "" -#: core/models.py:967 +#: core/models.py:981 msgid "unique code used by a user to redeem a discount" msgstr "" -#: core/models.py:968 +#: core/models.py:982 msgid "promo code identifier" msgstr "" -#: core/models.py:975 +#: core/models.py:989 msgid "fixed discount amount applied if percent is not used" msgstr "" -#: core/models.py:976 +#: core/models.py:990 msgid "fixed discount amount" msgstr "" -#: core/models.py:982 +#: core/models.py:996 msgid "percentage discount applied if fixed amount is not used" msgstr "" -#: core/models.py:983 +#: core/models.py:997 msgid "percentage discount" msgstr "" -#: core/models.py:988 +#: core/models.py:1002 msgid "timestamp when the promocode expires" msgstr "" -#: core/models.py:989 +#: core/models.py:1003 msgid "end validity time" msgstr "" -#: core/models.py:994 +#: core/models.py:1008 msgid "timestamp from which this promocode is valid" msgstr "" -#: core/models.py:995 +#: core/models.py:1009 msgid "start validity time" msgstr "" -#: core/models.py:1000 +#: core/models.py:1014 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" -#: core/models.py:1001 +#: core/models.py:1015 msgid "usage timestamp" msgstr "" -#: core/models.py:1006 +#: core/models.py:1020 msgid "user assigned to this promocode if applicable" msgstr "" -#: core/models.py:1007 +#: core/models.py:1021 msgid "assigned user" msgstr "" -#: core/models.py:1014 +#: core/models.py:1028 msgid "promo code" msgstr "" -#: core/models.py:1015 +#: core/models.py:1029 msgid "promo codes" msgstr "" -#: core/models.py:1022 +#: core/models.py:1044 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "" -#: core/models.py:1037 +#: core/models.py:1065 msgid "promocode already used" msgstr "" -#: core/models.py:1053 +#: core/models.py:1081 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "" -#: core/models.py:1062 +#: core/models.py:1090 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 " @@ -1952,144 +1952,144 @@ msgid "" "supports managing the products in the order lifecycle." msgstr "" -#: core/models.py:1079 +#: core/models.py:1107 msgid "the billing address used for this order" msgstr "" -#: core/models.py:1087 +#: core/models.py:1115 msgid "optional promo code applied to this order" msgstr "" -#: core/models.py:1088 +#: core/models.py:1116 msgid "applied promo code" msgstr "" -#: core/models.py:1096 +#: core/models.py:1124 msgid "the shipping address used for this order" msgstr "" -#: core/models.py:1097 +#: core/models.py:1125 msgid "shipping address" msgstr "" -#: core/models.py:1103 +#: core/models.py:1131 msgid "current status of the order in its lifecycle" msgstr "" -#: core/models.py:1104 +#: core/models.py:1132 msgid "order status" msgstr "" -#: core/models.py:1109 core/models.py:1560 +#: core/models.py:1137 core/models.py:1618 msgid "json structure of notifications to display to users" msgstr "" -#: core/models.py:1115 +#: core/models.py:1143 msgid "json representation of order attributes for this order" msgstr "" -#: core/models.py:1121 +#: core/models.py:1149 msgid "the user who placed the order" msgstr "" -#: core/models.py:1122 +#: core/models.py:1150 msgid "user" msgstr "" -#: core/models.py:1128 +#: core/models.py:1156 msgid "the timestamp when the order was finalized" msgstr "" -#: core/models.py:1129 +#: core/models.py:1157 msgid "buy time" msgstr "" -#: core/models.py:1136 +#: core/models.py:1164 msgid "a human-readable identifier for the order" msgstr "" -#: core/models.py:1137 +#: core/models.py:1165 msgid "human readable id" msgstr "" -#: core/models.py:1143 +#: core/models.py:1171 msgid "order" msgstr "" -#: core/models.py:1168 +#: core/models.py:1209 msgid "a user must have only one pending order at a time" msgstr "" -#: core/models.py:1202 +#: core/models.py:1249 msgid "you cannot add products to an order that is not a pending one" msgstr "" -#: core/models.py:1207 +#: core/models.py:1254 msgid "you cannot add inactive products to order" msgstr "" -#: core/models.py:1224 +#: core/models.py:1271 msgid "you cannot add more products than available in stock" msgstr "" -#: core/models.py:1246 core/models.py:1271 core/models.py:1279 +#: core/models.py:1293 core/models.py:1318 core/models.py:1326 msgid "you cannot remove products from an order that is not a pending one" msgstr "" -#: core/models.py:1267 +#: core/models.py:1314 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "" -#: core/models.py:1299 +#: core/models.py:1346 msgid "promocode does not exist" msgstr "" -#: core/models.py:1305 +#: core/models.py:1352 msgid "you can only buy physical products with shipping address specified" msgstr "" -#: core/models.py:1324 +#: core/models.py:1371 msgid "address does not exist" msgstr "" -#: core/models.py:1345 core/models.py:1414 +#: core/models.py:1392 core/models.py:1461 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" -#: core/models.py:1348 core/models.py:1410 +#: core/models.py:1395 core/models.py:1457 msgid "invalid force value" msgstr "" -#: core/models.py:1354 core/models.py:1417 +#: core/models.py:1401 core/models.py:1464 msgid "you cannot purchase an empty order!" msgstr "" -#: core/models.py:1373 +#: core/models.py:1420 msgid "you cannot buy an order without a user" msgstr "" -#: core/models.py:1387 +#: core/models.py:1434 msgid "a user without a balance cannot buy with balance" msgstr "" -#: core/models.py:1392 +#: core/models.py:1439 msgid "insufficient funds to complete the order" msgstr "" -#: core/models.py:1426 +#: core/models.py:1473 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "" -#: core/models.py:1435 +#: core/models.py:1482 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" -#: core/models.py:1533 +#: core/models.py:1591 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2102,108 +2102,108 @@ msgid "" "Product models and stores a reference to them." msgstr "" -#: core/models.py:1548 +#: core/models.py:1606 msgid "the price paid by the customer for this product at purchase time" msgstr "" -#: core/models.py:1549 +#: core/models.py:1607 msgid "purchase price at order time" msgstr "" -#: core/models.py:1554 +#: core/models.py:1612 msgid "internal comments for admins about this ordered product" msgstr "" -#: core/models.py:1555 +#: core/models.py:1613 msgid "internal comments" msgstr "" -#: core/models.py:1561 +#: core/models.py:1619 msgid "user notifications" msgstr "" -#: core/models.py:1566 +#: core/models.py:1624 msgid "json representation of this item's attributes" msgstr "" -#: core/models.py:1567 +#: core/models.py:1625 msgid "ordered product attributes" msgstr "" -#: core/models.py:1572 +#: core/models.py:1630 msgid "reference to the parent order that contains this product" msgstr "" -#: core/models.py:1573 +#: core/models.py:1631 msgid "parent order" msgstr "" -#: core/models.py:1582 +#: core/models.py:1640 msgid "the specific product associated with this order line" msgstr "" -#: core/models.py:1589 +#: core/models.py:1647 msgid "quantity of this specific product in the order" msgstr "" -#: core/models.py:1590 +#: core/models.py:1648 msgid "product quantity" msgstr "" -#: core/models.py:1597 +#: core/models.py:1655 msgid "current status of this product in the order" msgstr "" -#: core/models.py:1598 +#: core/models.py:1656 msgid "product line status" msgstr "" -#: core/models.py:1661 +#: core/models.py:1719 msgid "order product must have an order" msgstr "" -#: core/models.py:1663 +#: core/models.py:1721 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "" -#: core/models.py:1677 +#: core/models.py:1735 msgid "you cannot feedback an order which is not received" msgstr "" -#: core/models.py:1683 +#: core/models.py:1741 msgid "name" msgstr "" -#: core/models.py:1684 +#: core/models.py:1742 msgid "URL of the integration" msgstr "" -#: core/models.py:1685 +#: core/models.py:1743 msgid "authentication credentials" msgstr "" -#: core/models.py:1699 +#: core/models.py:1765 msgid "you can only have one default CRM provider" msgstr "" -#: core/models.py:1703 +#: core/models.py:1775 msgid "CRM" msgstr "" -#: core/models.py:1704 +#: core/models.py:1776 msgid "CRMs" msgstr "" -#: core/models.py:1716 +#: core/models.py:1788 msgid "order CRM link" msgstr "" -#: core/models.py:1717 +#: core/models.py:1789 msgid "orders CRM links" msgstr "" -#: core/models.py:1722 +#: core/models.py:1794 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2213,19 +2213,15 @@ msgid "" "the asset when the associated order is in a completed status." msgstr "" -#: core/models.py:1736 +#: core/models.py:1808 msgid "download" msgstr "" -#: core/models.py:1737 +#: core/models.py:1809 msgid "downloads" msgstr "" -#: core/models.py:1745 -msgid "you can not download a digital asset for a non-finished order" -msgstr "" - -#: core/models.py:1754 +#: core/models.py:1823 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2234,27 +2230,27 @@ msgid "" "fields to effectively model and manage feedback data." msgstr "" -#: core/models.py:1766 +#: core/models.py:1835 msgid "user-provided comments about their experience with the product" msgstr "" -#: core/models.py:1767 +#: core/models.py:1836 msgid "feedback comments" msgstr "" -#: core/models.py:1774 +#: core/models.py:1843 msgid "references the specific product in an order that this feedback is about" msgstr "" -#: core/models.py:1775 +#: core/models.py:1844 msgid "related order product" msgstr "" -#: core/models.py:1780 +#: core/models.py:1849 msgid "user-assigned rating for the product" msgstr "" -#: core/models.py:1781 +#: core/models.py:1850 msgid "product rating" msgstr "" @@ -2443,11 +2439,11 @@ msgid "" " reserved" msgstr "" -#: core/utils/caching.py:41 +#: core/utils/caching.py:48 msgid "both data and timeout are required" msgstr "" -#: core/utils/caching.py:43 +#: core/utils/caching.py:50 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "" @@ -2479,24 +2475,243 @@ msgstr "" msgid "NOMINATIM_URL must be configured." msgstr "" -#: core/validators.py:16 +#: core/validators.py:14 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" -#: core/validators.py:22 -msgid "invalid phone number format" +#: core/views.py:72 +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:489 +#: core/views.py:87 +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 +msgid "" +"Returns a list of supported languages and their corresponding information." +msgstr "" + +#: core/views.py:148 +msgid "Returns the parameters of the website as a JSON object." +msgstr "" + +#: core/views.py:167 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +msgstr "" + +#: core/views.py:194 +msgid "Handles `contact us` form submissions." +msgstr "" + +#: core/views.py:215 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "" + +#: core/views.py:255 +msgid "Handles global search queries." +msgstr "" + +#: core/views.py:270 +msgid "Handles the logic of buying as a business without registration." +msgstr "" + +#: core/views.py:312 msgid "you can only download the digital asset once" msgstr "" -#: core/views.py:547 +#: core/views.py:315 +msgid "the order must be paid before downloading the digital asset" +msgstr "" + +#: core/views.py:353 +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." +msgstr "" + +#: core/views.py:365 msgid "favicon not found" msgstr "" -#: core/viewsets.py:1357 +#: core/views.py:370 +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." +msgstr "" + +#: core/views.py:382 +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/viewsets.py:128 +msgid "" +"Defines a viewset for managing Evibes-related operations. The EvibesViewSet " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" + +#: core/viewsets.py:147 +msgid "" +"Represents a viewset for managing AttributeGroup objects. Handles operations " +"related to AttributeGroup, including filtering, serialization, and retrieval " +"of data. This class is part of the application's API layer and provides a " +"standardized way to process requests and responses for AttributeGroup data." +msgstr "" + +#: core/viewsets.py:166 +msgid "" +"Handles operations related to Attribute objects within the application. " +"Provides a set of API endpoints to interact with Attribute data. This class " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" + +#: core/viewsets.py:185 +msgid "" +"A viewset for managing AttributeValue objects. This viewset provides " +"functionality for listing, retrieving, creating, updating, and deleting " +"AttributeValue objects. It integrates with Django REST Framework's viewset " +"mechanisms and uses appropriate serializers for different actions. Filtering " +"capabilities are provided through the DjangoFilterBackend." +msgstr "" + +#: core/viewsets.py:204 +msgid "" +"Manages views for Category-related operations. The CategoryViewSet class is " +"responsible for handling operations related to the Category model in the " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" + +#: core/viewsets.py:315 +msgid "" +"Represents a viewset for managing Brand instances. This class provides " +"functionality for querying, filtering, and serializing Brand objects. It " +"uses Django's ViewSet framework to simplify the implementation of API " +"endpoints for Brand objects." +msgstr "" + +#: core/viewsets.py:427 +msgid "" +"Manages operations related to the `Product` model in the system. This class " +"provides a viewset for managing products, including their filtering, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" + +#: core/viewsets.py:547 +msgid "" +"Represents a viewset for managing Vendor objects. This viewset allows " +"fetching, filtering, and serializing Vendor data. It defines the queryset, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" + +#: core/viewsets.py:567 +msgid "" +"Representation of a view set handling Feedback objects. This class manages " +"operations related to Feedback objects, including listing, filtering, and " +"retrieving details. The purpose of this view set is to provide different " +"serializers for different actions and implement permission-based handling of " +"accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"use of Django's filtering system for querying data." +msgstr "" + +#: core/viewsets.py:593 +msgid "" +"ViewSet for managing orders and related operations. This class provides " +"functionality to retrieve, modify, and manage order objects. It includes " +"various endpoints for handling order operations such as adding or removing " +"products, performing purchases for registered as well as unregistered users, " +"and retrieving the current authenticated user's pending orders. The ViewSet " +"uses multiple serializers based on the specific action being performed and " +"enforces permissions accordingly while interacting with order data." +msgstr "" + +#: core/viewsets.py:782 +msgid "" +"Provides a viewset for managing OrderProduct entities. This viewset enables " +"CRUD operations and custom actions specific to the OrderProduct model. It " +"includes filtering, permission checks, and serializer switching based on the " +"requested action. Additionally, it provides a detailed action for handling " +"feedback on OrderProduct instances" +msgstr "" + +#: core/viewsets.py:833 +msgid "Manages operations related to Product images in the application. " +msgstr "" + +#: core/viewsets.py:845 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +msgstr "" + +#: core/viewsets.py:866 +msgid "Represents a view set for managing promotions. " +msgstr "" + +#: core/viewsets.py:878 +msgid "Handles operations related to Stock data in the system." +msgstr "" + +#: core/viewsets.py:892 +msgid "" +"ViewSet for managing Wishlist operations. The WishlistViewSet provides " +"endpoints for interacting with a user's wish list, allowing for the " +"retrieval, modification, and customization of products within the wish list. " +"This ViewSet facilitates functionality such as adding, removing, and bulk " +"actions for wishlist products. Permission checks are integrated to ensure " +"that users can only manage their own wishlists unless explicit permissions " +"are granted." +msgstr "" + +#: core/viewsets.py:1007 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" + +#: core/viewsets.py:1074 #, python-brace-format msgid "Geocoding error: {e}" msgstr "" + +#: core/viewsets.py:1081 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" diff --git a/core/locale/ko_KR/LC_MESSAGES/django.mo b/core/locale/ko_KR/LC_MESSAGES/django.mo index 3a239c262f6923fbe1d2d23b683f8109b481b296..995c7592baf081dad4c82d67feb1bae6a45a74fc 100644 GIT binary patch delta 26683 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 delta 12249 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 CZ}(>a diff --git a/core/locale/ko_KR/LC_MESSAGES/django.po b/core/locale/ko_KR/LC_MESSAGES/django.po index 4b12b143..be2ea8f6 100644 --- a/core/locale/ko_KR/LC_MESSAGES/django.po +++ b/core/locale/ko_KR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,37 +13,37 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: core/abstract.py:11 +#: core/abstract.py:12 msgid "unique id" msgstr "고유 ID" -#: core/abstract.py:12 +#: core/abstract.py:13 msgid "unique id is used to surely identify any database object" msgstr "고유 ID는 모든 데이터베이스 개체를 확실하게 식별하는 데 사용됩니다." -#: core/abstract.py:19 +#: core/abstract.py:20 msgid "is active" msgstr "활성 상태" -#: core/abstract.py:20 +#: 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:22 core/choices.py:18 +#: core/abstract.py:23 core/choices.py:18 msgid "created" msgstr "생성됨" -#: core/abstract.py:22 +#: core/abstract.py:23 msgid "when the object first appeared on the database" msgstr "개체가 데이터베이스에 처음 나타난 시점" -#: core/abstract.py:23 +#: core/abstract.py:24 msgid "modified" msgstr "수정됨" -#: core/abstract.py:23 +#: core/abstract.py:24 msgid "when the object was last modified" msgstr "개체가 마지막으로 편집된 시기" @@ -86,11 +86,11 @@ msgid "selected items have been deactivated." msgstr "선택한 아이템이 비활성화되었습니다!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 +#: core/graphene/object_types.py:616 core/models.py:701 core/models.py:709 msgid "attribute value" msgstr "속성 값" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 msgid "attribute values" msgstr "속성 값" @@ -102,7 +102,7 @@ msgstr "이미지" msgid "images" msgstr "이미지" -#: core/admin.py:155 core/models.py:445 +#: core/admin.py:155 core/models.py:459 msgid "stock" msgstr "재고" @@ -110,11 +110,11 @@ msgstr "재고" msgid "stocks" msgstr "주식" -#: core/admin.py:166 core/models.py:1609 +#: core/admin.py:166 core/models.py:1667 msgid "order product" msgstr "제품 주문" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 msgid "order products" msgstr "제품 주문" @@ -689,7 +689,7 @@ msgstr "주문-제품 관계 삭제" msgid "add or remove feedback on an order–product relation" msgstr "주문-제품 관계에 대한 피드백 추가 또는 제거" -#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 msgid "no search term provided." msgstr "검색어가 입력되지 않았습니다." @@ -742,7 +742,7 @@ msgid "Quantity" msgstr "수량" #: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:287 core/models.py:369 core/models.py:522 +#: core/models.py:301 core/models.py:383 core/models.py:536 msgid "Slug" msgstr "슬러그" @@ -758,7 +758,7 @@ msgstr "하위 카테고리 포함" msgid "Include personal ordered" msgstr "개인 주문 제품 포함" -#: core/filters.py:85 core/models.py:526 +#: core/filters.py:85 core/models.py:540 msgid "SKU" msgstr "SKU" @@ -831,7 +831,7 @@ msgstr "캐시된 데이터" msgid "camelized JSON data from the requested URL" msgstr "요청된 URL의 카멜라이즈된 JSON 데이터" -#: core/graphene/mutations.py:65 core/views.py:360 +#: core/graphene/mutations.py:65 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "http(s)://로 시작하는 URL만 허용됩니다." @@ -862,7 +862,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "주문_uuid 또는 주문_hr_id 중 하나를 입력하세요 - 상호 배타적입니다!" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:839 +#: core/graphene/mutations.py:527 core/viewsets.py:679 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "order.buy() 메서드에서 잘못된 유형이 발생했습니다: {type(instance)!s}" @@ -936,9 +936,9 @@ msgstr "주문 제품 {order_product_uuid}을 찾을 수 없습니다!" msgid "original address string provided by the user" msgstr "사용자가 제공한 원본 주소 문자열" -#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 -#: core/models.py:1234 core/models.py:1263 core/models.py:1288 -#: core/viewsets.py:842 +#: core/graphene/mutations.py:656 core/models.py:849 core/models.py:862 +#: core/models.py:1281 core/models.py:1310 core/models.py:1335 +#: core/viewsets.py:682 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name}가 존재하지 않습니다: {uuid}!" @@ -952,8 +952,8 @@ msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - 마법처럼 작동" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 -#: core/models.py:1686 +#: core/graphene/object_types.py:444 core/models.py:672 core/models.py:1144 +#: core/models.py:1744 msgid "attributes" msgstr "속성" @@ -966,11 +966,11 @@ msgid "groups of attributes" msgstr "속성 그룹" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:612 +#: core/graphene/object_types.py:224 core/models.py:326 core/models.py:626 msgid "categories" msgstr "카테고리" -#: core/graphene/object_types.py:124 core/models.py:383 +#: core/graphene/object_types.py:124 core/models.py:397 msgid "brands" msgstr "브랜드" @@ -979,7 +979,7 @@ msgid "category image url" msgstr "카테고리" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:249 +#: core/models.py:263 msgid "markup percentage" msgstr "마크업 퍼센트" @@ -1000,7 +1000,7 @@ msgstr "이 카테고리의 태그" msgid "products in this category" msgstr "이 카테고리의 제품" -#: core/graphene/object_types.py:351 core/models.py:155 +#: core/graphene/object_types.py:351 core/models.py:169 msgid "vendors" msgstr "공급업체" @@ -1025,7 +1025,7 @@ msgid "represents feedback from a user." msgstr "사용자의 피드백을 나타냅니다." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1110 +#: core/models.py:1138 msgid "notifications" msgstr "알림" @@ -1033,7 +1033,7 @@ msgstr "알림" msgid "download url for this order product if applicable" msgstr "해당되는 경우 이 주문 제품의 URL 다운로드" -#: core/graphene/object_types.py:400 core/models.py:1791 +#: core/graphene/object_types.py:400 core/models.py:1860 msgid "feedback" msgstr "피드백" @@ -1041,7 +1041,7 @@ msgstr "피드백" msgid "a list of order products in this order" msgstr "주문 제품 목록은 다음 순서로 표시됩니다." -#: core/graphene/object_types.py:436 core/models.py:1080 +#: core/graphene/object_types.py:436 core/models.py:1108 msgid "billing address" msgstr "청구서 수신 주소" @@ -1067,7 +1067,7 @@ msgstr "주문에 포함된 모든 제품이 디지털 제품인가요?" msgid "transactions for this order" msgstr "이 주문에 대한 거래" -#: core/graphene/object_types.py:465 core/models.py:1144 +#: core/graphene/object_types.py:465 core/models.py:1172 msgid "orders" msgstr "주문" @@ -1079,15 +1079,15 @@ msgstr "이미지 URL" msgid "product's images" msgstr "제품 이미지" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 +#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 msgid "category" msgstr "카테고리" -#: core/graphene/object_types.py:502 core/models.py:1792 +#: core/graphene/object_types.py:502 core/models.py:1861 msgid "feedbacks" msgstr "피드백" -#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 +#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 msgid "brand" msgstr "브랜드" @@ -1119,7 +1119,7 @@ msgstr "피드백 수" msgid "only available for personal orders" msgstr "개인 주문만 가능한 제품" -#: core/graphene/object_types.py:534 core/models.py:536 +#: core/graphene/object_types.py:534 core/models.py:550 msgid "products" msgstr "제품" @@ -1131,15 +1131,15 @@ msgstr "프로모션 코드" msgid "products on sale" msgstr "판매 중인 제품" -#: core/graphene/object_types.py:651 core/models.py:784 +#: core/graphene/object_types.py:651 core/models.py:798 msgid "promotions" msgstr "프로모션" -#: core/graphene/object_types.py:655 core/models.py:154 +#: core/graphene/object_types.py:655 core/models.py:168 msgid "vendor" msgstr "공급업체" -#: core/graphene/object_types.py:656 core/models.py:535 +#: core/graphene/object_types.py:656 core/models.py:549 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1147,11 +1147,11 @@ msgstr "공급업체" msgid "product" msgstr "제품" -#: core/graphene/object_types.py:667 core/models.py:807 +#: core/graphene/object_types.py:667 core/models.py:821 msgid "wishlisted products" msgstr "위시리스트 제품" -#: core/graphene/object_types.py:673 core/models.py:824 +#: core/graphene/object_types.py:673 core/models.py:838 msgid "wishlists" msgstr "위시리스트" @@ -1159,7 +1159,7 @@ msgstr "위시리스트" msgid "tagged products" msgstr "태그가 지정된 제품" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 +#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 msgid "product tags" msgstr "제품 태그" @@ -1266,7 +1266,7 @@ msgstr "상위 속성 그룹" msgid "attribute group's name" msgstr "속성 그룹의 이름" -#: core/models.py:100 core/models.py:620 +#: core/models.py:100 core/models.py:634 msgid "attribute group" msgstr "속성 그룹" @@ -1309,7 +1309,7 @@ msgstr "이 공급업체의 이름" msgid "vendor name" msgstr "공급업체 이름" -#: core/models.py:163 +#: core/models.py:177 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1321,27 +1321,27 @@ msgstr "" "이름의 조합을 통해 제품을 고유하게 식별하고 분류하도록 설계되었습니다. 믹스인을 통해 내보낸 작업을 지원하며 관리 목적으로 메타데이터 " "사용자 지정을 제공합니다." -#: core/models.py:175 core/models.py:206 +#: core/models.py:189 core/models.py:220 msgid "internal tag identifier for the product tag" msgstr "제품 태그의 내부 태그 식별자" -#: core/models.py:176 core/models.py:207 +#: core/models.py:190 core/models.py:221 msgid "tag name" msgstr "태그 이름" -#: core/models.py:180 core/models.py:211 +#: core/models.py:194 core/models.py:225 msgid "user-friendly name for the product tag" msgstr "제품 태그의 사용자 친화적인 이름" -#: core/models.py:181 core/models.py:212 +#: core/models.py:195 core/models.py:226 msgid "tag display name" msgstr "태그 표시 이름" -#: core/models.py:189 +#: core/models.py:203 msgid "product tag" msgstr "제품 태그" -#: core/models.py:195 +#: core/models.py:209 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 " @@ -1350,15 +1350,15 @@ msgstr "" "제품에 사용되는 카테고리 태그를 나타냅니다. 이 클래스는 제품을 연결하고 분류하는 데 사용할 수 있는 카테고리 태그를 모델링합니다. 내부" " 태그 식별자 및 사용자 친화적인 표시 이름에 대한 속성을 포함합니다." -#: core/models.py:220 +#: core/models.py:234 msgid "category tag" msgstr "카테고리 태그" -#: core/models.py:221 core/models.py:293 +#: core/models.py:235 core/models.py:307 msgid "category tags" msgstr "카테고리 태그" -#: core/models.py:226 +#: core/models.py:240 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1375,51 +1375,51 @@ msgstr "" "있습니다. 이 클래스는 일반적으로 애플리케이션 내에서 제품 카테고리 또는 기타 유사한 그룹을 정의하고 관리하는 데 사용되며, 사용자나 " "관리자가 카테고리의 이름, 설명 및 계층 구조를 지정하고 이미지, 태그 또는 우선순위와 같은 속성을 할당할 수 있도록 합니다." -#: core/models.py:240 +#: core/models.py:254 msgid "upload an image representing this category" msgstr "이 카테고리를 대표하는 이미지 업로드" -#: core/models.py:243 +#: core/models.py:257 msgid "category image" msgstr "카테고리 이미지" -#: core/models.py:248 +#: core/models.py:262 msgid "define a markup percentage for products in this category" msgstr "이 카테고리의 제품에 대한 마크업 비율을 정의합니다." -#: core/models.py:257 +#: core/models.py:271 msgid "parent of this category to form a hierarchical structure" msgstr "계층 구조를 형성하는 이 카테고리의 상위 카테고리" -#: core/models.py:258 +#: core/models.py:272 msgid "parent category" msgstr "상위 카테고리" -#: core/models.py:263 +#: core/models.py:277 msgid "category name" msgstr "카테고리 이름" -#: core/models.py:264 +#: core/models.py:278 msgid "provide a name for this category" msgstr "이 카테고리의 이름을 입력합니다." -#: core/models.py:271 +#: core/models.py:285 msgid "add a detailed description for this category" msgstr "이 카테고리에 대한 자세한 설명 추가" -#: core/models.py:272 +#: core/models.py:286 msgid "category description" msgstr "카테고리 설명" -#: core/models.py:292 +#: core/models.py:306 msgid "tags that help describe or group this category" msgstr "이 카테고리를 설명하거나 그룹화하는 데 도움이 되는 태그" -#: core/models.py:299 core/models.py:375 +#: core/models.py:313 core/models.py:389 msgid "priority" msgstr "우선순위" -#: core/models.py:318 +#: core/models.py:332 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1430,47 +1430,47 @@ msgstr "" "시스템에서 브랜드 객체를 나타냅니다. 이 클래스는 이름, 로고, 설명, 관련 카테고리, 고유 슬러그, 우선순위 등 브랜드와 관련된 정보 " "및 속성을 처리합니다. 이를 통해 애플리케이션 내에서 브랜드 관련 데이터를 구성하고 표현할 수 있습니다." -#: core/models.py:328 +#: core/models.py:342 msgid "name of this brand" msgstr "이 브랜드 이름" -#: core/models.py:329 +#: core/models.py:343 msgid "brand name" msgstr "브랜드 이름" -#: core/models.py:336 +#: core/models.py:350 msgid "upload a logo representing this brand" msgstr "이 브랜드를 대표하는 로고 업로드" -#: core/models.py:338 +#: core/models.py:352 msgid "brand small image" msgstr "브랜드 작은 이미지" -#: core/models.py:344 +#: core/models.py:358 msgid "upload a big logo representing this brand" msgstr "이 브랜드를 대표하는 큰 로고 업로드" -#: core/models.py:346 +#: core/models.py:360 msgid "brand big image" msgstr "브랜드 빅 이미지" -#: core/models.py:351 +#: core/models.py:365 msgid "add a detailed description of the brand" msgstr "브랜드에 대한 자세한 설명 추가" -#: core/models.py:352 +#: core/models.py:366 msgid "brand description" msgstr "브랜드 설명" -#: core/models.py:357 +#: core/models.py:371 msgid "optional categories that this brand is associated with" msgstr "이 브랜드와 연관된 선택적 카테고리" -#: core/models.py:358 +#: core/models.py:372 msgid "associated categories" msgstr "카테고리" -#: core/models.py:388 +#: core/models.py:402 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1483,68 +1483,68 @@ msgstr "" " 디지털 자산과 같은 재고 관련 속성에 대한 세부 정보를 제공합니다. 다양한 공급업체에서 제공하는 제품을 추적하고 평가할 수 있도록 하는" " 재고 관리 시스템의 일부입니다." -#: core/models.py:400 +#: core/models.py:414 msgid "the vendor supplying this product stock" msgstr "이 제품 재고를 공급하는 공급업체" -#: core/models.py:401 +#: core/models.py:415 msgid "associated vendor" msgstr "관련 공급업체" -#: core/models.py:405 +#: core/models.py:419 msgid "final price to the customer after markups" msgstr "마크업 후 고객에게 제공되는 최종 가격" -#: core/models.py:406 +#: core/models.py:420 msgid "selling price" msgstr "판매 가격" -#: core/models.py:411 +#: core/models.py:425 msgid "the product associated with this stock entry" msgstr "이 주식 항목과 관련된 제품" -#: core/models.py:412 core/models.py:683 core/models.py:730 -#: core/models.py:1583 +#: core/models.py:426 core/models.py:697 core/models.py:744 +#: core/models.py:1641 msgid "associated product" msgstr "관련 제품" -#: core/models.py:419 +#: core/models.py:433 msgid "the price paid to the vendor for this product" msgstr "이 제품에 대해 공급업체에 지불한 가격" -#: core/models.py:420 +#: core/models.py:434 msgid "vendor purchase price" msgstr "공급업체 구매 가격" -#: core/models.py:424 +#: core/models.py:438 msgid "available quantity of the product in stock" msgstr "재고가 있는 제품의 사용 가능한 수량" -#: core/models.py:425 +#: core/models.py:439 msgid "quantity in stock" msgstr "재고 수량" -#: core/models.py:429 +#: core/models.py:443 msgid "vendor-assigned SKU for identifying the product" msgstr "제품 식별을 위해 공급업체에서 할당하는 SKU" -#: core/models.py:430 +#: core/models.py:444 msgid "vendor sku" msgstr "공급업체의 SKU" -#: core/models.py:436 +#: core/models.py:450 msgid "digital file associated with this stock if applicable" msgstr "해당되는 경우 이 주식과 관련된 디지털 파일" -#: core/models.py:437 +#: core/models.py:451 msgid "digital file" msgstr "디지털 파일" -#: core/models.py:446 +#: core/models.py:460 msgid "stock entries" msgstr "재고 항목" -#: core/models.py:451 +#: core/models.py:465 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1560,55 +1560,55 @@ msgstr "" "사용하도록 설계되었습니다. 이 클래스는 관련 모델(예: 카테고리, 브랜드, 제품 태그)과 상호 작용하고 자주 액세스하는 속성에 대한 " "캐싱을 관리하여 성능을 개선합니다. 애플리케이션 내에서 제품 데이터 및 관련 정보를 정의하고 조작하는 데 사용됩니다." -#: core/models.py:464 +#: core/models.py:478 msgid "category this product belongs to" msgstr "이 제품이 속한 카테고리" -#: core/models.py:473 +#: core/models.py:487 msgid "optionally associate this product with a brand" msgstr "선택 사항으로 이 제품을 브랜드와 연결" -#: core/models.py:479 +#: core/models.py:493 msgid "tags that help describe or group this product" msgstr "이 제품을 설명하거나 그룹화하는 데 도움이 되는 태그" -#: core/models.py:484 +#: core/models.py:498 msgid "indicates whether this product is digitally delivered" msgstr "이 제품이 디지털 방식으로 배송되는지 여부를 나타냅니다." -#: core/models.py:485 +#: core/models.py:499 msgid "is product digital" msgstr "제품 디지털화 여부" -#: core/models.py:491 +#: core/models.py:505 msgid "provide a clear identifying name for the product" msgstr "제품에 대한 명확한 식별 이름 제공" -#: core/models.py:492 +#: core/models.py:506 msgid "product name" msgstr "제품 이름" -#: core/models.py:497 core/models.py:772 +#: core/models.py:511 core/models.py:786 msgid "add a detailed description of the product" msgstr "제품에 대한 자세한 설명 추가" -#: core/models.py:498 +#: core/models.py:512 msgid "product description" msgstr "제품 설명" -#: core/models.py:505 +#: core/models.py:519 msgid "part number for this product" msgstr "이 제품의 부품 번호" -#: core/models.py:506 +#: core/models.py:520 msgid "part number" msgstr "부품 번호" -#: core/models.py:525 +#: core/models.py:539 msgid "stock keeping unit for this product" msgstr "이 제품의 재고 보관 단위" -#: core/models.py:599 +#: core/models.py:613 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 " @@ -1621,68 +1621,68 @@ msgstr "" "사용됩니다. 속성에는 연관된 카테고리, 그룹, 값 유형 및 이름이 있습니다. 이 모델은 문자열, 정수, 실수, 부울, 배열, 객체 등 " "여러 유형의 값을 지원합니다. 이를 통해 동적이고 유연한 데이터 구조화가 가능합니다." -#: core/models.py:611 +#: core/models.py:625 msgid "category of this attribute" msgstr "이 속성의 범주" -#: core/models.py:619 +#: core/models.py:633 msgid "group of this attribute" msgstr "이 속성의 그룹" -#: core/models.py:625 +#: core/models.py:639 msgid "string" msgstr "문자열" -#: core/models.py:626 +#: core/models.py:640 msgid "integer" msgstr "정수" -#: core/models.py:627 +#: core/models.py:641 msgid "float" msgstr "Float" -#: core/models.py:628 +#: core/models.py:642 msgid "boolean" msgstr "부울" -#: core/models.py:629 +#: core/models.py:643 msgid "array" msgstr "배열" -#: core/models.py:630 +#: core/models.py:644 msgid "object" msgstr "개체" -#: core/models.py:632 +#: core/models.py:646 msgid "type of the attribute's value" msgstr "속성 값의 유형" -#: core/models.py:633 +#: core/models.py:647 msgid "value type" msgstr "값 유형" -#: core/models.py:638 +#: core/models.py:652 msgid "name of this attribute" msgstr "이 속성의 이름" -#: core/models.py:639 +#: core/models.py:653 msgid "attribute's name" msgstr "속성 이름" -#: core/models.py:645 +#: core/models.py:659 msgid "is filterable" msgstr "필터링 가능" -#: core/models.py:646 +#: core/models.py:660 msgid "designates whether this attribute can be used for filtering or not" msgstr "는 이 속성을 필터링에 사용할 수 있는지 여부를 지정합니다." -#: core/models.py:657 core/models.py:675 +#: core/models.py:671 core/models.py:689 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "속성" -#: core/models.py:663 +#: core/models.py:677 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" @@ -1691,19 +1691,19 @@ msgstr "" "상품에 연결된 속성의 특정 값을 나타냅니다. '속성'을 고유한 '값'에 연결하여 제품 특성을 더 잘 구성하고 동적으로 표현할 수 " "있습니다." -#: core/models.py:674 +#: core/models.py:688 msgid "attribute of this value" msgstr "이 값의 속성" -#: core/models.py:682 +#: core/models.py:696 msgid "the specific product associated with this attribute's value" msgstr "이 속성 값과 연관된 특정 제품" -#: core/models.py:688 +#: core/models.py:702 msgid "the specific value for this attribute" msgstr "이 속성의 구체적인 값은 다음과 같습니다." -#: core/models.py:701 +#: core/models.py:715 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -1714,39 +1714,39 @@ msgstr "" "시스템에서 제품과 연관된 제품 이미지를 나타냅니다. 이 클래스는 이미지 파일 업로드, 특정 제품과의 연결, 표시 순서 결정 등의 기능을 " "포함하여 제품의 이미지를 관리하도록 설계되었습니다. 또한 이미지에 대한 대체 텍스트가 포함된 접근성 기능도 포함되어 있습니다." -#: core/models.py:712 +#: core/models.py:726 msgid "provide alternative text for the image for accessibility" msgstr "접근성을 위해 이미지에 대체 텍스트 제공" -#: core/models.py:713 +#: core/models.py:727 msgid "image alt text" msgstr "이미지 대체 텍스트" -#: core/models.py:716 +#: core/models.py:730 msgid "upload the image file for this product" msgstr "이 제품의 이미지 파일 업로드" -#: core/models.py:717 core/models.py:742 +#: core/models.py:731 core/models.py:756 msgid "product image" msgstr "제품 이미지" -#: core/models.py:723 +#: core/models.py:737 msgid "determines the order in which images are displayed" msgstr "이미지가 표시되는 순서를 결정합니다." -#: core/models.py:724 +#: core/models.py:738 msgid "display priority" msgstr "우선순위 표시" -#: core/models.py:729 +#: core/models.py:743 msgid "the product that this image represents" msgstr "이 이미지가 나타내는 제품" -#: core/models.py:743 +#: core/models.py:757 msgid "product images" msgstr "제품 이미지" -#: core/models.py:748 +#: core/models.py:762 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1759,39 +1759,39 @@ msgstr "" "정의하고 관리하는 데 사용됩니다. 이 클래스에는 할인율 설정, 프로모션에 대한 세부 정보 제공 및 해당 제품에 대한 링크를 위한 속성이 " "포함되어 있습니다. 제품 카탈로그와 통합되어 캠페인에서 영향을 받는 품목을 결정합니다." -#: core/models.py:760 +#: core/models.py:774 msgid "percentage discount for the selected products" msgstr "선택한 제품에 대한 할인 비율" -#: core/models.py:761 +#: core/models.py:775 msgid "discount percentage" msgstr "할인 비율" -#: core/models.py:766 +#: core/models.py:780 msgid "provide a unique name for this promotion" msgstr "이 프로모션의 고유한 이름을 입력하세요." -#: core/models.py:767 +#: core/models.py:781 msgid "promotion name" msgstr "프로모션 이름" -#: core/models.py:773 +#: core/models.py:787 msgid "promotion description" msgstr "프로모션 설명" -#: core/models.py:778 +#: core/models.py:792 msgid "select which products are included in this promotion" msgstr "이 프로모션에 포함되는 제품 선택" -#: core/models.py:779 +#: core/models.py:793 msgid "included products" msgstr "포함된 제품" -#: core/models.py:783 +#: core/models.py:797 msgid "promotion" msgstr "프로모션" -#: core/models.py:794 +#: core/models.py:808 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1801,23 +1801,23 @@ msgstr "" "원하는 상품을 저장하고 관리하기 위한 사용자의 위시리스트를 나타냅니다. 이 클래스는 제품 컬렉션을 관리하는 기능을 제공하여 제품 추가 및" " 제거와 같은 작업을 지원할 뿐만 아니라 여러 제품을 한 번에 추가 및 제거하는 작업도 지원합니다." -#: core/models.py:806 +#: core/models.py:820 msgid "products that the user has marked as wanted" msgstr "사용자가 원하는 것으로 표시한 제품" -#: core/models.py:814 +#: core/models.py:828 msgid "user who owns this wishlist" msgstr "이 위시리스트를 소유한 사용자" -#: core/models.py:815 +#: core/models.py:829 msgid "wishlist owner" msgstr "위시리스트의 소유자" -#: core/models.py:823 +#: core/models.py:837 msgid "wishlist" msgstr "위시리스트" -#: core/models.py:865 +#: core/models.py:879 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1830,19 +1830,19 @@ msgstr "" "정보를 저장하는 데 사용됩니다. 여기에는 다큐멘터리 파일의 파일 유형과 저장 경로를 처리하는 메서드와 프로퍼티가 포함되어 있습니다. 특정" " 믹스인의 기능을 확장하고 추가 사용자 정의 기능을 제공합니다." -#: core/models.py:878 +#: core/models.py:892 msgid "documentary" msgstr "다큐멘터리" -#: core/models.py:879 +#: core/models.py:893 msgid "documentaries" msgstr "다큐멘터리" -#: core/models.py:889 +#: core/models.py:903 msgid "unresolved" msgstr "해결되지 않음" -#: core/models.py:894 +#: core/models.py:908 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1858,59 +1858,59 @@ msgstr "" "저장하도록 설계되었습니다. 지오코딩 API와의 통합을 지원하여 추가 처리 또는 검사를 위해 원시 API 응답을 저장할 수 있습니다. 또한" " 이 클래스를 사용하면 주소를 사용자와 연결하여 개인화된 데이터 처리를 용이하게 할 수 있습니다." -#: core/models.py:909 +#: core/models.py:923 msgid "address line for the customer" msgstr "고객 주소 라인" -#: core/models.py:910 +#: core/models.py:924 msgid "address line" msgstr "주소 라인" -#: core/models.py:912 +#: core/models.py:926 msgid "street" msgstr "거리" -#: core/models.py:913 +#: core/models.py:927 msgid "district" msgstr "지구" -#: core/models.py:914 +#: core/models.py:928 msgid "city" msgstr "도시" -#: core/models.py:915 +#: core/models.py:929 msgid "region" msgstr "지역" -#: core/models.py:916 +#: core/models.py:930 msgid "postal code" msgstr "우편 번호" -#: core/models.py:917 +#: core/models.py:931 msgid "country" msgstr "국가" -#: core/models.py:924 +#: core/models.py:938 msgid "geolocation point: (longitude, latitude)" msgstr "지리적 위치 포인트(경도, 위도)" -#: core/models.py:927 +#: core/models.py:941 msgid "full JSON response from geocoder for this address" msgstr "이 주소에 대한 지오코더의 전체 JSON 응답" -#: core/models.py:932 +#: core/models.py:946 msgid "stored JSON response from the geocoding service" msgstr "지오코딩 서비스의 저장된 JSON 응답" -#: core/models.py:940 +#: core/models.py:954 msgid "address" msgstr "주소" -#: core/models.py:941 +#: core/models.py:955 msgid "addresses" msgstr "주소" -#: core/models.py:953 +#: core/models.py:967 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -1923,86 +1923,86 @@ msgstr "" "할인 속성(금액 또는 백분율), 유효 기간, 관련 사용자(있는 경우), 사용 상태 등 프로모션 코드에 대한 세부 정보를 저장합니다. " "여기에는 제약 조건이 충족되는지 확인하면서 프로모션 코드의 유효성을 검사하고 주문에 적용하는 기능이 포함되어 있습니다." -#: core/models.py:967 +#: core/models.py:981 msgid "unique code used by a user to redeem a discount" msgstr "사용자가 할인을 받기 위해 사용하는 고유 코드" -#: core/models.py:968 +#: core/models.py:982 msgid "promo code identifier" msgstr "프로모션 코드 식별자" -#: core/models.py:975 +#: core/models.py:989 msgid "fixed discount amount applied if percent is not used" msgstr "퍼센트를 사용하지 않을 경우 고정 할인 금액 적용" -#: core/models.py:976 +#: core/models.py:990 msgid "fixed discount amount" msgstr "고정 할인 금액" -#: core/models.py:982 +#: core/models.py:996 msgid "percentage discount applied if fixed amount is not used" msgstr "고정 금액 미사용 시 적용되는 할인 비율" -#: core/models.py:983 +#: core/models.py:997 msgid "percentage discount" msgstr "백분율 할인" -#: core/models.py:988 +#: core/models.py:1002 msgid "timestamp when the promocode expires" msgstr "프로모션 코드 만료 시 타임스탬프" -#: core/models.py:989 +#: core/models.py:1003 msgid "end validity time" msgstr "유효 기간 종료 시간" -#: core/models.py:994 +#: core/models.py:1008 msgid "timestamp from which this promocode is valid" msgstr "이 프로모코드의 타임스탬프가 유효한 시점" -#: core/models.py:995 +#: core/models.py:1009 msgid "start validity time" msgstr "유효 기간 시작 시간" -#: core/models.py:1000 +#: core/models.py:1014 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "프로모코드가 사용된 타임스탬프, 아직 사용되지 않은 경우 비워둡니다." -#: core/models.py:1001 +#: core/models.py:1015 msgid "usage timestamp" msgstr "사용 타임스탬프" -#: core/models.py:1006 +#: core/models.py:1020 msgid "user assigned to this promocode if applicable" msgstr "해당되는 경우 이 프로모코드에 할당된 사용자" -#: core/models.py:1007 +#: core/models.py:1021 msgid "assigned user" msgstr "할당된 사용자" -#: core/models.py:1014 +#: core/models.py:1028 msgid "promo code" msgstr "프로모션 코드" -#: core/models.py:1015 +#: core/models.py:1029 msgid "promo codes" msgstr "프로모션 코드" -#: core/models.py:1022 +#: core/models.py:1044 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "할인 유형(금액 또는 백분율)은 한 가지 유형만 정의해야 하며, 두 가지 모두 또는 둘 다 정의해서는 안 됩니다." -#: core/models.py:1037 +#: core/models.py:1065 msgid "promocode already used" msgstr "프로모코드가 이미 사용되었습니다." -#: core/models.py:1053 +#: core/models.py:1081 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "프로모션 코드 {self.uuid}의 할인 유형이 잘못되었습니다!" -#: core/models.py:1062 +#: core/models.py:1090 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 " @@ -2015,144 +2015,144 @@ msgstr "" "포함하여 애플리케이션 내에서 주문을 모델링합니다. 주문에는 연결된 제품, 프로모션 적용, 주소 설정, 배송 또는 청구 세부 정보 " "업데이트가 가능합니다. 또한 주문 수명 주기에서 제품을 관리하는 기능도 지원합니다." -#: core/models.py:1079 +#: core/models.py:1107 msgid "the billing address used for this order" msgstr "이 주문에 사용된 청구 주소" -#: core/models.py:1087 +#: core/models.py:1115 msgid "optional promo code applied to this order" msgstr "이 주문에 적용된 프로모션 코드(선택 사항)" -#: core/models.py:1088 +#: core/models.py:1116 msgid "applied promo code" msgstr "프로모션 코드 적용" -#: core/models.py:1096 +#: core/models.py:1124 msgid "the shipping address used for this order" msgstr "이 주문에 사용된 배송지 주소" -#: core/models.py:1097 +#: core/models.py:1125 msgid "shipping address" msgstr "배송 주소" -#: core/models.py:1103 +#: core/models.py:1131 msgid "current status of the order in its lifecycle" msgstr "라이프사이클 내 주문의 현재 상태" -#: core/models.py:1104 +#: core/models.py:1132 msgid "order status" msgstr "주문 상태" -#: core/models.py:1109 core/models.py:1560 +#: core/models.py:1137 core/models.py:1618 msgid "json structure of notifications to display to users" msgstr "사용자에게 표시할 알림의 JSON 구조, 관리자 UI에서는 테이블 보기가 사용됩니다." -#: core/models.py:1115 +#: core/models.py:1143 msgid "json representation of order attributes for this order" msgstr "이 주문에 대한 주문 속성의 JSON 표현" -#: core/models.py:1121 +#: core/models.py:1149 msgid "the user who placed the order" msgstr "주문한 사용자" -#: core/models.py:1122 +#: core/models.py:1150 msgid "user" msgstr "사용자" -#: core/models.py:1128 +#: core/models.py:1156 msgid "the timestamp when the order was finalized" msgstr "주문이 완료된 타임스탬프" -#: core/models.py:1129 +#: core/models.py:1157 msgid "buy time" msgstr "시간 확보" -#: core/models.py:1136 +#: core/models.py:1164 msgid "a human-readable identifier for the order" msgstr "사람이 읽을 수 있는 주문 식별자" -#: core/models.py:1137 +#: core/models.py:1165 msgid "human readable id" msgstr "사람이 읽을 수 있는 ID" -#: core/models.py:1143 +#: core/models.py:1171 msgid "order" msgstr "주문" -#: core/models.py:1168 +#: core/models.py:1209 msgid "a user must have only one pending order at a time" msgstr "사용자는 한 번에 하나의 대기 주문만 보유해야 합니다!" -#: core/models.py:1202 +#: core/models.py:1249 msgid "you cannot add products to an order that is not a pending one" msgstr "보류 중인 주문이 아닌 주문에는 제품을 추가할 수 없습니다." -#: core/models.py:1207 +#: core/models.py:1254 msgid "you cannot add inactive products to order" msgstr "주문에 비활성 제품을 추가할 수 없습니다." -#: core/models.py:1224 +#: core/models.py:1271 msgid "you cannot add more products than available in stock" msgstr "재고가 있는 제품보다 많은 제품을 추가할 수 없습니다." -#: core/models.py:1246 core/models.py:1271 core/models.py:1279 +#: core/models.py:1293 core/models.py:1318 core/models.py:1326 msgid "you cannot remove products from an order that is not a pending one" msgstr "보류 중인 주문이 아닌 주문에서는 제품을 제거할 수 없습니다." -#: core/models.py:1267 +#: core/models.py:1314 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "쿼리 <{query}>에 {name}가 존재하지 않습니다!" -#: core/models.py:1299 +#: core/models.py:1346 msgid "promocode does not exist" msgstr "프로모코드가 존재하지 않습니다." -#: core/models.py:1305 +#: core/models.py:1352 msgid "you can only buy physical products with shipping address specified" msgstr "배송 주소가 지정된 실제 제품만 구매할 수 있습니다!" -#: core/models.py:1324 +#: core/models.py:1371 msgid "address does not exist" msgstr "주소가 존재하지 않습니다." -#: core/models.py:1345 core/models.py:1414 +#: core/models.py:1392 core/models.py:1461 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "지금은 구매할 수 없습니다. 몇 분 후에 다시 시도해 주세요." -#: core/models.py:1348 core/models.py:1410 +#: core/models.py:1395 core/models.py:1457 msgid "invalid force value" msgstr "잘못된 힘 값" -#: core/models.py:1354 core/models.py:1417 +#: core/models.py:1401 core/models.py:1464 msgid "you cannot purchase an empty order!" msgstr "빈 주문은 구매할 수 없습니다!" -#: core/models.py:1373 +#: core/models.py:1420 msgid "you cannot buy an order without a user" msgstr "사용자 없이는 주문을 구매할 수 없습니다!" -#: core/models.py:1387 +#: core/models.py:1434 msgid "a user without a balance cannot buy with balance" msgstr "잔액이 없는 사용자는 잔액으로 구매할 수 없습니다!" -#: core/models.py:1392 +#: core/models.py:1439 msgid "insufficient funds to complete the order" msgstr "주문을 완료하기에 자금이 부족합니다." -#: core/models.py:1426 +#: core/models.py:1473 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "등록하지 않으면 구매할 수 없으므로 고객 이름, 고객 이메일, 고객 전화 번호 등의 정보를 제공하세요." -#: core/models.py:1435 +#: core/models.py:1482 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "결제 방법이 잘못되었습니다: {payment_method}에서 {available_payment_methods}로!" -#: core/models.py:1533 +#: core/models.py:1591 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2169,108 +2169,108 @@ msgstr "" "작업을 처리합니다. 또한 이 모델은 총 가격 계산이나 디지털 제품의 다운로드 URL 생성 등 비즈니스 로직을 지원하는 메서드와 속성을 " "제공합니다. 이 모델은 주문 및 제품 모델과 통합되며 해당 모델에 대한 참조를 저장합니다." -#: core/models.py:1548 +#: core/models.py:1606 msgid "the price paid by the customer for this product at purchase time" msgstr "구매 시점에 고객이 이 제품에 대해 지불한 가격입니다." -#: core/models.py:1549 +#: core/models.py:1607 msgid "purchase price at order time" msgstr "주문 시점의 구매 가격" -#: core/models.py:1554 +#: core/models.py:1612 msgid "internal comments for admins about this ordered product" msgstr "주문한 제품에 대한 관리자용 내부 댓글" -#: core/models.py:1555 +#: core/models.py:1613 msgid "internal comments" msgstr "내부 의견" -#: core/models.py:1561 +#: core/models.py:1619 msgid "user notifications" msgstr "사용자 알림" -#: core/models.py:1566 +#: core/models.py:1624 msgid "json representation of this item's attributes" msgstr "이 항목의 속성에 대한 JSON 표현" -#: core/models.py:1567 +#: core/models.py:1625 msgid "ordered product attributes" msgstr "주문한 제품 속성" -#: core/models.py:1572 +#: core/models.py:1630 msgid "reference to the parent order that contains this product" msgstr "이 제품이 포함된 상위 주문 참조" -#: core/models.py:1573 +#: core/models.py:1631 msgid "parent order" msgstr "상위 주문" -#: core/models.py:1582 +#: core/models.py:1640 msgid "the specific product associated with this order line" msgstr "이 주문 라인과 연결된 특정 제품" -#: core/models.py:1589 +#: core/models.py:1647 msgid "quantity of this specific product in the order" msgstr "이 특정 제품의 주문 수량" -#: core/models.py:1590 +#: core/models.py:1648 msgid "product quantity" msgstr "제품 수량" -#: core/models.py:1597 +#: core/models.py:1655 msgid "current status of this product in the order" msgstr "이 제품의 현재 상태 순서" -#: core/models.py:1598 +#: core/models.py:1656 msgid "product line status" msgstr "제품 라인 상태" -#: core/models.py:1661 +#: core/models.py:1719 msgid "order product must have an order" msgstr "주문제품에는 연결된 주문이 있어야 합니다!" -#: core/models.py:1663 +#: core/models.py:1721 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "피드백에 지정된 작업이 잘못되었습니다: {action}!" -#: core/models.py:1677 +#: core/models.py:1735 msgid "you cannot feedback an order which is not received" msgstr "받지 않은 주문에 대해서는 피드백을 제공할 수 없습니다." -#: core/models.py:1683 +#: core/models.py:1741 msgid "name" msgstr "이름" -#: core/models.py:1684 +#: core/models.py:1742 msgid "URL of the integration" msgstr "통합 URL" -#: core/models.py:1685 +#: core/models.py:1743 msgid "authentication credentials" msgstr "인증 자격 증명" -#: core/models.py:1699 +#: core/models.py:1765 msgid "you can only have one default CRM provider" msgstr "기본 CRM 공급업체는 하나만 사용할 수 있습니다." -#: core/models.py:1703 +#: core/models.py:1775 msgid "CRM" msgstr "CRM" -#: core/models.py:1704 +#: core/models.py:1776 msgid "CRMs" msgstr "CRM" -#: core/models.py:1716 +#: core/models.py:1788 msgid "order CRM link" msgstr "주문의 CRM 링크" -#: core/models.py:1717 +#: core/models.py:1789 msgid "orders CRM links" msgstr "주문의 CRM 링크" -#: core/models.py:1722 +#: core/models.py:1794 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2283,19 +2283,15 @@ msgstr "" "수 있는 기능을 제공합니다. 연결된 주문 상품, 다운로드 횟수, 자산이 공개적으로 표시되는지 여부에 대한 정보를 유지 관리합니다. " "여기에는 연결된 주문이 완료 상태일 때 자산을 다운로드할 수 있는 URL을 생성하는 메서드가 포함되어 있습니다." -#: core/models.py:1736 +#: core/models.py:1808 msgid "download" msgstr "다운로드" -#: core/models.py:1737 +#: core/models.py:1809 msgid "downloads" msgstr "다운로드" -#: core/models.py:1745 -msgid "you can not download a digital asset for a non-finished order" -msgstr "완료되지 않은 주문에 대해서는 디지털 자산을 다운로드할 수 없습니다." - -#: core/models.py:1754 +#: core/models.py:1823 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2307,28 +2303,28 @@ msgstr "" "설계되었습니다. 여기에는 사용자 댓글, 주문에서 관련 제품에 대한 참조 및 사용자가 지정한 등급을 저장하는 속성이 포함되어 있습니다. 이" " 클래스는 데이터베이스 필드를 사용하여 피드백 데이터를 효과적으로 모델링하고 관리합니다." -#: core/models.py:1766 +#: core/models.py:1835 msgid "user-provided comments about their experience with the product" msgstr "제품 사용 경험에 대한 사용자 제공 의견" -#: core/models.py:1767 +#: core/models.py:1836 msgid "feedback comments" msgstr "피드백 댓글" -#: core/models.py:1774 +#: core/models.py:1843 msgid "" "references the specific product in an order that this feedback is about" msgstr "이 피드백에 대한 순서대로 특정 제품을 참조합니다." -#: core/models.py:1775 +#: core/models.py:1844 msgid "related order product" msgstr "관련 주문 제품" -#: core/models.py:1780 +#: core/models.py:1849 msgid "user-assigned rating for the product" msgstr "제품에 대한 사용자 지정 평점" -#: core/models.py:1781 +#: core/models.py:1850 msgid "product rating" msgstr "제품 평가" @@ -2522,11 +2518,11 @@ msgstr "" "모든 권리\n" " 예약됨" -#: core/utils/caching.py:41 +#: core/utils/caching.py:48 msgid "both data and timeout are required" msgstr "데이터와 시간 초과가 모두 필요합니다." -#: core/utils/caching.py:43 +#: core/utils/caching.py:50 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "잘못된 시간 초과 값, 0~216000초 사이여야 합니다." @@ -2558,24 +2554,293 @@ msgstr "이 작업을 수행할 수 있는 권한이 없습니다." msgid "NOMINATIM_URL must be configured." msgstr "NOMINATIM_URL 파라미터를 설정해야 합니다!" -#: core/validators.py:16 +#: core/validators.py:14 #, 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/validators.py:22 -msgid "invalid phone number format" -msgstr "잘못된 전화 번호 형식" +#: core/views.py:72 +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:489 +#: core/views.py:87 +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 "" +"사이트맵에 대한 상세 보기 응답을 처리합니다. 이 함수는 요청을 처리하고 적절한 사이트맵 상세 보기 응답을 가져온 다음 XML의 " +"Content-Type 헤더를 설정합니다." + +#: core/views.py:116 +msgid "" +"Returns a list of supported languages and their corresponding information." +msgstr "지원되는 언어 목록과 해당 정보를 반환합니다." + +#: core/views.py:148 +msgid "Returns the parameters of the website as a JSON object." +msgstr "웹사이트의 매개변수를 JSON 객체로 반환합니다." + +#: core/views.py:167 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +msgstr "지정된 키와 시간 초과로 캐시 데이터를 읽고 설정하는 등의 캐시 작업을 처리합니다." + +#: core/views.py:194 +msgid "Handles `contact us` form submissions." +msgstr "'문의하기' 양식 제출을 처리합니다." + +#: core/views.py:215 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "들어오는 POST 요청의 URL 처리 및 유효성 검사 요청을 처리합니다." + +#: core/views.py:255 +msgid "Handles global search queries." +msgstr "글로벌 검색 쿼리를 처리합니다." + +#: core/views.py:270 +msgid "Handles the logic of buying as a business without registration." +msgstr "등록하지 않고 비즈니스로 구매하는 로직을 처리합니다." + +#: core/views.py:312 msgid "you can only download the digital asset once" msgstr "디지털 자산은 한 번만 다운로드할 수 있습니다." -#: core/views.py:547 +#: core/views.py:315 +msgid "the order must be paid before downloading the digital asset" +msgstr "디지털 자산을 다운로드하기 전에 주문을 결제해야 합니다." + +#: core/views.py:353 +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." +msgstr "" +"주문과 관련된 디지털 자산의 다운로드를 처리합니다.\n" +"이 함수는 프로젝트의 저장소 디렉토리에 있는 디지털 자산 파일을 제공하려고 시도합니다. 파일을 찾을 수 없으면 HTTP 404 오류가 발생하여 리소스를 사용할 수 없음을 나타냅니다." + +#: core/views.py:365 msgid "favicon not found" msgstr "파비콘을 찾을 수 없습니다." -#: core/viewsets.py:1357 +#: core/views.py:370 +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." +msgstr "" +"웹사이트의 파비콘 요청을 처리합니다.\n" +"이 함수는 프로젝트의 정적 디렉토리에 있는 파비콘 파일을 제공하려고 시도합니다. 파비콘 파일을 찾을 수 없는 경우 HTTP 404 오류가 발생하여 리소스를 사용할 수 없음을 나타냅니다." + +#: core/views.py:382 +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 "" +"요청을 관리자 색인 페이지로 리디렉션합니다. 이 함수는 들어오는 HTTP 요청을 처리하여 Django 관리자 인터페이스 인덱스 페이지로 " +"리디렉션합니다. HTTP 리디렉션을 처리하기 위해 Django의 `redirect` 함수를 사용합니다." + +#: core/viewsets.py:128 +msgid "" +"Defines a viewset for managing Evibes-related operations. The EvibesViewSet " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" +"Evibes 관련 작업을 관리하기 위한 뷰셋을 정의합니다. EvibesViewSet 클래스는 ModelViewSet에서 상속되며 " +"Evibes 엔티티에 대한 액션 및 연산을 처리하는 기능을 제공합니다. 여기에는 현재 작업을 기반으로 하는 동적 직렬화기 클래스, 사용자" +" 지정 가능한 권한 및 렌더링 형식에 대한 지원이 포함됩니다." + +#: core/viewsets.py:147 +msgid "" +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." +msgstr "" +"속성 그룹 객체를 관리하기 위한 뷰셋을 나타냅니다. 데이터의 필터링, 직렬화, 검색 등 AttributeGroup과 관련된 작업을 " +"처리합니다. 이 클래스는 애플리케이션의 API 계층의 일부이며 AttributeGroup 데이터에 대한 요청 및 응답을 처리하는 표준화된" +" 방법을 제공합니다." + +#: core/viewsets.py:166 +msgid "" +"Handles operations related to Attribute objects within the application. " +"Provides a set of API endpoints to interact with Attribute data. This class " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"애플리케이션 내에서 속성 개체와 관련된 작업을 처리합니다. 속성 데이터와 상호 작용할 수 있는 API 엔드포인트 세트를 제공합니다. 이 " +"클래스는 속성 개체의 쿼리, 필터링 및 직렬화를 관리하여 특정 필드별로 필터링하거나 요청에 따라 단순화된 정보와 상세한 정보를 검색하는 " +"등 반환되는 데이터를 동적으로 제어할 수 있도록 합니다." + +#: core/viewsets.py:185 +msgid "" +"A viewset for managing AttributeValue objects. This viewset provides " +"functionality for listing, retrieving, creating, updating, and deleting " +"AttributeValue objects. It integrates with Django REST Framework's viewset " +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." +msgstr "" +"속성값 객체를 관리하기 위한 뷰셋입니다. 이 뷰셋은 AttributeValue 객체를 나열, 검색, 생성, 업데이트 및 삭제하기 위한 " +"기능을 제공합니다. 이 뷰셋은 장고 REST 프레임워크의 뷰셋 메커니즘과 통합되며 다양한 작업에 적절한 직렬화기를 사용합니다. 필터링 " +"기능은 DjangoFilterBackend를 통해 제공됩니다." + +#: core/viewsets.py:204 +msgid "" +"Manages views for Category-related operations. The CategoryViewSet class is " +"responsible for handling operations related to the Category model in the " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" +"카테고리 관련 작업에 대한 보기를 관리합니다. CategoryViewSet 클래스는 시스템에서 카테고리 모델과 관련된 작업을 처리하는 " +"역할을 담당합니다. 카테고리 데이터 검색, 필터링 및 직렬화를 지원합니다. 또한 이 뷰 집합은 권한이 부여된 사용자만 특정 데이터에 " +"액세스할 수 있도록 권한을 적용합니다." + +#: core/viewsets.py:315 +msgid "" +"Represents a viewset for managing Brand instances. This class provides " +"functionality for querying, filtering, and serializing Brand objects. It " +"uses Django's ViewSet framework to simplify the implementation of API " +"endpoints for Brand objects." +msgstr "" +"브랜드 인스턴스를 관리하기 위한 뷰셋을 나타냅니다. 이 클래스는 브랜드 객체를 쿼리, 필터링 및 직렬화하기 위한 기능을 제공합니다. 이 " +"클래스는 장고의 뷰셋 프레임워크를 사용하여 브랜드 객체에 대한 API 엔드포인트의 구현을 간소화합니다." + +#: core/viewsets.py:427 +msgid "" +"Manages operations related to the `Product` model in the system. This class " +"provides a viewset for managing products, including their filtering, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" +"시스템에서 `Product` 모델과 관련된 작업을 관리합니다. 이 클래스는 필터링, 직렬화 및 특정 인스턴스에 대한 작업을 포함하여 " +"제품을 관리하기 위한 뷰셋을 제공합니다. 이 클래스는 공통 기능을 사용하기 위해 `EvibesViewSet`에서 확장되며 RESTful " +"API 작업을 위해 Django REST 프레임워크와 통합됩니다. 제품 세부 정보 검색, 권한 적용, 제품의 관련 피드백에 액세스하는 " +"메서드가 포함되어 있습니다." + +#: core/viewsets.py:547 +msgid "" +"Represents a viewset for managing Vendor objects. This viewset allows " +"fetching, filtering, and serializing Vendor data. It defines the queryset, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" +"벤더 객체를 관리하기 위한 뷰셋을 나타냅니다. 이 뷰셋을 통해 벤더 데이터를 가져오고, 필터링하고, 직렬화할 수 있습니다. 다양한 작업을" +" 처리하는 데 사용되는 쿼리 집합, 필터 구성 및 직렬화기 클래스를 정의합니다. 이 클래스의 목적은 Django REST 프레임워크를 " +"통해 공급업체 관련 리소스에 대한 간소화된 액세스를 제공하는 것입니다." + +#: core/viewsets.py:567 +msgid "" +"Representation of a view set handling Feedback objects. This class manages " +"operations related to Feedback objects, including listing, filtering, and " +"retrieving details. The purpose of this view set is to provide different " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"use of Django's filtering system for querying data." +msgstr "" +"피드백 개체를 처리하는 뷰 집합의 표현입니다. 이 클래스는 세부 정보 나열, 필터링 및 검색을 포함하여 피드백 개체에 관련된 작업을 " +"관리합니다. 이 뷰 세트의 목적은 다양한 작업에 대해 서로 다른 직렬화기를 제공하고 접근 가능한 피드백 객체에 대한 권한 기반 처리를 " +"구현하는 것입니다. 이 클래스는 기본 `EvibesViewSet`을 확장하고 데이터 쿼리를 위해 Django의 필터링 시스템을 " +"사용합니다." + +#: core/viewsets.py:593 +msgid "" +"ViewSet for managing orders and related operations. This class provides " +"functionality to retrieve, modify, and manage order objects. It includes " +"various endpoints for handling order operations such as adding or removing " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " +"enforces permissions accordingly while interacting with order data." +msgstr "" +"주문 및 관련 작업을 관리하기 위한 뷰셋입니다. 이 클래스는 주문 객체를 검색, 수정, 관리하는 기능을 제공합니다. 여기에는 제품 추가 " +"또는 제거, 등록 및 미등록 사용자에 대한 구매 수행, 현재 인증된 사용자의 보류 중인 주문 검색 등 주문 작업을 처리하기 위한 다양한 " +"엔드포인트가 포함되어 있습니다. 뷰셋은 수행되는 특정 작업에 따라 여러 직렬화기를 사용하며 주문 데이터와 상호 작용하는 동안 그에 따라 " +"권한을 적용합니다." + +#: core/viewsets.py:782 +msgid "" +"Provides a viewset for managing OrderProduct entities. This viewset enables " +"CRUD operations and custom actions specific to the OrderProduct model. It " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " +"feedback on OrderProduct instances" +msgstr "" +"주문 제품 엔티티를 관리하기 위한 뷰셋을 제공합니다. 이 뷰셋을 사용하면 주문 제품 모델에 특정한 CRUD 작업 및 사용자 지정 작업을 " +"수행할 수 있습니다. 여기에는 요청된 작업을 기반으로 필터링, 권한 확인 및 직렬화기 전환이 포함됩니다. 또한 주문 제품 인스턴스에 대한" +" 피드백 처리를 위한 세부 작업도 제공합니다." + +#: core/viewsets.py:833 +msgid "Manages operations related to Product images in the application. " +msgstr "애플리케이션에서 제품 이미지와 관련된 작업을 관리합니다." + +#: core/viewsets.py:845 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +msgstr "다양한 API 작업을 통해 프로모션 코드 인스턴스의 검색 및 처리를 관리합니다." + +#: core/viewsets.py:866 +msgid "Represents a view set for managing promotions. " +msgstr "프로모션을 관리하기 위한 보기 세트를 나타냅니다." + +#: core/viewsets.py:878 +msgid "Handles operations related to Stock data in the system." +msgstr "시스템에서 주식 데이터와 관련된 작업을 처리합니다." + +#: core/viewsets.py:892 +msgid "" +"ViewSet for managing Wishlist operations. The WishlistViewSet provides " +"endpoints for interacting with a user's wish list, allowing for the " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " +"actions for wishlist products. Permission checks are integrated to ensure " +"that users can only manage their own wishlists unless explicit permissions " +"are granted." +msgstr "" +"위시리스트 작업을 관리하기 위한 뷰셋입니다. 위시리스트뷰셋은 사용자의 위시리스트와 상호 작용할 수 있는 엔드포인트를 제공하여 위시리스트 " +"내의 제품을 검색, 수정 및 사용자 지정할 수 있도록 합니다. 이 뷰셋은 위시리스트 제품에 대한 추가, 제거 및 대량 작업과 같은 기능을" +" 용이하게 합니다. 명시적인 권한이 부여되지 않는 한 사용자가 자신의 위시리스트만 관리할 수 있도록 권한 검사가 통합되어 있습니다." + +#: core/viewsets.py:1007 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" +"이 클래스는 `주소` 객체를 관리하기 위한 뷰셋 기능을 제공합니다. 주소 뷰셋 클래스는 주소 엔티티와 관련된 CRUD 작업, 필터링 및 " +"사용자 정의 작업을 가능하게 합니다. 여기에는 다양한 HTTP 메서드, 직렬화기 재정의, 요청 컨텍스트에 따른 권한 처리를 위한 특수 " +"동작이 포함되어 있습니다." + +#: core/viewsets.py:1074 #, python-brace-format msgid "Geocoding error: {e}" msgstr "지오코딩 오류입니다: {e}" + +#: core/viewsets.py:1081 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" +"애플리케이션 내에서 제품 태그와 관련된 작업을 처리합니다. 이 클래스는 제품 태그 객체를 검색, 필터링 및 직렬화하기 위한 기능을 " +"제공합니다. 지정된 필터 백엔드를 사용하여 특정 속성에 대한 유연한 필터링을 지원하며 수행 중인 작업에 따라 다양한 직렬화기를 동적으로 " +"사용합니다." diff --git a/core/locale/nl_NL/LC_MESSAGES/django.mo b/core/locale/nl_NL/LC_MESSAGES/django.mo index 102f9a111ebd2dc09626e2964839008d67af9589..a5d9af8a190d1c09f4c6af4f8635df32ca0b724e 100644 GIT binary patch delta 26830 zcmbuG2YejG-M?308~2JkHfI|f+epI3xPgs(1>;`mK1nO-tka#iB9}mx5<&}ArUjc4 z5(p3iMm8n%P(mj_=)Jv^kWi99Ac6d!@67DpNf_RI-v50VKQpttvopUovoqq6Ep7g^ zxoz-z&o&o${O0ZAd3(SWJw312uAcX^y;SRYFOKoN-Qi2{m=e$XD{N2s(EU8GBU}yp z!3x+P{s^{(7eJcvE`@F2t!W|6adN`SKe3EVVQb?7z&GCK5LEN-E@AsCI8KH(?9G(LQ z!_VOHytw-Tp0@~|eW2$}r2f?@p0@<8FFY7Zl$B5qBq0BJC-KicC7$;HTt)dOvrq%& zSKur-ZjNnl{aniv;SlaS6RIOOz)RuHFla~S(0S+_u7sUo0!rtNa0v~b2_^bh=X>58 z@I81f^$#xayi%Ax*z=A+^ji+`yqCHD&qF;gPyMrtQ4w6Q)bkd?W0!f}8hGb&2EzTl zS0evQs93$)^R~m!)_C4yG;sCd7$fD(5uW!qc+QcYw=eZ49}Out!_O(dbByO5PWkz@ zyo3hFR$zFPe^g~V*rVF>8mPac#`A8azI2`EodVyjqeDEut{(YIr#tGcZvFygwf}*V z%&sZV8woo?iEbQJ{UleO26>k^8_Gzpg?%W0l(zSmG*}h1gHmmGct7_IguBwQH-ck5 zuZ#=tWIb;b?2)s^cpw~0xdM)Xo1s+jAlw^135UTipq?9$XLN8j)b(Sb>Mw!VuXjHj z0KbKUVE;zTU?LgaxDt+s0o)z#fHJ~Ip+xmI+zpnkw<8=6Wh;k3HFy~80N2CS@I-hh zdE_&$bRp|{cA&<*~G;!rpoUIyh255O+)QP>;42-VxvlkG?^*p2ca*aw!u?r=8j3s;)!=)c}wINtGWC|z9+2f*u~I`|-r!I$7@_%+-Q z4yTt=)f%Y!GoW6)14?2K!lCd9r~!QHu73f0@P4n|arTA%phhqZ%E-n;jdTiB0}G)< zUJqppo1jE~GVBD;g6hB}?)n2z19<|fLod4e51>^184M)ycE?*0_J(@lNH_pafO_Fl zSAR5&QBFd2;4CPwxDaZjmqNYhDk#-7L$&t^R68#~z4%?I=e{}~{p-PRsnE#V{n)Y} z)QzK|bUzJBcRrLV8exBUhT|`xUVJx{Ej$U;?pv@Feh4u(6K-V-GZDMWhXrINkvRoU zhId1CKlW@4}wE-}{`*1laZrI~PoW<0!9#yTZ%h zNcan=2Oon2;Y+Uk4>*|eu4h`&4~3G{YPdIC=XgGpgn#GwDhy&&d`o5!-1BF4vY86^ zq@04fem2|(-U!>kSD+;DCY0zuhwWjPvuwE!oJV;qRQ*QBlb}R@CR95=KMVQGA1|ju zJ-!9X`X7P);A^l8{KD0@IoqnJA1tSSPdF4F3J-(FLP_#5I127^j=irGwxxUo>*`FA68G8KAJ6O6$tVJZAQ)B~Tu&hT5f2kdmN9qCBej`A!hcU=he+!0U%I}LV& zmqU5MjZlH@1E}`C3CMIJ)A2mpa33h$j)OA3#ZX3fisM;O61o5yE=H;+R$k~s-V66d=5%b`Zl47t zWh2kR9`IwR`@e-9V22CrbG@KCJ__pkBsd1nf-(7jj?73ZE`ZX}-B1mF3FQSHF0^aB zQE)Wnv!QI@cBm0O4|V?=upE8{C&1W6yacX>YWGqoulN&`&Fpb89pwGqFf!`#WT+R; zg3?)~<4@sm%GbK`Q&5x7=Wu`6`4Zcq8BilU8Xf@?a5;Ps$`<GRCfr;1Z?TKaaZqlTg1YZwxF5V9s+}+3Bsg-b zt&eX-{;Jqag>HDl@jp#H^C9`UMQmv-Y266x?gQYbO;3%L+1LSanEZbQnSoSnfb#pzP%pd^ z?hEgM@{UiSY~?GchWESH`u|k8fbuFh3SI#VSD%?l<|EIhr*H@tkLWRJ5Zhk%iv5X6*j;b@HcQK{3|Sl zV}ENUaWou7`E)36Xoi8@4+PxF)f1f+ovHq^4i>F8ypE$Uk49{mqA6kkDy*O zWSf1_p>S`?8=+o!rK^7oO0{3W$`XwEX5=qp*wBn6Q*l1j$lL6&qU!=>{r%toxG$9M z7Q$WOV%Qcghd+Xc!OrkGsCM6mdj8+=7TAk_q_Rh0U-CG9j--4# z)Cg~evXw_+C-^702YeGs62UiQ29jy>5a04J275Bndbo!22@mth&5K`xr@_k}wMM!3 zh!_3k zDPlW(@oByR=uqrg{8t@$j_3tHe4fP$yzWKYvGy<1Im+j~!l<}^%xj+a6y=-VK;)E9 zc#E$k+P{i_^xUcM;(oiJ|M%XrBHjH1=6NnGgS*39KV;5^kAH-oXrT6Erc%nge!?_O z`H@fgoPr;IjyS2m_#e!SaO0Q6241u;qnQfxus3XmGTKL=i34yS-tRp}MxrbE+Uleo zRJjXW3wy$98qPvB^zy&#^-p0}%Kw1fVVi&R0y@+iZi4;4wX^1Cuf)WMhoFpcml9i^ z00RYr3>oR>8YrvZ?)V-or`%_k5@Ypqpmco_oCI%&hr-XH{C&o*mI=5o<@4Y~cpsD` zzH-+mwz2me)21Xan@gusA!B(4Dips66*~V6`@t_@d)TdQiPr%8!NcI`P)7O=JQ7Z6 zS7N5sOW;__H^Bbz4XAd%f_-4;-AcUc;IQ3-5)(q7q(U9|HFYHBmFQ^A6 zLAldnDA6D0uGd1T;5eukp5@BdINkN?*wE_&!9%yxr5cwaCiXa!{B7N z8SV$4gi=*WN86FEa3tk^P&P9Ic7t=FB(}=&7*}5l<@Xz)1{wrpMv>XU9 zeI53IA3)i{*HG>{s*~-=c&Gu)gt~tvl%$SZ=fcfzJ$9y;RL7$SHZntgDYPEC8-;sI&>Rc3h#xoou1vTQ7(cr zDIX1`sw<&XvmFL%;1M$D!g~fvv~NNMioZbF!jK-;2uq=KTn$Y}pk8zXxTMeFxe4Wsv&= z??f`v*)}M@eHY4@K7<2d$zUtGK~Uw4Qd3#V%9s3hBB`6p`N=Ns^bqrN$xc$ zRsI#K1G@~dI^W%K4(uiWZzLnPI|Gh@7eV>|-LC#MC>4AJWi*|K+J>h>8P`%M|6U6< z;;W$MfZH4&hB3-7I(`KwQywtP`Tq(s>fupP0U`|-!;_#?^9-B@+wN6jK2YYs36#%( zL*ae!VE8VSD#i@A9h(dlvgbpo=1?f3I}A!P@!|NtUYMssJwFYqycJ3!H@O?{a`jKU z`ga{agEH1{p=@E`2x}w5p$0SqO4rMwydVkH?k^p;jR@=wcT=Grz5w;W+fc^xFQ}gO z+}mCs0X4$0P+o8VRODO&)q$hoL9iC8W7j}Q=m9t#z7J)@BS%`5%nryjQsKk>;j2(L z^cZEQ*)k}jnhZ69rBJ#)9WH^7!x?bU=n}Kna}1Qoo8cgMJ5+~XfTQ4>jve>0@gUfr zj4s3-&ve`Y=TQF!lphZ-brBHC8`eP|z6uY6Gs|pX*#Z@4+Lc?5gJUVLg&N5Da2&i2 zPLcn=PG%Mr1NXH?bqrKsxzLp#hl+5!j zv*6y8o1u*D6<7v8aOFM|OLWHR4TGKK|69q(n687;)xA*G`v{b3UUBtpCs_$}g+}C1 zfoF^3Rj>o)>!6<74i$)Ahidl|C@=dbRQp{f-E{y=NZM?yu)tx!6C9x6b!pJMNy3}u{YSKbDPQ+^+6uIMrq|Ce!1ood}A2{kXD z0~LB-h6+G^4zeR!0HyORlxXjRlE9O${2Yu?ejAR4yH2y^a;Qb?VkqxA0?vl(rv+9t zcT%AU_aIapXgl4;f$nfMEcc2C^Xoigwhd`-dE!6bA4obqmh8ppG zP!jtL%1cHEGwr9e*^*pH1yTje^FqG(@gNkVF=U6wJ2Ni%eLrLTXD4lnj zYgIM{YUCT>q3{-{K-G3$iI;<`pvsRy-Wzy(%(oTOp^Wc5cr<(nDh>=^U`2NX97*|1 zs1a?4nttDQ^<5X*kUJ5UP(Mol@Y`b-cGO8jY|*=t`s-YNU+mBPPNPym=TS2x z=8sX7eUQ2|e2;WK=|svJU3(g4ZE6163F$-b)$d^PzlTql62sT~ zC0^E@=C>>VZXhjpW%+R<`BkK|$lpY|kn~5&caxTp^t&B)BE3O6h)&I??sp_&jtNrp z$lpso{K>{7T{HgKJaCq~I0F8IbSvpLZrGb^AGm8;6O5z$Hq>t*`B9|5knhDkUyu%U z_v-p!uKfn~Cml`w??{uW>#mFZa5ldG$o!l17cR0WHGj!880z;ElBQvK22s}Q!NW61 zC%fxZdmYJ7qi(UQyC2q2|01cBdi`d?x2Ru1V!ANDCi5@j|GBI954?*snhSSAS*d>4 zlfI%{LpqQAT+;odu9Ou6ZXrESdX%z$jimRoe~|WKYq<6@>EERFcKl2b6!s$>%MCdg{$3~ZW6C}}3T|^3P9c9T`5WNB zNZ*oQ2$_M+W@Hb_caYa_I_V8%+^-Au6{O=x!I}J%CFwVk5xhfQ6N9G5Hst>ZHx z(!%^{URUm&;huXEzR$J4lAd;Tm%DqHIdZzjE(rQZILL1aQ_1YQ{JrCnM=%X zDvfj^>9>`%l=Lvyt|eVW{x@)cckkaQYo<(7mOH;fzRF!A>+SE_SxMc`Rl!f&w10-? z{KwRAaW~R53U84PCm;TfC4T{h<4GgQzejqFG}<-Xf%=0<-;n-H{aAQ1>1Oib?+Y?> zNGFm`Cw=Lz1r21*C-oqm>MCb)gMQ;kCy-W?@+AG@q&>NBS9k9P@HumZ??LzilYi7^y`|(Q(Sb{(|No)#bJEA8yWI`DbMZCu!2BNJfoEKP5&1XC z-$VL@R7%qCrxsqd;{)9HWAfL)U0g$7lYf>J{?3uXJWu*PX>Za$xpETe%J2@yB-h%I zKLBn~98Bhvp+?iY@Va?s2_Q%U;mMJnNjMQ}6R4ZaJ@ zc;IrV-(~O*q?gIRM4C!|2kE!u4=24!x{LG>X&vcTr0_S6`+C#Xx6u6p?{o?`xr)wQ z{E+TemFzMC8&E}|14_-pucsGjORl)Bm(pc(_fJ5B1{;)UYr%C!9P0Eq>qke+9 z2mKfS)=)T;bc(Cog%|yUd`E8HNd8XpL*Q>o`aJ|Ex%@Ehsdjl?i@E$SRN!}@g*Slv z=7sm^{R2twklv>9D|geoFhS~0-FDJmJT#K>ZSKKy+e`EMLLOmB|H-Pq%EX* z+;=Ygfch(-en|`S@v7`v&Hww5IfffHkuD-#p)35lkhYkd{bz4b>lzBH7n14j2GGYb zyf&MAUk~r++S%m)Nvd);d_w*J`Tw)7VhR;)xbY+S8FgjwI5?3soVgP zAzqmq6ZN8z(<>INTSe2jj zRsX$jSdfb)QaQgS6VLhC*!o1SHa2@*JXMp9Et|7^MQm;+Uhl6@XX^G2yAkAK^?qe- zJeA1SXJdLtKFgEwhK5YKA(Nn)Sk{Nh#3nzJHN&h*R9E{MKb4CikVHDgz~&~BIqsrk zmGOpnMIxEVCDcmBkI_zJqROv|+*>D&JNTR3}n; zGLljY!Om$+RQTDljGv@qRk3t~&p>S#R?w`yyb6^pMyu4mHqu|;V_ z7~Y`Ky6$l~pVDZW?poL>Kpa&`jm8bo$ffYISUTli6+;SUsO2#u`O0Lzir#1Q4Grmx zHHxZ@sd#;&vPg=yW878|&uS1UBa+H|CY0%TMpPQB%x81y`oyMqMG`6cnfgRFtD%;f z-f(Y~l{f;bk7HfUoyL^43Dk3%UR#+?<>)=yTq~v3)2E8Cg>rAcyR9-_iP(xpmd#hz z#^PCwF_?3z31cRvaH=1q*xkSC6&gTlRs7airVvLD8t)QiiHr5s5S*Tt`x)#o9<3Oy!*DLTv3D~dt9xD!PaKiAG=hBsR z#>`NP(R_AeHs{wD9(3xkffXTE`Zzi7P-to-=-S{PTe<8I7r+v!N`itUx0rYyKHj3i zKnk`kD%MuV8xvTdtQE)gE3%24U*6H^&c(cx#OT*ISZ_fHjlSt@_#{H~W63lwXRON( zB!>@F#;Ot-rnYouqng*-7(<}h4lUY>7L73brP7Lv`4n~^PsQf1Sg|Cw|Cs$_ekOy} za6J=GC@LDat&*GDzGVDtI-jZZbxS@KZ^Zf)7z+c}%dJ<)2Q)1soooXE6A{of@qvNY z#~Yl-M`L$V$L-aGlPE^(=ZKBAvc+s@TXFA--Vw$JWEiNOS@=AYL)nUr4SuYaXo~Br z8*3IF(yGtt^{HgqMq8tzszgm9N5o|EBB1eax>D0{l?%EkGDBlOph4_EQen%+cCN^D zCSHT=cB09aij)=nHws+y|DnNTx(2I44i$L?U`<7F^7sUf(bVny-a$+0IdvJ)O6*R@ zxLcLK!FZ7kvow>E>?3`dDC4KHd5pv<-WdxXW@mA=SFCx3albFip4?7!+B9MREpLz815Xw@6DzF7CVq^<=FJm1|@5TEjH$yJD|CJ6|O=-E>fI*TD@Dw~U^h(uOK8?a;MAG3T~+hT>aR$j_-F-AzLr-jg^h+FM)W<7BJ zvfe@Q`m;J*e;S2pNm`vxnhCqm7v36bpx)2bruFU?6N+MtnVhV%!dc_ZY7QyuawflX}q#|;DmuC0iq9AdPa_|Ke`qxEOL`Ejl#OT z#V41a(xj1%&04l{cCoKX&33&VYA$-YdMzO~4PDYRFdh*Fh$8PQ7+#E7qq5Ge(nF^s z_-9#sR@N$}wOCoW0LJjG$&|-tR8{dwkxprWQW{I-3ZE$Pps?<9D-wA|WB~=sPQ_YC zBeGR*X+EwmmW|#r-v<0J_?cBeEz_XByIkQnQR=mNg3)Eda=4frKfHKhQKCetZ{f%Ld586&HMr9`s${*CU0{ z6_HJuwZKRQT6P$ZGeM>GsETHRHP%}6c&znQpuyG0>#z#V2s9ZfFp@ybMjWHO@Ds~M zkmiFX4(SyX1}(FWc2gL8ecFBH7qt4ldj!!Z**wB>L*c7pK0TE0hstcJOP&hso{f2| zSd~%#`BLNSRa+rNlW1YCV9ek7qC|TQadrZXTFr7I{B*^#HBltv8wm~)UPDj_aGF}G z;+ZNF7uUx(IukHav6Y+IRf{!&Rzo+v`7b0kGo$w>x`s2FT_HD}HE*!_lnYh$gCBCX zjcBLqJ6;^lV}%s}R_(r886F-GS!(33GnNF!U-B}Fmaq9Q#{!YC%>F{ru7e)c-iD19*gu<&gnC@heiFKm zP`kKaxP0-UPCZR$th_rY3coh!A*N`)w|jI5wVYjPD)xIWE)rQt* z1@}Fx0HZusO4`S?8f&#AC<^^?+wS-6|7l-LaROab__ch1r@ymzY9=hVz%2w8ecSeP;Z6rqEEc75QXcwA52S^#&uF@bzph zMtiPqO=tGAqwRI$xW(&PiNda5)2R+DZSCrzDX8f^JD+0a$;SK*+PTz{E^3--j7@U( z>(Lz>O3}dRQe@lagFoB!?V*LPt^P`dYIEf~K^atj-%JFfw!Nm<_A$>)pIExnST#TU*a2K5t_Y zkWeTk_bb zAm*AKjQVtqpG>T)tM#jBjRP!!DxXlvshEVrGj_#kpNI~X=3MwcCBbaX)d|ykpC=pL zq1{fU>du&I5Ob2i!VB2I!@1}{s>Vt;R;Qz-*5^%p%;bz-S{yR*I%!~V5U;ka=>6s! z*Bp`QvM&{w#?g;ESt>JMus)lOP66rqM)S=qAISOnl+4fc-|lB4x?-Wa9y<74JDtz;GBT*#&`;yR4545a~PCk^HHNLmDXCHG0~Og(HEa#4w?L9u5idCi{Jy_ zo;2l?3063X)F$+32Nka-u=yE{l2bVyITa6iQ<^OUW7|p0)|iXFSA7|Rk(7C&#;-xy zEGc-`Q86ho-QenC*`&`|Yf@d-@l#oJ{-jRY^Cv&HDebdASB2-+BGZ`qG~Z}dK2=aa zyt=9T)w_qjkk5rqg{P!aJSWo(&!6}%p2^`?&U8oLYAoo>I3lQO$m1<^UUnJHnFv_7 z*aM4vE*y~aR%cOiZ+t8;@<=x{YHJo{*iR6eAevcaF7S${Kjs8zyLZTClE;56@DBCf!7D$C$z+zd8a8=Th{CDO-Wb zMHZv68r)RpQ%T!6uhbb8KyQudJoZNqq6H%om21=)4>!-(?n#5(E}fNoGg(2&{fZRT z^z;>dMl2~lquRN82!u`NG>;6Tuon%*36ez`@}wZ|C~DA6o{{tMe(QD|UYHXp%q?oG zrC8$OkyOek9F69KWP^Euk$X57S=rb|q5~>=62;2MvCSc0AvDSW%;Hij>d?KNcbl-u zjN+Rh$yQ1NLu>4pCW;mLU}W%;V<0ol#N$&oLNNz<=Bd~p}Lkx)uow$5P;6D%A%HVLLFJ}ymjslPmk1woIX0gGE6(B|{sDnsv!&bV60$EnE5$H~5wNiB|2rNVW2 zt=+$Lig#0Y%*T+U#UH8 zt+l#?|C7G|PwF=3V(eccKAkclOH7jSS7j3GstMDIPi_saJqON33sKWKse-B1ku2Yy zVwTyRR~b$&pT~hDa#UCr>7KQ2zQ!&AH>EQ*+>x=X4m@eHT8{3dRcA;1$qhk1TYO9w z+J<~8&L`^4Tkh!4A_`4JpZe^JSEJOVTR2!REt+pND&y!ap6#W6v_2pE_}7DiifDHJ z!4;o-wVc;{CuL=kwRsM-zH@w*m2l+^Q3uGkjQ@7CU5h(*Z|2jpij1EiLJ*3L{#tLG z5(sM8p=E8u=ah_}b*?ts?OwaKI#>lNin)n_7xG`L^|&P9HrLG`dYNsUfKcRAzLTRi zt*&QE8=9s#W}{J~B{fw%nLFu3hi$r^OZ#>uZ$?zSa8%!P2T`Vu4b^olU(7u`QN!P% z@uXs9(bBqbXu%`K{@e?V2}e;q>=DhiT1YPmkK{0BMSMw~6+X_=uf-RI7H96OqPc48 zLnZw}TQX5Ot`Ka-KdY(xRehSe+}UOEY(HG+w?2&{RMFee^xeWmOD+w)RsSMOF_W!s zaHnSpb|jejG#9BhoNkTH7>73Nd>ci-cL7sa2}Z4k^SD-)(Wg$8{vt_#AC;~nPK0aV z7{=!u8UvGqBLz*8Y~tAH+lb!q?9ldDa)g>>6<@*KQfSelFnT!$sv9`*X35E)5w6R6 zix}pTO!KtMN0$VJRr3$}<>I0fy%yg?W+Dh5t&hj~tk8)bQ+{C~FGIoLWTyu(C~;*Sih63i!8xXdfn$Z4ydv$2|NxS(cJ$1ch3imWVMFE`d& z7GrO{I%A?|p(S~m{@{Ns$N5U42^*?p2gp4@-Yr(p=JtYnwz9B-3pMQQ+)obS%}=w) z@RMxZR(Z>9tk=ujV!(bvr?k>g=K`Jo;ZFPw1&4Bp6n`a$DTS-8a5Y|7(`l7cSkq~q zXGBR8_1K6o-y&h#MU9%c!0TMxGKYe^lo=<`si4(Cv>J|%lhzi_1H&FgajTVJXxwxy zU9Zk)4dJcU5)5ZIFPDjj-mmXB8HJ9&Cg|@2qWzS}p;-wU%WL_qR@fXc4jvw#MURJH zQ4+UZ0HX7jpLAhx)Aa7*tQ~z-n)qOAi*|H~KKL!F)B4cumxLb$oLCT>6pC72cMgCn z$kG@$|6!g*CM_RlJJ0NQgmRP->-E;>?H8IAQA-KYtUJC5q`&a9$<2JI!R|q{p87N; z(huvwPSfUnk+QAxxzJc}fbh%M+*}AbtNcvUDcgHCpK-;MKEo6r_*llq!@$g^SoCSa zBvYSmnsLp*`C%N{>21-TSn*+^hR3Vyenu2?jP_gJU%Z|ugb}BzXem*w{b(#LEX@k2 z3jd8(5y(^%T9R<$3`F}9{53h#fLozNiy!{5$ebtYK+!3fjbiQ6SToYf&{_mXNM_&7 z%BBErM~`k3REN$=0Bs(zim>+1opg`Jv6VMJx-L@WOf8I22##ql5o_r^7rN zZpVCIa9G95m!tFO7)wJ$R>g;l*7tSzO6+xiCA^o>ev4PQVG<+kmW7{cI$?Xil|MAP zRWz8+M4n$BTcn^;yct`UH@irYDCJzdq3N3)1Aim<;NN zP91f6L?dBXK-V^E740vyiXr@Qfm1&58x`9yAG&hONaP}*4MZ}pOqv+WBucNs^+6%j zXo=uN(_-nTPhIV)X|Y!8_u0t`mIZ86u)SaNL$}=AdAE7K&jzdC)ZwLA)0a04I>;O| zx-Bg8VOn(3Xk%u$U0}YJ6zp}_=+x8Hc>nMFw+QFPUtBb3>V9kgb;a?5^F=n)b;82JI$mLxev|uJP9=)@@>sQVtX;%FX>zfUzf!=KCc2v!w82&2F3G2wFW$?h2QQ zb#`NnMs@mF9B7OC74?~;&Yi9|&04j_zyHSYM5b!k_b%fjiDaA7FAfddkeyw#p!HL< z#uq?%GRZN0@sfb9+LbXX#C?j+CwHo8Ns`qEPqlD!_XjtAwrv>hi#BAfsCh(UDVm?{ zzE8_=Z(RUk6|H+(Z?|ie6`C(iDh}ADicBxIsp+fcUQK`gL${`Z+q+HDBdkQwRk#t1 z((Nvb8Rn)m$C+kGI^xtB7#7I>OVhQ_4-U+5)k5(s&h?~rX`p?%^D`Hf!Xua(Uw{2* z4m@q6k-Cg?gr??d^_{L)b5c`qW8TkYyKHj~8hzEcc>bN;U~L9V-0qW5pC39EK*8+M z@;{@Q|HHxjze0RSYc7!Ga`M7xS{-JjGo9&AIGL3)dq0&+^(OzwE==^aY$ZS(&C7ErDm delta 12293 zcmZA72YiiZ|HtwBBtb~5EL)G*BnSzyV~f3O6LOG>1c_DELt9FVmKZInYP3|%Sbb1b zsambwqDoVvRik~VqT~Php6g1VzW(>?^~?MEUH7`yeV@})XBXu8Vp)LqN=U#$hpn2Q zz=h0B*t;aU1HqIyD`q z2sXiR$MHIyDJ-DEgL&}@>Ofa5bHiXPM;?xqu^yJhLAafUK9BXuYt`{x(0LBy$fsI& zSbs)!Br?`CtR5ES{!Swb>PaVzz~Pu5Uqm%zCKkgiR1epqj^BdMx*X>y>iEdI#wb*S z>!L=WH!j5is182HP;}}!PB8a(!YG7cIn)r>#V9V^6#LP`)Og3aNd1upjx&z>RSg*l zEYa9;+F`RM+yrMgrOffy6CCGl^2#k3c0AD1agK5R_|{A@dGj`o^Isg)mhn&IgzoJe zXCW2uba0$?Sf`WYjHdqE&W^K_yi+&FnT~mTXvnxxPcz5MQ9W9TRd5}u$ER)m1)E>N zWa@J;0^9a7#|`Sm_-p8rsnAfTVKh#{s`vp`!c!Q7za!J_RD0HpR6o?3NXGIw8+G1h zjKYg{f4<(Pz9uq=P9M}7TF{&EFGFDy74n2V@HWPghxaj4(;kbF4@L&dnTYxDAV%OZ z494$K*SUx4Si!!m5iEubs*{e)lJf~NE6!hD3Lz9)^mCl**bB8dUcy4S2(^C=PR3nW z5o7zC#n=}Mk`KmkOhX<23TmnrqZ+af3u88_!3VJjdM{E?&u-fT{0EpFq1Fnhsfojq zn1E_vKXhX{R>L>3Htt4E)m>Zf9%ydd9yMb9FcOC%Pm|Y~VGo#%YVk7E4L92SW7Hx$ zhU)2Q)CI1hhTMOUSqnu_JuQJjSRU1|ns$F*)OClVMk38u@8vnCpvUi3)Q~Sj4dHs! z4L?Ek{5a}{H*Ng`bd&oHHVr6`TK!R|p2nbVR39}piKy!hLS1JRhIuJGPeCWXfjV&k z`bNUK5!Jx`sJTCfn!Bf{sR&LouVA;e0qVv*P#sA|U3UUTp%=B*K0>b+!`HUr9>$ZG z8e(3lJx~pqYh8i5@m8B3L^a?XmcSpa{zFXz%3vh*(Wr)WK~2$6)KrWb%KSH{Fp-Md zxEnPzcTtbuQ`8M&czfu^tx#{sUg#T2)Lf6kayZHEUy53Ut5G*Rk7~$OOhA8+X<$na zT#Wc8q(#cwXp@=co?-?D^PE}r9kDeP{V_kT!o0Wvb)jvjDLIT)@DEgjD~>e#qfrfPiq&xf z*2Gn)DLjLTcoR!uOe)_2^!#_Epc~Fc&FLak&sJky+=11w9v9W@1KQP<6%W-7(VHsJZdDTU{&0PI_?U3wFnB1H4O+w-7pdhV;t&6t>JQ6tgZ)^|m9z=P`fSiApa)b;1v{mbqC^EUu>g5949562x;nw+BS;u1oypDS8 z+}umYwZqz|wHHG;Yxxt87wwMFsU~lYx{=qq1vQj8*bqaenf;wmBRCbC;Srk`c*%U) zb+cw+WA>l5dC1FLTSL{ILV28t8q$wYtNS!Y;#JgY_J4)X2Mj|ko-wGWVJhlrS%5lk z36{sTs3|>;HSr8KNB`-jzV&p*Uk7xgLUYsub-_WX8)l#u(<`XOGzazKco((WH=#!4 zFzR`Kh)1#f49B6(&Rx`0jD6LN#1hnTmryUH{4*KyN)+nOG^>38YG`MmM&?tjh>uWn zS7w&^OlXU`@GxwOb1@E2qAncpn&VW!7;J>SumEOZ9$b!kY*%|JXmM>u4cSpFg?CXe zk^--r8x}(iVI1a14{FV%V*y-?#W5Qb@i%2oG-~cZe+ocm)Xo~nj0i+HRn~x=2+@q z+Qx##EsXymj_=_8m`^tx3G)?pOr9Lny>h$iRlU1~vEBY#x5d%w<>9(9J-ti7e}9 zScCi_Ho^*r%~T{|Jo#JL2~VNknC{PwZLuczcScjF$Bq@)7{9g$L>w^(HoZv%2#qk^l;$0k#kFXDp_<~=@@KfxMrH-1lFcD+){LiMKRr(3)!e3(q-o_8n z@0fY9Y(O>O5^C{WLygF97>fSK&3VO8i@64BsN+%l+n|QLAL@Ro%DKNY!|qs&I$N@%er57vs2f*6o!9Uy z#$Sa5Dl|u}P($9wnvT`Ur=xnf1$Ep()KpwRHT1r%FL282FN^u8uZ^{^0oKHkSRR+! ze4m#>0u}eL9o9N+E;t!=gN3L!dUG37YaovM4dICW{oj~d@5>cvQQUTi<*ipsG;45b?`W9EjZ`QA`C*!aVzvS z1a-qqR7VbDI9|a@dj20!P|Hf4H#^FsZdl*i+}a*F!Rdh=aWe8walSy^@XZTm=$D{I zawF=xk5R|FzUDUr?2NT>1qSN*KSM!td>N}^;5X(CRvUGp6jY11VFVtv`89NtKSF&R z7r$tZtAi=ziI|Mp*jxKAnUNZUVdO7h4?X|$C}@@5Kn?9f)Q$Wuo5fQCW60Z~dh`N@ z;wz{(=37_=&!dj}8+Crnx2ET9QEOxow#FT(5&ILpYDvB;=7OcM9(gT{!V##REJWS- zZ`3Nz_nn!ddRUq~0kwt(U^z^~1bh=Ua;Gp3Z(7S-HP`8WmGM`LU#6l4Zb#)mU;~V} zX6n15Zaft=cbhQ)bFdiR!cypbZ$_{*DzA#&uobGuZ=u%KO4OoV|Gn2-Xa^MGpYlTKbWUv0BViRL!Gx5)$q@}6f|^~ zQFD3+)d1IZGxwp^mZ<&XP-|osR>DPC7Wdlv%UF*5N34ZGH_UmBP;0CUHpfAz4trNp zC`@6e^>cKSU$Fj;^~p=zG(*=N)xiE3f@#PRhutEjmRd{aeHk2SGGRKdLOk||HS-Q z@+Ykk=Dz|3^(X-~*WFN0!AR7FS6MgP{d=(h_2+GV4YgLDpc+v0w%K11>7i2#^%T@c zy+J#p8ZZExaDQhw1-0yb)DRuS1iXP-#g%_HQ_=#*lP6;=UPA3Ja>sn!Mxho}JgNg- zP;)&K_2xT<&9L-c^9#s8^!@&~l|mVI>_WBpJXXc;toiSm_dy+0{b1{B)@|5|`YTui zE8I6d?v8pIQqY5!un#u-#k^OR{=)c2QIY3YbA#F#Lp})AlX+MN*I^_47F%G+|C&WL z5cOhNX!B#(n%wV!IWN&V1v^r|1v}v1*cm%KWc(8;EPKdJ@dm0Vt$*Xc*>N^1&%riW z^^rM#3=SpVjs5YN-%b7k4j{j3ZSvUU%TUKX!B~9uiTNTk+e@J`6$-V0+=)`O+g5RPp zd>6y;5$XoPf10PGEY>5hhw4c>ZpYO)9{c`frsNbRkmvi`ydm47rgj?E!fcGw^Zx?{ zt;&*)%Qu((u_F0=tckl&i|Q8Y=_uxM`978#U_tIxX%QuCC zu|D}+R0ob=C_X|BeNY~k)7VQPoPsXY9o6GhjK^iDr{f$pLchGGCrwceXpL%ESJe4^ zu^?uk*2px}npuo$_-fRRf51_A7rhNA^v`EnycoNZA3~j2EYRh93@c!H@B@HJ{9#et;6bg!Pfg1a{1o4QH8uNmKE=B{bAGa zYinckGL*YezUQkopKL0Yw)qaM!v1o(Ib}T!+L}|=^e!ZdP}az5OQQUUc#-I*19G?b zD4Zo;wiO3C-~?q}YQ9IQf*)T@sMD5-gK;16Eagv7Q=sifd(2iGWXr0*LHSMM>A&j! zxxW^K7SjvtY)i11eZOSz@$cJS;qO;O59$MH$TL_4$KWFB^HSELEsbAOx0IMnl%(!D z@g<>6Z_$~=ZT6kh05R3R&5sk`r__;HW2&5A@Kxdnp(j9VhyAm0Kh&q*{6Ij-7taB_8f7Fa)9k* zXVZW41Mw1e`r92kIF194slaxDs7&;uPM>;fP;bB`sO=%PC-nBLN4!S4op!Lr5&AJR zoX{uazc(+hIUy(!1yAGYp09A?WSsBcEO7x6r0H{QXuScFa; z!vDXy{22fJ)V@v3CsuPp2@c*(c_LAWay)hSiN@q1c66GNwwlHD~<&S+i<9~rdIWD{n(}{Jy!}yx*JHRB}DeGt261FaxY7gauxC{S7 zl%V`A&LQ%c)104i2Kh5K-%q&~<;TQllz-#%#|b9R5Yy~Izfe9!c_8XzbSSZivbGef z$~pSOmO))lq7ISYR5{s{3((*iHqWI6^~H&9#3U-cU)VjrQ_+d|m8d`zp?(9dB}P-$ zKPc4J5K~Rj`JVCu;x(K9Y8_|Y$iCt>u4KDJ#&4W0(lr8I@=oX{glKta|QN$i%EOkLdW6IhtTK}fJh3KnFwjT~1&7(X53wBa znAk)8Y<>Q`N#SE6uRW*(Mv&LU%EX_<>*Q5Y+e{ox_?y(x6Qpe#M&bfu6;YDBJUWcp zNyTGkZ*0>s~i(T8OusZT`@dq5)Pri8X=Vkhx{I7{6(L;&S^IE&az zIffWRoF)(BqS}@bUlWI^)Ap$~it-0UxIJ#Ciyz5G+nxE?(TdnbXn$VfpRI~#V$#se zs_rgh)04*y&2;zdnb#q|EFkv$~bauCnH2 zU|d>yraL)(LRxBiQnEYAot!c}B{M12os^N`$<)!*rKP7u4@*f)$r#~DcBhX`_KeNG zvtdo1?11gpUD@q-%?ij$KlE|-wIh37*_Dqsbp^Fe_l);=Qb%}FlC!$ripaims!>Gt zl%KZ-XJtR$pLOwR!|e-P)k_pJZAr>>XL?dS!_w2!XyPc(*qu8{xVn|w*}tJHzCdD6 z_sDT+neO2pPg-u%JZ^?2Wjsx_t!CHwbQ-E-(o#H`(MiLGd&Z`xC41aMJQ-X(H6?BM L&a76h0|EaB_l^NX diff --git a/core/locale/nl_NL/LC_MESSAGES/django.po b/core/locale/nl_NL/LC_MESSAGES/django.po index 6d77987d..efc79a01 100644 --- a/core/locale/nl_NL/LC_MESSAGES/django.po +++ b/core/locale/nl_NL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+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:11 +#: core/abstract.py:12 msgid "unique id" msgstr "Uniek ID" -#: core/abstract.py:12 +#: 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:19 +#: core/abstract.py:20 msgid "is active" msgstr "Is actief" -#: core/abstract.py:20 +#: core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" @@ -33,19 +33,19 @@ msgstr "" "Als false is ingesteld, kan dit object niet worden gezien door gebruikers " "zonder de benodigde toestemming" -#: core/abstract.py:22 core/choices.py:18 +#: core/abstract.py:23 core/choices.py:18 msgid "created" msgstr "Gemaakt" -#: core/abstract.py:22 +#: 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:23 +#: core/abstract.py:24 msgid "modified" msgstr "Gewijzigd" -#: core/abstract.py:23 +#: core/abstract.py:24 msgid "when the object was last modified" msgstr "Wanneer het object voor het laatst bewerkt is" @@ -88,11 +88,11 @@ msgid "selected items have been deactivated." msgstr "Geselecteerde items zijn gedeactiveerd!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 +#: core/graphene/object_types.py:616 core/models.py:701 core/models.py:709 msgid "attribute value" msgstr "Attribuut Waarde" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 msgid "attribute values" msgstr "Attribuutwaarden" @@ -104,7 +104,7 @@ msgstr "Afbeelding" msgid "images" msgstr "Afbeeldingen" -#: core/admin.py:155 core/models.py:445 +#: core/admin.py:155 core/models.py:459 msgid "stock" msgstr "Voorraad" @@ -112,11 +112,11 @@ msgstr "Voorraad" msgid "stocks" msgstr "Aandelen" -#: core/admin.py:166 core/models.py:1609 +#: core/admin.py:166 core/models.py:1667 msgid "order product" msgstr "Product bestellen" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 msgid "order products" msgstr "Producten bestellen" @@ -753,7 +753,7 @@ msgstr "een order-productrelatie verwijderen" msgid "add or remove feedback on an order–product relation" msgstr "feedback toevoegen of verwijderen op een order-productrelatie" -#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 msgid "no search term provided." msgstr "Geen zoekterm opgegeven." @@ -806,7 +806,7 @@ msgid "Quantity" msgstr "Hoeveelheid" #: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:287 core/models.py:369 core/models.py:522 +#: core/models.py:301 core/models.py:383 core/models.py:536 msgid "Slug" msgstr "Slak" @@ -822,7 +822,7 @@ msgstr "Subcategorieën opnemen" msgid "Include personal ordered" msgstr "Inclusief persoonlijk bestelde producten" -#: core/filters.py:85 core/models.py:526 +#: core/filters.py:85 core/models.py:540 msgid "SKU" msgstr "SKU" @@ -896,7 +896,7 @@ msgstr "Gecachte gegevens" msgid "camelized JSON data from the requested URL" msgstr "Camelized JSON-gegevens van de opgevraagde URL" -#: core/graphene/mutations.py:65 core/views.py:360 +#: core/graphene/mutations.py:65 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "Alleen URL's die beginnen met http(s):// zijn toegestaan" @@ -927,7 +927,7 @@ 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:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:839 +#: core/graphene/mutations.py:527 core/viewsets.py:679 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Verkeerd type kwam uit order.buy() methode: {type(instance)!s}" @@ -1002,9 +1002,9 @@ msgstr "Orderproduct {order_product_uuid} niet gevonden!" msgid "original address string provided by the user" msgstr "Originele adresstring geleverd door de gebruiker" -#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 -#: core/models.py:1234 core/models.py:1263 core/models.py:1288 -#: core/viewsets.py:842 +#: core/graphene/mutations.py:656 core/models.py:849 core/models.py:862 +#: core/models.py:1281 core/models.py:1310 core/models.py:1335 +#: core/viewsets.py:682 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} bestaat niet: {uuid}!" @@ -1018,8 +1018,8 @@ msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - werkt als een charme" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 -#: core/models.py:1686 +#: core/graphene/object_types.py:444 core/models.py:672 core/models.py:1144 +#: core/models.py:1744 msgid "attributes" msgstr "Attributen" @@ -1032,11 +1032,11 @@ 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:224 core/models.py:312 core/models.py:612 +#: core/graphene/object_types.py:224 core/models.py:326 core/models.py:626 msgid "categories" msgstr "Categorieën" -#: core/graphene/object_types.py:124 core/models.py:383 +#: core/graphene/object_types.py:124 core/models.py:397 msgid "brands" msgstr "Merken" @@ -1045,7 +1045,7 @@ msgid "category image url" msgstr "Categorieën" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:249 +#: core/models.py:263 msgid "markup percentage" msgstr "Opwaarderingspercentage" @@ -1070,7 +1070,7 @@ msgstr "Tags voor deze categorie" msgid "products in this category" msgstr "Producten in deze categorie" -#: core/graphene/object_types.py:351 core/models.py:155 +#: core/graphene/object_types.py:351 core/models.py:169 msgid "vendors" msgstr "Verkopers" @@ -1095,7 +1095,7 @@ msgid "represents feedback from a user." msgstr "Vertegenwoordigt feedback van een gebruiker." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1110 +#: core/models.py:1138 msgid "notifications" msgstr "Meldingen" @@ -1103,7 +1103,7 @@ msgstr "Meldingen" msgid "download url for this order product if applicable" msgstr "Download url voor dit bestelproduct indien van toepassing" -#: core/graphene/object_types.py:400 core/models.py:1791 +#: core/graphene/object_types.py:400 core/models.py:1860 msgid "feedback" msgstr "Feedback" @@ -1111,7 +1111,7 @@ msgstr "Feedback" msgid "a list of order products in this order" msgstr "Een lijst met bestelde producten in deze bestelling" -#: core/graphene/object_types.py:436 core/models.py:1080 +#: core/graphene/object_types.py:436 core/models.py:1108 msgid "billing address" msgstr "Factuuradres" @@ -1139,7 +1139,7 @@ msgstr "Zijn alle producten in de bestelling digitaal" msgid "transactions for this order" msgstr "Transacties voor deze bestelling" -#: core/graphene/object_types.py:465 core/models.py:1144 +#: core/graphene/object_types.py:465 core/models.py:1172 msgid "orders" msgstr "Bestellingen" @@ -1151,15 +1151,15 @@ msgstr "Afbeelding URL" msgid "product's images" msgstr "Afbeeldingen van het product" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 +#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 msgid "category" msgstr "Categorie" -#: core/graphene/object_types.py:502 core/models.py:1792 +#: core/graphene/object_types.py:502 core/models.py:1861 msgid "feedbacks" msgstr "Reacties" -#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 +#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 msgid "brand" msgstr "Merk" @@ -1191,7 +1191,7 @@ msgstr "Aantal terugkoppelingen" msgid "only available for personal orders" msgstr "Producten alleen beschikbaar voor persoonlijke bestellingen" -#: core/graphene/object_types.py:534 core/models.py:536 +#: core/graphene/object_types.py:534 core/models.py:550 msgid "products" msgstr "Producten" @@ -1203,15 +1203,15 @@ msgstr "Promocodes" msgid "products on sale" msgstr "Producten te koop" -#: core/graphene/object_types.py:651 core/models.py:784 +#: core/graphene/object_types.py:651 core/models.py:798 msgid "promotions" msgstr "Promoties" -#: core/graphene/object_types.py:655 core/models.py:154 +#: core/graphene/object_types.py:655 core/models.py:168 msgid "vendor" msgstr "Verkoper" -#: core/graphene/object_types.py:656 core/models.py:535 +#: core/graphene/object_types.py:656 core/models.py:549 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1219,11 +1219,11 @@ msgstr "Verkoper" msgid "product" msgstr "Product" -#: core/graphene/object_types.py:667 core/models.py:807 +#: core/graphene/object_types.py:667 core/models.py:821 msgid "wishlisted products" msgstr "Gewenste producten" -#: core/graphene/object_types.py:673 core/models.py:824 +#: core/graphene/object_types.py:673 core/models.py:838 msgid "wishlists" msgstr "Verlanglijst" @@ -1231,7 +1231,7 @@ msgstr "Verlanglijst" msgid "tagged products" msgstr "Getagde producten" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 +#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 msgid "product tags" msgstr "Product tags" @@ -1343,7 +1343,7 @@ msgstr "Ouderattribuutgroep" msgid "attribute group's name" msgstr "Naam attribuutgroep" -#: core/models.py:100 core/models.py:620 +#: core/models.py:100 core/models.py:634 msgid "attribute group" msgstr "Attribuutgroep" @@ -1393,7 +1393,7 @@ msgstr "Naam van deze verkoper" msgid "vendor name" msgstr "Naam verkoper" -#: core/models.py:163 +#: core/models.py:177 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1408,27 +1408,27 @@ msgstr "" "ondersteunt bewerkingen die geëxporteerd worden door mixins en biedt " "aanpassing van metadata voor administratieve doeleinden." -#: core/models.py:175 core/models.py:206 +#: core/models.py:189 core/models.py:220 msgid "internal tag identifier for the product tag" msgstr "Interne tagidentifier voor de producttag" -#: core/models.py:176 core/models.py:207 +#: core/models.py:190 core/models.py:221 msgid "tag name" msgstr "Tag naam" -#: core/models.py:180 core/models.py:211 +#: core/models.py:194 core/models.py:225 msgid "user-friendly name for the product tag" msgstr "Gebruiksvriendelijke naam voor de producttag" -#: core/models.py:181 core/models.py:212 +#: core/models.py:195 core/models.py:226 msgid "tag display name" msgstr "Tag weergavenaam" -#: core/models.py:189 +#: core/models.py:203 msgid "product tag" msgstr "Productlabel" -#: core/models.py:195 +#: core/models.py:209 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 " @@ -1439,15 +1439,15 @@ msgstr "" "associëren en te classificeren. Ze bevat attributen voor een interne " "tagidentifier en een gebruiksvriendelijke weergavenaam." -#: core/models.py:220 +#: core/models.py:234 msgid "category tag" msgstr "categorie tag" -#: core/models.py:221 core/models.py:293 +#: core/models.py:235 core/models.py:307 msgid "category tags" msgstr "categorie tags" -#: core/models.py:226 +#: core/models.py:240 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1470,51 +1470,51 @@ msgstr "" " kunnen specificeren en attributen zoals afbeeldingen, tags of prioriteit " "kunnen toekennen." -#: core/models.py:240 +#: core/models.py:254 msgid "upload an image representing this category" msgstr "Upload een afbeelding die deze categorie vertegenwoordigt" -#: core/models.py:243 +#: core/models.py:257 msgid "category image" msgstr "Categorie afbeelding" -#: core/models.py:248 +#: core/models.py:262 msgid "define a markup percentage for products in this category" msgstr "Definieer een toeslagpercentage voor producten in deze categorie" -#: core/models.py:257 +#: core/models.py:271 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:258 +#: core/models.py:272 msgid "parent category" msgstr "Oudercategorie" -#: core/models.py:263 +#: core/models.py:277 msgid "category name" msgstr "Naam categorie" -#: core/models.py:264 +#: core/models.py:278 msgid "provide a name for this category" msgstr "Geef deze categorie een naam" -#: core/models.py:271 +#: core/models.py:285 msgid "add a detailed description for this category" msgstr "Voeg een gedetailleerde beschrijving toe voor deze categorie" -#: core/models.py:272 +#: core/models.py:286 msgid "category description" msgstr "Categorie beschrijving" -#: core/models.py:292 +#: core/models.py:306 msgid "tags that help describe or group this category" msgstr "tags die deze categorie helpen beschrijven of groeperen" -#: core/models.py:299 core/models.py:375 +#: core/models.py:313 core/models.py:389 msgid "priority" msgstr "Prioriteit" -#: core/models.py:318 +#: core/models.py:332 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1528,47 +1528,47 @@ msgstr "" "prioriteitsvolgorde. Hiermee kunnen merkgerelateerde gegevens worden " "georganiseerd en weergegeven in de applicatie." -#: core/models.py:328 +#: core/models.py:342 msgid "name of this brand" msgstr "Naam van dit merk" -#: core/models.py:329 +#: core/models.py:343 msgid "brand name" msgstr "Merknaam" -#: core/models.py:336 +#: core/models.py:350 msgid "upload a logo representing this brand" msgstr "Upload een logo dat dit merk vertegenwoordigt" -#: core/models.py:338 +#: core/models.py:352 msgid "brand small image" msgstr "Klein merkimago" -#: core/models.py:344 +#: core/models.py:358 msgid "upload a big logo representing this brand" msgstr "Upload een groot logo dat dit merk vertegenwoordigt" -#: core/models.py:346 +#: core/models.py:360 msgid "brand big image" msgstr "Groot merkimago" -#: core/models.py:351 +#: core/models.py:365 msgid "add a detailed description of the brand" msgstr "Een gedetailleerde beschrijving van het merk toevoegen" -#: core/models.py:352 +#: core/models.py:366 msgid "brand description" msgstr "Merknaam" -#: core/models.py:357 +#: core/models.py:371 msgid "optional categories that this brand is associated with" msgstr "Optionele categorieën waarmee dit merk wordt geassocieerd" -#: core/models.py:358 +#: core/models.py:372 msgid "associated categories" msgstr "Categorieën" -#: core/models.py:388 +#: core/models.py:402 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1585,68 +1585,68 @@ msgstr "" "evalueren van beschikbare producten van verschillende leveranciers mogelijk " "te maken." -#: core/models.py:400 +#: core/models.py:414 msgid "the vendor supplying this product stock" msgstr "De verkoper die dit product levert" -#: core/models.py:401 +#: core/models.py:415 msgid "associated vendor" msgstr "Geassocieerde verkoper" -#: core/models.py:405 +#: core/models.py:419 msgid "final price to the customer after markups" msgstr "Eindprijs voor de klant na winstmarges" -#: core/models.py:406 +#: core/models.py:420 msgid "selling price" msgstr "Verkoopprijs" -#: core/models.py:411 +#: core/models.py:425 msgid "the product associated with this stock entry" msgstr "Het product dat bij deze voorraadvermelding hoort" -#: core/models.py:412 core/models.py:683 core/models.py:730 -#: core/models.py:1583 +#: core/models.py:426 core/models.py:697 core/models.py:744 +#: core/models.py:1641 msgid "associated product" msgstr "Bijbehorend product" -#: core/models.py:419 +#: core/models.py:433 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:420 +#: core/models.py:434 msgid "vendor purchase price" msgstr "Aankoopprijs verkoper" -#: core/models.py:424 +#: core/models.py:438 msgid "available quantity of the product in stock" msgstr "Beschikbare hoeveelheid van het product in voorraad" -#: core/models.py:425 +#: core/models.py:439 msgid "quantity in stock" msgstr "Hoeveelheid op voorraad" -#: core/models.py:429 +#: core/models.py:443 msgid "vendor-assigned SKU for identifying the product" msgstr "Door de verkoper toegewezen SKU om het product te identificeren" -#: core/models.py:430 +#: core/models.py:444 msgid "vendor sku" msgstr "Verkoper SKU" -#: core/models.py:436 +#: core/models.py:450 msgid "digital file associated with this stock if applicable" msgstr "Digitaal bestand gekoppeld aan deze voorraad indien van toepassing" -#: core/models.py:437 +#: core/models.py:451 msgid "digital file" msgstr "Digitaal bestand" -#: core/models.py:446 +#: core/models.py:460 msgid "stock entries" msgstr "Voorraadboekingen" -#: core/models.py:451 +#: core/models.py:465 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1667,55 +1667,55 @@ msgstr "" "verbeteren. Het wordt gebruikt om productgegevens en de bijbehorende " "informatie te definiëren en te manipuleren binnen een applicatie." -#: core/models.py:464 +#: core/models.py:478 msgid "category this product belongs to" msgstr "Categorie waartoe dit product behoort" -#: core/models.py:473 +#: core/models.py:487 msgid "optionally associate this product with a brand" msgstr "Dit product optioneel koppelen aan een merk" -#: core/models.py:479 +#: core/models.py:493 msgid "tags that help describe or group this product" msgstr "Tags die dit product helpen beschrijven of groeperen" -#: core/models.py:484 +#: core/models.py:498 msgid "indicates whether this product is digitally delivered" msgstr "Geeft aan of dit product digitaal wordt geleverd" -#: core/models.py:485 +#: core/models.py:499 msgid "is product digital" msgstr "Is product digitaal" -#: core/models.py:491 +#: core/models.py:505 msgid "provide a clear identifying name for the product" msgstr "Zorg voor een duidelijke identificerende naam voor het product" -#: core/models.py:492 +#: core/models.py:506 msgid "product name" msgstr "Naam product" -#: core/models.py:497 core/models.py:772 +#: core/models.py:511 core/models.py:786 msgid "add a detailed description of the product" msgstr "Voeg een gedetailleerde beschrijving van het product toe" -#: core/models.py:498 +#: core/models.py:512 msgid "product description" msgstr "Productbeschrijving" -#: core/models.py:505 +#: core/models.py:519 msgid "part number for this product" msgstr "Onderdeelnummer voor dit product" -#: core/models.py:506 +#: core/models.py:520 msgid "part number" msgstr "Onderdeelnummer" -#: core/models.py:525 +#: core/models.py:539 msgid "stock keeping unit for this product" msgstr "Voorraadhoudende eenheid voor dit product" -#: core/models.py:599 +#: core/models.py:613 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 " @@ -1732,70 +1732,70 @@ msgstr "" "boolean, array en object. Dit maakt dynamische en flexibele " "gegevensstructurering mogelijk." -#: core/models.py:611 +#: core/models.py:625 msgid "category of this attribute" msgstr "Categorie van dit kenmerk" -#: core/models.py:619 +#: core/models.py:633 msgid "group of this attribute" msgstr "Groep van dit kenmerk" -#: core/models.py:625 +#: core/models.py:639 msgid "string" msgstr "String" -#: core/models.py:626 +#: core/models.py:640 msgid "integer" msgstr "Integer" -#: core/models.py:627 +#: core/models.py:641 msgid "float" msgstr "Vlotter" -#: core/models.py:628 +#: core/models.py:642 msgid "boolean" msgstr "Booleaans" -#: core/models.py:629 +#: core/models.py:643 msgid "array" msgstr "Array" -#: core/models.py:630 +#: core/models.py:644 msgid "object" msgstr "Object" -#: core/models.py:632 +#: core/models.py:646 msgid "type of the attribute's value" msgstr "Type waarde van het kenmerk" -#: core/models.py:633 +#: core/models.py:647 msgid "value type" msgstr "Waardetype" -#: core/models.py:638 +#: core/models.py:652 msgid "name of this attribute" msgstr "Naam van dit kenmerk" -#: core/models.py:639 +#: core/models.py:653 msgid "attribute's name" msgstr "Naam attribuut" -#: core/models.py:645 +#: core/models.py:659 msgid "is filterable" msgstr "kan worden gefilterd" -#: core/models.py:646 +#: core/models.py:660 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:657 core/models.py:675 +#: core/models.py:671 core/models.py:689 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attribuut" -#: core/models.py:663 +#: core/models.py:677 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" @@ -1806,19 +1806,19 @@ msgstr "" "betere organisatie en dynamische weergave van productkenmerken mogelijk " "maakt." -#: core/models.py:674 +#: core/models.py:688 msgid "attribute of this value" msgstr "Attribuut van deze waarde" -#: core/models.py:682 +#: core/models.py:696 msgid "the specific product associated with this attribute's value" msgstr "Het specifieke product geassocieerd met de waarde van dit kenmerk" -#: core/models.py:688 +#: core/models.py:702 msgid "the specific value for this attribute" msgstr "De specifieke waarde voor dit kenmerk" -#: core/models.py:701 +#: core/models.py:715 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -1833,39 +1833,39 @@ msgstr "" "weergavevolgorde te bepalen. Het bevat ook een toegankelijkheidsfunctie met " "alternatieve tekst voor de afbeeldingen." -#: core/models.py:712 +#: core/models.py:726 msgid "provide alternative text for the image for accessibility" msgstr "Geef alternatieve tekst voor de afbeelding voor toegankelijkheid" -#: core/models.py:713 +#: core/models.py:727 msgid "image alt text" msgstr "Alt-tekst afbeelding" -#: core/models.py:716 +#: core/models.py:730 msgid "upload the image file for this product" msgstr "Upload het afbeeldingsbestand voor dit product" -#: core/models.py:717 core/models.py:742 +#: core/models.py:731 core/models.py:756 msgid "product image" msgstr "Product afbeelding" -#: core/models.py:723 +#: core/models.py:737 msgid "determines the order in which images are displayed" msgstr "Bepaalt de volgorde waarin afbeeldingen worden weergegeven" -#: core/models.py:724 +#: core/models.py:738 msgid "display priority" msgstr "Prioriteit weergeven" -#: core/models.py:729 +#: core/models.py:743 msgid "the product that this image represents" msgstr "Het product dat deze afbeelding vertegenwoordigt" -#: core/models.py:743 +#: core/models.py:757 msgid "product images" msgstr "Product afbeeldingen" -#: core/models.py:748 +#: core/models.py:762 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1882,39 +1882,39 @@ msgstr "" "integreert met de productcatalogus om de betreffende artikelen in de " "campagne te bepalen." -#: core/models.py:760 +#: core/models.py:774 msgid "percentage discount for the selected products" msgstr "Kortingspercentage voor de geselecteerde producten" -#: core/models.py:761 +#: core/models.py:775 msgid "discount percentage" msgstr "Kortingspercentage" -#: core/models.py:766 +#: core/models.py:780 msgid "provide a unique name for this promotion" msgstr "Geef deze promotie een unieke naam" -#: core/models.py:767 +#: core/models.py:781 msgid "promotion name" msgstr "Naam promotie" -#: core/models.py:773 +#: core/models.py:787 msgid "promotion description" msgstr "Promotie beschrijving" -#: core/models.py:778 +#: core/models.py:792 msgid "select which products are included in this promotion" msgstr "Selecteer welke producten onder deze promotie vallen" -#: core/models.py:779 +#: core/models.py:793 msgid "included products" msgstr "Meegeleverde producten" -#: core/models.py:783 +#: core/models.py:797 msgid "promotion" msgstr "Promotie" -#: core/models.py:794 +#: core/models.py:808 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1927,23 +1927,23 @@ msgstr "" "toevoegen en verwijderen van producten, maar ook bewerkingen voor het " "toevoegen en verwijderen van meerdere producten tegelijk." -#: core/models.py:806 +#: core/models.py:820 msgid "products that the user has marked as wanted" msgstr "Producten die de gebruiker als gewenst heeft gemarkeerd" -#: core/models.py:814 +#: core/models.py:828 msgid "user who owns this wishlist" msgstr "Gebruiker die eigenaar is van deze verlanglijst" -#: core/models.py:815 +#: core/models.py:829 msgid "wishlist owner" msgstr "Eigenaar verlanglijstje" -#: core/models.py:823 +#: core/models.py:837 msgid "wishlist" msgstr "Verlanglijst" -#: core/models.py:865 +#: core/models.py:879 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1960,19 +1960,19 @@ msgstr "" "Het breidt functionaliteit uit van specifieke mixins en biedt extra " "aangepaste functies." -#: core/models.py:878 +#: core/models.py:892 msgid "documentary" msgstr "Documentaire" -#: core/models.py:879 +#: core/models.py:893 msgid "documentaries" msgstr "Documentaires" -#: core/models.py:889 +#: core/models.py:903 msgid "unresolved" msgstr "Onopgelost" -#: core/models.py:894 +#: core/models.py:908 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1993,59 +1993,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:909 +#: core/models.py:923 msgid "address line for the customer" msgstr "Adresregel voor de klant" -#: core/models.py:910 +#: core/models.py:924 msgid "address line" msgstr "Adresregel" -#: core/models.py:912 +#: core/models.py:926 msgid "street" msgstr "Straat" -#: core/models.py:913 +#: core/models.py:927 msgid "district" msgstr "District" -#: core/models.py:914 +#: core/models.py:928 msgid "city" msgstr "Stad" -#: core/models.py:915 +#: core/models.py:929 msgid "region" msgstr "Regio" -#: core/models.py:916 +#: core/models.py:930 msgid "postal code" msgstr "Postcode" -#: core/models.py:917 +#: core/models.py:931 msgid "country" msgstr "Land" -#: core/models.py:924 +#: core/models.py:938 msgid "geolocation point: (longitude, latitude)" msgstr "Geolocatie Punt (lengtegraad, breedtegraad)" -#: core/models.py:927 +#: core/models.py:941 msgid "full JSON response from geocoder for this address" msgstr "Volledig JSON-antwoord van geocoder voor dit adres" -#: core/models.py:932 +#: core/models.py:946 msgid "stored JSON response from the geocoding service" msgstr "Opgeslagen JSON-antwoord van de geocoderingsservice" -#: core/models.py:940 +#: core/models.py:954 msgid "address" msgstr "Adres" -#: core/models.py:941 +#: core/models.py:955 msgid "addresses" msgstr "Adressen" -#: core/models.py:953 +#: core/models.py:967 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2063,76 +2063,76 @@ msgstr "" "te valideren en toe te passen op een bestelling, waarbij ervoor wordt " "gezorgd dat aan de beperkingen wordt voldaan." -#: core/models.py:967 +#: core/models.py:981 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:968 +#: core/models.py:982 msgid "promo code identifier" msgstr "Promo code identificatie" -#: core/models.py:975 +#: core/models.py:989 msgid "fixed discount amount applied if percent is not used" msgstr "" "Vast kortingsbedrag dat wordt toegepast als percentage niet wordt gebruikt" -#: core/models.py:976 +#: core/models.py:990 msgid "fixed discount amount" msgstr "Vast kortingsbedrag" -#: core/models.py:982 +#: core/models.py:996 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:983 +#: core/models.py:997 msgid "percentage discount" msgstr "Kortingspercentage" -#: core/models.py:988 +#: core/models.py:1002 msgid "timestamp when the promocode expires" msgstr "Tijdstempel wanneer de promocode verloopt" -#: core/models.py:989 +#: core/models.py:1003 msgid "end validity time" msgstr "Geldigheidsduur einde" -#: core/models.py:994 +#: core/models.py:1008 msgid "timestamp from which this promocode is valid" msgstr "Tijdstempel vanaf wanneer deze promocode geldig is" -#: core/models.py:995 +#: core/models.py:1009 msgid "start validity time" msgstr "Begin geldigheidsduur" -#: core/models.py:1000 +#: core/models.py:1014 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:1001 +#: core/models.py:1015 msgid "usage timestamp" msgstr "Gebruik tijdstempel" -#: core/models.py:1006 +#: core/models.py:1020 msgid "user assigned to this promocode if applicable" msgstr "Gebruiker toegewezen aan deze promocode indien van toepassing" -#: core/models.py:1007 +#: core/models.py:1021 msgid "assigned user" msgstr "Toegewezen gebruiker" -#: core/models.py:1014 +#: core/models.py:1028 msgid "promo code" msgstr "Kortingscode" -#: core/models.py:1015 +#: core/models.py:1029 msgid "promo codes" msgstr "Actiecodes" -#: core/models.py:1022 +#: core/models.py:1044 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2140,16 +2140,16 @@ msgstr "" "Er moet slechts één type korting worden gedefinieerd (bedrag of percentage)," " maar niet beide of geen van beide." -#: core/models.py:1037 +#: core/models.py:1065 msgid "promocode already used" msgstr "Promocode is al gebruikt" -#: core/models.py:1053 +#: core/models.py:1081 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Ongeldig kortingstype voor promocode {self.uuid}!" -#: core/models.py:1062 +#: core/models.py:1090 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 " @@ -2167,141 +2167,141 @@ msgstr "" "bijgewerkt. De functionaliteit ondersteunt ook het beheer van de producten " "in de levenscyclus van de bestelling." -#: core/models.py:1079 +#: core/models.py:1107 msgid "the billing address used for this order" msgstr "Het factuuradres dat voor deze bestelling is gebruikt" -#: core/models.py:1087 +#: core/models.py:1115 msgid "optional promo code applied to this order" msgstr "Optionele promotiecode toegepast op deze bestelling" -#: core/models.py:1088 +#: core/models.py:1116 msgid "applied promo code" msgstr "Kortingscode toegepast" -#: core/models.py:1096 +#: core/models.py:1124 msgid "the shipping address used for this order" msgstr "Het verzendadres dat voor deze bestelling is gebruikt" -#: core/models.py:1097 +#: core/models.py:1125 msgid "shipping address" msgstr "Verzendadres" -#: core/models.py:1103 +#: core/models.py:1131 msgid "current status of the order in its lifecycle" msgstr "Huidige status van de order in zijn levenscyclus" -#: core/models.py:1104 +#: core/models.py:1132 msgid "order status" msgstr "Bestelstatus" -#: core/models.py:1109 core/models.py:1560 +#: core/models.py:1137 core/models.py:1618 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:1115 +#: core/models.py:1143 msgid "json representation of order attributes for this order" msgstr "JSON-weergave van bestelattributen voor deze bestelling" -#: core/models.py:1121 +#: core/models.py:1149 msgid "the user who placed the order" msgstr "De gebruiker die de bestelling heeft geplaatst" -#: core/models.py:1122 +#: core/models.py:1150 msgid "user" msgstr "Gebruiker" -#: core/models.py:1128 +#: core/models.py:1156 msgid "the timestamp when the order was finalized" msgstr "De tijdstempel waarop de bestelling is afgerond" -#: core/models.py:1129 +#: core/models.py:1157 msgid "buy time" msgstr "Tijd kopen" -#: core/models.py:1136 +#: core/models.py:1164 msgid "a human-readable identifier for the order" msgstr "Een menselijk leesbare identificatiecode voor de bestelling" -#: core/models.py:1137 +#: core/models.py:1165 msgid "human readable id" msgstr "menselijk leesbare ID" -#: core/models.py:1143 +#: core/models.py:1171 msgid "order" msgstr "Bestel" -#: core/models.py:1168 +#: core/models.py:1209 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:1202 +#: core/models.py:1249 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:1207 +#: core/models.py:1254 msgid "you cannot add inactive products to order" msgstr "U kunt geen inactieve producten toevoegen aan uw bestelling" -#: core/models.py:1224 +#: core/models.py:1271 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:1246 core/models.py:1271 core/models.py:1279 +#: core/models.py:1293 core/models.py:1318 core/models.py:1326 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:1267 +#: core/models.py:1314 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} bestaat niet met query <{query}>!" -#: core/models.py:1299 +#: core/models.py:1346 msgid "promocode does not exist" msgstr "Promocode bestaat niet" -#: core/models.py:1305 +#: core/models.py:1352 msgid "you can only buy physical products with shipping address specified" msgstr "Je kunt alleen fysieke producten kopen met opgegeven verzendadres!" -#: core/models.py:1324 +#: core/models.py:1371 msgid "address does not exist" msgstr "Adres bestaat niet" -#: core/models.py:1345 core/models.py:1414 +#: core/models.py:1392 core/models.py:1461 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:1348 core/models.py:1410 +#: core/models.py:1395 core/models.py:1457 msgid "invalid force value" msgstr "Ongeldige krachtwaarde" -#: core/models.py:1354 core/models.py:1417 +#: core/models.py:1401 core/models.py:1464 msgid "you cannot purchase an empty order!" msgstr "Je kunt geen lege bestelling kopen!" -#: core/models.py:1373 +#: core/models.py:1420 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:1387 +#: core/models.py:1434 msgid "a user without a balance cannot buy with balance" msgstr "Een gebruiker zonder saldo kan niet kopen met saldo!" -#: core/models.py:1392 +#: core/models.py:1439 msgid "insufficient funds to complete the order" msgstr "Onvoldoende fondsen om de bestelling te voltooien" -#: core/models.py:1426 +#: core/models.py:1473 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2309,7 +2309,7 @@ msgstr "" "u niet kunt kopen zonder registratie, geef dan de volgende informatie: " "klantnaam, e-mail klant, telefoonnummer klant" -#: core/models.py:1435 +#: core/models.py:1482 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2317,7 +2317,7 @@ msgstr "" "Ongeldige betalingsmethode: {payment_method} van " "{available_payment_methods}!" -#: core/models.py:1533 +#: core/models.py:1591 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2340,110 +2340,110 @@ msgstr "" "digitale producten. Het model integreert met de modellen Order en Product en" " slaat een verwijzing ernaar op." -#: core/models.py:1548 +#: core/models.py:1606 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:1549 +#: core/models.py:1607 msgid "purchase price at order time" msgstr "Aankoopprijs bij bestelling" -#: core/models.py:1554 +#: core/models.py:1612 msgid "internal comments for admins about this ordered product" msgstr "Interne opmerkingen voor beheerders over dit bestelde product" -#: core/models.py:1555 +#: core/models.py:1613 msgid "internal comments" msgstr "Interne opmerkingen" -#: core/models.py:1561 +#: core/models.py:1619 msgid "user notifications" msgstr "Meldingen van gebruikers" -#: core/models.py:1566 +#: core/models.py:1624 msgid "json representation of this item's attributes" msgstr "JSON weergave van de attributen van dit item" -#: core/models.py:1567 +#: core/models.py:1625 msgid "ordered product attributes" msgstr "Geordende producteigenschappen" -#: core/models.py:1572 +#: core/models.py:1630 msgid "reference to the parent order that contains this product" msgstr "Verwijzing naar de bovenliggende bestelling die dit product bevat" -#: core/models.py:1573 +#: core/models.py:1631 msgid "parent order" msgstr "Ouderlijk bevel" -#: core/models.py:1582 +#: core/models.py:1640 msgid "the specific product associated with this order line" msgstr "Het specifieke product dat bij deze bestelregel hoort" -#: core/models.py:1589 +#: core/models.py:1647 msgid "quantity of this specific product in the order" msgstr "Hoeveelheid van dit specifieke product in de bestelling" -#: core/models.py:1590 +#: core/models.py:1648 msgid "product quantity" msgstr "Hoeveelheid product" -#: core/models.py:1597 +#: core/models.py:1655 msgid "current status of this product in the order" msgstr "Huidige status van dit product in de bestelling" -#: core/models.py:1598 +#: core/models.py:1656 msgid "product line status" msgstr "Status productlijn" -#: core/models.py:1661 +#: core/models.py:1719 msgid "order product must have an order" msgstr "Orderproduct moet een bijbehorende order hebben!" -#: core/models.py:1663 +#: core/models.py:1721 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Verkeerde actie opgegeven voor feedback: {action}!" -#: core/models.py:1677 +#: core/models.py:1735 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:1683 +#: core/models.py:1741 msgid "name" msgstr "Naam" -#: core/models.py:1684 +#: core/models.py:1742 msgid "URL of the integration" msgstr "URL van de integratie" -#: core/models.py:1685 +#: core/models.py:1743 msgid "authentication credentials" msgstr "Authenticatiegegevens" -#: core/models.py:1699 +#: core/models.py:1765 msgid "you can only have one default CRM provider" msgstr "Je kunt maar één standaard CRM-provider hebben" -#: core/models.py:1703 +#: core/models.py:1775 msgid "CRM" msgstr "CRM" -#: core/models.py:1704 +#: core/models.py:1776 msgid "CRMs" msgstr "CRM's" -#: core/models.py:1716 +#: core/models.py:1788 msgid "order CRM link" msgstr "CRM link van bestelling" -#: core/models.py:1717 +#: core/models.py:1789 msgid "orders CRM links" msgstr "CRM-koppelingen voor bestellingen" -#: core/models.py:1722 +#: core/models.py:1794 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2460,20 +2460,15 @@ msgstr "" "om een URL te genereren voor het downloaden van de activa wanneer de " "bijbehorende order een voltooide status heeft." -#: core/models.py:1736 +#: core/models.py:1808 msgid "download" msgstr "Downloaden" -#: core/models.py:1737 +#: core/models.py:1809 msgid "downloads" msgstr "Downloads" -#: core/models.py:1745 -msgid "you can not download a digital asset for a non-finished order" -msgstr "" -"U kunt geen digitale activa downloaden voor een niet-afgeronde bestelling" - -#: core/models.py:1754 +#: core/models.py:1823 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2489,30 +2484,30 @@ msgstr "" "gebruikt databasevelden om feedbackgegevens effectief te modelleren en te " "beheren." -#: core/models.py:1766 +#: core/models.py:1835 msgid "user-provided comments about their experience with the product" msgstr "Opmerkingen van gebruikers over hun ervaring met het product" -#: core/models.py:1767 +#: core/models.py:1836 msgid "feedback comments" msgstr "Reacties" -#: core/models.py:1774 +#: core/models.py:1843 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:1775 +#: core/models.py:1844 msgid "related order product" msgstr "Gerelateerd product bestellen" -#: core/models.py:1780 +#: core/models.py:1849 msgid "user-assigned rating for the product" msgstr "Door de gebruiker toegekende waardering voor het product" -#: core/models.py:1781 +#: core/models.py:1850 msgid "product rating" msgstr "Productbeoordeling" @@ -2718,11 +2713,11 @@ msgstr "" "alle rechten\n" " voorbehouden" -#: core/utils/caching.py:41 +#: core/utils/caching.py:48 msgid "both data and timeout are required" msgstr "Zowel gegevens als time-out zijn vereist" -#: core/utils/caching.py:43 +#: core/utils/caching.py:50 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "" "Ongeldige time-outwaarde, deze moet tussen 0 en 216000 seconden liggen" @@ -2755,26 +2750,353 @@ msgstr "U hebt geen toestemming om deze actie uit te voeren." msgid "NOMINATIM_URL must be configured." msgstr "De parameter NOMINATIM_URL moet worden geconfigureerd!" -#: core/validators.py:16 +#: core/validators.py:14 #, 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/validators.py:22 -msgid "invalid phone number format" -msgstr "Ongeldig formaat telefoonnummer" +#: core/views.py:72 +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 "" +"Behandelt het verzoek voor de sitemap-index en stuurt een XML-antwoord " +"terug. Het zorgt ervoor dat het antwoord de juiste inhoudstype header voor " +"XML bevat." -#: core/views.py:489 +#: core/views.py:87 +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 "" +"Behandelt de gedetailleerde weergave respons voor een sitemap. Deze functie " +"verwerkt het verzoek, haalt het juiste sitemap detail antwoord op en stelt " +"de Content-Type header in voor XML." + +#: core/views.py:116 +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 +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 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +msgstr "" +"Verwerkt cachebewerkingen zoals het lezen en instellen van cachegegevens met" +" een opgegeven sleutel en time-out." + +#: core/views.py:194 +msgid "Handles `contact us` form submissions." +msgstr "Handelt `contact met ons` formulier inzendingen af." + +#: core/views.py:215 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "" +"Handelt verzoeken af voor het verwerken en valideren van URL's van inkomende" +" POST-verzoeken." + +#: core/views.py:255 +msgid "Handles global search queries." +msgstr "Handelt globale zoekopdrachten af." + +#: core/views.py:270 +msgid "Handles the logic of buying as a business without registration." +msgstr "Behandelt de logica van kopen als bedrijf zonder registratie." + +#: core/views.py:312 msgid "you can only download the digital asset once" msgstr "U kunt het digitale goed maar één keer downloaden" -#: core/views.py:547 +#: core/views.py:315 +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:353 +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." +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:365 msgid "favicon not found" msgstr "favicon niet gevonden" -#: core/viewsets.py:1357 +#: core/views.py:370 +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." +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:382 +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 "" +"Stuurt het verzoek door naar de admin-indexpagina. De functie handelt " +"inkomende HTTP-verzoeken af en leidt ze door naar de indexpagina van de " +"Django admin-interface. Het gebruikt Django's `redirect` functie voor het " +"afhandelen van de HTTP-omleiding." + +#: core/viewsets.py:128 +msgid "" +"Defines a viewset for managing Evibes-related operations. The EvibesViewSet " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" +"Definieert een viewset voor het beheren van Evibes-gerelateerde handelingen." +" De klasse EvibesViewSet erft van ModelViewSet en biedt functionaliteit voor" +" het afhandelen van acties en bewerkingen op Evibes-entiteiten. Het omvat " +"ondersteuning voor dynamische serializer klassen op basis van de huidige " +"actie, aanpasbare machtigingen, en rendering formaten." + +#: core/viewsets.py:147 +msgid "" +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." +msgstr "" +"Vertegenwoordigt een viewset voor het beheren van AttributeGroup objecten. " +"Verwerkt bewerkingen met betrekking tot AttributeGroup, inclusief filteren, " +"serialisatie en ophalen van gegevens. Deze klasse maakt deel uit van de API-" +"laag van de applicatie en biedt een gestandaardiseerde manier om verzoeken " +"en reacties voor AttributeGroup-gegevens te verwerken." + +#: core/viewsets.py:166 +msgid "" +"Handles operations related to Attribute objects within the application. " +"Provides a set of API endpoints to interact with Attribute data. This class " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"Handelt bewerkingen af met betrekking tot Attribuutobjecten binnen de " +"applicatie. Biedt een set API-eindpunten voor interactie met " +"Attribuutgegevens. Deze klasse beheert het opvragen, filteren en seriëren " +"van Attribuutobjecten, waardoor dynamische controle over de geretourneerde " +"gegevens mogelijk is, zoals filteren op specifieke velden of het ophalen van" +" gedetailleerde versus vereenvoudigde informatie afhankelijk van het " +"verzoek." + +#: core/viewsets.py:185 +msgid "" +"A viewset for managing AttributeValue objects. This viewset provides " +"functionality for listing, retrieving, creating, updating, and deleting " +"AttributeValue objects. It integrates with Django REST Framework's viewset " +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." +msgstr "" +"Een viewset voor het beheren van AttributeValue-objecten. Deze viewset biedt" +" functionaliteit voor het opsommen, ophalen, maken, bijwerken en verwijderen" +" van AttributeValue objecten. Het integreert met Django REST Framework's " +"viewset mechanismen en gebruikt passende serializers voor verschillende " +"acties. Filtermogelijkheden worden geleverd door de DjangoFilterBackend." + +#: core/viewsets.py:204 +msgid "" +"Manages views for Category-related operations. The CategoryViewSet class is " +"responsible for handling operations related to the Category model in the " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" +"Beheert weergaven voor Categorie-gerelateerde bewerkingen. De klasse " +"CategoryViewSet is verantwoordelijk voor het afhandelen van bewerkingen met " +"betrekking tot het categoriemodel in het systeem. Het ondersteunt het " +"ophalen, filteren en seriëren van categoriegegevens. De viewset dwingt ook " +"rechten af om ervoor te zorgen dat alleen bevoegde gebruikers toegang hebben" +" tot specifieke gegevens." + +#: core/viewsets.py:315 +msgid "" +"Represents a viewset for managing Brand instances. This class provides " +"functionality for querying, filtering, and serializing Brand objects. It " +"uses Django's ViewSet framework to simplify the implementation of API " +"endpoints for Brand objects." +msgstr "" +"Vertegenwoordigt een viewset voor het beheren van Merk instanties. Deze " +"klasse biedt functionaliteit voor het bevragen, filteren en seriëren van " +"Merk objecten. Het gebruikt Django's ViewSet framework om de implementatie " +"van API endpoints voor Merk objecten te vereenvoudigen." + +#: core/viewsets.py:427 +msgid "" +"Manages operations related to the `Product` model in the system. This class " +"provides a viewset for managing products, including their filtering, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" +"Beheert bewerkingen met betrekking tot het `Product` model in het systeem. " +"Deze klasse biedt een viewset voor het beheren van producten, inclusief hun " +"filtering, serialisatie en bewerkingen op specifieke instanties. Het breidt " +"uit van `EvibesViewSet` om gemeenschappelijke functionaliteit te gebruiken " +"en integreert met het Django REST framework voor RESTful API operaties. " +"Bevat methoden voor het ophalen van productdetails, het toepassen van " +"machtigingen en het verkrijgen van toegang tot gerelateerde feedback over " +"een product." + +#: core/viewsets.py:547 +msgid "" +"Represents a viewset for managing Vendor objects. This viewset allows " +"fetching, filtering, and serializing Vendor data. It defines the queryset, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" +"Vertegenwoordigt een viewset voor het beheren van Vendor-objecten. Met deze " +"viewset kunnen gegevens van een verkoper worden opgehaald, gefilterd en " +"geserialiseerd. Het definieert de queryset, filter configuraties, en " +"serializer klassen gebruikt om verschillende acties af te handelen. Het doel" +" van deze klasse is om gestroomlijnde toegang te bieden tot Vendor-" +"gerelateerde bronnen via het Django REST framework." + +#: core/viewsets.py:567 +msgid "" +"Representation of a view set handling Feedback objects. This class manages " +"operations related to Feedback objects, including listing, filtering, and " +"retrieving details. The purpose of this view set is to provide different " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"use of Django's filtering system for querying data." +msgstr "" +"Weergave van een weergaveset die Feedback-objecten afhandelt. Deze klasse " +"beheert handelingen met betrekking tot Feedback-objecten, zoals het " +"weergeven, filteren en ophalen van details. Het doel van deze viewset is om " +"verschillende serializers voor verschillende acties te bieden en op " +"toestemming gebaseerde afhandeling van toegankelijke Feedback-objecten te " +"implementeren. Het breidt de basis `EvibesViewSet` uit en maakt gebruik van " +"Django's filtersysteem voor het opvragen van gegevens." + +#: core/viewsets.py:593 +msgid "" +"ViewSet for managing orders and related operations. This class provides " +"functionality to retrieve, modify, and manage order objects. It includes " +"various endpoints for handling order operations such as adding or removing " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " +"enforces permissions accordingly while interacting with order data." +msgstr "" +"ViewSet voor het beheren van orders en gerelateerde operaties. Deze klasse " +"biedt functionaliteit voor het ophalen, wijzigen en beheren van " +"bestelobjecten. Het bevat verschillende eindpunten voor het afhandelen van " +"bestelbewerkingen zoals het toevoegen of verwijderen van producten, het " +"uitvoeren van aankopen voor zowel geregistreerde als niet-geregistreerde " +"gebruikers en het ophalen van de lopende bestellingen van de huidige " +"geauthenticeerde gebruiker. De ViewSet gebruikt meerdere serializers " +"gebaseerd op de specifieke actie die wordt uitgevoerd en dwingt " +"dienovereenkomstig permissies af tijdens de interactie met ordergegevens." + +#: core/viewsets.py:782 +msgid "" +"Provides a viewset for managing OrderProduct entities. This viewset enables " +"CRUD operations and custom actions specific to the OrderProduct model. It " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " +"feedback on OrderProduct instances" +msgstr "" +"Biedt een viewset voor het beheren van OrderProduct-entiteiten. Deze viewset" +" maakt CRUD-bewerkingen en aangepaste acties mogelijk die specifiek zijn " +"voor het OrderProduct-model. Het omvat filteren, toestemmingscontroles en " +"serializer-omschakeling op basis van de gevraagde actie. Bovendien biedt het" +" een gedetailleerde actie voor het afhandelen van feedback op OrderProduct " +"instanties" + +#: core/viewsets.py:833 +msgid "Manages operations related to Product images in the application. " +msgstr "" +"Beheert bewerkingen met betrekking tot productafbeeldingen in de applicatie." + +#: core/viewsets.py:845 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +msgstr "" +"Beheert het ophalen en afhandelen van PromoCode-instanties via verschillende" +" API-acties." + +#: core/viewsets.py:866 +msgid "Represents a view set for managing promotions. " +msgstr "Vertegenwoordigt een view set voor het beheren van promoties." + +#: core/viewsets.py:878 +msgid "Handles operations related to Stock data in the system." +msgstr "" +"Verwerkt bewerkingen met betrekking tot voorraadgegevens in het systeem." + +#: core/viewsets.py:892 +msgid "" +"ViewSet for managing Wishlist operations. The WishlistViewSet provides " +"endpoints for interacting with a user's wish list, allowing for the " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " +"actions for wishlist products. Permission checks are integrated to ensure " +"that users can only manage their own wishlists unless explicit permissions " +"are granted." +msgstr "" +"ViewSet voor het beheren van verlanglijstbewerkingen. De WishlistViewSet " +"biedt eindpunten voor interactie met de verlanglijst van een gebruiker, " +"zodat producten in de verlanglijst kunnen worden opgehaald, gewijzigd en " +"aangepast. Deze ViewSet faciliteert functionaliteit zoals toevoegen, " +"verwijderen en bulkacties voor verlanglijstproducten. Toestemmingscontroles " +"zijn geïntegreerd om ervoor te zorgen dat gebruikers alleen hun eigen " +"verlanglijstjes kunnen beheren, tenzij er expliciete toestemmingen zijn " +"verleend." + +#: core/viewsets.py:1007 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" +"Deze klasse biedt viewsetfunctionaliteit voor het beheren van " +"`Adres`-objecten. De klasse AddressViewSet maakt CRUD-bewerkingen, filteren " +"en aangepaste acties met betrekking tot adresentiteiten mogelijk. Het bevat " +"gespecialiseerde gedragingen voor verschillende HTTP methoden, serializer " +"omzeilingen en toestemmingsafhandeling gebaseerd op de verzoekcontext." + +#: core/viewsets.py:1074 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Fout bij geocodering: {e}" + +#: core/viewsets.py:1081 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" +"Behandelt bewerkingen met betrekking tot Product Tags binnen de applicatie. " +"Deze klasse biedt functionaliteit voor het ophalen, filteren en serialiseren" +" van Product Tag objecten. Het ondersteunt flexibel filteren op specifieke " +"attributen met behulp van de gespecificeerde filter backend en gebruikt " +"dynamisch verschillende serializers op basis van de actie die wordt " +"uitgevoerd." diff --git a/core/locale/no_NO/LC_MESSAGES/django.mo b/core/locale/no_NO/LC_MESSAGES/django.mo index 91c11ddcf6120a89e669c0cb3655c3993ce2511f..de0c12d86f791420d4efc71c1f4252029f194873 100644 GIT binary patch delta 26826 zcmbuG2Y^)78Sn2Rpn&uuRW2w3%C1ON6sgh_q=O~O?C#y&VP|KSnOTbMM$u?AYIHFc ztVxV9#+DUhii)DK8xu=3YV5JZ*pi^e_J03!&b>3Upz*yo$>Dd-x#ynpec$;`x$7n8 zxBdO;?ZUtHXnT>zZ+08c8wi*7@VuV8c-{~8R<7qgJKFPl!RO%dWuEsQ+>P{tF`m~E zu7G`ECF}=Jgzex(kZQcmur0g_o&tXg_1<1%J+GVRgCOVZ#oX5P%ql|mJr!T6~P2N zAMOc1geTK*w@IEiAD(xx=S?L4g+n}VA?!8T^R~kP-U^RB)blz~uFDh#L%RP|JD{VX zB=A1$4*w1N!uHcVuMh2egNby26QD*s7488KhZ1EK)C)<-|Gm@r=k7AkyALiWefkX4 zK>B$&1CBk+*0*k!<*9H8<<5cX$c=C_{1pt_6In1Dox^2tcbJ6I`C7P;3eSNO{R?wE z?1Qya3<9AHBkANLhRSu z2K&P=;UL&=tz|fohzc%)<6#JU!7Wfm_%M{HUWL2D@^yBE6gXl%or86-2fPvPr}@8?h>Y)D*adnUY=N%uM3O_{FnA@@Y`710h7ZHu@L8w| z--DW7WhdB<^n_hW4}yJQIqU{!!ad+J^Bny*xCbXYo(H9?t6+cl3#bm>4}JI?+!y{A zj)BAIrBt;ND*tS#hPOaT?0z^DJ_a>_58U(ZusiL0?N71|_Jtb3UQk9h9%`hAKvggg zO5_btwr~QJ$Tz}H@LZ@4T#UH{@B5!}P6=83v21mgDZ~|0= zi(LM3&?lXO>cF{Bv*JfkBi#(u&`+RL(*jlBLs0en1*+lKq2BxSWc05Wza&E=Z-0tq zU#NonLg{`AlR7XB>?D$>V@Ia{ia;OeWf$G2##|EeloC&3>i=jI5TPPJh2BnI>!0GT+Xly4u z)rw{%)btCW8rTdq;+vsFy%ic!Lh1T1a0q-2>Uq10_a+{Q@Wn zUkne1Prw7c|o^#dr8?)E)v8v~$EdNh==E`l0a z3eJb8Kzx?>C~SZ;&a@r670T#;4QFZn{{s>Zv?r8GM#B-X2JQ;ahkAZ7 zR0pqzGNxDH{;>1+tqLc@xuh4tL*ZuF0sa+Am9N7dwC{aHWCCn=wp|Mjfn!OphP%Kk z;RyI+s23lB1K@Km{U5j|>0QpTq8|z+sTFWITI*B#9}I`W1@I`i21=5Tz>%=c`L^6B*pBouunSB; zwbyt)^6yGyBN=L_8T#-VI11hi^}_pbclae72s{1Ij&uZUPkIK_be#wF-Z4-EI}3J& zS3%8!o1q-rTTu0V5fbS{q~is);yzHi9SdcAM?x9h8II>dN$4VIj1QKReg$gUb-mE$ z&xA8cp9CeLd*CAYI#hcTnr%nI=|m)&6;QhR4pf6RuqRAIN#-;tN&L{|Uj;RS7T67L zbwbac8BjmmH!fUfE_Nf@AZW0_(-Vd2g1>C2J|)m^F&6FaS@b`?t-fDW2jls;YW6l zHxlkk`aCEb_zl#Eo`EX=60Cq9!U@p7m`30VsCqX;&5Ea>Y-ZpkbddJFy@;sC2SGJB z14?IAj^BgBNMG;Le}r0mK7!-m?w8sQO@kWYaqt+JgiGN4P`1$TGV73zgEG>eLo@%M zCen+H?XVy0wArd+7(9UVBFBwT64>JSG90e*m)lL|Sg2{2hAMXn90RvO)w3NQ2uECD z^AlGfe`RbULj@jl{0d5x2V7|vja5+3FNYH0<8T`6bCpf6gi}dh?f43uOnT_mHh&eA zq^^N`!DpZ(`roTVYu)}eR^$~>*1QNF3oD_F=Wf^&J`OcoUWJ+!Z$VYK9ZIMDe{9!) zA#ghBMNs*h95+L$=*Lj?-53&4gZDrg)1P5?_&k*3_$TZGzkrfRub9^oixc9ZTd;q2MX1EXB3T5=+n?&?Nx1U)N9RY`tJ{3xb*TF&X&rrJl z08W8@ud@znB~-=d!M)+{;34p3sF4o(xs})msOeh)Wn+`zUYh?)i3}iPJ=DD41l8a* zaDR9=)a-a4%2qyws(8%xcK%O>b4f3UBjMFh19%u}03X18;DBFPiB5-YNiT-wn*S?^ z^dRF5sE%9$HImz)UVIK73cVZbNT$G!BoBk_;X>FKu7I6jBkT=Nf+}|*)IhF)yTZrd z$?$1dLHpj4U)pu~G&qy=PvLIxZ7AdW2o8m1H(I0F8+IUlAS{Q|p;Xuir@>#s>F_-` z3LbEimBevyBZ|ci3q* z1xl1@DAC^nA85m310~wczq2m)Z*Ugr&)_6D{r6V1C&S*Pe+4D62Vq*}U|+cUPNYY> z8$%*BM26mNt^501aXJ*Z7w$&>uzT2`lCHQHqa^(wID>Tm``CcO<6v939jd|4psc_9 z{kEZrPy<^CC7GjKel=`IIy~8BY=kq(xE#JfL$AQ2NZ<7UK7e%J2Wbp$eaNa{@FTY3 zk#IES#z1wX3f=(gpc?M=s9jqI!QE93N|jUK#bxM!1rh1|{m0Nd+zwx&q3w?&O8CqZ zo|kKbzW$8A=6U!OH(unQ@HBH6e)WvK16us7z1z9*ISwb3ANxE8$n)kGJ@1dO^GlHT zUwjz}k-qU22Gs`rKl!SiKJUJcXn8Q=4a5gie`mJ?Pk9rIr^2ppvl$_M;y*Af*y*1* zEAroe&vy9q5Ahx3SO3f2n0)bX>mld-$ExBKD5Jd?N>ZEQaN75-CejW*2qlTf9iN6P zNxuNAsd)T$yU)MuV_U&*U?-m61-rqA;k%T39!{cT4}NM@v&-k!D96ExluN>~@EREI zPvmJL(p9@J>9K;kj4Cdhkcp2Oe{s~sVFW@{l>PtII);V4VHSh0)2f;VtVQ>ig z9SUn5&;APiA5O-NWXLss3N<~-_@9iWKimTjhw9)ISP$pGz$73{K0nGt0NsOi!l_JqS=A9xUy16l~X z!lPaOYA6+)3f16+unWA&<=+XrlYShk-k0H?@E;+OendL9wJ+`s_a!|Q8dnR)lfDv4 z`eRKA8f>X3d%TM zg_<7ib}jQTVy`2VZFGies5j(AZv<3@6QEQv2TJrSp=MDYs-6>}B=%jXj%|Xy;VXv%0JBUXebF~;7GUuN<}|`QpIy{IQ$A842O3p^QOWo zs1E-W%E)hr-DuzYqayHSsE&N-3bgHLdprm#e?0Wz9G6Z)N#-QS)8PWrKY;te=b==$ zYbR?%cztbm)Ko^OMi$B#ly%l5n5k@kdhNFM~%!PB5b zeG!xqUk@dzr=UdtH>h^D!@+RZ&Sjy=7~a|H{y->4a}2x+UI?YjFkS;9am94rHM?2A&Gr!55)y{(_uk;|Y&eFmHdFM%`RYf!2h(aY-i04OV;0uO}C;8=Jbtc3SMwHFTS zZ3~n`&C?nv-K>F{Ru@1YUIQiCd!elNzi>3{*~fAwR7abjbbk%h+VZGNe-8Ej@ICCv zkB5{Gz3&rI&$d9#*SDdj$$L;D_xjqA?Fpr-;cyY00oCD)-1DoUjO%)+dVUL~y1Su_ z@2_wm{K%!d_LBsdf5VBW!2VE1H5*D~3!segOqhUoK^dRlzswv)mqV313#udcKz004 zsE+*2rQe5=WZ8f+bL8p{4K3% z7yLPtA9xh1f!Cl$_A!))Y%|1mv^!Ko`$BbKG8_YELoH?}z~S%;mw!JTLHZLY2@MH{ zmU(qVroesR&!GzZ5y}`pf$H&BP_v}lUe* zhJE%e^NxT?C_iyK)a=-8KP#ytpwd5r(=`A8N<=RV9A$lb5=xX0z?E=txvgkDJd*Uo zF5SPvmPLZ4)S6HazXLZy>G&0>k@Y{wF53&B=J!UZ zb^Qh?Rc(bb&Ih0xE}LZiL02f%jDhOd%8-aEJQ+&&w?d8N*RT`32g-Lp27AJHp*);- zu+`-tsM#_as-Y^VX}JbUVoyM=DWAgyaNr@f-g+oo2-gvjQJoDXnieS0J`Pp!^H3w{ zGTAzuIdD4ZO;9TP3sgg$54DTRLGW3VobUmh7qnQiU(Y0_Syb4Ok4?#8X0n|tbPS@#?9h3gyH?R$sPZ(m8-ZkX^ z!o~N;{><+zGS#bp6KI!%rTsnPct3d=;%^WxB%DfG;@pjjdl7FUe3yWiHePTycm?6l zgwqLcQ&zvjiQfw!Gbx6z_75fW=7D~@5Y`ixxU@#PmiThQxx{ZF{D|-b>AMJv3Htp8 zb|Sn)IFwG!A@8>YCW^Vpo=to!@#v>DLFzN(pUDg7x`()L?>~fJ6YikEaGt&8o@wfh zCH*SYZvgR;gntt6Ntx}01+J`~@5!@Y!hVF~$p0cm@@5gX5xS7p%($KK4B=tY`mH6rNt{DY{9EYa zC&W4Smi)w!2h+&>1=M`hZ#8jNW$yw)n)GNl3O)OXJpCSl!^r6t7=kQOCpx+2a z@EUQgd@~7ci9Z215%hc9!u)Ao7s^g^?>!FR2Lr30nPUxlf%PZ2~$YCLO7au^jkyxA`&MPMi764@FHPfS8)gO4<~#< z_y_q1z>S1o5s!Y`i5x~amGFJS$L?9!NaR97cfy%2b2+~P8J=i%GLALZ$1ggpr_6bhS9b$anq^2WPS^il@DKN1cg?-)45J?jU1 zll~JyzvBpb!Wi-=m@??U__vb8IfOG@W*Zv%5Alu^-a!2K#D~C}2>Sg29_ZqGQKrVl z^~`tiA1lG{U<?nedc*cBad32YXUy*n@xcn?-?ZU7>oo4|zGl&s<(R%AHMo7Mu=mCEUmJ z?+{KSUImYZ0pW7OY|8x*zD54kP`{Lg`L3wwDy{$f5jma$ClD?sT&*YkIukB8G5gPO zQ0FR&vgZ-$<_6HmF?u$WvVV)p^Xxq0pAf2Df%l0|()@qYWgJ3ATME7dKP0alo&+Zn zh7s3qE1`jSUnNEa>l0P^k^aJLrn;#r?=M?6ccwSZUz-fp<$}CllgauGiFBeinXdJx z<@4EOWm7&_o=7zXex`DDP?gVB_+6IPC3EpBjmmR0)xjgTT^0NUi1#3;bDjOth zZc}5mizU+4esz!vl>fCY%+34BbUvufCh|efUzg0+`7>81(zO|X@nK7r`m?f$hG1PL zTR%MNMws^-f~vYiI+<(8`D&vn$D4`9#%!iBo1_{)7r<2Vgdm$U!>mr$)CAceo%az) zGLvRtvy!PirRZ2yqA^jKOeOP4)shW->RFqt4yyfpT{hEHTL%NzC%x4%$WBjG)d%V7 zik9zG+*%gaB-45`mQsme4_lk8407e!AVtTj{Y+!PKy4S6QmuWw9F;6VB~__JE{8bk z=vkhwXEP1{{0t(D3TU*hdpvGRYc$Pw&g&E+j_Q;~;|6HtQfSQ2q+L@!QZPfU@QviF zQcczLKG)RPn8{kBsNRrHG$gBvq-Z-vvC2eFgGd{ZR5fKInT}^fqx`C-Tt3r~JRwn; zLW)7QA(_i*sH048C|hkMj({2xSXWD@(dBJJ^_;3#Rb|q7dXF|&NofuAsWPge!kgoY zRVAtrThYjJO;vS%B8M?1s*L~;5$0`d&KAZT6V|X2ey%a7O4cM9M18QqbSum!8-h$z zzR*N%DpQ$AQAr|8)oYsQbdW1NE^0f{YCcmi?`ZCr7L!&|*k&qOW%OR5=_vD(#b_Fa znHqoE!nx?Bx-r8{$obT!8IhGR%zTI^r>~(@_-0O8TQL)uy41@J41bhg6B)LZdNdVG znnYONdDne2-s7fqw)%V&2DHDwEZ{aPWaS4Hhasy0)}%^;>_Dp;S?3@8YPkvPMv z@)ME#b6C16#JhyiV`O39Vx}1vV@%X(1ubo`zOLZUBK6ACl}t|S2mH!FO)wWF;Gp_z ztT?pJ3By~G&s5bLGeapx^SKSVe9%yM(W%2aR)km;Fv)2{u4ye!*E)ZH+2SLd152i> za0-&#k@)lI^^yuhDcII1Ut5z{o5TWTtxVjYGMCH;6&;Q4oX<;3j6p-Aoh=AqZD2YZ zy@?P5Kb2w18SAnG$ukG4{OV+ur7e@)pz75cV+gg{p+%cfQVFYHIwQZ>l*aB8X@Abr zr3?LWqsRF{HjCBpJex?$E1GFrt!Zxik_~d1rfgN9B2DSUTC87=u`qBoZfAw&fR<&X zlWW9bA_A($KQQoyM5CMW@z|Zznf9u}Nfe_E^7uxZS+W}1T3lOk8HAjDlDyR=Zef^6Sc^0Cz>o(q^#iEC~)QfhXzxbTC55=R5r;0Ybi<)XHGCNn!8@u zJ1mu+Q<05SFCxt@n8?O zJ^7vJw0Xj~%j>_{mnIvKvo<8Ay^>YTo3E`S4|iUJda}y7%2j@Y_At%+FWtM(&UZ=8 zw;bAAHkicX3d>jI+sx8st+lAJVxO8!=kkd(p2*5*J$B6cW42GLN_JSQG)vho`naS9 zYKW#3eye@n><2Df+&e7Zf7V3%PopqxNo$%?X2CA>g;paCGz9s&jM^?)P~>CG;$)}0 zR$O)j#$0yTCMBxE$fZWxi<%&))_PzaqN}SS)_`Q~7B5Xg{BXP*#4J%lLuLjFK#fjH zXwzwRQb8J4V>g3Z(b{5WoF??$>75=p9YK|0{v^FTC{A9jxL`j5&eV^Nr zXlBF~P_XQ@Um}gzR=q_{37uFrc#8w;@FVAEc7@Sc6V+@noDXfpFKNkS6>SR55h-n3 zG_K5TM$9rEZAP5iEvmmEs@VC0sD8HPH3_Zh##`H#utswNwM99nuFATuuJXgk!1G8Huc{Fu|NI@v;(bV^g*XNrYduL-_D^_LPe@<$gUUd~xw1^hg3dX#{i4yHKCb$VOYBk%5=;(@NYoSObHsBm2 zyvDHL;Iy<}gWZ^@AhoO+tiUUpYl8d<`O8;PC7Dwa)p!);fQ zssk;i%8jhg3hrxm0Y-W3lyr}2HP&iNP~`d(w%)J1|I@vg`~#vn+uFjFTsy_pTi4`A{bcu`yJmKy%;I9>;0)|8)zFmDXEtbH35_&c*_5h}w|eTQ zS}>xCn&)aUzH@bZI&+^LU$2{qTfCo@DD3_SM$69H!x z?^&ZmN~vOF!!k`ZKR0_oNCzU3#VQ#U-F->B>{$42ppONTUpA=4u=p&%Mi$itsg&51 zF3LCZvHf(tS2Z$_`0ks-fOhWKhc0oPZN)d3+TgqGQY0se`Kop<2LP3bmSoi~%f$jt3y)-S)OcgwQW+yN79 zZUdM2w8kbNDOZ4`@bX1BJ{o<=9Zk!nXFj=G%P)Sox!sb(@;JU+ns#&(WWOeuoil>Y zCUUDeaVORmZlKM#rgC||dOBF)&*U8)%L+9F`Q|M*4>ez$bm`wXii;@*GfHtZ;$kdt zsL{{V`Z+!}QANC~*hveK|#Dp}7B8rH2ZG8)({E;V>6xuE%EZJibuKc7rhZpitytAli!4?VUc zDq8r!`IXL2p`e)L3HIMb}&YJ@#@v5-uob=$5@SM#QHjEqY@J7p1x*+WVL>QBj? zNO`@!It8ePTU17nO_Y9fV$kYo^V(bcgsoaBj8UQ~YQk^ac5T#$fX`WUOzPDMtzK7E z8bvO@?G7nRBC|K#ImG6+90Jm^UCWvSD0|ZRsE=0OQqZs@f22( zq8@ckGOkUoRXRs|e0`!rE&VRp)HZZ-qg*o0&8yiOkU)m3>RFy>2@T{{mFMbLa~I2N z-kicK<^xlC@xXIv63;0$(5|XfSDaQ%ac#$pu((ry3W}>d#M~t#JI5VEi4wK zoqul9q0kh9;nQ@9Tr|B{cw~`SVnM<5Yb^>7>sAM;M(Ig&&=r*FB0=M}+()Z`$%uNL ztBiGqa5RaS4P4$!=jyZbo7x^CXmucVDl~yUoANc7kNE&wG*`bynjB6MqM2bycXki- z<*+b=3L28Osb9NY_wAfMn=e?g7v&>XIi=(hnaTAbm&V5F>q}O7Nlo9}hWn!A<|IgC zff!$PMMtY%c7kSJAy!F=*-f*^0ymFr?dP!anvliZ3I!2bV=;=*eUW@;J=1{C5tK>F zs&Zys<-67#swvcBDlz)4OzFbCiD}C*P))JlD}3N8uL*D z>E$*9cm?W+R|Gq2bA<+qYFAtOQYlxWGfS>Mo2=nuLFuz_bnOGAVW(el}U3$4ir=jGR7+6>Pwm zqLkiz!{yh7({!7xJu4EyQaJnA#WL#`udU|XRiEc?hg5y(vihxjf8h&Rx%omSoy%=C z|L3|sp==a;{a+hB*NGsj`#-z4VqV2dU3^Y=Yb;VM9!@KVFHO{E8gwe+9tYQi=Ij>? zxxm)({yh!!w%E4d49;4fEL{#gNJ zhxE(Ix56v6iD;X^0Hd9b+chkVzPFXzZx{$Z-s0Pnf%aC>nxk##qARX1Yh`jy>u#9Q zmo;}Ow!?NldhU*x@rIt)6KPEZymI8oqu!RB2>kl6XwMi`S89|P1)^`Yi}_UC zebXO@@b^p0OHO!3fX7$Y$r3P_oK;c0dv{irOV-=P$87KU21jk$G6Zg$p`(CZha%mY z?VWaaYP98(D<_qOOXH31|C&}u7JZsyBOIS#bYLld7Yi{bx?22R)_kNZISpVQ0qe27 zc+GNCSJ>UKFP4RAdmL}LG}e-qBex*2Yu6dig5nt-?}b^GFymNqG+wEbfR-yw{{-h~ z{vnY`jYO-W} z@f7i&1uOQBtjXaI|eKAcnBxgh2e;LgQ!oqd=7SwVQsP z?QmIQmW=2Npf)7B<}o)W9PBmWTl-to7H>TZZalPpJXd_V6s=}v2C!jv*B-5xHBB3P z$rEX_FxhfN-vhB_d$J8!Cv=`P&W#TV`iR>y{v5yc?hG&G)~egWepsZ)Lw;vf3BhMCr@L22mL8PBst4Heq}@n}niMKMfl9 zz*Xv6KM~5b+&u%IRthP zcPW+P?m5F<9&}A3Ij&D=3=4nMbR8V zgLEi4N^ZGSQ$AmO8PlpcXLh+$1g3=@Nrgg{4K!n)5{T)zPRdx)KQZjud}@bSJ62 zuWycShBqI)^*2LGrycd{0FzD&ABk%va5zXe(8E8LUl^wJ6T=dH!n+{t`M~9?S~vHvU{K>Exc@5M6aU+tJR3 z-bD7H&W&O6AewkXRCLLt8E1C`+zD#~#fE}IYDM$EwoWhk5?Q+RYdUVbBh6)t*36*f zjMDmxWYN*{f8C@qX{@WrsrKekx9-;b-P?OLf4-$dUpZVRA2qNRGCsy*zCARrd99y0 zqiNDQ$AT@V*svi8N|}X|%OivsZ9&|jO#4pef+?z!D3k@rPDFRx#%DP`3B=n$ciJip z+@6Z`<=NaGI|&;>>Q+`BNP93g{dgmLxTD3w9^S04Y~6KLU#~x(D>`sfjJ^c5{8J=q zJ}xqmIF?HeC`+4`P#drk4bv)rip-5)^tDaHFE$DEr*nb5prJGpEt~;M)LA;iij-N9 zX7eLA?;d%_SV1L2;gec6D0ZMXh%h}3GXXG{f^x^ZLd`UWZ;8ROzliwkLMktW|5A%4B+!wV-c-IV9pWALsk%Oby4 z_9{PDEM^_~?0@0pRzz-}QDfxwcf12uQ$^>Z*bwcVSac<{it6w6zR$_`-^c%YJU*VE&$-sQ&NYsMT>=*L0j1QO9q_US5uK1a*9c7-J1o zhhtD9&>I(Ff7Ap1jX~(dI!+<(?*x+sV|mmN$6yUE+!*`ugsJr$=REC)8#qoD?aLc7 z5?C_MaoS>&7q|(|Y)sDa*Ww-Led;RB7S5-1De8$n!m79i^~5J_`x#qb z!X(4bBtAx_+X?SwMyelbO(bC$&P1KJ z32WeayWg+3X|IJ0qSFVphUWEV{L7GRq(L6H2j0SH>X1HWYT99O>X(qga>k(_?#E(y z6bs?csO#KCJ(z!A)(93y2GvPNX35!u%!>2eO%h1bte@jl$DXLg@fsG!1*rWi@nzhB zm9XxMW-<0ff9jVo1k+H*PeD!9yQq$=!6KN0>hOLHK=*kPJ=raLfOmhhBgk42H8s%~ zit(rp_Cpt@V>rHpb#NDIs_xi!*8p?lcBm2ShZS%T@;14hsrG=Gs2(py-Ef1gKSM3D zqo^l6iMqfQ)R228n6(gqdeV|u5W`R%t7Z51MO}9gY9!J;?QY(461{%YP(!{LHH2$X zH{64I@?)qQ{%YIrql-GvOQr*1sMTKs^`w!g8`VcmO&iqp5>VF}fx&K)2_!o4ZPbbL z&@&R&4X6(8Ma}(b)Z9HqO+}$Z^9goY8=!979rYkdsOyf!8t6u?wRPy$VmNCX?qWUa zQUlE=wL7XKv#lSZZv3gO_oF&+8cX6$tM?$&fihTu_6Sr*I-{m&5Naw$3}XJ9l8mFF z4(>t?%^lS1_Y`%5NWLDraSPNJvL||m5;fN&usn{p`xl`W;R@6Ze?WEQ3dW;%vgu&+ zWX4}l*qsJ_Xi`v%Z5FD19_ogxY`qb6!F^Z_k76u7z?B%0VvawBn)8cT7yrb(SY@yo z;RtL43pF1_$B@JcsI#yVWqW>N{Xd8eYWwxEy_PJ?cVRP*ZXctKu_Mhbs*?`y)^tY>d@$ zEY`y1s3|;!ZSYqtg^{WJ4xsnH1Bq@p6E&v`P*1i3V{ki0;2n&@(sbV&JEJ<%9sO}4 z>cTT@{V|rM-in%n?@`yypJsk$l=jH{Hz(0hr&?#Di+U55!SAp(-ogt}n`EP~Of8?`_ecEcJt z8r9)tSO_;^Y5W}ZV78?hknMqT(Y zYHqKg7NOT@v-o1IjWLM!R;WeT4*7A!{t%l}*UT~_l$pi&ccEbc4Z7hC495GY zk;%_Hqd6>sTJ0rJH*%pyrY>qEn%ed*s0TiobH++Cv)gdn%>tQA8eztxUOH!{u&G{bG+W8AL0s*gZ zESADoE~ zy>>3{rQ_OS9n{*3B%Ia!Q4i1C9YK>#-4b;pw{?}!?~$=C!B+q%GO z=BHg(Yc|HQ|9e{pzRtBZRNY9za5`#8*P&MTNvwcZP^;N{3O^q(7`1ptq27kcsJCSv z>b!**hO1FidJJpfDQt?~Zqwc5+CZKMZiCRokP>X36>cjB?YPD}f zjmSaN`~CorVAxd0q0i18)Kp|lGb6DOb=(Ei2Pyw_hP*OK%yhHb`=f?-Dr#iD#7g)G zHFss+G(Qtsqb{6+jd3^uniu=YFKQhd4PBfr%pjV@Ep`gx_6NHkQ_!0 z&2bFGr>Kq;o@JgS9CczRd;!Oxo@6Vk1G~@{528A991G%g)a(2w>bQKf&4UD?ANO~f zk?=-2?XV_(jpgw%HpkGn%^FC+!qh`hi*hV#tt>>1$OeqS9jGb1j(Qs^ykk~<5^C{% zgf;LQhU@(goMVP64mIb4QLo8j)DxdaEhewI=DmFbHB~!M7rbcO%VqNr)Ll_ux}~Ta zokk6Po_S`?M4+ao2ZnQh$4ycOKfys>Oa*EPYb-EB+5$Cn?NRN$usDuHJ^6I>#<|u7 zs17egomciijD^tuLo<7p{+)JYm{0 zF3y2JFX!V!`;RNQDGpraIDK*J$L3!|0@m=c;`jxh@RtwTAFgwpZ*b%W`lE0%i?|1c|rTkRF}X2YIjAF+9c6f7gI167hx2h!dmF}r5Vat z)ba7C<42+9auvqlF|3Z>`^_4vg>9(^UN4`daH@Z0MkER~m+i4Q_Cd|{C>)LxFafV)7i@Wu&oI7+1@SIM>HU97Qi_IJhs=(4 zsKwF?S!YfvhGT)lW~if4L)Q@X_O!QDyO!6m34KHs8VTi+w5L(%9<-3BXRXUvadP}iG` zZawKjyJI7&{tOG?3DhU|9G1r$wk~kgT&Scq3^k+?s84Wx)QtzDu9Jp=I3DxiOw^Rk zKg#&)2J7vCyHO)>2=(OW&>tULeUF*75sW^x$6_9Agnrll^7NX-GpKjK}$?9{+&)0^UF^8ZW*kG7!~~Fx37SREIm+_QB|)o?z=m zsFB%V-G&{h_h5B&`+sZZu0GbGp#}QmIMiyMikh<}7=Wv=FmA`1co4P!0qQk=j)kz^ zcjif3U~B5(sE%(zjr1W5*ZY5gL__6!(mY8322fYUa#-KieNf+pVWc)y|0I$K8m6J#LAU1GO%j5$upTbQD7=UR zG2pzpaVBd2%c%Ey3u=nKz#@1VU3eE`G2nt(q^+?wb)t1Hs>Ay)F#aq8=PnKEdFVy+ zWowJNKo)8Q)}u~1gX);~kM{k?qSTGB40c34St^#oEbM}FP#wN%_uoOSu}42L{(ArO zT{3g%kHx90Vrh)Gb$`^*XW4opYO3a=Mr1K+QJ%&`EOgl{!ZeJeUV%F92UJIjTrnLF zb(5$kHEcs1YA8ElRZKu#U^?naccNaeV^|K)VJQBMY7hR&d^yXb7Ii#oe;R7dyot?l ziEVfPM4}EnL-ox6XLErP=%S8AO+|0i(7t1RAJw6cP~U+qsHwb)aaj1O`FlcpY)3r< z^+0E^6*|9o?&o$|la!(EhMI~|=y@AZLp~X`nx~_la1m*fZL zsF7@e`cigAbuZdec1o?v~| zx*QwP{*|rs+%ivI5r@$pg#&OYcEo?M8@9jA`0Ks@@U|K9Z?QV{bJUQA|8D*Y)dV#n zX{fhh8S1!Gw*6mQ*STZ<0x|%@+5bM)zynwx|G;`!{Vu=GW71v5zdgxz8oHp*J@b0> z#5U9mZT$;2p|1LeIer-S*Lm0rL;f_sZjV4+=OA{%5`UR`2D1Mm<|!?Sk(OApK<8-{slpM*tm3TiPfKuzgR)OGivp7b~L!MKNJe^b=` z+-*oIk#s|S`NrEFb1;y45$XmTP-|o_Y9uaVJeGaLykY{5!RHu*S&z-XjI6^3)VHxF zR{7g>tS3fsf5%PIoEa45bA={QFFc<^(0?n zK|F?K@hk@6BP@*t9WT!mR>eBh4N><=!vXjTx;11MNXns~mzU@Ltb)4m7}Oeg4Yio& zqef;AYG}`)E_@y9W63;To)1ko>`eUuHpP3Wsf+UV@=VcCjHRCM?dA5IaGZwjG?er) z2c+Q?>V?=0%jNa*%-JC9Mm+^}fwQQg5AgN!EV?w*+F6O}@JXzOPf=^AlApPLd(;Du z^K*Og?0jtW2U{(J)5_Lms5_JMdGKtFtr}i!+lZ>{FYl?S$+z0PDY=_`J`q5!?}D~O z@<+rZqMr`P-IkGjPrPm$_H)2-^1q09qGBHYjz^oe(fAU6LFj)%*@G_-+HTroKE(u^ ztNl9pJH*rfwEge?BRD{-`W1GzCYTYY0yn&_Gubp9-xA$v&qsSXtcs&>0qwrzTK%Q* zENzR3mkF(xYs5E%wpPS+;uiZ(Yk&%nXv@QitFQyHQVnc>5c>KZCiE(HByJGe4iLW* zRf&sS<3-d~*x&?lz1*!V`_~Z(G|aM%bEz+Cf--5SL*e3tL8yP<(YDljh5S?E81)JK z8t341LfaP5Mhc#p`|KDH=glg(R`*B~EElp%)e0K0Xt$EZ9+q*8}+U45+de@rE7 z2ipPa^L$=aW`ctV?g8~Tpi z$3A2y^Ze$wm4)o|wmWoiGzT74!ghwJLiD4pA+E%_xDd5Hz;=W_yRpPufYq~SJG#;?J}m=dMQ*JH?KU5|6W?(C*~3>IH4p5?;;;Z6eh1n+dU$VI?#?z6YA#Fkr;$Sh*yX&iQ%+W z#vrVYFW^|>5}_@a*i8PJr)K=mkd)`bTQHqi<2j694m}5$q8oWRjwxx|l4wpQ-;XWP0sH)&H?g={QPkW5vPb(?LmK#e@8w5+u$H#0lBuJ zR^?aq2U{j>J%}hGziD!E$P3WnnzqiR8SN#AuEcm6-Cx^1k7?*g{7F~No7heJ zO#S?MhvYND*B;a!i&59YD#Sm;4C-pAZ92Y0c$?DE8>H=3tbp@~|UyXp11W6ZeVlX*);wkk7$4iOR>LaZ833{I7pkeFReAmKPE!#aofFk8AjTje(Y#L>>#w?m-ydSHF;d(pwZP_oioyt zvIdQI_2|*2c}|Bqo4s-xM~C}l--})eC(P`yj(DQ(u3{U3m-Mf z@qTu*cwlmBa!Ps{-5HUbVS2Ou=OC|F%57g3<@F?grJ=)zC%aM;Ge^^9ZkL?)zb<7Y iXJ%$)WU5o|UV6c+RQ{B#)YO#yJ2FOZ&yMq2\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:11 +#: core/abstract.py:12 msgid "unique id" msgstr "Unik ID" -#: core/abstract.py:12 +#: 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:19 +#: core/abstract.py:20 msgid "is active" msgstr "Er aktiv" -#: core/abstract.py:20 +#: core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" @@ -34,19 +34,19 @@ msgstr "" "Hvis dette objektet er satt til false, kan det ikke ses av brukere uten " "nødvendig tillatelse" -#: core/abstract.py:22 core/choices.py:18 +#: core/abstract.py:23 core/choices.py:18 msgid "created" msgstr "Opprettet" -#: core/abstract.py:22 +#: 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:23 +#: core/abstract.py:24 msgid "modified" msgstr "Modifisert" -#: core/abstract.py:23 +#: core/abstract.py:24 msgid "when the object was last modified" msgstr "Når objektet sist ble redigert" @@ -89,11 +89,11 @@ msgid "selected items have been deactivated." msgstr "Utvalgte elementer har blitt deaktivert!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 +#: core/graphene/object_types.py:616 core/models.py:701 core/models.py:709 msgid "attribute value" msgstr "Attributtverdi" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 msgid "attribute values" msgstr "Attributtverdier" @@ -105,7 +105,7 @@ msgstr "Bilde" msgid "images" msgstr "Bilder" -#: core/admin.py:155 core/models.py:445 +#: core/admin.py:155 core/models.py:459 msgid "stock" msgstr "Lager" @@ -113,11 +113,11 @@ msgstr "Lager" msgid "stocks" msgstr "Aksjer" -#: core/admin.py:166 core/models.py:1609 +#: core/admin.py:166 core/models.py:1667 msgid "order product" msgstr "Bestill produkt" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 msgid "order products" msgstr "Bestill produkter" @@ -739,7 +739,7 @@ msgstr "slette en ordre-produkt-relasjon" msgid "add or remove feedback on an order–product relation" msgstr "legge til eller fjerne tilbakemeldinger på en ordre-produkt-relasjon" -#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 msgid "no search term provided." msgstr "Ingen søkeord oppgitt." @@ -792,7 +792,7 @@ msgid "Quantity" msgstr "Antall" #: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:287 core/models.py:369 core/models.py:522 +#: core/models.py:301 core/models.py:383 core/models.py:536 msgid "Slug" msgstr "Snegl" @@ -808,7 +808,7 @@ msgstr "Inkluder underkategorier" msgid "Include personal ordered" msgstr "Inkluder personlig bestilte produkter" -#: core/filters.py:85 core/models.py:526 +#: core/filters.py:85 core/models.py:540 msgid "SKU" msgstr "SKU" @@ -882,7 +882,7 @@ msgstr "Bufret data" msgid "camelized JSON data from the requested URL" msgstr "Camelized JSON-data fra den forespurte URL-en" -#: core/graphene/mutations.py:65 core/views.py:360 +#: core/graphene/mutations.py:65 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "Bare nettadresser som begynner med http(s):// er tillatt" @@ -914,7 +914,7 @@ msgstr "" "Vennligst oppgi enten order_uuid eller order_hr_id - gjensidig utelukkende!" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:839 +#: core/graphene/mutations.py:527 core/viewsets.py:679 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Feil type kom fra order.buy()-metoden: {type(instance)!s}" @@ -989,9 +989,9 @@ msgstr "Bestill produkt {order_product_uuid} ikke funnet!" msgid "original address string provided by the user" msgstr "Opprinnelig adressestreng oppgitt av brukeren" -#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 -#: core/models.py:1234 core/models.py:1263 core/models.py:1288 -#: core/viewsets.py:842 +#: core/graphene/mutations.py:656 core/models.py:849 core/models.py:862 +#: core/models.py:1281 core/models.py:1310 core/models.py:1335 +#: core/viewsets.py:682 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} eksisterer ikke: {uuid}!" @@ -1005,8 +1005,8 @@ msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - fungerer som en drøm" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 -#: core/models.py:1686 +#: core/graphene/object_types.py:444 core/models.py:672 core/models.py:1144 +#: core/models.py:1744 msgid "attributes" msgstr "Egenskaper" @@ -1019,11 +1019,11 @@ 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:224 core/models.py:312 core/models.py:612 +#: core/graphene/object_types.py:224 core/models.py:326 core/models.py:626 msgid "categories" msgstr "Kategorier" -#: core/graphene/object_types.py:124 core/models.py:383 +#: core/graphene/object_types.py:124 core/models.py:397 msgid "brands" msgstr "Merkevarer" @@ -1032,7 +1032,7 @@ msgid "category image url" msgstr "Kategorier" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:249 +#: core/models.py:263 msgid "markup percentage" msgstr "Påslag i prosent" @@ -1057,7 +1057,7 @@ msgstr "Tagger for denne kategorien" msgid "products in this category" msgstr "Produkter i denne kategorien" -#: core/graphene/object_types.py:351 core/models.py:155 +#: core/graphene/object_types.py:351 core/models.py:169 msgid "vendors" msgstr "Leverandører" @@ -1082,7 +1082,7 @@ msgid "represents feedback from a user." msgstr "Representerer tilbakemeldinger fra en bruker." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1110 +#: core/models.py:1138 msgid "notifications" msgstr "Varsler" @@ -1090,7 +1090,7 @@ msgstr "Varsler" msgid "download url for this order product if applicable" msgstr "Last ned url for dette bestillingsproduktet, hvis aktuelt" -#: core/graphene/object_types.py:400 core/models.py:1791 +#: core/graphene/object_types.py:400 core/models.py:1860 msgid "feedback" msgstr "Tilbakemeldinger" @@ -1098,7 +1098,7 @@ msgstr "Tilbakemeldinger" msgid "a list of order products in this order" msgstr "En liste over bestillingsprodukter i denne rekkefølgen" -#: core/graphene/object_types.py:436 core/models.py:1080 +#: core/graphene/object_types.py:436 core/models.py:1108 msgid "billing address" msgstr "Faktureringsadresse" @@ -1126,7 +1126,7 @@ msgstr "Er alle produktene i bestillingen digitale" msgid "transactions for this order" msgstr "Transaksjoner for denne bestillingen" -#: core/graphene/object_types.py:465 core/models.py:1144 +#: core/graphene/object_types.py:465 core/models.py:1172 msgid "orders" msgstr "Bestillinger" @@ -1138,15 +1138,15 @@ msgstr "Bilde-URL" msgid "product's images" msgstr "Bilder av produktet" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 +#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 msgid "category" msgstr "Kategori" -#: core/graphene/object_types.py:502 core/models.py:1792 +#: core/graphene/object_types.py:502 core/models.py:1861 msgid "feedbacks" msgstr "Tilbakemeldinger" -#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 +#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 msgid "brand" msgstr "Merkevare" @@ -1178,7 +1178,7 @@ msgstr "Antall tilbakemeldinger" msgid "only available for personal orders" msgstr "Produkter kun tilgjengelig for personlige bestillinger" -#: core/graphene/object_types.py:534 core/models.py:536 +#: core/graphene/object_types.py:534 core/models.py:550 msgid "products" msgstr "Produkter" @@ -1190,15 +1190,15 @@ msgstr "Promokoder" msgid "products on sale" msgstr "Produkter på salg" -#: core/graphene/object_types.py:651 core/models.py:784 +#: core/graphene/object_types.py:651 core/models.py:798 msgid "promotions" msgstr "Kampanjer" -#: core/graphene/object_types.py:655 core/models.py:154 +#: core/graphene/object_types.py:655 core/models.py:168 msgid "vendor" msgstr "Leverandør" -#: core/graphene/object_types.py:656 core/models.py:535 +#: core/graphene/object_types.py:656 core/models.py:549 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1206,11 +1206,11 @@ msgstr "Leverandør" msgid "product" msgstr "Produkt" -#: core/graphene/object_types.py:667 core/models.py:807 +#: core/graphene/object_types.py:667 core/models.py:821 msgid "wishlisted products" msgstr "Produkter på ønskelisten" -#: core/graphene/object_types.py:673 core/models.py:824 +#: core/graphene/object_types.py:673 core/models.py:838 msgid "wishlists" msgstr "Ønskelister" @@ -1218,7 +1218,7 @@ msgstr "Ønskelister" msgid "tagged products" msgstr "Merkede produkter" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 +#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 msgid "product tags" msgstr "Produktmerker" @@ -1328,7 +1328,7 @@ msgstr "Overordnet attributtgruppe" msgid "attribute group's name" msgstr "Attributtgruppens navn" -#: core/models.py:100 core/models.py:620 +#: core/models.py:100 core/models.py:634 msgid "attribute group" msgstr "Attributtgruppe" @@ -1377,7 +1377,7 @@ msgstr "Navn på denne leverandøren" msgid "vendor name" msgstr "Leverandørens navn" -#: core/models.py:163 +#: core/models.py:177 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1392,27 +1392,27 @@ msgstr "" "operasjoner som eksporteres gjennom mixins, og gir metadatatilpasning for " "administrative formål." -#: core/models.py:175 core/models.py:206 +#: core/models.py:189 core/models.py:220 msgid "internal tag identifier for the product tag" msgstr "Intern tagg-identifikator for produkttaggen" -#: core/models.py:176 core/models.py:207 +#: core/models.py:190 core/models.py:221 msgid "tag name" msgstr "Tagg navn" -#: core/models.py:180 core/models.py:211 +#: core/models.py:194 core/models.py:225 msgid "user-friendly name for the product tag" msgstr "Brukervennlig navn for produkttaggen" -#: core/models.py:181 core/models.py:212 +#: core/models.py:195 core/models.py:226 msgid "tag display name" msgstr "Visningsnavn for taggen" -#: core/models.py:189 +#: core/models.py:203 msgid "product tag" msgstr "Produktmerke" -#: core/models.py:195 +#: core/models.py:209 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 " @@ -1423,15 +1423,15 @@ msgstr "" "produkter. Den inneholder attributter for en intern tagg-identifikator og et" " brukervennlig visningsnavn." -#: core/models.py:220 +#: core/models.py:234 msgid "category tag" msgstr "kategorimerke" -#: core/models.py:221 core/models.py:293 +#: core/models.py:235 core/models.py:307 msgid "category tags" msgstr "kategorikoder" -#: core/models.py:226 +#: core/models.py:240 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1453,51 +1453,51 @@ msgstr "" "spesifisere navn, beskrivelse og hierarki for kategoriene, samt tildele " "attributter som bilder, tagger eller prioritet." -#: core/models.py:240 +#: core/models.py:254 msgid "upload an image representing this category" msgstr "Last opp et bilde som representerer denne kategorien" -#: core/models.py:243 +#: core/models.py:257 msgid "category image" msgstr "Kategori bilde" -#: core/models.py:248 +#: core/models.py:262 msgid "define a markup percentage for products in this category" msgstr "Definer en påslagsprosent for produkter i denne kategorien" -#: core/models.py:257 +#: core/models.py:271 msgid "parent of this category to form a hierarchical structure" msgstr "Overordnet til denne kategorien for å danne en hierarkisk struktur" -#: core/models.py:258 +#: core/models.py:272 msgid "parent category" msgstr "Overordnet kategori" -#: core/models.py:263 +#: core/models.py:277 msgid "category name" msgstr "Navn på kategori" -#: core/models.py:264 +#: core/models.py:278 msgid "provide a name for this category" msgstr "Oppgi et navn for denne kategorien" -#: core/models.py:271 +#: core/models.py:285 msgid "add a detailed description for this category" msgstr "Legg til en detaljert beskrivelse for denne kategorien" -#: core/models.py:272 +#: core/models.py:286 msgid "category description" msgstr "Beskrivelse av kategori" -#: core/models.py:292 +#: core/models.py:306 msgid "tags that help describe or group this category" msgstr "tagger som bidrar til å beskrive eller gruppere denne kategorien" -#: core/models.py:299 core/models.py:375 +#: core/models.py:313 core/models.py:389 msgid "priority" msgstr "Prioritet" -#: core/models.py:318 +#: core/models.py:332 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1511,47 +1511,47 @@ msgstr "" "prioriteringsrekkefølge. Den gjør det mulig å organisere og representere " "merkerelaterte data i applikasjonen." -#: core/models.py:328 +#: core/models.py:342 msgid "name of this brand" msgstr "Navnet på dette merket" -#: core/models.py:329 +#: core/models.py:343 msgid "brand name" msgstr "Merkenavn" -#: core/models.py:336 +#: core/models.py:350 msgid "upload a logo representing this brand" msgstr "Last opp en logo som representerer dette varemerket" -#: core/models.py:338 +#: core/models.py:352 msgid "brand small image" msgstr "Merkevare lite image" -#: core/models.py:344 +#: core/models.py:358 msgid "upload a big logo representing this brand" msgstr "Last opp en stor logo som representerer dette varemerket" -#: core/models.py:346 +#: core/models.py:360 msgid "brand big image" msgstr "Merkevare med stort image" -#: core/models.py:351 +#: core/models.py:365 msgid "add a detailed description of the brand" msgstr "Legg til en detaljert beskrivelse av merket" -#: core/models.py:352 +#: core/models.py:366 msgid "brand description" msgstr "Varemerkebeskrivelse" -#: core/models.py:357 +#: core/models.py:371 msgid "optional categories that this brand is associated with" msgstr "Valgfrie kategorier som dette merket er assosiert med" -#: core/models.py:358 +#: core/models.py:372 msgid "associated categories" msgstr "Kategorier" -#: core/models.py:388 +#: core/models.py:402 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1567,68 +1567,68 @@ msgstr "" "lagerstyringssystemet for å muliggjøre sporing og evaluering av produkter " "som er tilgjengelige fra ulike leverandører." -#: core/models.py:400 +#: core/models.py:414 msgid "the vendor supplying this product stock" msgstr "Leverandøren som leverer dette produktet lagerfører" -#: core/models.py:401 +#: core/models.py:415 msgid "associated vendor" msgstr "Tilknyttet leverandør" -#: core/models.py:405 +#: core/models.py:419 msgid "final price to the customer after markups" msgstr "Sluttpris til kunden etter påslag" -#: core/models.py:406 +#: core/models.py:420 msgid "selling price" msgstr "Salgspris" -#: core/models.py:411 +#: core/models.py:425 msgid "the product associated with this stock entry" msgstr "Produktet som er knyttet til denne lagerposten" -#: core/models.py:412 core/models.py:683 core/models.py:730 -#: core/models.py:1583 +#: core/models.py:426 core/models.py:697 core/models.py:744 +#: core/models.py:1641 msgid "associated product" msgstr "Tilhørende produkt" -#: core/models.py:419 +#: core/models.py:433 msgid "the price paid to the vendor for this product" msgstr "Prisen som er betalt til leverandøren for dette produktet" -#: core/models.py:420 +#: core/models.py:434 msgid "vendor purchase price" msgstr "Leverandørens innkjøpspris" -#: core/models.py:424 +#: core/models.py:438 msgid "available quantity of the product in stock" msgstr "Tilgjengelig mengde av produktet på lager" -#: core/models.py:425 +#: core/models.py:439 msgid "quantity in stock" msgstr "Antall på lager" -#: core/models.py:429 +#: core/models.py:443 msgid "vendor-assigned SKU for identifying the product" msgstr "Leverandørens SKU for identifisering av produktet" -#: core/models.py:430 +#: core/models.py:444 msgid "vendor sku" msgstr "Leverandørens SKU" -#: core/models.py:436 +#: core/models.py:450 msgid "digital file associated with this stock if applicable" msgstr "Digital fil knyttet til denne aksjen, hvis aktuelt" -#: core/models.py:437 +#: core/models.py:451 msgid "digital file" msgstr "Digital fil" -#: core/models.py:446 +#: core/models.py:460 msgid "stock entries" msgstr "Lageroppføringer" -#: core/models.py:451 +#: core/models.py:465 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1649,55 +1649,55 @@ msgstr "" "ytelsen. Den brukes til å definere og manipulere produktdata og tilhørende " "informasjon i en applikasjon." -#: core/models.py:464 +#: core/models.py:478 msgid "category this product belongs to" msgstr "Kategori dette produktet tilhører" -#: core/models.py:473 +#: core/models.py:487 msgid "optionally associate this product with a brand" msgstr "Du kan eventuelt knytte dette produktet til et varemerke" -#: core/models.py:479 +#: core/models.py:493 msgid "tags that help describe or group this product" msgstr "Tagger som bidrar til å beskrive eller gruppere dette produktet" -#: core/models.py:484 +#: core/models.py:498 msgid "indicates whether this product is digitally delivered" msgstr "Angir om dette produktet leveres digitalt" -#: core/models.py:485 +#: core/models.py:499 msgid "is product digital" msgstr "Er produktet digitalt" -#: core/models.py:491 +#: core/models.py:505 msgid "provide a clear identifying name for the product" msgstr "Gi produktet et tydelig navn som identifiserer det" -#: core/models.py:492 +#: core/models.py:506 msgid "product name" msgstr "Produktnavn" -#: core/models.py:497 core/models.py:772 +#: core/models.py:511 core/models.py:786 msgid "add a detailed description of the product" msgstr "Legg til en detaljert beskrivelse av produktet" -#: core/models.py:498 +#: core/models.py:512 msgid "product description" msgstr "Produktbeskrivelse" -#: core/models.py:505 +#: core/models.py:519 msgid "part number for this product" msgstr "Delenummer for dette produktet" -#: core/models.py:506 +#: core/models.py:520 msgid "part number" msgstr "Delenummer" -#: core/models.py:525 +#: core/models.py:539 msgid "stock keeping unit for this product" msgstr "Lagerholdsenhet for dette produktet" -#: core/models.py:599 +#: core/models.py:613 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 " @@ -1713,70 +1713,70 @@ msgstr "" "float, boolsk, matrise og objekt. Dette gir mulighet for dynamisk og " "fleksibel datastrukturering." -#: core/models.py:611 +#: core/models.py:625 msgid "category of this attribute" msgstr "Kategori for dette attributtet" -#: core/models.py:619 +#: core/models.py:633 msgid "group of this attribute" msgstr "Gruppe av dette attributtet" -#: core/models.py:625 +#: core/models.py:639 msgid "string" msgstr "Streng" -#: core/models.py:626 +#: core/models.py:640 msgid "integer" msgstr "Heltall" -#: core/models.py:627 +#: core/models.py:641 msgid "float" msgstr "Flyter" -#: core/models.py:628 +#: core/models.py:642 msgid "boolean" msgstr "Boolsk" -#: core/models.py:629 +#: core/models.py:643 msgid "array" msgstr "Array" -#: core/models.py:630 +#: core/models.py:644 msgid "object" msgstr "Objekt" -#: core/models.py:632 +#: core/models.py:646 msgid "type of the attribute's value" msgstr "Type av attributtets verdi" -#: core/models.py:633 +#: core/models.py:647 msgid "value type" msgstr "Verditype" -#: core/models.py:638 +#: core/models.py:652 msgid "name of this attribute" msgstr "Navn på dette attributtet" -#: core/models.py:639 +#: core/models.py:653 msgid "attribute's name" msgstr "Attributtets navn" -#: core/models.py:645 +#: core/models.py:659 msgid "is filterable" msgstr "er filtrerbar" -#: core/models.py:646 +#: core/models.py:660 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:657 core/models.py:675 +#: core/models.py:671 core/models.py:689 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attributt" -#: core/models.py:663 +#: core/models.py:677 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" @@ -1786,19 +1786,19 @@ msgstr "" "produkt. Den knytter \"attributtet\" til en unik \"verdi\", noe som gir " "bedre organisering og dynamisk representasjon av produktegenskaper." -#: core/models.py:674 +#: core/models.py:688 msgid "attribute of this value" msgstr "Attributt for denne verdien" -#: core/models.py:682 +#: core/models.py:696 msgid "the specific product associated with this attribute's value" msgstr "Det spesifikke produktet som er knyttet til dette attributtets verdi" -#: core/models.py:688 +#: core/models.py:702 msgid "the specific value for this attribute" msgstr "Den spesifikke verdien for dette attributtet" -#: core/models.py:701 +#: core/models.py:715 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -1812,39 +1812,39 @@ msgstr "" "produkter og bestemme visningsrekkefølgen. Den inneholder også en " "tilgjengelighetsfunksjon med alternativ tekst for bildene." -#: core/models.py:712 +#: core/models.py:726 msgid "provide alternative text for the image for accessibility" msgstr "Gi alternativ tekst til bildet for tilgjengelighet" -#: core/models.py:713 +#: core/models.py:727 msgid "image alt text" msgstr "Alt-tekst til bilder" -#: core/models.py:716 +#: core/models.py:730 msgid "upload the image file for this product" msgstr "Last opp bildefilen for dette produktet" -#: core/models.py:717 core/models.py:742 +#: core/models.py:731 core/models.py:756 msgid "product image" msgstr "Produktbilde" -#: core/models.py:723 +#: core/models.py:737 msgid "determines the order in which images are displayed" msgstr "Bestemmer rekkefølgen bildene skal vises i" -#: core/models.py:724 +#: core/models.py:738 msgid "display priority" msgstr "Prioritet på skjermen" -#: core/models.py:729 +#: core/models.py:743 msgid "the product that this image represents" msgstr "Produktet som dette bildet representerer" -#: core/models.py:743 +#: core/models.py:757 msgid "product images" msgstr "Produktbilder" -#: core/models.py:748 +#: core/models.py:762 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1860,39 +1860,39 @@ msgstr "" "produktene. Den integreres med produktkatalogen for å finne de berørte " "varene i kampanjen." -#: core/models.py:760 +#: core/models.py:774 msgid "percentage discount for the selected products" msgstr "Prosentvis rabatt for de valgte produktene" -#: core/models.py:761 +#: core/models.py:775 msgid "discount percentage" msgstr "Rabattprosent" -#: core/models.py:766 +#: core/models.py:780 msgid "provide a unique name for this promotion" msgstr "Oppgi et unikt navn for denne kampanjen" -#: core/models.py:767 +#: core/models.py:781 msgid "promotion name" msgstr "Navn på kampanjen" -#: core/models.py:773 +#: core/models.py:787 msgid "promotion description" msgstr "Beskrivelse av kampanjen" -#: core/models.py:778 +#: core/models.py:792 msgid "select which products are included in this promotion" msgstr "Velg hvilke produkter som er inkludert i denne kampanjen" -#: core/models.py:779 +#: core/models.py:793 msgid "included products" msgstr "Inkluderte produkter" -#: core/models.py:783 +#: core/models.py:797 msgid "promotion" msgstr "Markedsføring" -#: core/models.py:794 +#: core/models.py:808 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1904,23 +1904,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:806 +#: core/models.py:820 msgid "products that the user has marked as wanted" msgstr "Produkter som brukeren har merket som ønsket" -#: core/models.py:814 +#: core/models.py:828 msgid "user who owns this wishlist" msgstr "Bruker som eier denne ønskelisten" -#: core/models.py:815 +#: core/models.py:829 msgid "wishlist owner" msgstr "Ønskelistens eier" -#: core/models.py:823 +#: core/models.py:837 msgid "wishlist" msgstr "Ønskeliste" -#: core/models.py:865 +#: core/models.py:879 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1936,19 +1936,19 @@ msgstr "" "utvider funksjonaliteten fra spesifikke mixins og tilbyr flere tilpassede " "funksjoner." -#: core/models.py:878 +#: core/models.py:892 msgid "documentary" msgstr "Dokumentarfilm" -#: core/models.py:879 +#: core/models.py:893 msgid "documentaries" msgstr "Dokumentarfilmer" -#: core/models.py:889 +#: core/models.py:903 msgid "unresolved" msgstr "Uavklart" -#: core/models.py:894 +#: core/models.py:908 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1969,59 +1969,59 @@ msgstr "" " å knytte en adresse til en bruker, noe som gjør det enklere å tilpasse " "datahåndteringen." -#: core/models.py:909 +#: core/models.py:923 msgid "address line for the customer" msgstr "Adresselinje for kunden" -#: core/models.py:910 +#: core/models.py:924 msgid "address line" msgstr "Adresselinje" -#: core/models.py:912 +#: core/models.py:926 msgid "street" msgstr "Gate" -#: core/models.py:913 +#: core/models.py:927 msgid "district" msgstr "Distrikt" -#: core/models.py:914 +#: core/models.py:928 msgid "city" msgstr "By" -#: core/models.py:915 +#: core/models.py:929 msgid "region" msgstr "Region" -#: core/models.py:916 +#: core/models.py:930 msgid "postal code" msgstr "Postnummer" -#: core/models.py:917 +#: core/models.py:931 msgid "country" msgstr "Land" -#: core/models.py:924 +#: core/models.py:938 msgid "geolocation point: (longitude, latitude)" msgstr "Geolokaliseringspunkt(lengdegrad, breddegrad)" -#: core/models.py:927 +#: core/models.py:941 msgid "full JSON response from geocoder for this address" msgstr "Fullstendig JSON-svar fra geokoderen for denne adressen" -#: core/models.py:932 +#: core/models.py:946 msgid "stored JSON response from the geocoding service" msgstr "Lagret JSON-svar fra geokodingstjenesten" -#: core/models.py:940 +#: core/models.py:954 msgid "address" msgstr "Adresse" -#: core/models.py:941 +#: core/models.py:955 msgid "addresses" msgstr "Adresser" -#: core/models.py:953 +#: core/models.py:967 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2038,73 +2038,73 @@ msgstr "" "kampanjekoden på en bestilling, samtidig som den sikrer at begrensningene er" " oppfylt." -#: core/models.py:967 +#: core/models.py:981 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:968 +#: core/models.py:982 msgid "promo code identifier" msgstr "Kampanjekode-identifikator" -#: core/models.py:975 +#: core/models.py:989 msgid "fixed discount amount applied if percent is not used" msgstr "Fast rabattbeløp som brukes hvis prosent ikke brukes" -#: core/models.py:976 +#: core/models.py:990 msgid "fixed discount amount" msgstr "Fast rabattbeløp" -#: core/models.py:982 +#: core/models.py:996 msgid "percentage discount applied if fixed amount is not used" msgstr "Prosentvis rabatt hvis fast beløp ikke brukes" -#: core/models.py:983 +#: core/models.py:997 msgid "percentage discount" msgstr "Prosentvis rabatt" -#: core/models.py:988 +#: core/models.py:1002 msgid "timestamp when the promocode expires" msgstr "Tidsstempel for når kampanjekoden utløper" -#: core/models.py:989 +#: core/models.py:1003 msgid "end validity time" msgstr "Slutt gyldighetstid" -#: core/models.py:994 +#: core/models.py:1008 msgid "timestamp from which this promocode is valid" msgstr "Tidsstempel som denne kampanjekoden er gyldig fra" -#: core/models.py:995 +#: core/models.py:1009 msgid "start validity time" msgstr "Start gyldighetstid" -#: core/models.py:1000 +#: core/models.py:1014 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:1001 +#: core/models.py:1015 msgid "usage timestamp" msgstr "Tidsstempel for bruk" -#: core/models.py:1006 +#: core/models.py:1020 msgid "user assigned to this promocode if applicable" msgstr "Bruker som er tilordnet denne kampanjekoden, hvis aktuelt" -#: core/models.py:1007 +#: core/models.py:1021 msgid "assigned user" msgstr "Tilordnet bruker" -#: core/models.py:1014 +#: core/models.py:1028 msgid "promo code" msgstr "Kampanjekode" -#: core/models.py:1015 +#: core/models.py:1029 msgid "promo codes" msgstr "Kampanjekoder" -#: core/models.py:1022 +#: core/models.py:1044 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2112,16 +2112,16 @@ msgstr "" "Bare én type rabatt skal defineres (beløp eller prosent), men ikke begge " "eller ingen av delene." -#: core/models.py:1037 +#: core/models.py:1065 msgid "promocode already used" msgstr "Promokoden har allerede blitt brukt" -#: core/models.py:1053 +#: core/models.py:1081 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Ugyldig rabattype for kampanjekode {self.uuid}!" -#: core/models.py:1062 +#: core/models.py:1090 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 " @@ -2138,140 +2138,140 @@ msgstr "" "kan oppdateres. På samme måte støtter funksjonaliteten håndtering av " "produktene i bestillingens livssyklus." -#: core/models.py:1079 +#: core/models.py:1107 msgid "the billing address used for this order" msgstr "Faktureringsadressen som brukes for denne bestillingen" -#: core/models.py:1087 +#: core/models.py:1115 msgid "optional promo code applied to this order" msgstr "Valgfri kampanjekode brukt på denne bestillingen" -#: core/models.py:1088 +#: core/models.py:1116 msgid "applied promo code" msgstr "Anvendt kampanjekode" -#: core/models.py:1096 +#: core/models.py:1124 msgid "the shipping address used for this order" msgstr "Leveringsadressen som brukes for denne bestillingen" -#: core/models.py:1097 +#: core/models.py:1125 msgid "shipping address" msgstr "Leveringsadresse" -#: core/models.py:1103 +#: core/models.py:1131 msgid "current status of the order in its lifecycle" msgstr "Ordrens nåværende status i livssyklusen" -#: core/models.py:1104 +#: core/models.py:1132 msgid "order status" msgstr "Order status" -#: core/models.py:1109 core/models.py:1560 +#: core/models.py:1137 core/models.py:1618 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:1115 +#: core/models.py:1143 msgid "json representation of order attributes for this order" msgstr "JSON-representasjon av ordreattributter for denne ordren" -#: core/models.py:1121 +#: core/models.py:1149 msgid "the user who placed the order" msgstr "Brukeren som har lagt inn bestillingen" -#: core/models.py:1122 +#: core/models.py:1150 msgid "user" msgstr "Bruker" -#: core/models.py:1128 +#: core/models.py:1156 msgid "the timestamp when the order was finalized" msgstr "Tidsstempel for når bestillingen ble fullført" -#: core/models.py:1129 +#: core/models.py:1157 msgid "buy time" msgstr "Kjøp tid" -#: core/models.py:1136 +#: core/models.py:1164 msgid "a human-readable identifier for the order" msgstr "En menneskelig lesbar identifikator for bestillingen" -#: core/models.py:1137 +#: core/models.py:1165 msgid "human readable id" msgstr "ID som kan leses av mennesker" -#: core/models.py:1143 +#: core/models.py:1171 msgid "order" msgstr "Bestilling" -#: core/models.py:1168 +#: core/models.py:1209 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:1202 +#: core/models.py:1249 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:1207 +#: core/models.py:1254 msgid "you cannot add inactive products to order" msgstr "Du kan ikke legge til inaktive produkter i bestillingen" -#: core/models.py:1224 +#: core/models.py:1271 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:1246 core/models.py:1271 core/models.py:1279 +#: core/models.py:1293 core/models.py:1318 core/models.py:1326 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:1267 +#: core/models.py:1314 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} finnes ikke med spørring <{query}>!" -#: core/models.py:1299 +#: core/models.py:1346 msgid "promocode does not exist" msgstr "Promokoden finnes ikke" -#: core/models.py:1305 +#: core/models.py:1352 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:1324 +#: core/models.py:1371 msgid "address does not exist" msgstr "Adressen eksisterer ikke" -#: core/models.py:1345 core/models.py:1414 +#: core/models.py:1392 core/models.py:1461 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:1348 core/models.py:1410 +#: core/models.py:1395 core/models.py:1457 msgid "invalid force value" msgstr "Ugyldig kraftverdi" -#: core/models.py:1354 core/models.py:1417 +#: core/models.py:1401 core/models.py:1464 msgid "you cannot purchase an empty order!" msgstr "Du kan ikke kjøpe en tom ordre!" -#: core/models.py:1373 +#: core/models.py:1420 msgid "you cannot buy an order without a user" msgstr "Du kan ikke kjøpe en ordre uten en bruker!" -#: core/models.py:1387 +#: core/models.py:1434 msgid "a user without a balance cannot buy with balance" msgstr "En bruker uten saldo kan ikke kjøpe med saldo!" -#: core/models.py:1392 +#: core/models.py:1439 msgid "insufficient funds to complete the order" msgstr "Utilstrekkelige midler til å fullføre bestillingen" -#: core/models.py:1426 +#: core/models.py:1473 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2279,14 +2279,14 @@ msgstr "" "du kan ikke kjøpe uten registrering, vennligst oppgi følgende informasjon: " "kundenavn, kundens e-postadresse, kundens telefonnummer" -#: core/models.py:1435 +#: core/models.py:1482 #, 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:1533 +#: core/models.py:1591 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2309,109 +2309,109 @@ msgstr "" "Modellen integreres med Order- og Product-modellene og lagrer en referanse " "til disse." -#: core/models.py:1548 +#: core/models.py:1606 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:1549 +#: core/models.py:1607 msgid "purchase price at order time" msgstr "Innkjøpspris på bestillingstidspunktet" -#: core/models.py:1554 +#: core/models.py:1612 msgid "internal comments for admins about this ordered product" msgstr "Interne kommentarer for administratorer om dette bestilte produktet" -#: core/models.py:1555 +#: core/models.py:1613 msgid "internal comments" msgstr "Interne kommentarer" -#: core/models.py:1561 +#: core/models.py:1619 msgid "user notifications" msgstr "Brukervarsler" -#: core/models.py:1566 +#: core/models.py:1624 msgid "json representation of this item's attributes" msgstr "JSON-representasjon av dette elementets attributter" -#: core/models.py:1567 +#: core/models.py:1625 msgid "ordered product attributes" msgstr "Bestilte produktegenskaper" -#: core/models.py:1572 +#: core/models.py:1630 msgid "reference to the parent order that contains this product" msgstr "" "Referanse til den overordnede bestillingen som inneholder dette produktet" -#: core/models.py:1573 +#: core/models.py:1631 msgid "parent order" msgstr "Overordnet ordre" -#: core/models.py:1582 +#: core/models.py:1640 msgid "the specific product associated with this order line" msgstr "Det spesifikke produktet som er knyttet til denne ordrelinjen" -#: core/models.py:1589 +#: core/models.py:1647 msgid "quantity of this specific product in the order" msgstr "Antall av dette spesifikke produktet i bestillingen" -#: core/models.py:1590 +#: core/models.py:1648 msgid "product quantity" msgstr "Produktmengde" -#: core/models.py:1597 +#: core/models.py:1655 msgid "current status of this product in the order" msgstr "Nåværende status for dette produktet i bestillingen" -#: core/models.py:1598 +#: core/models.py:1656 msgid "product line status" msgstr "Status for produktlinjen" -#: core/models.py:1661 +#: core/models.py:1719 msgid "order product must have an order" msgstr "Orderproduct må ha en tilknyttet ordre!" -#: core/models.py:1663 +#: core/models.py:1721 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Feil handling angitt for tilbakemelding: {action}!" -#: core/models.py:1677 +#: core/models.py:1735 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:1683 +#: core/models.py:1741 msgid "name" msgstr "Navn" -#: core/models.py:1684 +#: core/models.py:1742 msgid "URL of the integration" msgstr "URL-adressen til integrasjonen" -#: core/models.py:1685 +#: core/models.py:1743 msgid "authentication credentials" msgstr "Legitimasjon for autentisering" -#: core/models.py:1699 +#: core/models.py:1765 msgid "you can only have one default CRM provider" msgstr "Du kan bare ha én standard CRM-leverandør" -#: core/models.py:1703 +#: core/models.py:1775 msgid "CRM" msgstr "CRM" -#: core/models.py:1704 +#: core/models.py:1776 msgid "CRMs" msgstr "CRM" -#: core/models.py:1716 +#: core/models.py:1788 msgid "order CRM link" msgstr "Ordre CRM-kobling" -#: core/models.py:1717 +#: core/models.py:1789 msgid "orders CRM links" msgstr "CRM-koblinger for bestillinger" -#: core/models.py:1722 +#: core/models.py:1794 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2428,21 +2428,15 @@ msgstr "" "for å generere en URL for nedlasting av ressursen når den tilknyttede " "bestillingen har status som fullført." -#: core/models.py:1736 +#: core/models.py:1808 msgid "download" msgstr "Last ned" -#: core/models.py:1737 +#: core/models.py:1809 msgid "downloads" msgstr "Nedlastinger" -#: core/models.py:1745 -msgid "you can not download a digital asset for a non-finished order" -msgstr "" -"Du kan ikke laste ned en digital ressurs for en bestilling som ikke er " -"fullført" - -#: core/models.py:1754 +#: core/models.py:1823 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2457,30 +2451,30 @@ msgstr "" "og en brukertildelt vurdering. Klassen bruker databasefelt for å modellere " "og administrere tilbakemeldingsdata på en effektiv måte." -#: core/models.py:1766 +#: core/models.py:1835 msgid "user-provided comments about their experience with the product" msgstr "Brukerkommentarer om deres erfaringer med produktet" -#: core/models.py:1767 +#: core/models.py:1836 msgid "feedback comments" msgstr "Tilbakemeldinger og kommentarer" -#: core/models.py:1774 +#: core/models.py:1843 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:1775 +#: core/models.py:1844 msgid "related order product" msgstr "Relatert bestillingsprodukt" -#: core/models.py:1780 +#: core/models.py:1849 msgid "user-assigned rating for the product" msgstr "Brukertildelt vurdering for produktet" -#: core/models.py:1781 +#: core/models.py:1850 msgid "product rating" msgstr "Produktvurdering" @@ -2686,11 +2680,11 @@ msgstr "" "Alle rettigheter\n" " forbeholdt" -#: core/utils/caching.py:41 +#: core/utils/caching.py:48 msgid "both data and timeout are required" msgstr "Både data og tidsavbrudd er påkrevd" -#: core/utils/caching.py:43 +#: core/utils/caching.py:50 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "Ugyldig tidsavbruddsverdi, den må være mellom 0 og 216000 sekunder" @@ -2722,25 +2716,342 @@ msgstr "Du har ikke tillatelse til å utføre denne handlingen." msgid "NOMINATIM_URL must be configured." msgstr "Parameteren NOMINATIM_URL må være konfigurert!" -#: core/validators.py:16 +#: core/validators.py:14 #, 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/validators.py:22 -msgid "invalid phone number format" -msgstr "Ugyldig telefonnummerformat" +#: core/views.py:72 +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 "" +"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:489 +#: core/views.py:87 +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 "" +"Håndterer det detaljerte visningssvaret for et områdekart. Denne funksjonen " +"behandler forespørselen, henter det aktuelle detaljsvaret for områdekartet " +"og angir overskriften Content-Type for XML." + +#: core/views.py:116 +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 +msgid "Returns the parameters of the website as a JSON object." +msgstr "Returnerer nettstedets parametere som et JSON-objekt." + +#: core/views.py:167 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +msgstr "" +"Håndterer cache-operasjoner som lesing og innstilling av cachedata med en " +"spesifisert nøkkel og tidsavbrudd." + +#: core/views.py:194 +msgid "Handles `contact us` form submissions." +msgstr "Håndterer innsendinger av `kontakt oss`-skjemaer." + +#: core/views.py:215 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "" +"Håndterer forespørsler om behandling og validering av URL-er fra innkommende" +" POST-forespørsler." + +#: core/views.py:255 +msgid "Handles global search queries." +msgstr "Håndterer globale søk." + +#: core/views.py:270 +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:312 msgid "you can only download the digital asset once" msgstr "Du kan bare laste ned den digitale ressursen én gang" -#: core/views.py:547 +#: core/views.py:315 +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:353 +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." +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:365 msgid "favicon not found" msgstr "favicon ble ikke funnet" -#: core/viewsets.py:1357 +#: core/views.py:370 +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." +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:382 +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 "" +"Omdirigerer forespørselen til admin-indekssiden. Funksjonen håndterer " +"innkommende HTTP-forespørsler og omdirigerer dem til Djangos indeksside for " +"administrasjonsgrensesnittet. Den bruker Djangos `redirect`-funksjon for å " +"håndtere HTTP-omdirigeringen." + +#: core/viewsets.py:128 +msgid "" +"Defines a viewset for managing Evibes-related operations. The EvibesViewSet " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" +"Definerer et visningssett for håndtering av Evibes-relaterte operasjoner. " +"EvibesViewSet-klassen arver fra ModelViewSet og tilbyr funksjonalitet for " +"håndtering av handlinger og operasjoner på Evibes-enheter. Den inkluderer " +"støtte for dynamiske serialiseringsklasser basert på den aktuelle " +"handlingen, tilpassbare tillatelser og gjengivelsesformater." + +#: core/viewsets.py:147 +msgid "" +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." +msgstr "" +"Representerer et visningssett for håndtering av AttributeGroup-objekter. " +"Håndterer operasjoner knyttet til AttributeGroup, inkludert filtrering, " +"serialisering og henting av data. Denne klassen er en del av applikasjonens " +"API-lag og gir en standardisert måte å behandle forespørsler og svar for " +"AttributeGroup-data på." + +#: core/viewsets.py:166 +msgid "" +"Handles operations related to Attribute objects within the application. " +"Provides a set of API endpoints to interact with Attribute data. This class " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"Håndterer operasjoner knyttet til Attribute-objekter i applikasjonen. Tilbyr" +" et sett med API-endepunkter for interaksjon med attributtdata. Denne " +"klassen håndterer spørring, filtrering og serialisering av Attribute-" +"objekter, noe som gir dynamisk kontroll over dataene som returneres, for " +"eksempel filtrering etter bestemte felt eller henting av detaljert versus " +"forenklet informasjon avhengig av forespørselen." + +#: core/viewsets.py:185 +msgid "" +"A viewset for managing AttributeValue objects. This viewset provides " +"functionality for listing, retrieving, creating, updating, and deleting " +"AttributeValue objects. It integrates with Django REST Framework's viewset " +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." +msgstr "" +"Et visningssett for administrasjon av AttributeValue-objekter. Dette " +"visningssettet inneholder funksjonalitet for å liste opp, hente, opprette, " +"oppdatere og slette AttributeValue-objekter. Det integreres med Django REST " +"Framework's viewset-mekanismer og bruker passende serialisatorer for ulike " +"handlinger. Filtreringsmuligheter tilbys gjennom DjangoFilterBackend." + +#: core/viewsets.py:204 +msgid "" +"Manages views for Category-related operations. The CategoryViewSet class is " +"responsible for handling operations related to the Category model in the " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" +"Administrerer visninger for Category-relaterte operasjoner. CategoryViewSet-" +"klassen er ansvarlig for å håndtere operasjoner knyttet til Category-" +"modellen i systemet. Den støtter henting, filtrering og serialisering av " +"kategoridata. Visningssettet håndhever også tillatelser for å sikre at bare " +"autoriserte brukere har tilgang til bestemte data." + +#: core/viewsets.py:315 +msgid "" +"Represents a viewset for managing Brand instances. This class provides " +"functionality for querying, filtering, and serializing Brand objects. It " +"uses Django's ViewSet framework to simplify the implementation of API " +"endpoints for Brand objects." +msgstr "" +"Representerer et visningssett for håndtering av Brand-instanser. Denne " +"klassen tilbyr funksjonalitet for spørring, filtrering og serialisering av " +"Brand-objekter. Den bruker Djangos ViewSet-rammeverk for å forenkle " +"implementeringen av API-sluttpunkter for Brand-objekter." + +#: core/viewsets.py:427 +msgid "" +"Manages operations related to the `Product` model in the system. This class " +"provides a viewset for managing products, including their filtering, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" +"Håndterer operasjoner knyttet til `Product`-modellen i systemet. Denne " +"klassen gir et visningssett for håndtering av produkter, inkludert " +"filtrering, serialisering og operasjoner på spesifikke forekomster. Den " +"utvides fra `EvibesViewSet` for å bruke felles funksjonalitet og integreres " +"med Django REST-rammeverket for RESTful API-operasjoner. Inkluderer metoder " +"for å hente produktdetaljer, tildele tillatelser og få tilgang til relaterte" +" tilbakemeldinger om et produkt." + +#: core/viewsets.py:547 +msgid "" +"Represents a viewset for managing Vendor objects. This viewset allows " +"fetching, filtering, and serializing Vendor data. It defines the queryset, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" +"Representerer et visningssett for håndtering av Vendor-objekter. Dette " +"visningssettet gjør det mulig å hente, filtrere og serialisere Vendor-data. " +"Den definerer spørresettet, filterkonfigurasjonene og serialiseringsklassene" +" som brukes til å håndtere ulike handlinger. Formålet med denne klassen er å" +" gi strømlinjeformet tilgang til Vendor-relaterte ressurser gjennom Django " +"REST-rammeverket." + +#: core/viewsets.py:567 +msgid "" +"Representation of a view set handling Feedback objects. This class manages " +"operations related to Feedback objects, including listing, filtering, and " +"retrieving details. The purpose of this view set is to provide different " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"use of Django's filtering system for querying data." +msgstr "" +"Representasjon av et visningssett som håndterer Feedback-objekter. Denne " +"klassen håndterer operasjoner knyttet til Feedback-objekter, inkludert " +"opplisting, filtrering og henting av detaljer. Formålet med dette " +"visningssettet er å tilby forskjellige serialisatorer for ulike handlinger " +"og implementere rettighetsbasert håndtering av tilgjengelige " +"tilbakemeldingsobjekter. Den utvider basisklassen `EvibesViewSet` og bruker " +"Djangos filtreringssystem for å spørre etter data." + +#: core/viewsets.py:593 +msgid "" +"ViewSet for managing orders and related operations. This class provides " +"functionality to retrieve, modify, and manage order objects. It includes " +"various endpoints for handling order operations such as adding or removing " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " +"enforces permissions accordingly while interacting with order data." +msgstr "" +"ViewSet for håndtering av bestillinger og relaterte operasjoner. Denne " +"klassen inneholder funksjonalitet for å hente, endre og administrere " +"ordreobjekter. Den inneholder ulike endepunkter for håndtering av " +"ordreoperasjoner, for eksempel å legge til eller fjerne produkter, utføre " +"kjøp for både registrerte og uregistrerte brukere og hente den aktuelle " +"autentiserte brukerens ventende bestillinger. ViewSet bruker flere " +"serialisatorer basert på den spesifikke handlingen som utføres, og håndhever" +" tillatelser i samsvar med dette under samhandling med ordredata." + +#: core/viewsets.py:782 +msgid "" +"Provides a viewset for managing OrderProduct entities. This viewset enables " +"CRUD operations and custom actions specific to the OrderProduct model. It " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " +"feedback on OrderProduct instances" +msgstr "" +"Tilbyr et visningssett for håndtering av OrderProduct-enheter. Dette " +"visningssettet muliggjør CRUD-operasjoner og egendefinerte handlinger som er" +" spesifikke for OrderProduct-modellen. Det inkluderer filtrering, kontroll " +"av tillatelser og bytte av serializer basert på den forespurte handlingen. I" +" tillegg inneholder det en detaljert handling for håndtering av " +"tilbakemeldinger på OrderProduct-instanser" + +#: core/viewsets.py:833 +msgid "Manages operations related to Product images in the application. " +msgstr "Administrerer operasjoner knyttet til produktbilder i applikasjonen." + +#: core/viewsets.py:845 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +msgstr "" +"Administrerer henting og håndtering av PromoCode-instanser gjennom ulike " +"API-handlinger." + +#: core/viewsets.py:866 +msgid "Represents a view set for managing promotions. " +msgstr "Representerer et visningssett for håndtering av kampanjer." + +#: core/viewsets.py:878 +msgid "Handles operations related to Stock data in the system." +msgstr "Håndterer operasjoner knyttet til lagerdata i systemet." + +#: core/viewsets.py:892 +msgid "" +"ViewSet for managing Wishlist operations. The WishlistViewSet provides " +"endpoints for interacting with a user's wish list, allowing for the " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " +"actions for wishlist products. Permission checks are integrated to ensure " +"that users can only manage their own wishlists unless explicit permissions " +"are granted." +msgstr "" +"ViewSet for administrasjon av ønskelisteoperasjoner. WishlistViewSet " +"inneholder endepunkter for interaksjon med en brukers ønskeliste, noe som " +"gjør det mulig å hente, endre og tilpasse produkter i ønskelisten. Dette " +"ViewSetet legger til rette for funksjonalitet som å legge til, fjerne og " +"utføre massehandlinger for ønskelisteprodukter. Tillatelseskontroller er " +"integrert for å sikre at brukere bare kan administrere sine egne ønskelister" +" med mindre eksplisitte tillatelser er gitt." + +#: core/viewsets.py:1007 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" +"Denne klassen tilbyr visningssettfunksjonalitet for håndtering av " +"`Address`-objekter. AddressViewSet-klassen muliggjør CRUD-operasjoner, " +"filtrering og egendefinerte handlinger knyttet til adresseenheter. Den " +"inkluderer spesialisert atferd for ulike HTTP-metoder, overstyring av " +"serializer og håndtering av tillatelser basert på forespørselskonteksten." + +#: core/viewsets.py:1074 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Feil i geokoding: {e}" + +#: core/viewsets.py:1081 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" +"Håndterer operasjoner knyttet til produkttagger i applikasjonen. Denne " +"klassen tilbyr funksjonalitet for henting, filtrering og serialisering av " +"Product Tag-objekter. Den støtter fleksibel filtrering på spesifikke " +"attributter ved hjelp av den spesifiserte filterbackenden, og bruker " +"dynamisk forskjellige serialisatorer basert på handlingen som utføres." diff --git a/core/locale/pl_PL/LC_MESSAGES/django.mo b/core/locale/pl_PL/LC_MESSAGES/django.mo index e8d4c515b12585834900cf27fe745ec6ca1d75f2..ba97b8f44a842ddc6e1001247c2bfe7b8108f393 100644 GIT binary patch delta 26786 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 Ysg{;XPvx3d{_Fdl?j6ygtY^Fb1LC2F4gdfE delta 12284 zcmZA72V7Ux|HtwB6%avC5O9yLxCbIC;7G;2&7HXs5J?3?%u)HZa+NE^QLb{O=0L;L z(kwI0T)&)|nR}#`nj{;&7<9DDTm-^b&_^Yc0Pe(yc^oOACNsp~WSb}aDqoGs)# z*I}!g$8k#H&``&@M7|?Zt&Y>WhU0`|8_b9OFc4F*C}v_YoQi(95`Azj`eF`_!_BDA z)sA+Y5Nw1Ij^lBjCz(S-3g*Q>Q3twenhOSDS?UO^gz;D$`{So{bS&1Ru36iALgyun zr5pRbp=uSFfVNAsU9Ea-26fA<-s5@MXI(`$r;BuV(sN*B! zjMY&cjzf(=Ph5z7Q8)M)!_bL$oFK06gp-70S=126VRcU27<+SvL+d)uY1;SIcbt*5 zFK@s|V6ldd(-xaF;vzV$F*(OyNpPI^sVg;O*l|~L$2q{~Uunq{Q#WnpIQOuBYsS9~ zAL!cFapuynxV_`7!P*@iXE^OYKkqnOsXKOYoQasXn}&=FbvJXo1a(KturjVe-SJV| z{)4U0VlwTQurRjnVUFwHgYnnUCDWjxPRA%5gH>=9R>UJ1gO8BucB;N$MyfYzO(bJE zoQC?`My!sf?SB8Brac-NMCV1+8k*CS@h?S^LxVhI54?%7)DbV5scDBrs0Sc}<%~vu z+>M3t00!Yj)Ol{BZY;PLYXplRgX&};v*heVX2tp2LsE#OS#QUwhCNV=<4r7p^HBR& z;;Xm~D`1^IW-<1{VCn%Ff$6B@C!nTkKB^;Yups85I=mZ0&~utZcXrbr;M3Ra2(y+) zO-(Eo#{^Udd!rjOuqwWbwQxIXs&3hKcRzFCcBm2SjggpyJWU>Fl09G=s>h2^7u;a$ z&rpl(0P0SUqE2ugHRL}1%~}XS-Dxq*kL6Gui?;iFq0XCx8i{moyNBnTM33KO)Q~Si z4dGhU1$UzE{2=Or*KGTJbW`UUU^-9^wfd{0?lcBZ9);>iC)5-rp{8P367%1b zWHb%6a64*fZlNB(C#Va=@b=J!TcF;MJ7=PViHyZS!8H8GF(^2hnP#65j);XvX?!qc~0ORoiuEeN8=J;c%IX{DS@Gkmc zrBpM*QP_ZbkcUJ)U55U69Q7(agSsQX!KP!CP#5ZmdR!-=hI9#PZEQj}?nN!uYp5H@ zljb-bFdSdOfjA6*M0Lp1>Ls)4J77y1`d|Pq$Go^6b)wCvDcOsa@hPgq6^5AoQK$|! z#%eeUqj5QE3XfqMyoMz(W+=Y{==twJq6_TdL9KS@Wxna49BL$A$11oPb=+C>Xb}Wwnhu1aE*OagF&1^97U;&V zSRJ!a9bSq-xDiX@7pOZwjq1~$qf4y)LY0xTOfI49g=EohV z6YoRK?G@A_bY+>v7jJEhVYIhGEyCUyh1pmKciHwousL;&k!FNOjAZ;f(=d+)UGNtS z$NQ*}3E-L092P{a_M)f@xltoi2Q?B+ZF^_b4Wyv%Jk#!f3w8e4cK;H)f31f^7ubP% zh3>IC&Y_<3JE%pLZe|o7}HT}WFm&*64dbo>3%^$OIS??kPgd#Diz zd5vSS1a`$y*qrs}93W|<170_)v=_RmC!^NFYSf9pKuyID7=u3JjIpQ@NVU$!N;)3v z;}z6n=jK{Et}WI=t-Tn+Sm#B z1K%{?c3rI5*pU6lZC&Us&aI*9N>UD|poVlEYIPsQNIZ{P%{~+Oe!y_l;&~bMG>k_* zEpt$xTY%+oHEK!^Vl*DZrsy-#w6~nd`0IcUG-!^xp-$Kzb-@v+#WVr6n5Ls%93P-o zdk$(u_M)Em2e=>0O>!Li?A$_4MdoBP5(`kr{e*fU1x#VcE0V-bF{`~VYG@~+M&@g* zfDch~SL$u^ozNO};z8ILXJ9NIMxEIA9mgq;G58$zz(CAKKU{)(Y*%gkGc$&F^1guIu2zA4=P$TKtM&e7d z4>dH0un;~$b)>*_b0<|%AABAg;VY;+`4rWG?U)z$qB?R2^W#<2<9ru&T)r9RM#9ja z>pRUzc%qzkSOdSqviJy_WAT}04fMwX)PqrraujN z3F<;8P(z<*j#)ENsHy3WRk^<7At{9)W0H%hK&^@D^UM&p#C+84u?Tj@GC0icpN>A% z+1B|;pPhxMk%^jbrZgV4nA_qS9FCqKlH%`~Z?{U;XpE*k9=l^IYDmApCwce_1`ect zu+WTH&qa=tMm-(l@gdg2=*4C&48(%eucA6I6*aP(7Bl`@WT$9QNA9B*jcbW{)dr&$ zRXx-YCg4FvXb9?rbw4y~qBYi}egU;8r{F4_f%<&hQnRKSVlZ`oER4gJGXAVWX95jj zE`ABcsodd*%XliNtFNRDV?N@q7PynM_CtThZzc}460+dd6Lsb^srdX|%DuC`(f-ayTL$#2YG zI@+W5&qpn${a7B4qvrB4R>CrS%oMf4($tw)7H45I%(eAHYq7oFH?GHNKoZ9R$=DPZ zqCR-m>U_)4Q%9m74#7hBGU|OW0gGZb=EZf`2XnCthU_yPNW$l-SD`-l5NqrC&-9r8h*~^p7=YtZ9eM}#rdy2un2S2!cGU3)ZG8!K+ z^_{>2W{ygsdR7bbVG}HZZLt&%#2PprD`F1T!;`4TGvuII6YWuR`v$6Gb5U=`)u<6X ziR!=^^aPUJCCQI}*&P9g%zjI&N%?HY&>T0MvZ-Bwr6$@Y@R>9$@xn5vhiayk=t5dhP^%yKjJq@)+7GX);YTJ)nFQZ1_K1So; zSPg4@Z>FLb)}Wr^A<^7zMXmmOs5y%}VlLDMH3Bc%Iu%2yN1=xPZPd^&x9wkI1?nTV zeux^8fTLzaBCrE>B&tK6;daL&)Vq5P7QhRrDY%0gs(i;x#|mO7btLM}>Y!G8GU^6~ z+Wk4`rrw3^@FJGM8pqA!+7V;8zLQE)h#l{v9+P#p-fcZ;y^eL*{}gqhm=pZggjuLN ztZ>q-`WS3X-2&CIiI|AfF&S@TE$sG#_A~#JN%T0)#7ejYHH2reIr^S5CvJn`)O|4o zGtrH2q1M6*)aSm$A$SGHVdo$DT_3+kJ$@}uo2hG$9k{+Th(sscj2h}as0$rL4eEQr@ougHh!#^8(Q1T|16ehxKNJ+Tq?M=h!)n2JYGBT(;>aRh4r zdeq3B$0GQvheSiIUs3B{CI?+f}hjLI)%O0$Zr%-q9x?)aT8Vgfb#TaaY zrEmo5j%Q(G{0Oz?JXcBdfrqFI7r1KfxD=M5ZiG#+AFAgcVqRQ_IzcYBz;CcT23|9N zri(^(JPDiQVszt0OhKPtyo=D|q>+@S;T817xu{p?0`$ifsJUB*>fq<7srn8zgg@K% z2dEDDUN^@@pw>ot)aT=D-5m2#_rRih{`-??Xh)+uG6UmrJ?es2toKnP;&a2Sk#bm> zx;AP}^ueMy8Ut|_>OzZ99axDvU#@Nc8Y^;r=KzT=d>6}M=uPt*Pb@}Kk3-GzQXGIg zu>zL))$DJ98mYmkkr|F!I}@-KZpOa&6q{nN-w0fc9?j(=5_RAo)QL*pGS78IYiq1X z`%AW-WzDsoK#kZ#)EbDsZPrRR)P)9MC)|!*G3btYEC<|S{Oi!LfrgrR37cW~@1{dN zQE$Fc*igq|0{&{-qwbnI8Fk!BY>8)VUGAP~?}b%ppM{#T?brn`-(&pSk;LEU3jyCk zb>I|s$C3|Bor%v;Z$TY@50kL*ALf_M<=C6rd1zkAeXJX-&LeYN7u1yIpr-JsheSPk zgaxteV^haq0qR~j8q+WsFQV4M9n|r`f0|WZ3N=O1=!ZS94)#HHY!>?9Z>TB%9d(@N z5lJPIzfmWy_{6N}oMBkDqFSQy8krs7?!kB4y`20Y~(5w~D8R{6`kXkJ7O{rgxA zccbq7Hdf{OPQ>5lFBu6K%Z@Rq19EKp3DgM+{A1edqNb=HYOa@|I&vLrV0p*oU1VKR z9bbh3xYgFX&`o^=tLgc_OHzi0(k_?xYq1gPPTOH49BAvM*qeGAYHGssxV+DOIedY- zG3w6eqdNR8szbk{M%e9R&f6OEQ}@RNuI~&X(NM3$>iDhoKGvcx%fCbuup8=5=AzcZ z2N;O!QB$`KL+}Ka!mFr``ue%NBNc`^z8AiXDd?$3@&k#U+t9o&@7HA<>Vp%o1ZHDA z=3p_rX7{`NUEUW;2wyXY0$>D*4O^q@xz)Jgkcc^0_?Tp7{otA#8^|*|8iK z;Zs|`AL#O~?z^b{#qw+JSa8@2m!NLsF=_;B2f4i8egjZbG8^@N`5N`Pd#DjB6YOy@ z`>bsJVAH|cTG?8|*opkMx7Dm@rTVb8EktGZm-SZES1E)hcB*|sN=KP1Kx zy>-B|Z7Iod;w{^-n*$D!^Rn{JfB8K85=oo3EF6Ge68fJ|cA^%mw(ItoPq4qu)qa)y zUE;}q+Wx)%Fb>eS)obi*O|bTyNG^C)pJbard{1??>Bxac4F3$^~AA8q4_Q1T0ecm5aCkVs6U;T7U0c@Zqa zhhHbJNUm)XQGz^_c5NSef9eg%+tapXlK)9mq|UYbc@KGC>9+L#?Qkk>|M33twq2so zpU?Cx2H6womAaOAkI2?Ow%Wu-o3|#fPM%7XB8KPyyLGU~sQi`~N?n}u>TTMVJViU$ z_Urol|8sB!@^B)9oxkFz#0g?P@oc;GpFEhn6epf(cYZ`Y&gK`aeQ8S|w7oUT_gBVNh#@}!?hHz7R z@c(bFJdFQWw7yTwCRXr)VjR4kd^Ayjye@5bh=$aK?C3P1ZcZJ8VK|t0jrf`vLR&@D zpL45WBOFDXCA5VTo5(-&){OrTBxO1AX3QYgcn{-`1>OTp(UrUm#}u<|$uy^s@5XKT zIiYXHpK&_jXFlfqij%0z*!nASeGxq-z9IjE?;j_KI7Yl-5Bi<_2zftjgGt0Za&2i= z<(Kq>Z3J!IiQ0sIKhTy-9!Q64nDXDB&1f%5bRovj>iN#@dPGA<;x1912%&vFt|o?) zzmM7);82q~7s=-k@7VgTb)0#4_SG2fa?T zAf9axpC$kC8v9RD&mjIHs!^{c-n5@9K?k%&QkTbbwtWr$&F>%1o8I00p~xCwKky>; zL=O55%hBdX9HMSVU4>k~N==~NMf4<=6L|=2!Nf5ll_+e__a}Kt_SZ*keTlBR|3a$l z_5s%5phvdO&xcFcT>p!15%T8jA4v=&b`Y7g!TU3Z_B*!DM;=F9ryfh}C0?YyPiX6mJBg#@ zmALS;?JP;QE#mF5>8dsV<7sG#H;5I)TzkL){G8ek`{7063Gr+@Xp=tn_^S9eZ67~7 z0D}nq2dSTJ+hmR@MEKKIlr~ROe$=C(n?0Znd1FFb6tR`KPaLQ1N5YqU7QRhS=cL*e5vPc~v}ya=TAh3q5n+$p>f&J-Zg={#qXn^z(Ehx{zgy*$(TPb}RotC2 zGm=LpWx2a|Z__-tL#<7&+{Uq0eY5W*EXcjotcxpmOv^&9e4R%ore~#Pjmb@KS2irS z;lQZ;*}o0jk$od0Cil{auOh;R56(zWai@1iVdrzE>GGLus>bAMaE z(l6Kl(;IYXTRXq(%X^;Y4)|`DD|g<(_AdW6Lo@a){AO})m7~YQv)diZpBr?uVNmwB z55Ld;^KnA%)W0tjEjq?_MBPfs9O=$V8JaREBYou7ennhs+*{k#bxjRy)-f%`JuG9- zj`T$L@Qi_(iQi0ik4+qrF>s_iY0RL^j8Q468Sdnv^e-)C\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:11 +#: core/abstract.py:12 msgid "unique id" msgstr "Unikalny identyfikator" -#: core/abstract.py:12 +#: 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:19 +#: core/abstract.py:20 msgid "is active" msgstr "Jest aktywny" -#: core/abstract.py:20 +#: core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" @@ -35,19 +35,19 @@ msgstr "" "Jeśli ustawione na false, obiekt ten nie może być widoczny dla użytkowników " "bez wymaganych uprawnień." -#: core/abstract.py:22 core/choices.py:18 +#: core/abstract.py:23 core/choices.py:18 msgid "created" msgstr "Utworzony" -#: core/abstract.py:22 +#: 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:23 +#: core/abstract.py:24 msgid "modified" msgstr "Zmodyfikowany" -#: core/abstract.py:23 +#: core/abstract.py:24 msgid "when the object was last modified" msgstr "Kiedy obiekt był ostatnio edytowany" @@ -90,11 +90,11 @@ msgid "selected items have been deactivated." msgstr "Wybrane elementy zostały dezaktywowane!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 +#: core/graphene/object_types.py:616 core/models.py:701 core/models.py:709 msgid "attribute value" msgstr "Wartość atrybutu" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 msgid "attribute values" msgstr "Wartości atrybutów" @@ -106,7 +106,7 @@ msgstr "Obraz" msgid "images" msgstr "Obrazy" -#: core/admin.py:155 core/models.py:445 +#: core/admin.py:155 core/models.py:459 msgid "stock" msgstr "Stan magazynowy" @@ -114,11 +114,11 @@ msgstr "Stan magazynowy" msgid "stocks" msgstr "Akcje" -#: core/admin.py:166 core/models.py:1609 +#: core/admin.py:166 core/models.py:1667 msgid "order product" msgstr "Zamów produkt" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 msgid "order products" msgstr "Zamawianie produktów" @@ -746,7 +746,7 @@ msgstr "usunąć relację zamówienie-produkt" msgid "add or remove feedback on an order–product relation" msgstr "dodawanie lub usuwanie opinii na temat relacji zamówienie-produkt" -#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 msgid "no search term provided." msgstr "Nie podano wyszukiwanego hasła." @@ -799,7 +799,7 @@ msgid "Quantity" msgstr "Ilość" #: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:287 core/models.py:369 core/models.py:522 +#: core/models.py:301 core/models.py:383 core/models.py:536 msgid "Slug" msgstr "Ślimak" @@ -815,7 +815,7 @@ msgstr "Uwzględnienie podkategorii" msgid "Include personal ordered" msgstr "Obejmuje produkty zamawiane osobiście" -#: core/filters.py:85 core/models.py:526 +#: core/filters.py:85 core/models.py:540 msgid "SKU" msgstr "SKU" @@ -888,7 +888,7 @@ msgstr "Dane w pamięci podręcznej" msgid "camelized JSON data from the requested URL" msgstr "Kamelizowane dane JSON z żądanego adresu URL" -#: core/graphene/mutations.py:65 core/views.py:360 +#: core/graphene/mutations.py:65 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "Dozwolone są tylko adresy URL zaczynające się od http(s)://" @@ -919,7 +919,7 @@ 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:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:839 +#: core/graphene/mutations.py:527 core/viewsets.py:679 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Nieprawidłowy typ pochodzi z metody order.buy(): {type(instance)!s}" @@ -995,9 +995,9 @@ msgstr "Orderproduct {order_product_uuid} nie został znaleziony!" msgid "original address string provided by the user" msgstr "Oryginalny ciąg adresu podany przez użytkownika" -#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 -#: core/models.py:1234 core/models.py:1263 core/models.py:1288 -#: core/viewsets.py:842 +#: core/graphene/mutations.py:656 core/models.py:849 core/models.py:862 +#: core/models.py:1281 core/models.py:1310 core/models.py:1335 +#: core/viewsets.py:682 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} nie istnieje: {uuid}!" @@ -1011,8 +1011,8 @@ msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - działa jak urok" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 -#: core/models.py:1686 +#: core/graphene/object_types.py:444 core/models.py:672 core/models.py:1144 +#: core/models.py:1744 msgid "attributes" msgstr "Atrybuty" @@ -1025,11 +1025,11 @@ 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:224 core/models.py:312 core/models.py:612 +#: core/graphene/object_types.py:224 core/models.py:326 core/models.py:626 msgid "categories" msgstr "Kategorie" -#: core/graphene/object_types.py:124 core/models.py:383 +#: core/graphene/object_types.py:124 core/models.py:397 msgid "brands" msgstr "Marki" @@ -1038,7 +1038,7 @@ msgid "category image url" msgstr "Kategorie" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:249 +#: core/models.py:263 msgid "markup percentage" msgstr "Procentowy narzut" @@ -1061,7 +1061,7 @@ msgstr "Tagi dla tej kategorii" msgid "products in this category" msgstr "Produkty w tej kategorii" -#: core/graphene/object_types.py:351 core/models.py:155 +#: core/graphene/object_types.py:351 core/models.py:169 msgid "vendors" msgstr "Sprzedawcy" @@ -1086,7 +1086,7 @@ msgid "represents feedback from a user." msgstr "Reprezentuje informacje zwrotne od użytkownika." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1110 +#: core/models.py:1138 msgid "notifications" msgstr "Powiadomienia" @@ -1094,7 +1094,7 @@ msgstr "Powiadomienia" 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:400 core/models.py:1791 +#: core/graphene/object_types.py:400 core/models.py:1860 msgid "feedback" msgstr "Informacje zwrotne" @@ -1102,7 +1102,7 @@ msgstr "Informacje zwrotne" msgid "a list of order products in this order" msgstr "Lista zamówionych produktów w tym zamówieniu" -#: core/graphene/object_types.py:436 core/models.py:1080 +#: core/graphene/object_types.py:436 core/models.py:1108 msgid "billing address" msgstr "Adres rozliczeniowy" @@ -1130,7 +1130,7 @@ msgstr "Czy wszystkie produkty w zamówieniu są cyfrowe?" msgid "transactions for this order" msgstr "Transakcje dla tego zamówienia" -#: core/graphene/object_types.py:465 core/models.py:1144 +#: core/graphene/object_types.py:465 core/models.py:1172 msgid "orders" msgstr "Zamówienia" @@ -1142,15 +1142,15 @@ msgstr "Adres URL obrazu" msgid "product's images" msgstr "Zdjęcia produktu" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 +#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 msgid "category" msgstr "Kategoria" -#: core/graphene/object_types.py:502 core/models.py:1792 +#: core/graphene/object_types.py:502 core/models.py:1861 msgid "feedbacks" msgstr "Informacje zwrotne" -#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 +#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 msgid "brand" msgstr "Marka" @@ -1182,7 +1182,7 @@ msgstr "Liczba informacji zwrotnych" msgid "only available for personal orders" msgstr "Produkty dostępne tylko dla zamówień osobistych" -#: core/graphene/object_types.py:534 core/models.py:536 +#: core/graphene/object_types.py:534 core/models.py:550 msgid "products" msgstr "Produkty" @@ -1194,15 +1194,15 @@ msgstr "Promocodes" msgid "products on sale" msgstr "Produkty w sprzedaży" -#: core/graphene/object_types.py:651 core/models.py:784 +#: core/graphene/object_types.py:651 core/models.py:798 msgid "promotions" msgstr "Promocje" -#: core/graphene/object_types.py:655 core/models.py:154 +#: core/graphene/object_types.py:655 core/models.py:168 msgid "vendor" msgstr "Sprzedawca" -#: core/graphene/object_types.py:656 core/models.py:535 +#: core/graphene/object_types.py:656 core/models.py:549 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1210,11 +1210,11 @@ msgstr "Sprzedawca" msgid "product" msgstr "Produkt" -#: core/graphene/object_types.py:667 core/models.py:807 +#: core/graphene/object_types.py:667 core/models.py:821 msgid "wishlisted products" msgstr "Produkty z listy życzeń" -#: core/graphene/object_types.py:673 core/models.py:824 +#: core/graphene/object_types.py:673 core/models.py:838 msgid "wishlists" msgstr "Listy życzeń" @@ -1222,7 +1222,7 @@ msgstr "Listy życzeń" msgid "tagged products" msgstr "Produkty Tagged" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 +#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 msgid "product tags" msgstr "Tagi produktu" @@ -1332,7 +1332,7 @@ msgstr "Grupa atrybutów nadrzędnych" msgid "attribute group's name" msgstr "Nazwa grupy atrybutów" -#: core/models.py:100 core/models.py:620 +#: core/models.py:100 core/models.py:634 msgid "attribute group" msgstr "Grupa atrybutów" @@ -1381,7 +1381,7 @@ msgstr "Nazwa tego sprzedawcy" msgid "vendor name" msgstr "Nazwa sprzedawcy" -#: core/models.py:163 +#: core/models.py:177 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1396,27 +1396,27 @@ msgstr "" "Obsługuje operacje eksportowane przez mixiny i zapewnia dostosowanie " "metadanych do celów administracyjnych." -#: core/models.py:175 core/models.py:206 +#: core/models.py:189 core/models.py:220 msgid "internal tag identifier for the product tag" msgstr "Wewnętrzny identyfikator tagu produktu" -#: core/models.py:176 core/models.py:207 +#: core/models.py:190 core/models.py:221 msgid "tag name" msgstr "Nazwa tagu" -#: core/models.py:180 core/models.py:211 +#: core/models.py:194 core/models.py:225 msgid "user-friendly name for the product tag" msgstr "Przyjazna dla użytkownika nazwa etykiety produktu" -#: core/models.py:181 core/models.py:212 +#: core/models.py:195 core/models.py:226 msgid "tag display name" msgstr "Wyświetlana nazwa znacznika" -#: core/models.py:189 +#: core/models.py:203 msgid "product tag" msgstr "Etykieta produktu" -#: core/models.py:195 +#: core/models.py:209 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 " @@ -1427,15 +1427,15 @@ msgstr "" "Zawiera atrybuty dla wewnętrznego identyfikatora tagu i przyjaznej dla " "użytkownika nazwy wyświetlanej." -#: core/models.py:220 +#: core/models.py:234 msgid "category tag" msgstr "tag kategorii" -#: core/models.py:221 core/models.py:293 +#: core/models.py:235 core/models.py:307 msgid "category tags" msgstr "tagi kategorii" -#: core/models.py:226 +#: core/models.py:240 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1457,51 +1457,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:240 +#: core/models.py:254 msgid "upload an image representing this category" msgstr "Prześlij obraz reprezentujący tę kategorię" -#: core/models.py:243 +#: core/models.py:257 msgid "category image" msgstr "Obraz kategorii" -#: core/models.py:248 +#: core/models.py:262 msgid "define a markup percentage for products in this category" msgstr "Zdefiniuj procentowy narzut dla produktów w tej kategorii." -#: core/models.py:257 +#: core/models.py:271 msgid "parent of this category to form a hierarchical structure" msgstr "Rodzic tej kategorii w celu utworzenia struktury hierarchicznej" -#: core/models.py:258 +#: core/models.py:272 msgid "parent category" msgstr "Kategoria nadrzędna" -#: core/models.py:263 +#: core/models.py:277 msgid "category name" msgstr "Nazwa kategorii" -#: core/models.py:264 +#: core/models.py:278 msgid "provide a name for this category" msgstr "Podaj nazwę dla tej kategorii" -#: core/models.py:271 +#: core/models.py:285 msgid "add a detailed description for this category" msgstr "Dodaj szczegółowy opis dla tej kategorii" -#: core/models.py:272 +#: core/models.py:286 msgid "category description" msgstr "Opis kategorii" -#: core/models.py:292 +#: core/models.py:306 msgid "tags that help describe or group this category" msgstr "tagi, które pomagają opisać lub pogrupować tę kategorię" -#: core/models.py:299 core/models.py:375 +#: core/models.py:313 core/models.py:389 msgid "priority" msgstr "Priorytet" -#: core/models.py:318 +#: core/models.py:332 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1514,47 +1514,47 @@ msgstr "" " unikalny slug i kolejność priorytetów. Pozwala na organizację i " "reprezentację danych związanych z marką w aplikacji." -#: core/models.py:328 +#: core/models.py:342 msgid "name of this brand" msgstr "Nazwa tej marki" -#: core/models.py:329 +#: core/models.py:343 msgid "brand name" msgstr "Nazwa marki" -#: core/models.py:336 +#: core/models.py:350 msgid "upload a logo representing this brand" msgstr "Prześlij logo reprezentujące tę markę" -#: core/models.py:338 +#: core/models.py:352 msgid "brand small image" msgstr "Mały wizerunek marki" -#: core/models.py:344 +#: core/models.py:358 msgid "upload a big logo representing this brand" msgstr "Prześlij duże logo reprezentujące tę markę" -#: core/models.py:346 +#: core/models.py:360 msgid "brand big image" msgstr "Duży wizerunek marki" -#: core/models.py:351 +#: core/models.py:365 msgid "add a detailed description of the brand" msgstr "Dodaj szczegółowy opis marki" -#: core/models.py:352 +#: core/models.py:366 msgid "brand description" msgstr "Opis marki" -#: core/models.py:357 +#: core/models.py:371 msgid "optional categories that this brand is associated with" msgstr "Opcjonalne kategorie, z którymi powiązana jest ta marka" -#: core/models.py:358 +#: core/models.py:372 msgid "associated categories" msgstr "Kategorie" -#: core/models.py:388 +#: core/models.py:402 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1570,68 +1570,68 @@ 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:400 +#: core/models.py:414 msgid "the vendor supplying this product stock" msgstr "Sprzedawca dostarczający ten produkt" -#: core/models.py:401 +#: core/models.py:415 msgid "associated vendor" msgstr "Powiązany sprzedawca" -#: core/models.py:405 +#: core/models.py:419 msgid "final price to the customer after markups" msgstr "Ostateczna cena dla klienta po uwzględnieniu marży" -#: core/models.py:406 +#: core/models.py:420 msgid "selling price" msgstr "Cena sprzedaży" -#: core/models.py:411 +#: core/models.py:425 msgid "the product associated with this stock entry" msgstr "Produkt powiązany z tym wpisem magazynowym" -#: core/models.py:412 core/models.py:683 core/models.py:730 -#: core/models.py:1583 +#: core/models.py:426 core/models.py:697 core/models.py:744 +#: core/models.py:1641 msgid "associated product" msgstr "Produkt powiązany" -#: core/models.py:419 +#: core/models.py:433 msgid "the price paid to the vendor for this product" msgstr "Cena zapłacona sprzedawcy za ten produkt" -#: core/models.py:420 +#: core/models.py:434 msgid "vendor purchase price" msgstr "Cena zakupu przez sprzedawcę" -#: core/models.py:424 +#: core/models.py:438 msgid "available quantity of the product in stock" msgstr "Dostępna ilość produktu w magazynie" -#: core/models.py:425 +#: core/models.py:439 msgid "quantity in stock" msgstr "Ilość w magazynie" -#: core/models.py:429 +#: core/models.py:443 msgid "vendor-assigned SKU for identifying the product" msgstr "Jednostki SKU przypisane przez dostawcę w celu identyfikacji produktu" -#: core/models.py:430 +#: core/models.py:444 msgid "vendor sku" msgstr "SKU sprzedawcy" -#: core/models.py:436 +#: core/models.py:450 msgid "digital file associated with this stock if applicable" msgstr "Plik cyfrowy powiązany z tymi zapasami, jeśli dotyczy" -#: core/models.py:437 +#: core/models.py:451 msgid "digital file" msgstr "Plik cyfrowy" -#: core/models.py:446 +#: core/models.py:460 msgid "stock entries" msgstr "Zapisy magazynowe" -#: core/models.py:451 +#: core/models.py:465 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1652,55 +1652,55 @@ msgstr "" "definiowania i manipulowania danymi produktu i powiązanymi z nimi " "informacjami w aplikacji." -#: core/models.py:464 +#: core/models.py:478 msgid "category this product belongs to" msgstr "Kategoria, do której należy ten produkt" -#: core/models.py:473 +#: core/models.py:487 msgid "optionally associate this product with a brand" msgstr "Opcjonalnie można powiązać ten produkt z marką" -#: core/models.py:479 +#: core/models.py:493 msgid "tags that help describe or group this product" msgstr "Tagi, które pomagają opisać lub pogrupować ten produkt" -#: core/models.py:484 +#: core/models.py:498 msgid "indicates whether this product is digitally delivered" msgstr "Wskazuje, czy produkt jest dostarczany cyfrowo." -#: core/models.py:485 +#: core/models.py:499 msgid "is product digital" msgstr "Czy produkt jest cyfrowy?" -#: core/models.py:491 +#: core/models.py:505 msgid "provide a clear identifying name for the product" msgstr "Wyraźna nazwa identyfikująca produkt" -#: core/models.py:492 +#: core/models.py:506 msgid "product name" msgstr "Nazwa produktu" -#: core/models.py:497 core/models.py:772 +#: core/models.py:511 core/models.py:786 msgid "add a detailed description of the product" msgstr "Dodaj szczegółowy opis produktu" -#: core/models.py:498 +#: core/models.py:512 msgid "product description" msgstr "Opis produktu" -#: core/models.py:505 +#: core/models.py:519 msgid "part number for this product" msgstr "Numer części dla tego produktu" -#: core/models.py:506 +#: core/models.py:520 msgid "part number" msgstr "Numer części" -#: core/models.py:525 +#: core/models.py:539 msgid "stock keeping unit for this product" msgstr "Jednostka magazynowa dla tego produktu" -#: core/models.py:599 +#: core/models.py:613 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 " @@ -1716,69 +1716,69 @@ msgstr "" "string, integer, float, boolean, array i object. Pozwala to na dynamiczną i " "elastyczną strukturę danych." -#: core/models.py:611 +#: core/models.py:625 msgid "category of this attribute" msgstr "Kategoria tego atrybutu" -#: core/models.py:619 +#: core/models.py:633 msgid "group of this attribute" msgstr "Grupa tego atrybutu" -#: core/models.py:625 +#: core/models.py:639 msgid "string" msgstr "String" -#: core/models.py:626 +#: core/models.py:640 msgid "integer" msgstr "Integer" -#: core/models.py:627 +#: core/models.py:641 msgid "float" msgstr "Pływak" -#: core/models.py:628 +#: core/models.py:642 msgid "boolean" msgstr "Wartość logiczna" -#: core/models.py:629 +#: core/models.py:643 msgid "array" msgstr "Tablica" -#: core/models.py:630 +#: core/models.py:644 msgid "object" msgstr "Obiekt" -#: core/models.py:632 +#: core/models.py:646 msgid "type of the attribute's value" msgstr "Typ wartości atrybutu" -#: core/models.py:633 +#: core/models.py:647 msgid "value type" msgstr "Typ wartości" -#: core/models.py:638 +#: core/models.py:652 msgid "name of this attribute" msgstr "Nazwa tego atrybutu" -#: core/models.py:639 +#: core/models.py:653 msgid "attribute's name" msgstr "Nazwa atrybutu" -#: core/models.py:645 +#: core/models.py:659 msgid "is filterable" msgstr "można filtrować" -#: core/models.py:646 +#: core/models.py:660 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:657 core/models.py:675 +#: core/models.py:671 core/models.py:689 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Atrybut" -#: core/models.py:663 +#: core/models.py:677 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" @@ -1788,19 +1788,19 @@ msgstr "" "\"atrybut\" z unikalną \"wartością\", umożliwiając lepszą organizację i " "dynamiczną reprezentację cech produktu." -#: core/models.py:674 +#: core/models.py:688 msgid "attribute of this value" msgstr "Atrybut tej wartości" -#: core/models.py:682 +#: core/models.py:696 msgid "the specific product associated with this attribute's value" msgstr "Konkretny produkt powiązany z wartością tego atrybutu" -#: core/models.py:688 +#: core/models.py:702 msgid "the specific value for this attribute" msgstr "Konkretna wartość dla tego atrybutu" -#: core/models.py:701 +#: core/models.py:715 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -1814,40 +1814,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:712 +#: core/models.py:726 msgid "provide alternative text for the image for accessibility" msgstr "" "Zapewnienie alternatywnego tekstu dla obrazu w celu ułatwienia dostępu" -#: core/models.py:713 +#: core/models.py:727 msgid "image alt text" msgstr "Tekst alternatywny obrazu" -#: core/models.py:716 +#: core/models.py:730 msgid "upload the image file for this product" msgstr "Prześlij plik obrazu dla tego produktu" -#: core/models.py:717 core/models.py:742 +#: core/models.py:731 core/models.py:756 msgid "product image" msgstr "Obraz produktu" -#: core/models.py:723 +#: core/models.py:737 msgid "determines the order in which images are displayed" msgstr "Określa kolejność wyświetlania obrazów" -#: core/models.py:724 +#: core/models.py:738 msgid "display priority" msgstr "Priorytet wyświetlania" -#: core/models.py:729 +#: core/models.py:743 msgid "the product that this image represents" msgstr "Produkt, który przedstawia ten obraz" -#: core/models.py:743 +#: core/models.py:757 msgid "product images" msgstr "Zdjęcia produktów" -#: core/models.py:748 +#: core/models.py:762 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1863,39 +1863,39 @@ msgstr "" "produktami. Integruje się z katalogiem produktów w celu określenia pozycji, " "których dotyczy kampania." -#: core/models.py:760 +#: core/models.py:774 msgid "percentage discount for the selected products" msgstr "Rabat procentowy na wybrane produkty" -#: core/models.py:761 +#: core/models.py:775 msgid "discount percentage" msgstr "Procent rabatu" -#: core/models.py:766 +#: core/models.py:780 msgid "provide a unique name for this promotion" msgstr "Podaj unikalną nazwę tej promocji" -#: core/models.py:767 +#: core/models.py:781 msgid "promotion name" msgstr "Nazwa promocji" -#: core/models.py:773 +#: core/models.py:787 msgid "promotion description" msgstr "Opis promocji" -#: core/models.py:778 +#: core/models.py:792 msgid "select which products are included in this promotion" msgstr "Wybierz produkty objęte promocją" -#: core/models.py:779 +#: core/models.py:793 msgid "included products" msgstr "Dołączone produkty" -#: core/models.py:783 +#: core/models.py:797 msgid "promotion" msgstr "Promocja" -#: core/models.py:794 +#: core/models.py:808 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1907,23 +1907,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:806 +#: core/models.py:820 msgid "products that the user has marked as wanted" msgstr "Produkty, które użytkownik oznaczył jako poszukiwane" -#: core/models.py:814 +#: core/models.py:828 msgid "user who owns this wishlist" msgstr "Użytkownik posiadający tę listę życzeń" -#: core/models.py:815 +#: core/models.py:829 msgid "wishlist owner" msgstr "Właściciel listy życzeń" -#: core/models.py:823 +#: core/models.py:837 msgid "wishlist" msgstr "Lista życzeń" -#: core/models.py:865 +#: core/models.py:879 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1939,19 +1939,19 @@ msgstr "" "funkcjonalność z określonych miksów i zapewnia dodatkowe niestandardowe " "funkcje." -#: core/models.py:878 +#: core/models.py:892 msgid "documentary" msgstr "Film dokumentalny" -#: core/models.py:879 +#: core/models.py:893 msgid "documentaries" msgstr "Filmy dokumentalne" -#: core/models.py:889 +#: core/models.py:903 msgid "unresolved" msgstr "Nierozwiązany" -#: core/models.py:894 +#: core/models.py:908 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1973,59 +1973,59 @@ msgstr "" "również powiązanie adresu z użytkownikiem, ułatwiając spersonalizowaną " "obsługę danych." -#: core/models.py:909 +#: core/models.py:923 msgid "address line for the customer" msgstr "Linia adresu dla klienta" -#: core/models.py:910 +#: core/models.py:924 msgid "address line" msgstr "Linia adresowa" -#: core/models.py:912 +#: core/models.py:926 msgid "street" msgstr "ul." -#: core/models.py:913 +#: core/models.py:927 msgid "district" msgstr "Okręg" -#: core/models.py:914 +#: core/models.py:928 msgid "city" msgstr "Miasto" -#: core/models.py:915 +#: core/models.py:929 msgid "region" msgstr "Region" -#: core/models.py:916 +#: core/models.py:930 msgid "postal code" msgstr "Kod pocztowy" -#: core/models.py:917 +#: core/models.py:931 msgid "country" msgstr "Kraj" -#: core/models.py:924 +#: core/models.py:938 msgid "geolocation point: (longitude, latitude)" msgstr "Geolocation Point(Longitude, Latitude)" -#: core/models.py:927 +#: core/models.py:941 msgid "full JSON response from geocoder for this address" msgstr "Pełna odpowiedź JSON z geokodera dla tego adresu" -#: core/models.py:932 +#: core/models.py:946 msgid "stored JSON response from the geocoding service" msgstr "Przechowywana odpowiedź JSON z usługi geokodowania" -#: core/models.py:940 +#: core/models.py:954 msgid "address" msgstr "Adres" -#: core/models.py:941 +#: core/models.py:955 msgid "addresses" msgstr "Adresy" -#: core/models.py:953 +#: core/models.py:967 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2042,73 +2042,73 @@ msgstr "" "Obejmuje funkcję sprawdzania poprawności i stosowania kodu promocyjnego do " "zamówienia, zapewniając jednocześnie spełnienie ograniczeń." -#: core/models.py:967 +#: core/models.py:981 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:968 +#: core/models.py:982 msgid "promo code identifier" msgstr "Identyfikator kodu promocyjnego" -#: core/models.py:975 +#: core/models.py:989 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:976 +#: core/models.py:990 msgid "fixed discount amount" msgstr "Stała kwota rabatu" -#: core/models.py:982 +#: core/models.py:996 msgid "percentage discount applied if fixed amount is not used" msgstr "Rabat procentowy stosowany w przypadku niewykorzystania stałej kwoty" -#: core/models.py:983 +#: core/models.py:997 msgid "percentage discount" msgstr "Rabat procentowy" -#: core/models.py:988 +#: core/models.py:1002 msgid "timestamp when the promocode expires" msgstr "Znacznik czasu wygaśnięcia kodu promocyjnego" -#: core/models.py:989 +#: core/models.py:1003 msgid "end validity time" msgstr "Końcowy czas ważności" -#: core/models.py:994 +#: core/models.py:1008 msgid "timestamp from which this promocode is valid" msgstr "Znacznik czasu, od którego ten kod promocyjny jest ważny" -#: core/models.py:995 +#: core/models.py:1009 msgid "start validity time" msgstr "Czas rozpoczęcia ważności" -#: core/models.py:1000 +#: core/models.py:1014 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:1001 +#: core/models.py:1015 msgid "usage timestamp" msgstr "Znacznik czasu użycia" -#: core/models.py:1006 +#: core/models.py:1020 msgid "user assigned to this promocode if applicable" msgstr "Użytkownik przypisany do tego kodu promocyjnego, jeśli dotyczy" -#: core/models.py:1007 +#: core/models.py:1021 msgid "assigned user" msgstr "Przypisany użytkownik" -#: core/models.py:1014 +#: core/models.py:1028 msgid "promo code" msgstr "Kod promocyjny" -#: core/models.py:1015 +#: core/models.py:1029 msgid "promo codes" msgstr "Kody promocyjne" -#: core/models.py:1022 +#: core/models.py:1044 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2116,16 +2116,16 @@ msgstr "" "Należy zdefiniować tylko jeden rodzaj rabatu (kwotowy lub procentowy), ale " "nie oba lub żaden z nich." -#: core/models.py:1037 +#: core/models.py:1065 msgid "promocode already used" msgstr "Kod promocyjny został już wykorzystany" -#: core/models.py:1053 +#: core/models.py:1081 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Nieprawidłowy typ rabatu dla kodu promocyjnego {self.uuid}!" -#: core/models.py:1062 +#: core/models.py:1090 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 " @@ -2142,142 +2142,142 @@ msgstr "" "Funkcjonalność wspiera również zarządzanie produktami w cyklu życia " "zamówienia." -#: core/models.py:1079 +#: core/models.py:1107 msgid "the billing address used for this order" msgstr "Adres rozliczeniowy użyty dla tego zamówienia" -#: core/models.py:1087 +#: core/models.py:1115 msgid "optional promo code applied to this order" msgstr "Opcjonalny kod promocyjny zastosowany do tego zamówienia" -#: core/models.py:1088 +#: core/models.py:1116 msgid "applied promo code" msgstr "Zastosowany kod promocyjny" -#: core/models.py:1096 +#: core/models.py:1124 msgid "the shipping address used for this order" msgstr "Adres wysyłki użyty dla tego zamówienia" -#: core/models.py:1097 +#: core/models.py:1125 msgid "shipping address" msgstr "Adres wysyłki" -#: core/models.py:1103 +#: core/models.py:1131 msgid "current status of the order in its lifecycle" msgstr "Aktualny status zamówienia w jego cyklu życia" -#: core/models.py:1104 +#: core/models.py:1132 msgid "order status" msgstr "Status zamówienia" -#: core/models.py:1109 core/models.py:1560 +#: core/models.py:1137 core/models.py:1618 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:1115 +#: core/models.py:1143 msgid "json representation of order attributes for this order" msgstr "Reprezentacja JSON atrybutów zamówienia dla tego zamówienia" -#: core/models.py:1121 +#: core/models.py:1149 msgid "the user who placed the order" msgstr "Użytkownik, który złożył zamówienie" -#: core/models.py:1122 +#: core/models.py:1150 msgid "user" msgstr "Użytkownik" -#: core/models.py:1128 +#: core/models.py:1156 msgid "the timestamp when the order was finalized" msgstr "Znacznik czasu, kiedy zamówienie zostało sfinalizowane" -#: core/models.py:1129 +#: core/models.py:1157 msgid "buy time" msgstr "Kup czas" -#: core/models.py:1136 +#: core/models.py:1164 msgid "a human-readable identifier for the order" msgstr "Czytelny dla człowieka identyfikator zamówienia" -#: core/models.py:1137 +#: core/models.py:1165 msgid "human readable id" msgstr "Identyfikator czytelny dla człowieka" -#: core/models.py:1143 +#: core/models.py:1171 msgid "order" msgstr "Zamówienie" -#: core/models.py:1168 +#: core/models.py:1209 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:1202 +#: core/models.py:1249 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:1207 +#: core/models.py:1254 msgid "you cannot add inactive products to order" msgstr "Nie można dodać nieaktywnych produktów do zamówienia" -#: core/models.py:1224 +#: core/models.py:1271 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:1246 core/models.py:1271 core/models.py:1279 +#: core/models.py:1293 core/models.py:1318 core/models.py:1326 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:1267 +#: core/models.py:1314 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} nie istnieje z zapytaniem <{query}>!" -#: core/models.py:1299 +#: core/models.py:1346 msgid "promocode does not exist" msgstr "Kod promocyjny nie istnieje" -#: core/models.py:1305 +#: core/models.py:1352 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:1324 +#: core/models.py:1371 msgid "address does not exist" msgstr "Adres nie istnieje" -#: core/models.py:1345 core/models.py:1414 +#: core/models.py:1392 core/models.py:1461 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:1348 core/models.py:1410 +#: core/models.py:1395 core/models.py:1457 msgid "invalid force value" msgstr "Nieprawidłowa wartość siły" -#: core/models.py:1354 core/models.py:1417 +#: core/models.py:1401 core/models.py:1464 msgid "you cannot purchase an empty order!" msgstr "Nie można kupić pustego zamówienia!" -#: core/models.py:1373 +#: core/models.py:1420 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:1387 +#: core/models.py:1434 msgid "a user without a balance cannot buy with balance" msgstr "Użytkownik bez salda nie może kupować za saldo!" -#: core/models.py:1392 +#: core/models.py:1439 msgid "insufficient funds to complete the order" msgstr "Niewystarczające środki do zrealizowania zamówienia" -#: core/models.py:1426 +#: core/models.py:1473 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2286,7 +2286,7 @@ msgstr "" "informacje: imię i nazwisko klienta, adres e-mail klienta, numer telefonu " "klienta." -#: core/models.py:1435 +#: core/models.py:1482 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2294,7 +2294,7 @@ msgstr "" "Nieprawidłowa metoda płatności: {payment_method} z " "{available_payment_methods}!" -#: core/models.py:1533 +#: core/models.py:1591 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2316,112 +2316,112 @@ msgstr "" "pobierania dla produktów cyfrowych. Model ten integruje się z modelami Order" " i Product i przechowuje odniesienia do nich." -#: core/models.py:1548 +#: core/models.py:1606 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:1549 +#: core/models.py:1607 msgid "purchase price at order time" msgstr "Cena zakupu w momencie zamówienia" -#: core/models.py:1554 +#: core/models.py:1612 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:1555 +#: core/models.py:1613 msgid "internal comments" msgstr "Uwagi wewnętrzne" -#: core/models.py:1561 +#: core/models.py:1619 msgid "user notifications" msgstr "Powiadomienia użytkownika" -#: core/models.py:1566 +#: core/models.py:1624 msgid "json representation of this item's attributes" msgstr "Reprezentacja JSON atrybutów tego elementu" -#: core/models.py:1567 +#: core/models.py:1625 msgid "ordered product attributes" msgstr "Zamówione atrybuty produktu" -#: core/models.py:1572 +#: core/models.py:1630 msgid "reference to the parent order that contains this product" msgstr "Odniesienie do zamówienia nadrzędnego zawierającego ten produkt" -#: core/models.py:1573 +#: core/models.py:1631 msgid "parent order" msgstr "Zamówienie nadrzędne" -#: core/models.py:1582 +#: core/models.py:1640 msgid "the specific product associated with this order line" msgstr "Konkretny produkt powiązany z tą linią zamówienia" -#: core/models.py:1589 +#: core/models.py:1647 msgid "quantity of this specific product in the order" msgstr "Ilość tego konkretnego produktu w zamówieniu" -#: core/models.py:1590 +#: core/models.py:1648 msgid "product quantity" msgstr "Ilość produktu" -#: core/models.py:1597 +#: core/models.py:1655 msgid "current status of this product in the order" msgstr "Aktualny status tego produktu w zamówieniu" -#: core/models.py:1598 +#: core/models.py:1656 msgid "product line status" msgstr "Status linii produktów" -#: core/models.py:1661 +#: core/models.py:1719 msgid "order product must have an order" msgstr "Orderproduct musi mieć powiązane zamówienie!" -#: core/models.py:1663 +#: core/models.py:1721 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Nieprawidłowa akcja określona dla informacji zwrotnej: {action}!" -#: core/models.py:1677 +#: core/models.py:1735 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:1683 +#: core/models.py:1741 msgid "name" msgstr "Nazwa" -#: core/models.py:1684 +#: core/models.py:1742 msgid "URL of the integration" msgstr "Adres URL integracji" -#: core/models.py:1685 +#: core/models.py:1743 msgid "authentication credentials" msgstr "Dane uwierzytelniające" -#: core/models.py:1699 +#: core/models.py:1765 msgid "you can only have one default CRM provider" msgstr "Można mieć tylko jednego domyślnego dostawcę CRM" -#: core/models.py:1703 +#: core/models.py:1775 msgid "CRM" msgstr "CRM" -#: core/models.py:1704 +#: core/models.py:1776 msgid "CRMs" msgstr "CRM" -#: core/models.py:1716 +#: core/models.py:1788 msgid "order CRM link" msgstr "Łącze CRM zamówienia" -#: core/models.py:1717 +#: core/models.py:1789 msgid "orders CRM links" msgstr "Łącza CRM zamówień" -#: core/models.py:1722 +#: core/models.py:1794 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2438,19 +2438,15 @@ msgstr "" "generowania adresu URL do pobrania zasobu, gdy powiązane zamówienie ma " "status ukończonego." -#: core/models.py:1736 +#: core/models.py:1808 msgid "download" msgstr "Pobierz" -#: core/models.py:1737 +#: core/models.py:1809 msgid "downloads" msgstr "Pliki do pobrania" -#: core/models.py:1745 -msgid "you can not download a digital asset for a non-finished order" -msgstr "Nie można pobrać zasobu cyfrowego dla nieukończonego zamówienia." - -#: core/models.py:1754 +#: core/models.py:1823 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2466,30 +2462,30 @@ msgstr "" "Klasa wykorzystuje pola bazy danych do efektywnego modelowania i zarządzania" " danymi opinii." -#: core/models.py:1766 +#: core/models.py:1835 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:1767 +#: core/models.py:1836 msgid "feedback comments" msgstr "Komentarze zwrotne" -#: core/models.py:1774 +#: core/models.py:1843 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:1775 +#: core/models.py:1844 msgid "related order product" msgstr "Powiązany produkt zamówienia" -#: core/models.py:1780 +#: core/models.py:1849 msgid "user-assigned rating for the product" msgstr "Ocena produktu przypisana przez użytkownika" -#: core/models.py:1781 +#: core/models.py:1850 msgid "product rating" msgstr "Ocena produktu" @@ -2695,11 +2691,11 @@ msgstr "" "wszelkie prawa\n" " zastrzeżone" -#: core/utils/caching.py:41 +#: core/utils/caching.py:48 msgid "both data and timeout are required" msgstr "Wymagane są zarówno dane, jak i limit czasu" -#: core/utils/caching.py:43 +#: core/utils/caching.py:50 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 " @@ -2733,25 +2729,339 @@ msgstr "Nie masz uprawnień do wykonania tej akcji." msgid "NOMINATIM_URL must be configured." msgstr "Parametr NOMINATIM_URL musi być skonfigurowany!" -#: core/validators.py:16 +#: core/validators.py:14 #, 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/validators.py:22 -msgid "invalid phone number format" -msgstr "Nieprawidłowy format numeru telefonu" +#: core/views.py:72 +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 "" +"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:489 +#: core/views.py:87 +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 "" +"Obsługuje szczegółową odpowiedź widoku dla mapy witryny. Ta funkcja " +"przetwarza żądanie, pobiera odpowiednią szczegółową odpowiedź mapy witryny i" +" ustawia nagłówek Content-Type dla XML." + +#: core/views.py:116 +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 +msgid "Returns the parameters of the website as a JSON object." +msgstr "Zwraca parametry strony internetowej jako obiekt JSON." + +#: core/views.py:167 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +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 +msgid "Handles `contact us` form submissions." +msgstr "Obsługuje zgłoszenia formularzy `kontaktuj się z nami`." + +#: core/views.py:215 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "" +"Obsługuje żądania przetwarzania i sprawdzania poprawności adresów URL z " +"przychodzących żądań POST." + +#: core/views.py:255 +msgid "Handles global search queries." +msgstr "Obsługuje globalne zapytania wyszukiwania." + +#: core/views.py:270 +msgid "Handles the logic of buying as a business without registration." +msgstr "Obsługuje logikę zakupu jako firma bez rejestracji." + +#: core/views.py:312 msgid "you can only download the digital asset once" msgstr "Zasób cyfrowy można pobrać tylko raz" -#: core/views.py:547 +#: core/views.py:315 +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:353 +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." +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:365 msgid "favicon not found" msgstr "nie znaleziono favicon" -#: core/viewsets.py:1357 +#: core/views.py:370 +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." +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:382 +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 "" +"Przekierowuje żądanie na stronę indeksu administratora. Funkcja obsługuje " +"przychodzące żądania HTTP i przekierowuje je na stronę indeksu interfejsu " +"administratora Django. Używa funkcji `redirect` Django do obsługi " +"przekierowania HTTP." + +#: core/viewsets.py:128 +msgid "" +"Defines a viewset for managing Evibes-related operations. The EvibesViewSet " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" +"Definiuje zestaw widoków do zarządzania operacjami związanymi z Evibes. " +"Klasa EvibesViewSet dziedziczy z ModelViewSet i zapewnia funkcjonalność do " +"obsługi akcji i operacji na encjach Evibes. Obejmuje ona obsługę " +"dynamicznych klas serializatora w oparciu o bieżącą akcję, konfigurowalne " +"uprawnienia i formaty renderowania." + +#: core/viewsets.py:147 +msgid "" +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." +msgstr "" +"Reprezentuje zestaw widoków do zarządzania obiektami AttributeGroup. " +"Obsługuje operacje związane z AttributeGroup, w tym filtrowanie, " +"serializację i pobieranie danych. Klasa ta jest częścią warstwy API " +"aplikacji i zapewnia ustandaryzowany sposób przetwarzania żądań i odpowiedzi" +" dla danych AttributeGroup." + +#: core/viewsets.py:166 +msgid "" +"Handles operations related to Attribute objects within the application. " +"Provides a set of API endpoints to interact with Attribute data. This class " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"Obsługuje operacje związane z obiektami Attribute w aplikacji. Zapewnia " +"zestaw punktów końcowych API do interakcji z danymi atrybutów. Ta klasa " +"zarządza zapytaniami, filtrowaniem i serializacją obiektów Attribute, " +"umożliwiając dynamiczną kontrolę nad zwracanymi danymi, takimi jak " +"filtrowanie według określonych pól lub pobieranie szczegółowych lub " +"uproszczonych informacji w zależności od żądania." + +#: core/viewsets.py:185 +msgid "" +"A viewset for managing AttributeValue objects. This viewset provides " +"functionality for listing, retrieving, creating, updating, and deleting " +"AttributeValue objects. It integrates with Django REST Framework's viewset " +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." +msgstr "" +"Zestaw widoków do zarządzania obiektami AttributeValue. Ten viewset zapewnia" +" funkcjonalność do listowania, pobierania, tworzenia, aktualizowania i " +"usuwania obiektów AttributeValue. Integruje się z mechanizmami viewset " +"Django REST Framework i używa odpowiednich serializatorów dla różnych akcji." +" Możliwości filtrowania są dostarczane przez DjangoFilterBackend." + +#: core/viewsets.py:204 +msgid "" +"Manages views for Category-related operations. The CategoryViewSet class is " +"responsible for handling operations related to the Category model in the " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" +"Zarządza widokami dla operacji związanych z kategoriami. Klasa " +"CategoryViewSet jest odpowiedzialna za obsługę operacji związanych z modelem" +" kategorii w systemie. Obsługuje pobieranie, filtrowanie i serializowanie " +"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:315 +msgid "" +"Represents a viewset for managing Brand instances. This class provides " +"functionality for querying, filtering, and serializing Brand objects. It " +"uses Django's ViewSet framework to simplify the implementation of API " +"endpoints for Brand objects." +msgstr "" +"Reprezentuje zestaw widoków do zarządzania instancjami Brand. Ta klasa " +"zapewnia funkcjonalność dla zapytań, filtrowania i serializacji obiektów " +"Brand. Używa frameworka ViewSet Django, aby uprościć implementację punktów " +"końcowych API dla obiektów Brand." + +#: core/viewsets.py:427 +msgid "" +"Manages operations related to the `Product` model in the system. This class " +"provides a viewset for managing products, including their filtering, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" +"Zarządza operacjami związanymi z modelem `Product` w systemie. Ta klasa " +"zapewnia zestaw widoków do zarządzania produktami, w tym ich filtrowania, " +"serializacji i operacji na konkretnych instancjach. Rozszerza się z " +"`EvibesViewSet`, aby używać wspólnej funkcjonalności i integruje się z " +"frameworkiem Django REST dla operacji RESTful API. Zawiera metody pobierania" +" szczegółów produktu, stosowania uprawnień i uzyskiwania dostępu do " +"powiązanych informacji zwrotnych o produkcie." + +#: core/viewsets.py:547 +msgid "" +"Represents a viewset for managing Vendor objects. This viewset allows " +"fetching, filtering, and serializing Vendor data. It defines the queryset, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" +"Reprezentuje zestaw widoków do zarządzania obiektami Vendor. Ten zestaw " +"widoków umożliwia pobieranie, filtrowanie i serializowanie danych dostawcy. " +"Definiuje zestaw zapytań, konfiguracje filtrów i klasy serializatora używane" +" 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:567 +msgid "" +"Representation of a view set handling Feedback objects. This class manages " +"operations related to Feedback objects, including listing, filtering, and " +"retrieving details. The purpose of this view set is to provide different " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"use of Django's filtering system for querying data." +msgstr "" +"Reprezentacja zestawu widoków obsługujących obiekty opinii. Ta klasa " +"zarządza operacjami związanymi z obiektami opinii, w tym listowaniem, " +"filtrowaniem i pobieraniem szczegółów. Celem tego zestawu widoków jest " +"zapewnienie różnych serializatorów dla różnych akcji i zaimplementowanie " +"opartej na uprawnieniach obsługi dostępnych obiektów opinii. Rozszerza " +"bazowy `EvibesViewSet` i wykorzystuje system filtrowania Django do " +"odpytywania danych." + +#: core/viewsets.py:593 +msgid "" +"ViewSet for managing orders and related operations. This class provides " +"functionality to retrieve, modify, and manage order objects. It includes " +"various endpoints for handling order operations such as adding or removing " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " +"enforces permissions accordingly while interacting with order data." +msgstr "" +"ViewSet do zarządzania zamówieniami i powiązanymi operacjami. Klasa ta " +"zapewnia funkcjonalność pobierania, modyfikowania i zarządzania obiektami " +"zamówień. Zawiera różne punkty końcowe do obsługi operacji zamówień, takich " +"jak dodawanie lub usuwanie produktów, dokonywanie zakupów dla " +"zarejestrowanych i niezarejestrowanych użytkowników oraz pobieranie " +"oczekujących zamówień bieżącego uwierzytelnionego użytkownika. ViewSet " +"wykorzystuje wiele serializatorów w oparciu o konkretną wykonywaną akcję i " +"odpowiednio egzekwuje uprawnienia podczas interakcji z danymi zamówienia." + +#: core/viewsets.py:782 +msgid "" +"Provides a viewset for managing OrderProduct entities. This viewset enables " +"CRUD operations and custom actions specific to the OrderProduct model. It " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " +"feedback on OrderProduct instances" +msgstr "" +"Udostępnia zestaw widoków do zarządzania jednostkami OrderProduct. Ten " +"zestaw widoków umożliwia operacje CRUD i niestandardowe akcje specyficzne " +"dla modelu OrderProduct. Obejmuje filtrowanie, sprawdzanie uprawnień i " +"przełączanie serializera w oparciu o żądaną akcję. Dodatkowo zapewnia " +"szczegółową akcję do obsługi informacji zwrotnych na temat instancji " +"OrderProduct" + +#: core/viewsets.py:833 +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:845 +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:866 +msgid "Represents a view set for managing promotions. " +msgstr "Reprezentuje zestaw widoków do zarządzania promocjami." + +#: core/viewsets.py:878 +msgid "Handles operations related to Stock data in the system." +msgstr "Obsługuje operacje związane z danymi Stock w systemie." + +#: core/viewsets.py:892 +msgid "" +"ViewSet for managing Wishlist operations. The WishlistViewSet provides " +"endpoints for interacting with a user's wish list, allowing for the " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " +"actions for wishlist products. Permission checks are integrated to ensure " +"that users can only manage their own wishlists unless explicit permissions " +"are granted." +msgstr "" +"ViewSet do zarządzania operacjami Wishlist. WishlistViewSet zapewnia punkty " +"końcowe do interakcji z listą życzeń użytkownika, umożliwiając pobieranie, " +"modyfikowanie i dostosowywanie produktów na liście życzeń. Ten ViewSet " +"ułatwia takie funkcje, jak dodawanie, usuwanie i akcje zbiorcze dla " +"produktów z listy życzeń. Kontrole uprawnień są zintegrowane, aby zapewnić, " +"że użytkownicy mogą zarządzać tylko własnymi listami życzeń, chyba że " +"zostaną przyznane wyraźne uprawnienia." + +#: core/viewsets.py:1007 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" +"Ta klasa zapewnia funkcjonalność zestawu widoków do zarządzania obiektami " +"`Address`. Klasa AddressViewSet umożliwia operacje CRUD, filtrowanie i " +"niestandardowe akcje związane z jednostkami adresowymi. Obejmuje ona " +"wyspecjalizowane zachowania dla różnych metod HTTP, zastępowanie serializera" +" i obsługę uprawnień w oparciu o kontekst żądania." + +#: core/viewsets.py:1074 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Błąd geokodowania: {e}" + +#: core/viewsets.py:1081 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" +"Obsługuje operacje związane ze znacznikami produktów w aplikacji. Klasa ta " +"zapewnia funkcjonalność pobierania, filtrowania i serializowania obiektów " +"Product Tag. Obsługuje elastyczne filtrowanie określonych atrybutów przy " +"użyciu określonego zaplecza filtra i dynamicznie wykorzystuje różne " +"serializatory w zależności od wykonywanej akcji." diff --git a/core/locale/pt_BR/LC_MESSAGES/django.mo b/core/locale/pt_BR/LC_MESSAGES/django.mo index aefdd38c1e3911e4cc1f02b974efc7dd12c85909..fa6f3aef12a3003296f71ed93b7c86c7f5ee776c 100644 GIT binary patch delta 26951 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 delta 12294 zcmZA72XqzH+Q#uYBmoigrK)_4YASfcecMKp1 zDj4a-OA`b{q+e7zh=Owe&)J*%xxQKJ&F|fN_Lkp3BG|E;2#)*PA$g?;O>s0<;=&CumJue^cAN{;AFAs(!>M0hkD0)N zF^Yu5UNyUsIPrg{C?MBXKmA$JJOCPhwSkhAg*Jp}U!>Sk#_Kz*0B^^|>ur z2`||5IeM7-C}a|yo~S)Ew+HiIlw>m%^0;mI3)Z9@*3&Fa8!SM%A2M0aD9nLbm>-W~ zAYMgX=N@WcLA}@`SOA$+Cly&G=PP7YoWDIJ!6Z#$9j798Lv4cJz&acF=xD(4@ zjoxN6_QD{_{V)tuQ0*t9mTEq#BWp1aW}-Trg?Z6)fkY$w#WwJH!<-1QmPRd2O)P{B zQ5}p$H>P3*oP*VHH)^Tw+In{%bK^Fs8H>e|7>_(n9%qVeFay=&g{T{DvgKWu9)Y7y{L7AsIuW56(t?a4vdh z!nz67!M&)pKZ{zs=cuI!j5Dubx3w`@b>wx_62+sIA~~M*Z%i_ZifXtU zH8popkKc3D4XX0?(2bj+-jLnUJC&%lPR0^A+MfRewFy_CZumW_BUi8?`XrhTHce#y zHNq}b=tVOCwb^E(>gS?vxXP9{qb|4)%i~e3g->uLMh-CTPoviS64t5a8GUp>v9c+LVaU@3J za?}!@##VR>3uDzJeh1L=-;P8#oPk=?d8m=Cz-as&Bk?X)$0Bs!2VX~ZqzeY&+o%gq zx8>DXjPiEW5}ZL@*FVL4XB6?u`Zp!fR3}+yp_}p+EQ%+w3f{xw=uS1~8)8Muap;RP zQ8V=cY6(_gPW;-I4`B<+*KB>oA)MFqUxOq!#-J|L7WG(mMD=(OY6{0qU4-R=zKn+{5$X7X(;kK0h~E~7`AASlgrAOv;8l9&f;qHfd--Pjo`VLGbA zOED0)U=jQhHS!Cn4n4uV_yYC0pkZcUby3&vIE?kz3nz{W?cxQf3vR|-xCeFNL#VaA zf!c(wbhG(tSsP#o^(|1FFcu>*18d+uTmKZBQm#DQ%+Rpm%zsBJ=24*=-o{XTjG7sL zo*AuS9@K6RN8QMcnwc7?nP_b5JE8`Vh#GmCJwFL`{SWN%5*?-Pal2&T)w%Mh<&`o(NYA>uoUHD7XQk=u8=ri6}6Ey<^tsh{7+GAb3fqLxR z+)M3RV>Q&?t4cU)_)!}#*b^ZWOu0GgMjq={)Kp%>dKmnUIo}>NgA=e39Un>HN3hfs$Dz;8UDQ&fO*J#I0M+gy>V@P#jVUin5x;*44Y!1*=7&)#oUw!p*H16)LvPDnvqQyi91nCcoX$Bl$>LBeFAFpEyGH9 z11sqH4}RZFRSas)2cjO6g{Toq>x*YF2+EyMZ@NXO8=XZ> zeYUw~&qSh@rYlz9{*H&FD6YeJ7fXQ!C|8z(i02eaMTjaK_8rlTFM3Z z2`)xWdA<4O>1mGIYd!EVrlChuTK^-nW^Ir)aS~9wISH%dGAxeYs&b7f>_yGv>h;sE!0K^_Ux$Udk+R;V4|f2$PmM z&Py5ut>pJN>VsA>jd*-De*r`PwdOA-gVyov)Bf-E%o6o8H}S6^tg^*%uJidqpPB2v z#45C_zs+%WVe$@MUbKtw?4lvbxi5I>aAMCMUOJSUe9dbZv+pxsLYd!~H9mwnx$rTp zhG$WGAZL~tX>QaEgrSzC5QgAHTR#u;QvL*k(X)X>Yy7qK5k^st_}2U?)g5)C*{G@f z220~%tcZ6}yS&hTv-T}e_2W^G<2vku=dl<@9x%2=&U>703~WYC=?>HlkDxAi7DMqCYKdN;I_P)QY`$>R=c=RHwZMGb-|1~D zQc!C%3H@;{YGjMBIPO6$#U<2~=Q(CxK=n~e=t0$IVt%}W>d5a{7M$5O|@>$e{{z7#$$9LvNxlscuh`F&c>UuGl2RooP zVPEvc@!v83ek7BqP)FWFec)5nOl(Ho@F1!q_w0G+-{w^ujC!$DMt!c8H5S#eWUPqk zsHbKLmc;!Sg||Hx2b z&rnNK{frrD47R7-4>ePpQP)3$(cIs;N}?qwc-EXKj=EtjR0kTOF4z;RU_9zQF&8)C zDb&c``QGg68Q6gGa?FL-up{2XL~L}9*D$U|KRy4~NwgMsunZPDZ`Q0Kwxyhep|}e} z@Pzd$>al!^`dZEZgBd^-)QwtVFWiLcfd2(EQ?aP8@&4GJ`#a-FG^NKe2VO+o=o+eH zzoRx$#6@$yGlo%)#a1{JtKn{JjCZjhR=vbuNw5v-v0RAFa6f8ha{b8s>&690G{Q2d zsjZ8VI0|RuD)htX%jRjQkNGGkU@07d+8Ybdjcf5WJc5PL|0gr$rBT<9Lv?uZPt1RH zl2f)K`xWyhtAiRzGHRD@L4DvVs(skcW{iO@58sS9LOudiV^{cQpZbWtPCicOC*UXpNC{%|( zLoMY^)aUYFH%nO5LsEc>>X--Hpr$q!D`7I~!V54Mk7HiEf~D~R7Q_5E%-*Pp;gn;r zCU(R8I0NS065X{hs=SOV{18_ajxdtZ<928nK%gxPU6YOUsB4qS>F!CKVJ>_v^_6c)xC zsFAq-W2Q78s(l2igRh~MtP|>U12HF#!EinQlSp*og{Y2fLhb&Os0+VDT`12TGv%dF zk6%mF4D~^cY$6uL754l$7(n?vYLi|=b>J`5ew@^jJba^fBTKW-jt_fHN1`8vG85iUsF7cL_Hsiy3og{ z$7zLiA8MqRZ8_ULbH2E>KB~h#u`Dh{&FCTQix;p9*1d1mem1In@jmmfO;hE88Bu@K zuAPSJ&{tRsFJU7LeP}jSH>^W>KI;5QTlRls&Nsnm>L;Vl??$zMWXq9{%^$lHA2a{j zog1iVinmcWihN?eL{d@Z&Db0tpxW1d%Awg z&&^X7g@Kek(Io0g6D){>Q7@QD7>sjKH(rh5xC?9IDXfk;U$9@WKI%r_V-z<0%PhqZ ztVDS$M&f1EW)J+^TW0-9v_^d~8t0=n(FxQDo?v0D{L;K&T4O89QkzDYiZc>a&N|J^^C2HKV5IN6e5PdX*J;Z1##V>0n?q6_sosV|P@a462B zK0CSAxCox7?h|4xp^bfm_>Rz_{WXpFg>z>$K`gEJ$i@d(k+maMnkwf3P9+Wz+NkY` z+k}p9iCaWD;u6>BjXLyb>ImU_ua07z-$3-GVy3P9fbu0R&@d{hQE>Btc!SY*9I z{uyzM@(DbQ@8jQujxEG>+x8AV@z(y|kL#o(i6E}8r{>l1i4x6!DL$k>KIvFuU2VN+ zs=Yt2P&eDwkELc7`8Hfc%=fl1Z^9fuV%8*l;Yc!F(+*U4)U z|036ShK`y<9?D^a-h%%;JiKxLcPz8H8@mymICIyYby4m?UISm)x}R`>%?DB6h`bvy zhTM(6;Tp`#p!VbcKU~?E|Gm`e7l;pt6?~u|jdzoeB65@0rtUtWFPLCEJB=terCb$5 za1b$$_=b3ky0RF874bD3Nn9p$gc4iHcX`Xq|2dKpTzDI%5^KH9_}8tsfhlw*FHW0+ zwl0C{MDi@$iC+-QP-8IPWYQDCzCvY4p+A2S2UqMoajW1rqXlRo_R(^d*UHc zn#fE2MqEP-A=m#;Tu8hiI%xfyll;JmgIGr&;J9G${@hIceOt~+9!>m*@)+U( z(UbCHLPtmZia13c!Hr)Xmq{{gp_Xl%qO#V10u{~i4zYsx&^9=VUr_eLK6sUQPP{sf z*`&8^Ujg5vZr!T}7)a!yBR|@@sk8|ua!?meou@HB>QK?eHfTlOfY1?1d`>(j&QSLQ z;YV1oT41cMRhDB&Jzcy)A5b968UN(%(na7#owZa*poRp(Tvzh=zMnK ze@D5*QE~C<<=wBRr6vrIPj`3i+Nx=0yJ}lqnGI@I@Xfg2a6#s^CY@ZFqnii2a&{aZ zmy$j>eRO6@n-U?JG5sTRW&D=BC*w|P)y!+d_J)NF8I+om=uR1)+&?kRJs>qLIW9eO z!F!zwXO>%eB4^E%)O2@3>d2I&)VKt9oI7Fgz`^NpN$$8|!xGcgn!1$Kl*j>tQw9$k zl$hX7O-o2j%lvKQa=*-|?e1)udw0I{&4@g(BQx#rdROM2WBptKrb7vF35l6!PPGlo zD1Ih)=AmCJ24)QZi_@% diff --git a/core/locale/pt_BR/LC_MESSAGES/django.po b/core/locale/pt_BR/LC_MESSAGES/django.po index 21693a04..7c15afa8 100644 --- a/core/locale/pt_BR/LC_MESSAGES/django.po +++ b/core/locale/pt_BR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+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:11 +#: core/abstract.py:12 msgid "unique id" msgstr "ID exclusivo" -#: core/abstract.py:12 +#: 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:19 +#: core/abstract.py:20 msgid "is active" msgstr "Está ativo" -#: core/abstract.py:20 +#: core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" @@ -35,19 +35,19 @@ msgstr "" "Se definido como false, esse objeto não poderá ser visto por usuários sem a " "permissão necessária" -#: core/abstract.py:22 core/choices.py:18 +#: core/abstract.py:23 core/choices.py:18 msgid "created" msgstr "Criado" -#: core/abstract.py:22 +#: 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:23 +#: core/abstract.py:24 msgid "modified" msgstr "Modificado" -#: core/abstract.py:23 +#: core/abstract.py:24 msgid "when the object was last modified" msgstr "Quando o objeto foi editado pela última vez" @@ -90,11 +90,11 @@ msgid "selected items have been deactivated." msgstr "Os itens selecionados foram desativados!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 +#: core/graphene/object_types.py:616 core/models.py:701 core/models.py:709 msgid "attribute value" msgstr "Valor do atributo" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 msgid "attribute values" msgstr "Valores de atributos" @@ -106,7 +106,7 @@ msgstr "Imagem" msgid "images" msgstr "Imagens" -#: core/admin.py:155 core/models.py:445 +#: core/admin.py:155 core/models.py:459 msgid "stock" msgstr "Estoque" @@ -114,11 +114,11 @@ msgstr "Estoque" msgid "stocks" msgstr "Ações" -#: core/admin.py:166 core/models.py:1609 +#: core/admin.py:166 core/models.py:1667 msgid "order product" msgstr "Pedido de produto" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 msgid "order products" msgstr "Solicitar produtos" @@ -736,7 +736,7 @@ msgstr "excluir uma relação pedido-produto" msgid "add or remove feedback on an order–product relation" msgstr "adicionar ou remover feedback em uma relação pedido-produto" -#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 msgid "no search term provided." msgstr "Nenhum termo de pesquisa foi fornecido." @@ -789,7 +789,7 @@ msgid "Quantity" msgstr "Quantidade" #: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:287 core/models.py:369 core/models.py:522 +#: core/models.py:301 core/models.py:383 core/models.py:536 msgid "Slug" msgstr "Lesma" @@ -805,7 +805,7 @@ msgstr "Incluir subcategorias" msgid "Include personal ordered" msgstr "Incluir produtos pessoais encomendados" -#: core/filters.py:85 core/models.py:526 +#: core/filters.py:85 core/models.py:540 msgid "SKU" msgstr "SKU" @@ -879,7 +879,7 @@ msgstr "Dados em cache" msgid "camelized JSON data from the requested URL" msgstr "Dados JSON camelizados da URL solicitada" -#: core/graphene/mutations.py:65 core/views.py:360 +#: core/graphene/mutations.py:65 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "Somente URLs que começam com http(s):// são permitidos" @@ -910,7 +910,7 @@ 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:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:839 +#: core/graphene/mutations.py:527 core/viewsets.py:679 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "O tipo errado veio do método order.buy(): {type(instance)!s}" @@ -985,9 +985,9 @@ msgstr "Orderproduct {order_product_uuid} não encontrado!" msgid "original address string provided by the user" msgstr "Cadeia de endereços original fornecida pelo usuário" -#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 -#: core/models.py:1234 core/models.py:1263 core/models.py:1288 -#: core/viewsets.py:842 +#: core/graphene/mutations.py:656 core/models.py:849 core/models.py:862 +#: core/models.py:1281 core/models.py:1310 core/models.py:1335 +#: core/viewsets.py:682 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} não existe: {uuid}!" @@ -1001,8 +1001,8 @@ msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - funciona muito bem" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 -#: core/models.py:1686 +#: core/graphene/object_types.py:444 core/models.py:672 core/models.py:1144 +#: core/models.py:1744 msgid "attributes" msgstr "Atributos" @@ -1015,11 +1015,11 @@ 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:224 core/models.py:312 core/models.py:612 +#: core/graphene/object_types.py:224 core/models.py:326 core/models.py:626 msgid "categories" msgstr "Categorias" -#: core/graphene/object_types.py:124 core/models.py:383 +#: core/graphene/object_types.py:124 core/models.py:397 msgid "brands" msgstr "Marcas" @@ -1028,7 +1028,7 @@ msgid "category image url" msgstr "Categorias" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:249 +#: core/models.py:263 msgid "markup percentage" msgstr "Porcentagem de marcação" @@ -1050,7 +1050,7 @@ msgstr "Tags para esta categoria" msgid "products in this category" msgstr "Produtos desta categoria" -#: core/graphene/object_types.py:351 core/models.py:155 +#: core/graphene/object_types.py:351 core/models.py:169 msgid "vendors" msgstr "Vendors" @@ -1076,7 +1076,7 @@ msgid "represents feedback from a user." msgstr "Representa o feedback de um usuário." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1110 +#: core/models.py:1138 msgid "notifications" msgstr "Notificações" @@ -1084,7 +1084,7 @@ msgstr "Notificações" 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:400 core/models.py:1791 +#: core/graphene/object_types.py:400 core/models.py:1860 msgid "feedback" msgstr "Feedback" @@ -1092,7 +1092,7 @@ msgstr "Feedback" msgid "a list of order products in this order" msgstr "Uma lista dos produtos solicitados nesse pedido" -#: core/graphene/object_types.py:436 core/models.py:1080 +#: core/graphene/object_types.py:436 core/models.py:1108 msgid "billing address" msgstr "Endereço de cobrança" @@ -1120,7 +1120,7 @@ msgstr "Todos os produtos estão no pedido digital?" msgid "transactions for this order" msgstr "Transações para esta ordem" -#: core/graphene/object_types.py:465 core/models.py:1144 +#: core/graphene/object_types.py:465 core/models.py:1172 msgid "orders" msgstr "Pedidos" @@ -1132,15 +1132,15 @@ msgstr "URL da imagem" msgid "product's images" msgstr "Imagens do produto" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 +#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 msgid "category" msgstr "Categoria" -#: core/graphene/object_types.py:502 core/models.py:1792 +#: core/graphene/object_types.py:502 core/models.py:1861 msgid "feedbacks" msgstr "Feedbacks" -#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 +#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 msgid "brand" msgstr "Brand" @@ -1172,7 +1172,7 @@ msgstr "Número de feedbacks" msgid "only available for personal orders" msgstr "Produtos disponíveis apenas para pedidos pessoais" -#: core/graphene/object_types.py:534 core/models.py:536 +#: core/graphene/object_types.py:534 core/models.py:550 msgid "products" msgstr "Produtos" @@ -1184,15 +1184,15 @@ msgstr "Códigos promocionais" msgid "products on sale" msgstr "Produtos à venda" -#: core/graphene/object_types.py:651 core/models.py:784 +#: core/graphene/object_types.py:651 core/models.py:798 msgid "promotions" msgstr "Promoções" -#: core/graphene/object_types.py:655 core/models.py:154 +#: core/graphene/object_types.py:655 core/models.py:168 msgid "vendor" msgstr "Vendor" -#: core/graphene/object_types.py:656 core/models.py:535 +#: core/graphene/object_types.py:656 core/models.py:549 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1200,11 +1200,11 @@ msgstr "Vendor" msgid "product" msgstr "Produto" -#: core/graphene/object_types.py:667 core/models.py:807 +#: core/graphene/object_types.py:667 core/models.py:821 msgid "wishlisted products" msgstr "Produtos da lista de desejos" -#: core/graphene/object_types.py:673 core/models.py:824 +#: core/graphene/object_types.py:673 core/models.py:838 msgid "wishlists" msgstr "Listas de desejos" @@ -1212,7 +1212,7 @@ msgstr "Listas de desejos" msgid "tagged products" msgstr "Produtos marcados" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 +#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 msgid "product tags" msgstr "Etiquetas do produto" @@ -1323,7 +1323,7 @@ msgstr "Grupo de atributos pai" msgid "attribute group's name" msgstr "Nome do grupo de atributos" -#: core/models.py:100 core/models.py:620 +#: core/models.py:100 core/models.py:634 msgid "attribute group" msgstr "Grupo de atributos" @@ -1372,7 +1372,7 @@ msgstr "Nome do fornecedor" msgid "vendor name" msgstr "Nome do fornecedor" -#: core/models.py:163 +#: core/models.py:177 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1387,27 +1387,27 @@ msgstr "" "operações exportadas por meio de mixins e fornece personalização de " "metadados para fins administrativos." -#: core/models.py:175 core/models.py:206 +#: core/models.py:189 core/models.py:220 msgid "internal tag identifier for the product tag" msgstr "Identificador de tag interno para a tag do produto" -#: core/models.py:176 core/models.py:207 +#: core/models.py:190 core/models.py:221 msgid "tag name" msgstr "Nome da etiqueta" -#: core/models.py:180 core/models.py:211 +#: core/models.py:194 core/models.py:225 msgid "user-friendly name for the product tag" msgstr "Nome de fácil utilização para a etiqueta do produto" -#: core/models.py:181 core/models.py:212 +#: core/models.py:195 core/models.py:226 msgid "tag display name" msgstr "Nome de exibição da tag" -#: core/models.py:189 +#: core/models.py:203 msgid "product tag" msgstr "Etiqueta do produto" -#: core/models.py:195 +#: core/models.py:209 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 " @@ -1418,15 +1418,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:220 +#: core/models.py:234 msgid "category tag" msgstr "tag de categoria" -#: core/models.py:221 core/models.py:293 +#: core/models.py:235 core/models.py:307 msgid "category tags" msgstr "tags de categoria" -#: core/models.py:226 +#: core/models.py:240 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1449,51 +1449,51 @@ msgstr "" "descrição e a hierarquia das categorias, bem como atribuam atributos como " "imagens, tags ou prioridade." -#: core/models.py:240 +#: core/models.py:254 msgid "upload an image representing this category" msgstr "Faça upload de uma imagem que represente essa categoria" -#: core/models.py:243 +#: core/models.py:257 msgid "category image" msgstr "Imagem da categoria" -#: core/models.py:248 +#: core/models.py:262 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:257 +#: core/models.py:271 msgid "parent of this category to form a hierarchical structure" msgstr "Pai dessa categoria para formar uma estrutura hierárquica" -#: core/models.py:258 +#: core/models.py:272 msgid "parent category" msgstr "Categoria dos pais" -#: core/models.py:263 +#: core/models.py:277 msgid "category name" msgstr "Nome da categoria" -#: core/models.py:264 +#: core/models.py:278 msgid "provide a name for this category" msgstr "Forneça um nome para essa categoria" -#: core/models.py:271 +#: core/models.py:285 msgid "add a detailed description for this category" msgstr "Adicione uma descrição detalhada para essa categoria" -#: core/models.py:272 +#: core/models.py:286 msgid "category description" msgstr "Descrição da categoria" -#: core/models.py:292 +#: core/models.py:306 msgid "tags that help describe or group this category" msgstr "tags que ajudam a descrever ou agrupar essa categoria" -#: core/models.py:299 core/models.py:375 +#: core/models.py:313 core/models.py:389 msgid "priority" msgstr "Prioridade" -#: core/models.py:318 +#: core/models.py:332 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1507,47 +1507,47 @@ msgstr "" "Ela permite a organização e a representação de dados relacionados à marca no" " aplicativo." -#: core/models.py:328 +#: core/models.py:342 msgid "name of this brand" msgstr "Nome da marca" -#: core/models.py:329 +#: core/models.py:343 msgid "brand name" msgstr "Nome da marca" -#: core/models.py:336 +#: core/models.py:350 msgid "upload a logo representing this brand" msgstr "Faça upload de um logotipo que represente essa marca" -#: core/models.py:338 +#: core/models.py:352 msgid "brand small image" msgstr "Imagem pequena da marca" -#: core/models.py:344 +#: core/models.py:358 msgid "upload a big logo representing this brand" msgstr "Faça upload de um logotipo grande que represente essa marca" -#: core/models.py:346 +#: core/models.py:360 msgid "brand big image" msgstr "Imagem de marca grande" -#: core/models.py:351 +#: core/models.py:365 msgid "add a detailed description of the brand" msgstr "Adicione uma descrição detalhada da marca" -#: core/models.py:352 +#: core/models.py:366 msgid "brand description" msgstr "Descrição da marca" -#: core/models.py:357 +#: core/models.py:371 msgid "optional categories that this brand is associated with" msgstr "Categorias opcionais às quais essa marca está associada" -#: core/models.py:358 +#: core/models.py:372 msgid "associated categories" msgstr "Categorias" -#: core/models.py:388 +#: core/models.py:402 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1563,68 +1563,68 @@ 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:400 +#: core/models.py:414 msgid "the vendor supplying this product stock" msgstr "O fornecedor que fornece esse estoque de produtos" -#: core/models.py:401 +#: core/models.py:415 msgid "associated vendor" msgstr "Fornecedor associado" -#: core/models.py:405 +#: core/models.py:419 msgid "final price to the customer after markups" msgstr "Preço final para o cliente após as marcações" -#: core/models.py:406 +#: core/models.py:420 msgid "selling price" msgstr "Preço de venda" -#: core/models.py:411 +#: core/models.py:425 msgid "the product associated with this stock entry" msgstr "O produto associado a essa entrada em estoque" -#: core/models.py:412 core/models.py:683 core/models.py:730 -#: core/models.py:1583 +#: core/models.py:426 core/models.py:697 core/models.py:744 +#: core/models.py:1641 msgid "associated product" msgstr "Produto associado" -#: core/models.py:419 +#: core/models.py:433 msgid "the price paid to the vendor for this product" msgstr "O preço pago ao fornecedor por esse produto" -#: core/models.py:420 +#: core/models.py:434 msgid "vendor purchase price" msgstr "Preço de compra do fornecedor" -#: core/models.py:424 +#: core/models.py:438 msgid "available quantity of the product in stock" msgstr "Quantidade disponível do produto em estoque" -#: core/models.py:425 +#: core/models.py:439 msgid "quantity in stock" msgstr "Quantidade em estoque" -#: core/models.py:429 +#: core/models.py:443 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU atribuído pelo fornecedor para identificar o produto" -#: core/models.py:430 +#: core/models.py:444 msgid "vendor sku" msgstr "SKU do fornecedor" -#: core/models.py:436 +#: core/models.py:450 msgid "digital file associated with this stock if applicable" msgstr "Arquivo digital associado a esse estoque, se aplicável" -#: core/models.py:437 +#: core/models.py:451 msgid "digital file" msgstr "Arquivo digital" -#: core/models.py:446 +#: core/models.py:460 msgid "stock entries" msgstr "Entradas de estoque" -#: core/models.py:451 +#: core/models.py:465 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1645,55 +1645,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:464 +#: core/models.py:478 msgid "category this product belongs to" msgstr "Categoria à qual este produto pertence" -#: core/models.py:473 +#: core/models.py:487 msgid "optionally associate this product with a brand" msgstr "Opcionalmente, associe esse produto a uma marca" -#: core/models.py:479 +#: core/models.py:493 msgid "tags that help describe or group this product" msgstr "Tags que ajudam a descrever ou agrupar este produto" -#: core/models.py:484 +#: core/models.py:498 msgid "indicates whether this product is digitally delivered" msgstr "Indica se esse produto é entregue digitalmente" -#: core/models.py:485 +#: core/models.py:499 msgid "is product digital" msgstr "O produto é digital" -#: core/models.py:491 +#: core/models.py:505 msgid "provide a clear identifying name for the product" msgstr "Fornecer um nome de identificação claro para o produto" -#: core/models.py:492 +#: core/models.py:506 msgid "product name" msgstr "Nome do produto" -#: core/models.py:497 core/models.py:772 +#: core/models.py:511 core/models.py:786 msgid "add a detailed description of the product" msgstr "Adicione uma descrição detalhada do produto" -#: core/models.py:498 +#: core/models.py:512 msgid "product description" msgstr "Descrição do produto" -#: core/models.py:505 +#: core/models.py:519 msgid "part number for this product" msgstr "Número de peça para este produto" -#: core/models.py:506 +#: core/models.py:520 msgid "part number" msgstr "Número da peça" -#: core/models.py:525 +#: core/models.py:539 msgid "stock keeping unit for this product" msgstr "Unidade de Manutenção de Estoque para este produto" -#: core/models.py:599 +#: core/models.py:613 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 " @@ -1709,69 +1709,69 @@ 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:611 +#: core/models.py:625 msgid "category of this attribute" msgstr "Categoria desse atributo" -#: core/models.py:619 +#: core/models.py:633 msgid "group of this attribute" msgstr "Grupo desse atributo" -#: core/models.py:625 +#: core/models.py:639 msgid "string" msgstr "Cordas" -#: core/models.py:626 +#: core/models.py:640 msgid "integer" msgstr "Inteiro" -#: core/models.py:627 +#: core/models.py:641 msgid "float" msgstr "Flutuação" -#: core/models.py:628 +#: core/models.py:642 msgid "boolean" msgstr "Booleano" -#: core/models.py:629 +#: core/models.py:643 msgid "array" msgstr "Matriz" -#: core/models.py:630 +#: core/models.py:644 msgid "object" msgstr "Objeto" -#: core/models.py:632 +#: core/models.py:646 msgid "type of the attribute's value" msgstr "Tipo do valor do atributo" -#: core/models.py:633 +#: core/models.py:647 msgid "value type" msgstr "Tipo de valor" -#: core/models.py:638 +#: core/models.py:652 msgid "name of this attribute" msgstr "Nome desse atributo" -#: core/models.py:639 +#: core/models.py:653 msgid "attribute's name" msgstr "Nome do atributo" -#: core/models.py:645 +#: core/models.py:659 msgid "is filterable" msgstr "é filtrável" -#: core/models.py:646 +#: core/models.py:660 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:657 core/models.py:675 +#: core/models.py:671 core/models.py:689 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Atributo" -#: core/models.py:663 +#: core/models.py:677 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" @@ -1781,19 +1781,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:674 +#: core/models.py:688 msgid "attribute of this value" msgstr "Atributo desse valor" -#: core/models.py:682 +#: core/models.py:696 msgid "the specific product associated with this attribute's value" msgstr "O produto específico associado ao valor desse atributo" -#: core/models.py:688 +#: core/models.py:702 msgid "the specific value for this attribute" msgstr "O valor específico para esse atributo" -#: core/models.py:701 +#: core/models.py:715 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -1807,40 +1807,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:712 +#: core/models.py:726 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:713 +#: core/models.py:727 msgid "image alt text" msgstr "Texto alternativo da imagem" -#: core/models.py:716 +#: core/models.py:730 msgid "upload the image file for this product" msgstr "Faça o upload do arquivo de imagem para este produto" -#: core/models.py:717 core/models.py:742 +#: core/models.py:731 core/models.py:756 msgid "product image" msgstr "Imagem do produto" -#: core/models.py:723 +#: core/models.py:737 msgid "determines the order in which images are displayed" msgstr "Determina a ordem em que as imagens são exibidas" -#: core/models.py:724 +#: core/models.py:738 msgid "display priority" msgstr "Prioridade de exibição" -#: core/models.py:729 +#: core/models.py:743 msgid "the product that this image represents" msgstr "O produto que esta imagem representa" -#: core/models.py:743 +#: core/models.py:757 msgid "product images" msgstr "Imagens do produto" -#: core/models.py:748 +#: core/models.py:762 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1856,39 +1856,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:760 +#: core/models.py:774 msgid "percentage discount for the selected products" msgstr "Desconto percentual para os produtos selecionados" -#: core/models.py:761 +#: core/models.py:775 msgid "discount percentage" msgstr "Porcentagem de desconto" -#: core/models.py:766 +#: core/models.py:780 msgid "provide a unique name for this promotion" msgstr "Forneça um nome exclusivo para essa promoção" -#: core/models.py:767 +#: core/models.py:781 msgid "promotion name" msgstr "Nome da promoção" -#: core/models.py:773 +#: core/models.py:787 msgid "promotion description" msgstr "Descrição da promoção" -#: core/models.py:778 +#: core/models.py:792 msgid "select which products are included in this promotion" msgstr "Selecione quais produtos estão incluídos nessa promoção" -#: core/models.py:779 +#: core/models.py:793 msgid "included products" msgstr "Produtos incluídos" -#: core/models.py:783 +#: core/models.py:797 msgid "promotion" msgstr "Promoção" -#: core/models.py:794 +#: core/models.py:808 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1901,23 +1901,23 @@ msgstr "" " bem como operações de suporte para adicionar e remover vários produtos de " "uma só vez." -#: core/models.py:806 +#: core/models.py:820 msgid "products that the user has marked as wanted" msgstr "Produtos que o usuário marcou como desejados" -#: core/models.py:814 +#: core/models.py:828 msgid "user who owns this wishlist" msgstr "Usuário que possui esta lista de desejos" -#: core/models.py:815 +#: core/models.py:829 msgid "wishlist owner" msgstr "Proprietário da lista de desejos" -#: core/models.py:823 +#: core/models.py:837 msgid "wishlist" msgstr "Lista de desejos" -#: core/models.py:865 +#: core/models.py:879 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1933,19 +1933,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:878 +#: core/models.py:892 msgid "documentary" msgstr "Documentário" -#: core/models.py:879 +#: core/models.py:893 msgid "documentaries" msgstr "Documentários" -#: core/models.py:889 +#: core/models.py:903 msgid "unresolved" msgstr "Não resolvido" -#: core/models.py:894 +#: core/models.py:908 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1967,59 +1967,59 @@ msgstr "" "associar um endereço a um usuário, facilitando o tratamento personalizado " "dos dados." -#: core/models.py:909 +#: core/models.py:923 msgid "address line for the customer" msgstr "Linha de endereço do cliente" -#: core/models.py:910 +#: core/models.py:924 msgid "address line" msgstr "Linha de endereço" -#: core/models.py:912 +#: core/models.py:926 msgid "street" msgstr "Rua" -#: core/models.py:913 +#: core/models.py:927 msgid "district" msgstr "Distrito" -#: core/models.py:914 +#: core/models.py:928 msgid "city" msgstr "Cidade" -#: core/models.py:915 +#: core/models.py:929 msgid "region" msgstr "Região" -#: core/models.py:916 +#: core/models.py:930 msgid "postal code" msgstr "Código postal" -#: core/models.py:917 +#: core/models.py:931 msgid "country" msgstr "País" -#: core/models.py:924 +#: core/models.py:938 msgid "geolocation point: (longitude, latitude)" msgstr "Ponto de geolocalização (Longitude, Latitude)" -#: core/models.py:927 +#: core/models.py:941 msgid "full JSON response from geocoder for this address" msgstr "Resposta JSON completa do geocodificador para este endereço" -#: core/models.py:932 +#: core/models.py:946 msgid "stored JSON response from the geocoding service" msgstr "Resposta JSON armazenada do serviço de geocodificação" -#: core/models.py:940 +#: core/models.py:954 msgid "address" msgstr "Endereço" -#: core/models.py:941 +#: core/models.py:955 msgid "addresses" msgstr "Endereços" -#: core/models.py:953 +#: core/models.py:967 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2036,74 +2036,74 @@ msgstr "" "funcionalidade para validar e aplicar o código promocional a um pedido, " "garantindo que as restrições sejam atendidas." -#: core/models.py:967 +#: core/models.py:981 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:968 +#: core/models.py:982 msgid "promo code identifier" msgstr "Identificador de código promocional" -#: core/models.py:975 +#: core/models.py:989 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:976 +#: core/models.py:990 msgid "fixed discount amount" msgstr "Valor do desconto fixo" -#: core/models.py:982 +#: core/models.py:996 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:983 +#: core/models.py:997 msgid "percentage discount" msgstr "Desconto percentual" -#: core/models.py:988 +#: core/models.py:1002 msgid "timestamp when the promocode expires" msgstr "Registro de data e hora em que o código promocional expira" -#: core/models.py:989 +#: core/models.py:1003 msgid "end validity time" msgstr "Tempo de validade final" -#: core/models.py:994 +#: core/models.py:1008 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:995 +#: core/models.py:1009 msgid "start validity time" msgstr "Hora de início da validade" -#: core/models.py:1000 +#: core/models.py:1014 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:1001 +#: core/models.py:1015 msgid "usage timestamp" msgstr "Registro de data e hora de uso" -#: core/models.py:1006 +#: core/models.py:1020 msgid "user assigned to this promocode if applicable" msgstr "Usuário atribuído a esse código promocional, se aplicável" -#: core/models.py:1007 +#: core/models.py:1021 msgid "assigned user" msgstr "Usuário atribuído" -#: core/models.py:1014 +#: core/models.py:1028 msgid "promo code" msgstr "Código promocional" -#: core/models.py:1015 +#: core/models.py:1029 msgid "promo codes" msgstr "Códigos promocionais" -#: core/models.py:1022 +#: core/models.py:1044 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2111,16 +2111,16 @@ msgstr "" "Apenas um tipo de desconto deve ser definido (valor ou porcentagem), mas não" " ambos ou nenhum." -#: core/models.py:1037 +#: core/models.py:1065 msgid "promocode already used" msgstr "O código promocional já foi usado" -#: core/models.py:1053 +#: core/models.py:1081 #, 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:1062 +#: core/models.py:1090 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 " @@ -2137,138 +2137,138 @@ msgstr "" "atualizados. Da mesma forma, a funcionalidade suporta o gerenciamento dos " "produtos no ciclo de vida do pedido." -#: core/models.py:1079 +#: core/models.py:1107 msgid "the billing address used for this order" msgstr "O endereço de cobrança usado para esse pedido" -#: core/models.py:1087 +#: core/models.py:1115 msgid "optional promo code applied to this order" msgstr "Código promocional opcional aplicado a este pedido" -#: core/models.py:1088 +#: core/models.py:1116 msgid "applied promo code" msgstr "Código promocional aplicado" -#: core/models.py:1096 +#: core/models.py:1124 msgid "the shipping address used for this order" msgstr "O endereço de entrega usado para esse pedido" -#: core/models.py:1097 +#: core/models.py:1125 msgid "shipping address" msgstr "Endereço de entrega" -#: core/models.py:1103 +#: core/models.py:1131 msgid "current status of the order in its lifecycle" msgstr "Status atual do pedido em seu ciclo de vida" -#: core/models.py:1104 +#: core/models.py:1132 msgid "order status" msgstr "Status do pedido" -#: core/models.py:1109 core/models.py:1560 +#: core/models.py:1137 core/models.py:1618 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:1115 +#: core/models.py:1143 msgid "json representation of order attributes for this order" msgstr "Representação JSON dos atributos do pedido para esse pedido" -#: core/models.py:1121 +#: core/models.py:1149 msgid "the user who placed the order" msgstr "O usuário que fez o pedido" -#: core/models.py:1122 +#: core/models.py:1150 msgid "user" msgstr "Usuário" -#: core/models.py:1128 +#: core/models.py:1156 msgid "the timestamp when the order was finalized" msgstr "O registro de data e hora em que o pedido foi finalizado" -#: core/models.py:1129 +#: core/models.py:1157 msgid "buy time" msgstr "Tempo de compra" -#: core/models.py:1136 +#: core/models.py:1164 msgid "a human-readable identifier for the order" msgstr "Um identificador legível por humanos para o pedido" -#: core/models.py:1137 +#: core/models.py:1165 msgid "human readable id" msgstr "ID legível por humanos" -#: core/models.py:1143 +#: core/models.py:1171 msgid "order" msgstr "Pedido" -#: core/models.py:1168 +#: core/models.py:1209 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:1202 +#: core/models.py:1249 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:1207 +#: core/models.py:1254 msgid "you cannot add inactive products to order" msgstr "Não é possível adicionar produtos inativos ao pedido" -#: core/models.py:1224 +#: core/models.py:1271 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:1246 core/models.py:1271 core/models.py:1279 +#: core/models.py:1293 core/models.py:1318 core/models.py:1326 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:1267 +#: core/models.py:1314 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} não existe com a consulta <{query}>!" -#: core/models.py:1299 +#: core/models.py:1346 msgid "promocode does not exist" msgstr "O código promocional não existe" -#: core/models.py:1305 +#: core/models.py:1352 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:1324 +#: core/models.py:1371 msgid "address does not exist" msgstr "O endereço não existe" -#: core/models.py:1345 core/models.py:1414 +#: core/models.py:1392 core/models.py:1461 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:1348 core/models.py:1410 +#: core/models.py:1395 core/models.py:1457 msgid "invalid force value" msgstr "Valor de força inválido" -#: core/models.py:1354 core/models.py:1417 +#: core/models.py:1401 core/models.py:1464 msgid "you cannot purchase an empty order!" msgstr "Você não pode comprar um pedido vazio!" -#: core/models.py:1373 +#: core/models.py:1420 msgid "you cannot buy an order without a user" msgstr "Não é possível comprar um pedido sem um usuário!" -#: core/models.py:1387 +#: core/models.py:1434 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:1392 +#: core/models.py:1439 msgid "insufficient funds to complete the order" msgstr "Fundos insuficientes para concluir o pedido" -#: core/models.py:1426 +#: core/models.py:1473 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2276,7 +2276,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:1435 +#: core/models.py:1482 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2284,7 +2284,7 @@ msgstr "" "Método de pagamento inválido: {payment_method} de " "{available_payment_methods}!" -#: core/models.py:1533 +#: core/models.py:1591 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2306,109 +2306,109 @@ msgstr "" "para produtos digitais. O modelo se integra aos modelos Order e Product e " "armazena uma referência a eles." -#: core/models.py:1548 +#: core/models.py:1606 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:1549 +#: core/models.py:1607 msgid "purchase price at order time" msgstr "Preço de compra no momento do pedido" -#: core/models.py:1554 +#: core/models.py:1612 msgid "internal comments for admins about this ordered product" msgstr "" "Comentários internos para administradores sobre este produto encomendado" -#: core/models.py:1555 +#: core/models.py:1613 msgid "internal comments" msgstr "Comentários internos" -#: core/models.py:1561 +#: core/models.py:1619 msgid "user notifications" msgstr "Notificações do usuário" -#: core/models.py:1566 +#: core/models.py:1624 msgid "json representation of this item's attributes" msgstr "Representação JSON dos atributos desse item" -#: core/models.py:1567 +#: core/models.py:1625 msgid "ordered product attributes" msgstr "Atributos ordenados do produto" -#: core/models.py:1572 +#: core/models.py:1630 msgid "reference to the parent order that contains this product" msgstr "Referência ao pedido pai que contém esse produto" -#: core/models.py:1573 +#: core/models.py:1631 msgid "parent order" msgstr "Ordem dos pais" -#: core/models.py:1582 +#: core/models.py:1640 msgid "the specific product associated with this order line" msgstr "O produto específico associado a essa linha de pedido" -#: core/models.py:1589 +#: core/models.py:1647 msgid "quantity of this specific product in the order" msgstr "Quantidade desse produto específico no pedido" -#: core/models.py:1590 +#: core/models.py:1648 msgid "product quantity" msgstr "Quantidade do produto" -#: core/models.py:1597 +#: core/models.py:1655 msgid "current status of this product in the order" msgstr "Status atual desse produto no pedido" -#: core/models.py:1598 +#: core/models.py:1656 msgid "product line status" msgstr "Status da linha de produtos" -#: core/models.py:1661 +#: core/models.py:1719 msgid "order product must have an order" msgstr "O Orderproduct deve ter um pedido associado!" -#: core/models.py:1663 +#: core/models.py:1721 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Ação incorreta especificada para o feedback: {action}!" -#: core/models.py:1677 +#: core/models.py:1735 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:1683 +#: core/models.py:1741 msgid "name" msgstr "Nome" -#: core/models.py:1684 +#: core/models.py:1742 msgid "URL of the integration" msgstr "URL da integração" -#: core/models.py:1685 +#: core/models.py:1743 msgid "authentication credentials" msgstr "Credenciais de autenticação" -#: core/models.py:1699 +#: core/models.py:1765 msgid "you can only have one default CRM provider" msgstr "Você só pode ter um provedor de CRM padrão" -#: core/models.py:1703 +#: core/models.py:1775 msgid "CRM" msgstr "CRM" -#: core/models.py:1704 +#: core/models.py:1776 msgid "CRMs" msgstr "CRMs" -#: core/models.py:1716 +#: core/models.py:1788 msgid "order CRM link" msgstr "Link do CRM do pedido" -#: core/models.py:1717 +#: core/models.py:1789 msgid "orders CRM links" msgstr "Links de CRM dos pedidos" -#: core/models.py:1722 +#: core/models.py:1794 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2424,21 +2424,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:1736 +#: core/models.py:1808 msgid "download" msgstr "Baixar" -#: core/models.py:1737 +#: core/models.py:1809 msgid "downloads" msgstr "Downloads" -#: core/models.py:1745 -msgid "you can not download a digital asset for a non-finished order" -msgstr "" -"Não é possível fazer download de um ativo digital para um pedido não " -"concluído" - -#: core/models.py:1754 +#: core/models.py:1823 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2453,31 +2447,31 @@ 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:1766 +#: core/models.py:1835 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:1767 +#: core/models.py:1836 msgid "feedback comments" msgstr "Comentários de feedback" -#: core/models.py:1774 +#: core/models.py:1843 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:1775 +#: core/models.py:1844 msgid "related order product" msgstr "Produto de pedido relacionado" -#: core/models.py:1780 +#: core/models.py:1849 msgid "user-assigned rating for the product" msgstr "Classificação atribuída pelo usuário ao produto" -#: core/models.py:1781 +#: core/models.py:1850 msgid "product rating" msgstr "Avaliação do produto" @@ -2682,11 +2676,11 @@ msgstr "" "todos os direitos\n" " reservados" -#: core/utils/caching.py:41 +#: core/utils/caching.py:48 msgid "both data and timeout are required" msgstr "São necessários dados e tempo limite" -#: core/utils/caching.py:43 +#: core/utils/caching.py:50 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" @@ -2718,25 +2712,347 @@ msgstr "Você não tem permissão para executar essa ação." msgid "NOMINATIM_URL must be configured." msgstr "O parâmetro NOMINATIM_URL deve ser configurado!" -#: core/validators.py:16 +#: core/validators.py:14 #, 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/validators.py:22 -msgid "invalid phone number format" -msgstr "Formato de número telefônico inválido" +#: core/views.py:72 +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 "" +"Trata a solicitação do índice do mapa do site e retorna uma resposta XML. " +"Ele garante que a resposta inclua o cabeçalho de tipo de conteúdo apropriado" +" para XML." -#: core/views.py:489 +#: core/views.py:87 +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 "" +"Lida com a resposta de exibição detalhada de um mapa do site. Essa função " +"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 +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 +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 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +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 +msgid "Handles `contact us` form submissions." +msgstr "Trata os envios de formulários \"entre em contato conosco\"." + +#: core/views.py:215 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "" +"Trata as solicitações de processamento e validação de URLs de solicitações " +"POST recebidas." + +#: core/views.py:255 +msgid "Handles global search queries." +msgstr "Trata as consultas de pesquisa global." + +#: core/views.py:270 +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:312 msgid "you can only download the digital asset once" msgstr "Você só pode fazer o download do ativo digital uma vez" -#: core/views.py:547 +#: core/views.py:315 +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:353 +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." +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:365 msgid "favicon not found" msgstr "favicon não encontrado" -#: core/viewsets.py:1357 +#: core/views.py:370 +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." +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:382 +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 "" +"Redireciona a solicitação para a página de índice do administrador. A função" +" lida com as solicitações HTTP recebidas e as redireciona para a página de " +"índice da interface de administração do Django. Ela usa a função `redirect` " +"do Django para lidar com o redirecionamento HTTP." + +#: core/viewsets.py:128 +msgid "" +"Defines a viewset for managing Evibes-related operations. The EvibesViewSet " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" +"Define um conjunto de visualizações para gerenciar operações relacionadas ao" +" Evibes. A classe EvibesViewSet é herdeira do ModelViewSet e oferece " +"funcionalidade para lidar com ações e operações em entidades Evibes. Ela " +"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:147 +msgid "" +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." +msgstr "" +"Representa um conjunto de visualizações para gerenciar objetos " +"AttributeGroup. Trata das operações relacionadas ao AttributeGroup, " +"incluindo filtragem, serialização e recuperação de dados. Essa classe faz " +"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:166 +msgid "" +"Handles operations related to Attribute objects within the application. " +"Provides a set of API endpoints to interact with Attribute data. This class " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"Trata de operações relacionadas a objetos de atributo no aplicativo. Fornece" +" um conjunto de pontos de extremidade de API para interagir com dados de " +"atributos. Essa classe gerencia a consulta, a filtragem e a serialização de " +"objetos Attribute, permitindo o controle dinâmico dos dados retornados, como" +" a filtragem por campos específicos ou a recuperação de informações " +"detalhadas ou simplificadas, dependendo da solicitação." + +#: core/viewsets.py:185 +msgid "" +"A viewset for managing AttributeValue objects. This viewset provides " +"functionality for listing, retrieving, creating, updating, and deleting " +"AttributeValue objects. It integrates with Django REST Framework's viewset " +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." +msgstr "" +"Um conjunto de exibições para gerenciar objetos AttributeValue. Esse " +"conjunto de visualizações fornece funcionalidade para listar, recuperar, " +"criar, atualizar e excluir objetos AttributeValue. Ele se integra aos " +"mecanismos do conjunto de visualizações do Django REST Framework e usa " +"serializadores apropriados para diferentes ações. Os recursos de filtragem " +"são fornecidos por meio do DjangoFilterBackend." + +#: core/viewsets.py:204 +msgid "" +"Manages views for Category-related operations. The CategoryViewSet class is " +"responsible for handling operations related to the Category model in the " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" +"Gerencia as visualizações das operações relacionadas à categoria. A classe " +"CategoryViewSet é responsável pelo tratamento das operações relacionadas ao " +"modelo de categoria no sistema. Ela suporta a recuperação, a filtragem e a " +"serialização de dados de categoria. O conjunto de visualizações também impõe" +" permissões para garantir que somente usuários autorizados possam acessar " +"dados específicos." + +#: core/viewsets.py:315 +msgid "" +"Represents a viewset for managing Brand instances. This class provides " +"functionality for querying, filtering, and serializing Brand objects. It " +"uses Django's ViewSet framework to simplify the implementation of API " +"endpoints for Brand objects." +msgstr "" +"Representa um conjunto de visualizações para gerenciar instâncias de marcas." +" Essa classe fornece funcionalidade para consulta, filtragem e serialização " +"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:427 +msgid "" +"Manages operations related to the `Product` model in the system. This class " +"provides a viewset for managing products, including their filtering, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" +"Gerencia as operações relacionadas ao modelo `Product` no sistema. Essa " +"classe fornece um conjunto de visualizações para gerenciar produtos, " +"incluindo filtragem, serialização e operações em instâncias específicas. Ela" +" se estende do `EvibesViewSet` para usar a funcionalidade comum e se integra" +" à estrutura Django REST para operações de API RESTful. Inclui métodos para " +"recuperar detalhes do produto, aplicar permissões e acessar o feedback " +"relacionado de um produto." + +#: core/viewsets.py:547 +msgid "" +"Represents a viewset for managing Vendor objects. This viewset allows " +"fetching, filtering, and serializing Vendor data. It defines the queryset, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" +"Representa um conjunto de visualizações para gerenciar objetos do " +"fornecedor. Esse conjunto de visualizações permite a busca, a filtragem e a " +"serialização de dados do fornecedor. Ele define o conjunto de consultas, as " +"configurações de filtro e as classes de serializador usadas para lidar com " +"diferentes ações. O objetivo dessa classe é fornecer acesso simplificado aos" +" recursos relacionados ao Vendor por meio da estrutura Django REST." + +#: core/viewsets.py:567 +msgid "" +"Representation of a view set handling Feedback objects. This class manages " +"operations related to Feedback objects, including listing, filtering, and " +"retrieving details. The purpose of this view set is to provide different " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"use of Django's filtering system for querying data." +msgstr "" +"Representação de um conjunto de visualizações que manipula objetos de " +"feedback. Essa classe gerencia operações relacionadas a objetos de feedback," +" incluindo listagem, filtragem e recuperação de detalhes. O objetivo desse " +"conjunto de visualizações é fornecer serializadores diferentes para ações " +"diferentes e implementar o manuseio baseado em permissão de objetos de " +"feedback acessíveis. Ela estende a base `EvibesViewSet` e faz uso do sistema" +" de filtragem do Django para consultar dados." + +#: core/viewsets.py:593 +msgid "" +"ViewSet for managing orders and related operations. This class provides " +"functionality to retrieve, modify, and manage order objects. It includes " +"various endpoints for handling order operations such as adding or removing " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " +"enforces permissions accordingly while interacting with order data." +msgstr "" +"ViewSet para gerenciar pedidos e operações relacionadas. Essa classe oferece" +" funcionalidade para recuperar, modificar e gerenciar objetos de pedido. Ela" +" inclui vários pontos de extremidade para lidar com operações de pedidos, " +"como adicionar ou remover produtos, realizar compras para usuários " +"registrados e não registrados e recuperar os pedidos pendentes do usuário " +"autenticado atual. O ViewSet usa vários serializadores com base na ação " +"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:782 +msgid "" +"Provides a viewset for managing OrderProduct entities. This viewset enables " +"CRUD operations and custom actions specific to the OrderProduct model. It " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " +"feedback on OrderProduct instances" +msgstr "" +"Fornece um conjunto de visualizações para gerenciar entidades OrderProduct. " +"Esse conjunto de visualizações permite operações CRUD e ações personalizadas" +" específicas do modelo OrderProduct. Ele inclui filtragem, verificações de " +"permissão e troca de serializador com base na ação solicitada. Além disso, " +"fornece uma ação detalhada para lidar com feedback sobre instâncias de " +"OrderProduct" + +#: core/viewsets.py:833 +msgid "Manages operations related to Product images in the application. " +msgstr "Gerencia operações relacionadas a imagens de produtos no aplicativo." + +#: core/viewsets.py:845 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +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:866 +msgid "Represents a view set for managing promotions. " +msgstr "Representa um conjunto de visualizações para gerenciar promoções." + +#: core/viewsets.py:878 +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:892 +msgid "" +"ViewSet for managing Wishlist operations. The WishlistViewSet provides " +"endpoints for interacting with a user's wish list, allowing for the " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " +"actions for wishlist products. Permission checks are integrated to ensure " +"that users can only manage their own wishlists unless explicit permissions " +"are granted." +msgstr "" +"ViewSet para gerenciar as operações da lista de desejos. O WishlistViewSet " +"fornece pontos de extremidade para interagir com a lista de desejos de um " +"usuário, permitindo a recuperação, a modificação e a personalização de " +"produtos na lista de desejos. Esse ViewSet facilita a funcionalidade, como " +"adição, remoção e ações em massa para produtos da lista de desejos. As " +"verificações de permissão são integradas para garantir que os usuários só " +"possam gerenciar suas próprias listas de desejos, a menos que sejam " +"concedidas permissões explícitas." + +#: core/viewsets.py:1007 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" +"Essa classe fornece a funcionalidade de conjunto de visualizações para " +"gerenciar objetos `Address`. A classe AddressViewSet permite operações CRUD," +" filtragem e ações personalizadas relacionadas a entidades de endereço. Ela " +"inclui comportamentos especializados para diferentes métodos HTTP, " +"substituições de serializadores e tratamento de permissões com base no " +"contexto da solicitação." + +#: core/viewsets.py:1074 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Erro de geocodificação: {e}" + +#: core/viewsets.py:1081 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" +"Trata das operações relacionadas às tags de produtos no aplicativo. Essa " +"classe oferece funcionalidade para recuperar, filtrar e serializar objetos " +"de tag de produto. Ela oferece suporte à filtragem flexível de atributos " +"específicos usando o backend de filtro especificado e usa dinamicamente " +"diferentes serializadores com base na ação que está sendo executada." diff --git a/core/locale/ro_RO/LC_MESSAGES/django.mo b/core/locale/ro_RO/LC_MESSAGES/django.mo index c18ab35eda0e9c6f9c7249dbd86832eb757295ce..60ef81d87db504993721dc8260c3b03c99c0224d 100644 GIT binary patch delta 27339 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 G<^KRvwJEm% delta 12302 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 diff --git a/core/locale/ro_RO/LC_MESSAGES/django.po b/core/locale/ro_RO/LC_MESSAGES/django.po index 2abca391..8fa3e9ff 100644 --- a/core/locale/ro_RO/LC_MESSAGES/django.po +++ b/core/locale/ro_RO/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+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:11 +#: core/abstract.py:12 msgid "unique id" msgstr "ID unic" -#: core/abstract.py:12 +#: 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:19 +#: core/abstract.py:20 msgid "is active" msgstr "Este activ" -#: core/abstract.py:20 +#: core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" @@ -35,19 +35,19 @@ msgstr "" "Dacă este setat la false, acest obiect nu poate fi văzut de utilizatori fără" " permisiunea necesară" -#: core/abstract.py:22 core/choices.py:18 +#: core/abstract.py:23 core/choices.py:18 msgid "created" msgstr "Creat" -#: core/abstract.py:22 +#: 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:23 +#: core/abstract.py:24 msgid "modified" msgstr "Modificat" -#: core/abstract.py:23 +#: core/abstract.py:24 msgid "when the object was last modified" msgstr "Când a fost editat obiectul ultima dată" @@ -90,11 +90,11 @@ msgid "selected items have been deactivated." msgstr "Articolele selectate au fost dezactivate!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 +#: core/graphene/object_types.py:616 core/models.py:701 core/models.py:709 msgid "attribute value" msgstr "Atribut Valoare" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 msgid "attribute values" msgstr "Valori ale atributului" @@ -106,7 +106,7 @@ msgstr "Imagine" msgid "images" msgstr "Imagini" -#: core/admin.py:155 core/models.py:445 +#: core/admin.py:155 core/models.py:459 msgid "stock" msgstr "Stoc" @@ -114,11 +114,11 @@ msgstr "Stoc" msgid "stocks" msgstr "Stocuri" -#: core/admin.py:166 core/models.py:1609 +#: core/admin.py:166 core/models.py:1667 msgid "order product" msgstr "Comanda Produs" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 msgid "order products" msgstr "Comandați produse" @@ -747,7 +747,7 @@ msgstr "ștergeți o relație comandă-produs" msgid "add or remove feedback on an order–product relation" msgstr "adăugarea sau eliminarea feedback-ului într-o relație comandă-produs" -#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 msgid "no search term provided." msgstr "Nu a fost furnizat niciun termen de căutare." @@ -800,7 +800,7 @@ msgid "Quantity" msgstr "Cantitate" #: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:287 core/models.py:369 core/models.py:522 +#: core/models.py:301 core/models.py:383 core/models.py:536 msgid "Slug" msgstr "Melc" @@ -816,7 +816,7 @@ msgstr "Includeți subcategorii" msgid "Include personal ordered" msgstr "Includeți produsele comandate personal" -#: core/filters.py:85 core/models.py:526 +#: core/filters.py:85 core/models.py:540 msgid "SKU" msgstr "SKU" @@ -891,7 +891,7 @@ msgstr "Date în cache" msgid "camelized JSON data from the requested URL" msgstr "Date JSON Camelizate de la URL-ul solicitat" -#: core/graphene/mutations.py:65 core/views.py:360 +#: core/graphene/mutations.py:65 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "Sunt permise numai URL-urile care încep cu http(s)://" @@ -923,7 +923,7 @@ msgstr "" "Vă rugăm să furnizați fie order_uuid sau order_hr_id - se exclud reciproc!" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:839 +#: core/graphene/mutations.py:527 core/viewsets.py:679 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Metoda order.buy() a generat un tip greșit: {type(instance)!s}" @@ -999,9 +999,9 @@ msgstr "Comandaprodus {order_product_uuid} nu a fost găsită!" msgid "original address string provided by the user" msgstr "Șirul de adrese original furnizat de utilizator" -#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 -#: core/models.py:1234 core/models.py:1263 core/models.py:1288 -#: core/viewsets.py:842 +#: core/graphene/mutations.py:656 core/models.py:849 core/models.py:862 +#: core/models.py:1281 core/models.py:1310 core/models.py:1335 +#: core/viewsets.py:682 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} nu există: {uuid}!" @@ -1015,8 +1015,8 @@ msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - funcționează ca un farmec" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 -#: core/models.py:1686 +#: core/graphene/object_types.py:444 core/models.py:672 core/models.py:1144 +#: core/models.py:1744 msgid "attributes" msgstr "Atribute" @@ -1029,11 +1029,11 @@ 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:224 core/models.py:312 core/models.py:612 +#: core/graphene/object_types.py:224 core/models.py:326 core/models.py:626 msgid "categories" msgstr "Categorii" -#: core/graphene/object_types.py:124 core/models.py:383 +#: core/graphene/object_types.py:124 core/models.py:397 msgid "brands" msgstr "Mărci" @@ -1042,7 +1042,7 @@ msgid "category image url" msgstr "Categorii" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:249 +#: core/models.py:263 msgid "markup percentage" msgstr "Procentul de majorare" @@ -1067,7 +1067,7 @@ msgstr "Etichete pentru această categorie" msgid "products in this category" msgstr "Produse din această categorie" -#: core/graphene/object_types.py:351 core/models.py:155 +#: core/graphene/object_types.py:351 core/models.py:169 msgid "vendors" msgstr "Furnizori" @@ -1092,7 +1092,7 @@ msgid "represents feedback from a user." msgstr "Reprezintă feedback de la un utilizator." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1110 +#: core/models.py:1138 msgid "notifications" msgstr "Notificări" @@ -1100,7 +1100,7 @@ msgstr "Notificări" 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:400 core/models.py:1791 +#: core/graphene/object_types.py:400 core/models.py:1860 msgid "feedback" msgstr "Feedback" @@ -1108,7 +1108,7 @@ msgstr "Feedback" msgid "a list of order products in this order" msgstr "O listă a produselor comandate în această comandă" -#: core/graphene/object_types.py:436 core/models.py:1080 +#: core/graphene/object_types.py:436 core/models.py:1108 msgid "billing address" msgstr "Adresa de facturare" @@ -1136,7 +1136,7 @@ msgstr "Sunt toate produsele din comanda digitală" msgid "transactions for this order" msgstr "Tranzacții pentru această comandă" -#: core/graphene/object_types.py:465 core/models.py:1144 +#: core/graphene/object_types.py:465 core/models.py:1172 msgid "orders" msgstr "Ordine" @@ -1148,15 +1148,15 @@ msgstr "URL imagine" msgid "product's images" msgstr "Imagini ale produsului" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 +#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 msgid "category" msgstr "Categorie" -#: core/graphene/object_types.py:502 core/models.py:1792 +#: core/graphene/object_types.py:502 core/models.py:1861 msgid "feedbacks" msgstr "Feedback-uri" -#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 +#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 msgid "brand" msgstr "Marca" @@ -1188,7 +1188,7 @@ msgstr "Numărul de reacții" msgid "only available for personal orders" msgstr "Produse disponibile numai pentru comenzi personale" -#: core/graphene/object_types.py:534 core/models.py:536 +#: core/graphene/object_types.py:534 core/models.py:550 msgid "products" msgstr "Produse" @@ -1200,15 +1200,15 @@ msgstr "Coduri promoționale" msgid "products on sale" msgstr "Produse scoase la vânzare" -#: core/graphene/object_types.py:651 core/models.py:784 +#: core/graphene/object_types.py:651 core/models.py:798 msgid "promotions" msgstr "Promoții" -#: core/graphene/object_types.py:655 core/models.py:154 +#: core/graphene/object_types.py:655 core/models.py:168 msgid "vendor" msgstr "Furnizor" -#: core/graphene/object_types.py:656 core/models.py:535 +#: core/graphene/object_types.py:656 core/models.py:549 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1216,11 +1216,11 @@ msgstr "Furnizor" msgid "product" msgstr "Produs" -#: core/graphene/object_types.py:667 core/models.py:807 +#: core/graphene/object_types.py:667 core/models.py:821 msgid "wishlisted products" msgstr "Produse dorite" -#: core/graphene/object_types.py:673 core/models.py:824 +#: core/graphene/object_types.py:673 core/models.py:838 msgid "wishlists" msgstr "Liste de dorințe" @@ -1228,7 +1228,7 @@ msgstr "Liste de dorințe" msgid "tagged products" msgstr "Produse etichetate" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 +#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 msgid "product tags" msgstr "Etichete de produs" @@ -1340,7 +1340,7 @@ msgstr "Grup de atribute părinte" msgid "attribute group's name" msgstr "Numele grupului de atribute" -#: core/models.py:100 core/models.py:620 +#: core/models.py:100 core/models.py:634 msgid "attribute group" msgstr "Grup de atribute" @@ -1390,7 +1390,7 @@ msgstr "Numele acestui vânzător" msgid "vendor name" msgstr "Numele furnizorului" -#: core/models.py:163 +#: core/models.py:177 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1405,27 +1405,27 @@ msgstr "" "Aceasta acceptă operațiuni exportate prin mixins și oferă personalizarea " "metadatelor în scopuri administrative." -#: core/models.py:175 core/models.py:206 +#: core/models.py:189 core/models.py:220 msgid "internal tag identifier for the product tag" msgstr "Identificator intern de etichetă pentru eticheta produsului" -#: core/models.py:176 core/models.py:207 +#: core/models.py:190 core/models.py:221 msgid "tag name" msgstr "Nume etichetă" -#: core/models.py:180 core/models.py:211 +#: core/models.py:194 core/models.py:225 msgid "user-friendly name for the product tag" msgstr "Nume ușor de utilizat pentru eticheta produsului" -#: core/models.py:181 core/models.py:212 +#: core/models.py:195 core/models.py:226 msgid "tag display name" msgstr "Nume afișare etichetă" -#: core/models.py:189 +#: core/models.py:203 msgid "product tag" msgstr "Etichetă produs" -#: core/models.py:195 +#: core/models.py:209 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 " @@ -1436,15 +1436,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:220 +#: core/models.py:234 msgid "category tag" msgstr "etichetă de categorie" -#: core/models.py:221 core/models.py:293 +#: core/models.py:235 core/models.py:307 msgid "category tags" msgstr "Etichete de categorie" -#: core/models.py:226 +#: core/models.py:240 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1466,52 +1466,52 @@ msgstr "" " administratorilor să specifice numele, descrierea și ierarhia categoriilor," " precum și să atribuie atribute precum imagini, etichete sau prioritate." -#: core/models.py:240 +#: core/models.py:254 msgid "upload an image representing this category" msgstr "Încărcați o imagine care reprezintă această categorie" -#: core/models.py:243 +#: core/models.py:257 msgid "category image" msgstr "Categorie imagine" -#: core/models.py:248 +#: core/models.py:262 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:257 +#: core/models.py:271 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:258 +#: core/models.py:272 msgid "parent category" msgstr "Categoria de părinți" -#: core/models.py:263 +#: core/models.py:277 msgid "category name" msgstr "Numele categoriei" -#: core/models.py:264 +#: core/models.py:278 msgid "provide a name for this category" msgstr "Furnizați un nume pentru această categorie" -#: core/models.py:271 +#: core/models.py:285 msgid "add a detailed description for this category" msgstr "Adăugați o descriere detaliată pentru această categorie" -#: core/models.py:272 +#: core/models.py:286 msgid "category description" msgstr "Descriere categorie" -#: core/models.py:292 +#: core/models.py:306 msgid "tags that help describe or group this category" msgstr "etichete care ajută la descrierea sau gruparea acestei categorii" -#: core/models.py:299 core/models.py:375 +#: core/models.py:313 core/models.py:389 msgid "priority" msgstr "Prioritate" -#: core/models.py:318 +#: core/models.py:332 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1525,47 +1525,47 @@ msgstr "" "Aceasta permite organizarea și reprezentarea datelor legate de marcă în " "cadrul aplicației." -#: core/models.py:328 +#: core/models.py:342 msgid "name of this brand" msgstr "Denumirea acestui brand" -#: core/models.py:329 +#: core/models.py:343 msgid "brand name" msgstr "Nume de marcă" -#: core/models.py:336 +#: core/models.py:350 msgid "upload a logo representing this brand" msgstr "Încărcați un logo care reprezintă acest brand" -#: core/models.py:338 +#: core/models.py:352 msgid "brand small image" msgstr "Brand imagine mică" -#: core/models.py:344 +#: core/models.py:358 msgid "upload a big logo representing this brand" msgstr "Încărcați un logo mare care reprezintă acest brand" -#: core/models.py:346 +#: core/models.py:360 msgid "brand big image" msgstr "Imagine de marcă mare" -#: core/models.py:351 +#: core/models.py:365 msgid "add a detailed description of the brand" msgstr "Adăugați o descriere detaliată a mărcii" -#: core/models.py:352 +#: core/models.py:366 msgid "brand description" msgstr "Descrierea mărcii" -#: core/models.py:357 +#: core/models.py:371 msgid "optional categories that this brand is associated with" msgstr "Categorii opționale cu care acest brand este asociat" -#: core/models.py:358 +#: core/models.py:372 msgid "associated categories" msgstr "Categorii" -#: core/models.py:388 +#: core/models.py:402 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1581,68 +1581,68 @@ 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:400 +#: core/models.py:414 msgid "the vendor supplying this product stock" msgstr "Furnizorul care furnizează acest stoc de produse" -#: core/models.py:401 +#: core/models.py:415 msgid "associated vendor" msgstr "Furnizor asociat" -#: core/models.py:405 +#: core/models.py:419 msgid "final price to the customer after markups" msgstr "Prețul final pentru client după majorări" -#: core/models.py:406 +#: core/models.py:420 msgid "selling price" msgstr "Prețul de vânzare" -#: core/models.py:411 +#: core/models.py:425 msgid "the product associated with this stock entry" msgstr "Produsul asociat cu această intrare în stoc" -#: core/models.py:412 core/models.py:683 core/models.py:730 -#: core/models.py:1583 +#: core/models.py:426 core/models.py:697 core/models.py:744 +#: core/models.py:1641 msgid "associated product" msgstr "Produs asociat" -#: core/models.py:419 +#: core/models.py:433 msgid "the price paid to the vendor for this product" msgstr "Prețul plătit vânzătorului pentru acest produs" -#: core/models.py:420 +#: core/models.py:434 msgid "vendor purchase price" msgstr "Prețul de achiziție al furnizorului" -#: core/models.py:424 +#: core/models.py:438 msgid "available quantity of the product in stock" msgstr "Cantitatea disponibilă a produsului în stoc" -#: core/models.py:425 +#: core/models.py:439 msgid "quantity in stock" msgstr "Cantitate în stoc" -#: core/models.py:429 +#: core/models.py:443 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU atribuit de furnizor pentru identificarea produsului" -#: core/models.py:430 +#: core/models.py:444 msgid "vendor sku" msgstr "SKU al furnizorului" -#: core/models.py:436 +#: core/models.py:450 msgid "digital file associated with this stock if applicable" msgstr "Fișier digital asociat cu acest stoc, dacă este cazul" -#: core/models.py:437 +#: core/models.py:451 msgid "digital file" msgstr "Fișier digital" -#: core/models.py:446 +#: core/models.py:460 msgid "stock entries" msgstr "Intrări pe stoc" -#: core/models.py:451 +#: core/models.py:465 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1663,55 +1663,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:464 +#: core/models.py:478 msgid "category this product belongs to" msgstr "Categoria din care face parte acest produs" -#: core/models.py:473 +#: core/models.py:487 msgid "optionally associate this product with a brand" msgstr "Opțional, asociați acest produs cu un brand" -#: core/models.py:479 +#: core/models.py:493 msgid "tags that help describe or group this product" msgstr "Etichete care ajută la descrierea sau gruparea acestui produs" -#: core/models.py:484 +#: core/models.py:498 msgid "indicates whether this product is digitally delivered" msgstr "Indică dacă acest produs este livrat digital" -#: core/models.py:485 +#: core/models.py:499 msgid "is product digital" msgstr "Produsul este digital" -#: core/models.py:491 +#: core/models.py:505 msgid "provide a clear identifying name for the product" msgstr "Furnizați o denumire clară de identificare a produsului" -#: core/models.py:492 +#: core/models.py:506 msgid "product name" msgstr "Denumirea produsului" -#: core/models.py:497 core/models.py:772 +#: core/models.py:511 core/models.py:786 msgid "add a detailed description of the product" msgstr "Adăugați o descriere detaliată a produsului" -#: core/models.py:498 +#: core/models.py:512 msgid "product description" msgstr "Descrierea produsului" -#: core/models.py:505 +#: core/models.py:519 msgid "part number for this product" msgstr "Numărul piesei pentru acest produs" -#: core/models.py:506 +#: core/models.py:520 msgid "part number" msgstr "Numărul piesei" -#: core/models.py:525 +#: core/models.py:539 msgid "stock keeping unit for this product" msgstr "Stock Keeping Unit pentru acest produs" -#: core/models.py:599 +#: core/models.py:613 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 " @@ -1727,70 +1727,70 @@ 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:611 +#: core/models.py:625 msgid "category of this attribute" msgstr "Categoria acestui atribut" -#: core/models.py:619 +#: core/models.py:633 msgid "group of this attribute" msgstr "Grupul acestui atribut" -#: core/models.py:625 +#: core/models.py:639 msgid "string" msgstr "Șir de caractere" -#: core/models.py:626 +#: core/models.py:640 msgid "integer" msgstr "Număr întreg" -#: core/models.py:627 +#: core/models.py:641 msgid "float" msgstr "Float" -#: core/models.py:628 +#: core/models.py:642 msgid "boolean" msgstr "Boolean" -#: core/models.py:629 +#: core/models.py:643 msgid "array" msgstr "Array" -#: core/models.py:630 +#: core/models.py:644 msgid "object" msgstr "Obiect" -#: core/models.py:632 +#: core/models.py:646 msgid "type of the attribute's value" msgstr "Tipul valorii atributului" -#: core/models.py:633 +#: core/models.py:647 msgid "value type" msgstr "Tipul de valoare" -#: core/models.py:638 +#: core/models.py:652 msgid "name of this attribute" msgstr "Denumirea acestui atribut" -#: core/models.py:639 +#: core/models.py:653 msgid "attribute's name" msgstr "Numele atributului" -#: core/models.py:645 +#: core/models.py:659 msgid "is filterable" msgstr "este filtrabil" -#: core/models.py:646 +#: core/models.py:660 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:657 core/models.py:675 +#: core/models.py:671 core/models.py:689 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Atribut" -#: core/models.py:663 +#: core/models.py:677 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" @@ -1800,19 +1800,19 @@ msgstr "" "produs. Leagă \"atributul\" de o \"valoare\" unică, permițând o mai bună " "organizare și reprezentare dinamică a caracteristicilor produsului." -#: core/models.py:674 +#: core/models.py:688 msgid "attribute of this value" msgstr "Atributul acestei valori" -#: core/models.py:682 +#: core/models.py:696 msgid "the specific product associated with this attribute's value" msgstr "Produsul specific asociat cu valoarea acestui atribut" -#: core/models.py:688 +#: core/models.py:702 msgid "the specific value for this attribute" msgstr "Valoarea specifică pentru acest atribut" -#: core/models.py:701 +#: core/models.py:715 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -1827,39 +1827,39 @@ msgstr "" "asemenea, include o funcție de accesibilitate cu text alternativ pentru " "imagini." -#: core/models.py:712 +#: core/models.py:726 msgid "provide alternative text for the image for accessibility" msgstr "Furnizați text alternativ pentru imagine pentru accesibilitate" -#: core/models.py:713 +#: core/models.py:727 msgid "image alt text" msgstr "Textul alt al imaginii" -#: core/models.py:716 +#: core/models.py:730 msgid "upload the image file for this product" msgstr "Încărcați fișierul de imagine pentru acest produs" -#: core/models.py:717 core/models.py:742 +#: core/models.py:731 core/models.py:756 msgid "product image" msgstr "Imaginea produsului" -#: core/models.py:723 +#: core/models.py:737 msgid "determines the order in which images are displayed" msgstr "Determină ordinea în care sunt afișate imaginile" -#: core/models.py:724 +#: core/models.py:738 msgid "display priority" msgstr "Prioritatea afișării" -#: core/models.py:729 +#: core/models.py:743 msgid "the product that this image represents" msgstr "Produsul pe care îl reprezintă această imagine" -#: core/models.py:743 +#: core/models.py:757 msgid "product images" msgstr "Imagini ale produsului" -#: core/models.py:748 +#: core/models.py:762 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1875,39 +1875,39 @@ msgstr "" "asocierea acesteia la produsele aplicabile. Se integrează cu catalogul de " "produse pentru a determina articolele afectate în cadrul campaniei." -#: core/models.py:760 +#: core/models.py:774 msgid "percentage discount for the selected products" msgstr "Procentul de reducere pentru produsele selectate" -#: core/models.py:761 +#: core/models.py:775 msgid "discount percentage" msgstr "Procent de reducere" -#: core/models.py:766 +#: core/models.py:780 msgid "provide a unique name for this promotion" msgstr "Furnizați un nume unic pentru această promoție" -#: core/models.py:767 +#: core/models.py:781 msgid "promotion name" msgstr "Numele promoției" -#: core/models.py:773 +#: core/models.py:787 msgid "promotion description" msgstr "Descrierea promoției" -#: core/models.py:778 +#: core/models.py:792 msgid "select which products are included in this promotion" msgstr "Selectați ce produse sunt incluse în această promoție" -#: core/models.py:779 +#: core/models.py:793 msgid "included products" msgstr "Produse incluse" -#: core/models.py:783 +#: core/models.py:797 msgid "promotion" msgstr "Promovare" -#: core/models.py:794 +#: core/models.py:808 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1920,23 +1920,23 @@ msgstr "" "precum și operațiuni pentru adăugarea și eliminarea mai multor produse " "simultan." -#: core/models.py:806 +#: core/models.py:820 msgid "products that the user has marked as wanted" msgstr "Produse pe care utilizatorul le-a marcat ca fiind dorite" -#: core/models.py:814 +#: core/models.py:828 msgid "user who owns this wishlist" msgstr "Utilizatorul care deține această listă de dorințe" -#: core/models.py:815 +#: core/models.py:829 msgid "wishlist owner" msgstr "Proprietarul listei de dorințe" -#: core/models.py:823 +#: core/models.py:837 msgid "wishlist" msgstr "Lista dorințelor" -#: core/models.py:865 +#: core/models.py:879 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1953,19 +1953,19 @@ msgstr "" "funcționalitatea mixinilor specifici și oferă caracteristici personalizate " "suplimentare." -#: core/models.py:878 +#: core/models.py:892 msgid "documentary" msgstr "Documentar" -#: core/models.py:879 +#: core/models.py:893 msgid "documentaries" msgstr "Documentare" -#: core/models.py:889 +#: core/models.py:903 msgid "unresolved" msgstr "Nerezolvat" -#: core/models.py:894 +#: core/models.py:908 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1987,59 +1987,59 @@ msgstr "" "unei adrese cu un utilizator, facilitând gestionarea personalizată a " "datelor." -#: core/models.py:909 +#: core/models.py:923 msgid "address line for the customer" msgstr "Linia de adresă pentru client" -#: core/models.py:910 +#: core/models.py:924 msgid "address line" msgstr "Linia de adresă" -#: core/models.py:912 +#: core/models.py:926 msgid "street" msgstr "Strada" -#: core/models.py:913 +#: core/models.py:927 msgid "district" msgstr "Districtul" -#: core/models.py:914 +#: core/models.py:928 msgid "city" msgstr "Oraș" -#: core/models.py:915 +#: core/models.py:929 msgid "region" msgstr "Regiunea" -#: core/models.py:916 +#: core/models.py:930 msgid "postal code" msgstr "Cod poștal" -#: core/models.py:917 +#: core/models.py:931 msgid "country" msgstr "Țara" -#: core/models.py:924 +#: core/models.py:938 msgid "geolocation point: (longitude, latitude)" msgstr "Punct de geolocație (longitudine, latitudine)" -#: core/models.py:927 +#: core/models.py:941 msgid "full JSON response from geocoder for this address" msgstr "Răspuns JSON complet de la geocoder pentru această adresă" -#: core/models.py:932 +#: core/models.py:946 msgid "stored JSON response from the geocoding service" msgstr "Răspuns JSON stocat de la serviciul de geocodare" -#: core/models.py:940 +#: core/models.py:954 msgid "address" msgstr "Adresă" -#: core/models.py:941 +#: core/models.py:955 msgid "addresses" msgstr "Adrese" -#: core/models.py:953 +#: core/models.py:967 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2057,73 +2057,73 @@ msgstr "" " a codului promoțional la o comandă, asigurându-se în același timp că sunt " "respectate constrângerile." -#: core/models.py:967 +#: core/models.py:981 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:968 +#: core/models.py:982 msgid "promo code identifier" msgstr "Cod promoțional de identificare" -#: core/models.py:975 +#: core/models.py:989 msgid "fixed discount amount applied if percent is not used" msgstr "Valoarea fixă a reducerii aplicate dacă procentul nu este utilizat" -#: core/models.py:976 +#: core/models.py:990 msgid "fixed discount amount" msgstr "Valoarea fixă a reducerii" -#: core/models.py:982 +#: core/models.py:996 msgid "percentage discount applied if fixed amount is not used" msgstr "Procentul de reducere aplicat dacă suma fixă nu este utilizată" -#: core/models.py:983 +#: core/models.py:997 msgid "percentage discount" msgstr "Reducere procentuală" -#: core/models.py:988 +#: core/models.py:1002 msgid "timestamp when the promocode expires" msgstr "Data la care expiră codul promoțional" -#: core/models.py:989 +#: core/models.py:1003 msgid "end validity time" msgstr "Timpul final de valabilitate" -#: core/models.py:994 +#: core/models.py:1008 msgid "timestamp from which this promocode is valid" msgstr "Timestamp de la care acest cod promoțional este valabil" -#: core/models.py:995 +#: core/models.py:1009 msgid "start validity time" msgstr "Ora de începere a valabilității" -#: core/models.py:1000 +#: core/models.py:1014 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:1001 +#: core/models.py:1015 msgid "usage timestamp" msgstr "Timestamp de utilizare" -#: core/models.py:1006 +#: core/models.py:1020 msgid "user assigned to this promocode if applicable" msgstr "Utilizatorul atribuit acestui cod promoțional, dacă este cazul" -#: core/models.py:1007 +#: core/models.py:1021 msgid "assigned user" msgstr "Utilizator atribuit" -#: core/models.py:1014 +#: core/models.py:1028 msgid "promo code" msgstr "Cod promoțional" -#: core/models.py:1015 +#: core/models.py:1029 msgid "promo codes" msgstr "Coduri promoționale" -#: core/models.py:1022 +#: core/models.py:1044 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2131,16 +2131,16 @@ msgstr "" "Trebuie definit un singur tip de reducere (sumă sau procent), dar nu ambele " "sau niciuna." -#: core/models.py:1037 +#: core/models.py:1065 msgid "promocode already used" msgstr "Codul promoțional a fost deja utilizat" -#: core/models.py:1053 +#: core/models.py:1081 #, 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:1062 +#: core/models.py:1090 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 " @@ -2157,140 +2157,140 @@ msgstr "" "de expediere sau de facturare. În egală măsură, funcționalitatea sprijină " "gestionarea produselor în ciclul de viață al comenzii." -#: core/models.py:1079 +#: core/models.py:1107 msgid "the billing address used for this order" msgstr "Adresa de facturare utilizată pentru această comandă" -#: core/models.py:1087 +#: core/models.py:1115 msgid "optional promo code applied to this order" msgstr "Cod promoțional opțional aplicat la această comandă" -#: core/models.py:1088 +#: core/models.py:1116 msgid "applied promo code" msgstr "Cod promoțional aplicat" -#: core/models.py:1096 +#: core/models.py:1124 msgid "the shipping address used for this order" msgstr "Adresa de expediere utilizată pentru această comandă" -#: core/models.py:1097 +#: core/models.py:1125 msgid "shipping address" msgstr "Adresa de expediere" -#: core/models.py:1103 +#: core/models.py:1131 msgid "current status of the order in its lifecycle" msgstr "Stadiul actual al comenzii în ciclul său de viață" -#: core/models.py:1104 +#: core/models.py:1132 msgid "order status" msgstr "Stadiul comenzii" -#: core/models.py:1109 core/models.py:1560 +#: core/models.py:1137 core/models.py:1618 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:1115 +#: core/models.py:1143 msgid "json representation of order attributes for this order" msgstr "Reprezentarea JSON a atributelor comenzii pentru această comandă" -#: core/models.py:1121 +#: core/models.py:1149 msgid "the user who placed the order" msgstr "Utilizatorul care a plasat comanda" -#: core/models.py:1122 +#: core/models.py:1150 msgid "user" msgstr "Utilizator" -#: core/models.py:1128 +#: core/models.py:1156 msgid "the timestamp when the order was finalized" msgstr "Momentul în care comanda a fost finalizată" -#: core/models.py:1129 +#: core/models.py:1157 msgid "buy time" msgstr "Cumpărați timp" -#: core/models.py:1136 +#: core/models.py:1164 msgid "a human-readable identifier for the order" msgstr "Un identificator ușor de citit pentru comandă" -#: core/models.py:1137 +#: core/models.py:1165 msgid "human readable id" msgstr "ID lizibil de către om" -#: core/models.py:1143 +#: core/models.py:1171 msgid "order" msgstr "Comandă" -#: core/models.py:1168 +#: core/models.py:1209 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:1202 +#: core/models.py:1249 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:1207 +#: core/models.py:1254 msgid "you cannot add inactive products to order" msgstr "Nu puteți adăuga produse inactive la comandă" -#: core/models.py:1224 +#: core/models.py:1271 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:1246 core/models.py:1271 core/models.py:1279 +#: core/models.py:1293 core/models.py:1318 core/models.py:1326 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:1267 +#: core/models.py:1314 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} nu există cu interogarea <{query}>!" -#: core/models.py:1299 +#: core/models.py:1346 msgid "promocode does not exist" msgstr "Codul promoțional nu există" -#: core/models.py:1305 +#: core/models.py:1352 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:1324 +#: core/models.py:1371 msgid "address does not exist" msgstr "Adresa nu există" -#: core/models.py:1345 core/models.py:1414 +#: core/models.py:1392 core/models.py:1461 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:1348 core/models.py:1410 +#: core/models.py:1395 core/models.py:1457 msgid "invalid force value" msgstr "Valoare forță invalidă" -#: core/models.py:1354 core/models.py:1417 +#: core/models.py:1401 core/models.py:1464 msgid "you cannot purchase an empty order!" msgstr "Nu puteți achiziționa o comandă goală!" -#: core/models.py:1373 +#: core/models.py:1420 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:1387 +#: core/models.py:1434 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:1392 +#: core/models.py:1439 msgid "insufficient funds to complete the order" msgstr "Insuficiența fondurilor pentru finalizarea comenzii" -#: core/models.py:1426 +#: core/models.py:1473 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2298,7 +2298,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:1435 +#: core/models.py:1482 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2306,7 +2306,7 @@ msgstr "" "Metodă de plată invalidă: {payment_method} de la " "{available_payment_methods}!" -#: core/models.py:1533 +#: core/models.py:1591 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2329,110 +2329,110 @@ msgstr "" "produsele digitale. Modelul se integrează cu modelele Order și Product și " "stochează o referință la acestea." -#: core/models.py:1548 +#: core/models.py:1606 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:1549 +#: core/models.py:1607 msgid "purchase price at order time" msgstr "Prețul de achiziție la momentul comenzii" -#: core/models.py:1554 +#: core/models.py:1612 msgid "internal comments for admins about this ordered product" msgstr "" "Comentarii interne pentru administratori cu privire la acest produs comandat" -#: core/models.py:1555 +#: core/models.py:1613 msgid "internal comments" msgstr "Observații interne" -#: core/models.py:1561 +#: core/models.py:1619 msgid "user notifications" msgstr "Notificări pentru utilizatori" -#: core/models.py:1566 +#: core/models.py:1624 msgid "json representation of this item's attributes" msgstr "Reprezentarea JSON a atributelor acestui element" -#: core/models.py:1567 +#: core/models.py:1625 msgid "ordered product attributes" msgstr "Atribute de produs ordonate" -#: core/models.py:1572 +#: core/models.py:1630 msgid "reference to the parent order that contains this product" msgstr "Trimitere la comanda mamă care conține acest produs" -#: core/models.py:1573 +#: core/models.py:1631 msgid "parent order" msgstr "Ordinul părinților" -#: core/models.py:1582 +#: core/models.py:1640 msgid "the specific product associated with this order line" msgstr "Produsul specific asociat cu această linie de comandă" -#: core/models.py:1589 +#: core/models.py:1647 msgid "quantity of this specific product in the order" msgstr "Cantitatea acestui produs specific din comandă" -#: core/models.py:1590 +#: core/models.py:1648 msgid "product quantity" msgstr "Cantitatea produsului" -#: core/models.py:1597 +#: core/models.py:1655 msgid "current status of this product in the order" msgstr "Starea actuală a acestui produs în comandă" -#: core/models.py:1598 +#: core/models.py:1656 msgid "product line status" msgstr "Starea liniei de produse" -#: core/models.py:1661 +#: core/models.py:1719 msgid "order product must have an order" msgstr "Comandaprodusul trebuie să aibă o comandă asociată!" -#: core/models.py:1663 +#: core/models.py:1721 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Acțiune greșită specificată pentru feedback: {action}!" -#: core/models.py:1677 +#: core/models.py:1735 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:1683 +#: core/models.py:1741 msgid "name" msgstr "Nume și prenume" -#: core/models.py:1684 +#: core/models.py:1742 msgid "URL of the integration" msgstr "Adresa URL a integrării" -#: core/models.py:1685 +#: core/models.py:1743 msgid "authentication credentials" msgstr "Acreditări de autentificare" -#: core/models.py:1699 +#: core/models.py:1765 msgid "you can only have one default CRM provider" msgstr "Puteți avea un singur furnizor CRM implicit" -#: core/models.py:1703 +#: core/models.py:1775 msgid "CRM" msgstr "CRM" -#: core/models.py:1704 +#: core/models.py:1776 msgid "CRMs" msgstr "CRM-uri" -#: core/models.py:1716 +#: core/models.py:1788 msgid "order CRM link" msgstr "Legătura CRM a comenzii" -#: core/models.py:1717 +#: core/models.py:1789 msgid "orders CRM links" msgstr "Legături CRM pentru comenzi" -#: core/models.py:1722 +#: core/models.py:1794 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2449,19 +2449,15 @@ msgstr "" "adrese URL pentru descărcarea activului atunci când comanda asociată este în" " stare finalizată." -#: core/models.py:1736 +#: core/models.py:1808 msgid "download" msgstr "Descărcare" -#: core/models.py:1737 +#: core/models.py:1809 msgid "downloads" msgstr "Descărcări" -#: core/models.py:1745 -msgid "you can not download a digital asset for a non-finished order" -msgstr "Nu puteți descărca un bun digital pentru o comandă nefinalizată" - -#: core/models.py:1754 +#: core/models.py:1823 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2476,31 +2472,31 @@ 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:1766 +#: core/models.py:1835 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:1767 +#: core/models.py:1836 msgid "feedback comments" msgstr "Comentarii de feedback" -#: core/models.py:1774 +#: core/models.py:1843 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:1775 +#: core/models.py:1844 msgid "related order product" msgstr "Produs aferent comenzii" -#: core/models.py:1780 +#: core/models.py:1849 msgid "user-assigned rating for the product" msgstr "Rating atribuit de utilizator pentru produs" -#: core/models.py:1781 +#: core/models.py:1850 msgid "product rating" msgstr "Evaluarea produsului" @@ -2706,11 +2702,11 @@ msgstr "" "toate drepturile\n" " rezervate" -#: core/utils/caching.py:41 +#: core/utils/caching.py:48 msgid "both data and timeout are required" msgstr "Sunt necesare atât datele, cât și timpul de așteptare" -#: core/utils/caching.py:43 +#: core/utils/caching.py:50 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "Valoare timeout invalidă, trebuie să fie între 0 și 216000 secunde" @@ -2742,26 +2738,352 @@ msgstr "Nu aveți permisiunea de a efectua această acțiune." msgid "NOMINATIM_URL must be configured." msgstr "Parametrul NOMINATIM_URL trebuie să fie configurat!" -#: core/validators.py:16 +#: core/validators.py:14 #, 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/validators.py:22 -msgid "invalid phone number format" -msgstr "Format invalid al numărului de telefon" +#: core/views.py:72 +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 "" +"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:489 +#: core/views.py:87 +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 "" +"Gestionează răspunsul de vizualizare detaliată pentru o hartă a site-ului. " +"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 +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 +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 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +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 +msgid "Handles `contact us` form submissions." +msgstr "Gestionează trimiterea formularelor `contact us`." + +#: core/views.py:215 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "" +"Gestionează cererile de procesare și validare a URL-urilor din cererile POST" +" primite." + +#: core/views.py:255 +msgid "Handles global search queries." +msgstr "Gestionează interogările de căutare globală." + +#: core/views.py:270 +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:312 msgid "you can only download the digital asset once" msgstr "Puteți descărca activul digital o singură dată" -#: core/views.py:547 +#: core/views.py:315 +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:353 +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." +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:365 msgid "favicon not found" msgstr "favicon nu a fost găsit" -#: core/viewsets.py:1357 +#: core/views.py:370 +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." +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:382 +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 "" +"Redirecționează solicitarea către pagina de index a administratorului. " +"Funcția gestionează cererile HTTP primite și le redirecționează către pagina" +" index a interfeței de administrare Django. Aceasta utilizează funcția " +"`redirect` din Django pentru gestionarea redirecționării HTTP." + +#: core/viewsets.py:128 +msgid "" +"Defines a viewset for managing Evibes-related operations. The EvibesViewSet " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" +"Definește un set de vizualizări pentru gestionarea operațiunilor legate de " +"Evibes. Clasa EvibesViewSet moștenește din ModelViewSet și oferă " +"funcționalitate pentru gestionarea acțiunilor și operațiunilor asupra " +"entităților Evibes. Aceasta include suport pentru clase de serializare " +"dinamice în funcție de acțiunea curentă, permisiuni personalizabile și " +"formate de redare." + +#: core/viewsets.py:147 +msgid "" +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." +msgstr "" +"Reprezintă un set de vizualizări pentru gestionarea obiectelor " +"AttributeGroup. Gestionează operațiunile legate de AttributeGroup, inclusiv " +"filtrarea, serializarea și extragerea datelor. Această clasă face parte din " +"stratul API al aplicației și oferă o modalitate standardizată de a procesa " +"cererile și răspunsurile pentru datele AttributeGroup." + +#: core/viewsets.py:166 +msgid "" +"Handles operations related to Attribute objects within the application. " +"Provides a set of API endpoints to interact with Attribute data. This class " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"Gestionează operațiunile legate de obiectele Attribute în cadrul aplicației." +" Oferă un set de puncte finale API pentru a interacționa cu datele " +"Attribute. Această clasă gestionează interogarea, filtrarea și serializarea " +"obiectelor Attribute, permițând controlul dinamic asupra datelor returnate, " +"cum ar fi filtrarea după câmpuri specifice sau recuperarea de informații " +"detaliate sau simplificate în funcție de cerere." + +#: core/viewsets.py:185 +msgid "" +"A viewset for managing AttributeValue objects. This viewset provides " +"functionality for listing, retrieving, creating, updating, and deleting " +"AttributeValue objects. It integrates with Django REST Framework's viewset " +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." +msgstr "" +"Un set de vizualizări pentru gestionarea obiectelor AttributeValue. Acest " +"set de vizualizări oferă funcționalități pentru listarea, extragerea, " +"crearea, actualizarea și ștergerea obiectelor AttributeValue. Se integrează " +"cu mecanismele viewset ale Django REST Framework și utilizează " +"serializatoare adecvate pentru diferite acțiuni. Capacitățile de filtrare " +"sunt furnizate prin DjangoFilterBackend." + +#: core/viewsets.py:204 +msgid "" +"Manages views for Category-related operations. The CategoryViewSet class is " +"responsible for handling operations related to the Category model in the " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" +"Gestionează vizualizările pentru operațiunile legate de categorie. Clasa " +"CategoryViewSet este responsabilă de gestionarea operațiunilor legate de " +"modelul Category din sistem. Aceasta acceptă recuperarea, filtrarea și " +"serializarea datelor de categorie. De asemenea, setul de vizualizări impune " +"permisiuni pentru a se asigura că numai utilizatorii autorizați pot accesa " +"date specifice." + +#: core/viewsets.py:315 +msgid "" +"Represents a viewset for managing Brand instances. This class provides " +"functionality for querying, filtering, and serializing Brand objects. It " +"uses Django's ViewSet framework to simplify the implementation of API " +"endpoints for Brand objects." +msgstr "" +"Reprezintă un set de vizualizări pentru gestionarea instanțelor Brand. " +"Această clasă oferă funcționalități pentru interogarea, filtrarea și " +"serializarea obiectelor Brand. Utilizează cadrul ViewSet al Django pentru a " +"simplifica implementarea punctelor finale API pentru obiectele Brand." + +#: core/viewsets.py:427 +msgid "" +"Manages operations related to the `Product` model in the system. This class " +"provides a viewset for managing products, including their filtering, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" +"Gestionează operațiunile legate de modelul `Product` din sistem. Această " +"clasă oferă un set de vizualizări pentru gestionarea produselor, inclusiv " +"filtrarea lor, serializarea și operațiunile asupra instanțelor specifice. Se" +" extinde de la `EvibesViewSet` pentru a utiliza funcționalități comune și se" +" integrează cu cadrul REST Django pentru operațiuni API RESTful. Include " +"metode pentru recuperarea detaliilor produsului, aplicarea permisiunilor și " +"accesarea feedback-ului aferent unui produs." + +#: core/viewsets.py:547 +msgid "" +"Represents a viewset for managing Vendor objects. This viewset allows " +"fetching, filtering, and serializing Vendor data. It defines the queryset, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" +"Reprezintă un set de vizualizări pentru gestionarea obiectelor Vendor. Acest" +" set de vizualizare permite preluarea, filtrarea și serializarea datelor " +"furnizorului. Aceasta definește queryset-ul, configurațiile de filtrare și " +"clasele de serializare utilizate pentru a gestiona diferite acțiuni. Scopul " +"acestei clase este de a oferi acces simplificat la resursele legate de " +"Vendor prin intermediul cadrului REST Django." + +#: core/viewsets.py:567 +msgid "" +"Representation of a view set handling Feedback objects. This class manages " +"operations related to Feedback objects, including listing, filtering, and " +"retrieving details. The purpose of this view set is to provide different " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"use of Django's filtering system for querying data." +msgstr "" +"Reprezentarea unui set de vizualizări care gestionează obiecte Feedback. " +"Această clasă gestionează operațiunile legate de obiectele Feedback, " +"inclusiv listarea, filtrarea și extragerea detaliilor. Scopul acestui set de" +" vizualizări este de a furniza serializatoare diferite pentru acțiuni " +"diferite și de a implementa gestionarea pe bază de permisiuni a obiectelor " +"Feedback accesibile. Aceasta extinde clasa de bază `EvibesViewSet` și " +"utilizează sistemul de filtrare Django pentru interogarea datelor." + +#: core/viewsets.py:593 +msgid "" +"ViewSet for managing orders and related operations. This class provides " +"functionality to retrieve, modify, and manage order objects. It includes " +"various endpoints for handling order operations such as adding or removing " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " +"enforces permissions accordingly while interacting with order data." +msgstr "" +"ViewSet pentru gestionarea comenzilor și a operațiunilor conexe. Această " +"clasă oferă funcționalități pentru recuperarea, modificarea și gestionarea " +"obiectelor de comandă. Aceasta include diverse puncte finale pentru " +"gestionarea operațiunilor de comandă, cum ar fi adăugarea sau eliminarea de " +"produse, efectuarea de achiziții pentru utilizatorii înregistrați și " +"neînregistrați și recuperarea comenzilor în așteptare ale utilizatorului " +"autentificat curent. ViewSet utilizează mai multe serializatoare în funcție " +"de acțiunea specifică efectuată și aplică permisiunile corespunzătoare în " +"timpul interacțiunii cu datele comenzii." + +#: core/viewsets.py:782 +msgid "" +"Provides a viewset for managing OrderProduct entities. This viewset enables " +"CRUD operations and custom actions specific to the OrderProduct model. It " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " +"feedback on OrderProduct instances" +msgstr "" +"Oferă un set de vizualizări pentru gestionarea entităților OrderProduct. " +"Acest set de vizualizări permite operațiuni CRUD și acțiuni personalizate " +"specifice modelului OrderProduct. Acesta include filtrarea, verificarea " +"permisiunilor și schimbarea serializatorului în funcție de acțiunea " +"solicitată. În plus, oferă o acțiune detaliată pentru gestionarea feedback-" +"ului privind instanțele OrderProduct" + +#: core/viewsets.py:833 +msgid "Manages operations related to Product images in the application. " +msgstr "" +"Gestionează operațiunile legate de imaginile produselor din aplicație." + +#: core/viewsets.py:845 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +msgstr "" +"Gestionează recuperarea și gestionarea instanțelor PromoCode prin diverse " +"acțiuni API." + +#: core/viewsets.py:866 +msgid "Represents a view set for managing promotions. " +msgstr "Reprezintă un set de vizualizări pentru gestionarea promoțiilor." + +#: core/viewsets.py:878 +msgid "Handles operations related to Stock data in the system." +msgstr "" +"Gestionează operațiunile legate de datele privind stocurile din sistem." + +#: core/viewsets.py:892 +msgid "" +"ViewSet for managing Wishlist operations. The WishlistViewSet provides " +"endpoints for interacting with a user's wish list, allowing for the " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " +"actions for wishlist products. Permission checks are integrated to ensure " +"that users can only manage their own wishlists unless explicit permissions " +"are granted." +msgstr "" +"ViewSet pentru gestionarea operațiunilor Wishlist. WishlistViewSet oferă " +"puncte finale pentru interacțiunea cu lista de dorințe a unui utilizator, " +"permițând extragerea, modificarea și personalizarea produselor din lista de " +"dorințe. Acest ViewSet facilitează funcționalități precum adăugarea, " +"eliminarea și acțiunile în masă pentru produsele din lista de dorințe. " +"Verificările permisiunilor sunt integrate pentru a se asigura că " +"utilizatorii își pot gestiona doar propriile liste de dorințe, cu excepția " +"cazului în care sunt acordate permisiuni explicite." + +#: core/viewsets.py:1007 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" +"Această clasă oferă funcționalități de tip viewset pentru gestionarea " +"obiectelor `Address`. Clasa AddressViewSet permite operațiuni CRUD, filtrare" +" și acțiuni personalizate legate de entitățile adresă. Aceasta include " +"comportamente specializate pentru diferite metode HTTP, înlocuiri ale " +"serializatorului și gestionarea permisiunilor în funcție de contextul " +"cererii." + +#: core/viewsets.py:1074 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Eroare de geocodare: {e}" + +#: core/viewsets.py:1081 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" +"Gestionează operațiunile legate de etichetele produselor în cadrul " +"aplicației. Această clasă oferă funcționalități pentru recuperarea, " +"filtrarea și serializarea obiectelor etichetă de produs. Aceasta suportă " +"filtrarea flexibilă pe baza unor atribute specifice utilizând backend-ul de " +"filtrare specificat și utilizează în mod dinamic serializatoare diferite în " +"funcție de acțiunea efectuată." diff --git a/core/locale/ru_RU/LC_MESSAGES/django.mo b/core/locale/ru_RU/LC_MESSAGES/django.mo index dd780dd720fdf2d85d470b06cb1d57be0292b850..723b3944d1750b6477d40f82ae0882c46b840ccc 100644 GIT binary patch delta 29430 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 jefcZYd{16(-mbjY^pX6\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:11 +#: core/abstract.py:12 msgid "unique id" msgstr "Уникальный идентификатор" -#: core/abstract.py:12 +#: core/abstract.py:13 msgid "unique id is used to surely identify any database object" msgstr "" "Уникальный идентификатор используется для точной идентификации любого " "объекта базы данных" -#: core/abstract.py:19 +#: core/abstract.py:20 msgid "is active" msgstr "Активен" -#: core/abstract.py:20 +#: core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" @@ -35,19 +35,19 @@ msgstr "" "Если установлено значение false, этот объект не может быть виден " "пользователям без необходимого разрешения" -#: core/abstract.py:22 core/choices.py:18 +#: core/abstract.py:23 core/choices.py:18 msgid "created" msgstr "Создано" -#: core/abstract.py:22 +#: core/abstract.py:23 msgid "when the object first appeared on the database" msgstr "Когда объект впервые появился в базе данных" -#: core/abstract.py:23 +#: core/abstract.py:24 msgid "modified" msgstr "Модифицированный" -#: core/abstract.py:23 +#: core/abstract.py:24 msgid "when the object was last modified" msgstr "Когда объект был отредактирован в последний раз" @@ -90,11 +90,11 @@ msgid "selected items have been deactivated." msgstr "Выбранные сущности были деактивированы!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 +#: core/graphene/object_types.py:616 core/models.py:701 core/models.py:709 msgid "attribute value" msgstr "Значение атрибута" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 msgid "attribute values" msgstr "Значения атрибутов" @@ -106,7 +106,7 @@ msgstr "Изображение" msgid "images" msgstr "Изображения" -#: core/admin.py:155 core/models.py:445 +#: core/admin.py:155 core/models.py:459 msgid "stock" msgstr "Наличие" @@ -114,11 +114,11 @@ msgstr "Наличие" msgid "stocks" msgstr "Наличия" -#: core/admin.py:166 core/models.py:1609 +#: core/admin.py:166 core/models.py:1667 msgid "order product" msgstr "Заказанный товар" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 msgid "order products" msgstr "Заказанные товары" @@ -746,7 +746,7 @@ msgstr "удалить отношение \"заказ-продукт" msgid "add or remove feedback on an order–product relation" msgstr "добавлять или удалять отзывы о связи заказ-продукт" -#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 msgid "no search term provided." msgstr "Поисковый запрос не предоставлен." @@ -799,7 +799,7 @@ msgid "Quantity" msgstr "Количество" #: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:287 core/models.py:369 core/models.py:522 +#: core/models.py:301 core/models.py:383 core/models.py:536 msgid "Slug" msgstr "Слаг" @@ -815,7 +815,7 @@ msgstr "Включите подкатегории" msgid "Include personal ordered" msgstr "Включите продукты, заказанные лично" -#: core/filters.py:85 core/models.py:526 +#: core/filters.py:85 core/models.py:540 msgid "SKU" msgstr "Артикул" @@ -890,7 +890,7 @@ msgstr "Кэшированные данные" msgid "camelized JSON data from the requested URL" msgstr "Camelized JSON-данные из запрашиваемого URL" -#: core/graphene/mutations.py:65 core/views.py:360 +#: core/graphene/mutations.py:65 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "Допускаются только URL-адреса, начинающиеся с http(s)://" @@ -923,7 +923,7 @@ msgstr "" "варианты!" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:839 +#: core/graphene/mutations.py:527 core/viewsets.py:679 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Неправильный тип получен из метода order.buy(): {type(instance)!s}" @@ -999,9 +999,9 @@ msgstr "Заказ товара {order_product_uuid} не найден!" msgid "original address string provided by the user" msgstr "Оригинальная строка адреса, предоставленная пользователем" -#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 -#: core/models.py:1234 core/models.py:1263 core/models.py:1288 -#: core/viewsets.py:842 +#: core/graphene/mutations.py:656 core/models.py:849 core/models.py:862 +#: core/models.py:1281 core/models.py:1310 core/models.py:1335 +#: core/viewsets.py:682 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} не существует: {uuid}!" @@ -1015,8 +1015,8 @@ msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - работает как шарм" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 -#: core/models.py:1686 +#: core/graphene/object_types.py:444 core/models.py:672 core/models.py:1144 +#: core/models.py:1744 msgid "attributes" msgstr "Атрибуты" @@ -1029,11 +1029,11 @@ msgid "groups of attributes" msgstr "Группы атрибутов" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:612 +#: core/graphene/object_types.py:224 core/models.py:326 core/models.py:626 msgid "categories" msgstr "Категории" -#: core/graphene/object_types.py:124 core/models.py:383 +#: core/graphene/object_types.py:124 core/models.py:397 msgid "brands" msgstr "Бренды" @@ -1042,7 +1042,7 @@ msgid "category image url" msgstr "Категории" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:249 +#: core/models.py:263 msgid "markup percentage" msgstr "Процент наценки" @@ -1066,7 +1066,7 @@ msgstr "Теги для этой категории" msgid "products in this category" msgstr "Продукты в этой категории" -#: core/graphene/object_types.py:351 core/models.py:155 +#: core/graphene/object_types.py:351 core/models.py:169 msgid "vendors" msgstr "Поставщики" @@ -1092,7 +1092,7 @@ msgid "represents feedback from a user." msgstr "Представляет собой отзыв пользователя." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1110 +#: core/models.py:1138 msgid "notifications" msgstr "Уведомления" @@ -1100,7 +1100,7 @@ msgstr "Уведомления" msgid "download url for this order product if applicable" msgstr "Если применимо, загрузите url для этого продукта заказа" -#: core/graphene/object_types.py:400 core/models.py:1791 +#: core/graphene/object_types.py:400 core/models.py:1860 msgid "feedback" msgstr "Обратная связь" @@ -1108,7 +1108,7 @@ msgstr "Обратная связь" msgid "a list of order products in this order" msgstr "Список товаров, заказанных в этом заказе" -#: core/graphene/object_types.py:436 core/models.py:1080 +#: core/graphene/object_types.py:436 core/models.py:1108 msgid "billing address" msgstr "Адрес для выставления счетов" @@ -1136,7 +1136,7 @@ msgstr "Все ли товары в заказе представлены в ц msgid "transactions for this order" msgstr "Операции для этого заказа" -#: core/graphene/object_types.py:465 core/models.py:1144 +#: core/graphene/object_types.py:465 core/models.py:1172 msgid "orders" msgstr "Заказы" @@ -1148,15 +1148,15 @@ msgstr "URL-адрес изображения" msgid "product's images" msgstr "Изображения товара" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 +#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 msgid "category" msgstr "Категория" -#: core/graphene/object_types.py:502 core/models.py:1792 +#: core/graphene/object_types.py:502 core/models.py:1861 msgid "feedbacks" msgstr "Отзывы" -#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 +#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 msgid "brand" msgstr "Бренд" @@ -1188,7 +1188,7 @@ msgstr "Количество отзывов" msgid "only available for personal orders" msgstr "Продукты доступны только для личных заказов" -#: core/graphene/object_types.py:534 core/models.py:536 +#: core/graphene/object_types.py:534 core/models.py:550 msgid "products" msgstr "Товары" @@ -1200,15 +1200,15 @@ msgstr "Промокоды" msgid "products on sale" msgstr "Продукты в продаже" -#: core/graphene/object_types.py:651 core/models.py:784 +#: core/graphene/object_types.py:651 core/models.py:798 msgid "promotions" msgstr "Промоакции" -#: core/graphene/object_types.py:655 core/models.py:154 +#: core/graphene/object_types.py:655 core/models.py:168 msgid "vendor" msgstr "Поставщик" -#: core/graphene/object_types.py:656 core/models.py:535 +#: core/graphene/object_types.py:656 core/models.py:549 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1216,11 +1216,11 @@ msgstr "Поставщик" msgid "product" msgstr "Товар" -#: core/graphene/object_types.py:667 core/models.py:807 +#: core/graphene/object_types.py:667 core/models.py:821 msgid "wishlisted products" msgstr "Продукты из списка желаний" -#: core/graphene/object_types.py:673 core/models.py:824 +#: core/graphene/object_types.py:673 core/models.py:838 msgid "wishlists" msgstr "Списки желаний" @@ -1228,7 +1228,7 @@ msgstr "Списки желаний" msgid "tagged products" msgstr "Tagged products" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 +#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 msgid "product tags" msgstr "Теги товара" @@ -1340,7 +1340,7 @@ msgstr "Родительская группа атрибутов" msgid "attribute group's name" msgstr "Имя группы атрибутов" -#: core/models.py:100 core/models.py:620 +#: core/models.py:100 core/models.py:634 msgid "attribute group" msgstr "Группа атрибутов" @@ -1389,7 +1389,7 @@ msgstr "Имя этого продавца" msgid "vendor name" msgstr "Название поставщика" -#: core/models.py:163 +#: core/models.py:177 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1404,27 +1404,27 @@ msgstr "" "экспортируемые через миксины, и обеспечивает настройку метаданных для " "административных целей." -#: core/models.py:175 core/models.py:206 +#: core/models.py:189 core/models.py:220 msgid "internal tag identifier for the product tag" msgstr "Внутренний идентификатор тега для тега продукта" -#: core/models.py:176 core/models.py:207 +#: core/models.py:190 core/models.py:221 msgid "tag name" msgstr "Название тега" -#: core/models.py:180 core/models.py:211 +#: core/models.py:194 core/models.py:225 msgid "user-friendly name for the product tag" msgstr "Удобное название для метки продукта" -#: core/models.py:181 core/models.py:212 +#: core/models.py:195 core/models.py:226 msgid "tag display name" msgstr "Отображаемое имя тега" -#: core/models.py:189 +#: core/models.py:203 msgid "product tag" msgstr "Метка продукта" -#: core/models.py:195 +#: core/models.py:209 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 " @@ -1435,15 +1435,15 @@ msgstr "" "классификации продуктов. Он включает атрибуты для внутреннего идентификатора" " тега и удобного для пользователя отображаемого имени." -#: core/models.py:220 +#: core/models.py:234 msgid "category tag" msgstr "тег категории" -#: core/models.py:221 core/models.py:293 +#: core/models.py:235 core/models.py:307 msgid "category tags" msgstr "теги категорий" -#: core/models.py:226 +#: core/models.py:240 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1465,51 +1465,51 @@ msgstr "" "администраторам указывать название, описание и иерархию категорий, а также " "назначать атрибуты, такие как изображения, теги или приоритет." -#: core/models.py:240 +#: core/models.py:254 msgid "upload an image representing this category" msgstr "Загрузите изображение, представляющее эту категорию" -#: core/models.py:243 +#: core/models.py:257 msgid "category image" msgstr "Изображение категории" -#: core/models.py:248 +#: core/models.py:262 msgid "define a markup percentage for products in this category" msgstr "Определите процент наценки для товаров в этой категории" -#: core/models.py:257 +#: core/models.py:271 msgid "parent of this category to form a hierarchical structure" msgstr "Родитель данной категории для формирования иерархической структуры" -#: core/models.py:258 +#: core/models.py:272 msgid "parent category" msgstr "Родительская категория" -#: core/models.py:263 +#: core/models.py:277 msgid "category name" msgstr "Название категории" -#: core/models.py:264 +#: core/models.py:278 msgid "provide a name for this category" msgstr "Укажите название этой категории" -#: core/models.py:271 +#: core/models.py:285 msgid "add a detailed description for this category" msgstr "Добавьте подробное описание для этой категории" -#: core/models.py:272 +#: core/models.py:286 msgid "category description" msgstr "Описание категории" -#: core/models.py:292 +#: core/models.py:306 msgid "tags that help describe or group this category" msgstr "теги, которые помогают описать или сгруппировать эту категорию" -#: core/models.py:299 core/models.py:375 +#: core/models.py:313 core/models.py:389 msgid "priority" msgstr "Приоритет" -#: core/models.py:318 +#: core/models.py:332 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1522,47 +1522,47 @@ msgstr "" "связанные категории, уникальную метку и порядок приоритетов. Он позволяет " "организовать и представить данные, связанные с брендом, в приложении." -#: core/models.py:328 +#: core/models.py:342 msgid "name of this brand" msgstr "Название этой марки" -#: core/models.py:329 +#: core/models.py:343 msgid "brand name" msgstr "Название бренда" -#: core/models.py:336 +#: core/models.py:350 msgid "upload a logo representing this brand" msgstr "Загрузите логотип, представляющий этот бренд" -#: core/models.py:338 +#: core/models.py:352 msgid "brand small image" msgstr "Маленький образ бренда" -#: core/models.py:344 +#: core/models.py:358 msgid "upload a big logo representing this brand" msgstr "Загрузите большой логотип, представляющий этот бренд" -#: core/models.py:346 +#: core/models.py:360 msgid "brand big image" msgstr "Большой имидж бренда" -#: core/models.py:351 +#: core/models.py:365 msgid "add a detailed description of the brand" msgstr "Добавьте подробное описание бренда" -#: core/models.py:352 +#: core/models.py:366 msgid "brand description" msgstr "Описание бренда" -#: core/models.py:357 +#: core/models.py:371 msgid "optional categories that this brand is associated with" msgstr "Дополнительные категории, с которыми ассоциируется этот бренд" -#: core/models.py:358 +#: core/models.py:372 msgid "associated categories" msgstr "Категории" -#: core/models.py:388 +#: core/models.py:402 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1578,68 +1578,68 @@ msgstr "" "активы. Он является частью системы управления запасами, позволяющей " "отслеживать и оценивать продукты, доступные у различных поставщиков." -#: core/models.py:400 +#: core/models.py:414 msgid "the vendor supplying this product stock" msgstr "Поставщик, поставляющий данный товар на склад" -#: core/models.py:401 +#: core/models.py:415 msgid "associated vendor" msgstr "Ассоциированный поставщик" -#: core/models.py:405 +#: core/models.py:419 msgid "final price to the customer after markups" msgstr "Окончательная цена для покупателя после наценок" -#: core/models.py:406 +#: core/models.py:420 msgid "selling price" msgstr "Цена продажи" -#: core/models.py:411 +#: core/models.py:425 msgid "the product associated with this stock entry" msgstr "Продукт, связанный с этой складской записью" -#: core/models.py:412 core/models.py:683 core/models.py:730 -#: core/models.py:1583 +#: core/models.py:426 core/models.py:697 core/models.py:744 +#: core/models.py:1641 msgid "associated product" msgstr "Сопутствующий товар" -#: core/models.py:419 +#: core/models.py:433 msgid "the price paid to the vendor for this product" msgstr "Цена, уплаченная продавцу за этот продукт" -#: core/models.py:420 +#: core/models.py:434 msgid "vendor purchase price" msgstr "Цена покупки у поставщика" -#: core/models.py:424 +#: core/models.py:438 msgid "available quantity of the product in stock" msgstr "Доступное количество продукта на складе" -#: core/models.py:425 +#: core/models.py:439 msgid "quantity in stock" msgstr "Количество на складе" -#: core/models.py:429 +#: core/models.py:443 msgid "vendor-assigned SKU for identifying the product" msgstr "Присвоенный поставщиком SKU для идентификации продукта" -#: core/models.py:430 +#: core/models.py:444 msgid "vendor sku" msgstr "Артикул поставщика" -#: core/models.py:436 +#: core/models.py:450 msgid "digital file associated with this stock if applicable" msgstr "Цифровой файл, связанный с этой акцией, если применимо" -#: core/models.py:437 +#: core/models.py:451 msgid "digital file" msgstr "Цифровой файл" -#: core/models.py:446 +#: core/models.py:460 msgid "stock entries" msgstr "Наличия" -#: core/models.py:451 +#: core/models.py:465 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1660,55 +1660,55 @@ msgstr "" "повышения производительности. Он используется для определения и " "манипулирования данными о товаре и связанной с ним информацией в приложении." -#: core/models.py:464 +#: core/models.py:478 msgid "category this product belongs to" msgstr "Категория, к которой относится этот продукт" -#: core/models.py:473 +#: core/models.py:487 msgid "optionally associate this product with a brand" msgstr "По желанию ассоциируйте этот продукт с брендом" -#: core/models.py:479 +#: core/models.py:493 msgid "tags that help describe or group this product" msgstr "Теги, которые помогают описать или сгруппировать этот продукт" -#: core/models.py:484 +#: core/models.py:498 msgid "indicates whether this product is digitally delivered" msgstr "Указывает, поставляется ли этот продукт в цифровом виде" -#: core/models.py:485 +#: core/models.py:499 msgid "is product digital" msgstr "Является ли продукт цифровым" -#: core/models.py:491 +#: core/models.py:505 msgid "provide a clear identifying name for the product" msgstr "Обеспечьте четкое идентификационное название продукта" -#: core/models.py:492 +#: core/models.py:506 msgid "product name" msgstr "Название продукта" -#: core/models.py:497 core/models.py:772 +#: core/models.py:511 core/models.py:786 msgid "add a detailed description of the product" msgstr "Добавьте подробное описание продукта" -#: core/models.py:498 +#: core/models.py:512 msgid "product description" msgstr "Описание товара" -#: core/models.py:505 +#: core/models.py:519 msgid "part number for this product" msgstr "Парт. номер для данного товара" -#: core/models.py:506 +#: core/models.py:520 msgid "part number" msgstr "Парт. номер" -#: core/models.py:525 +#: core/models.py:539 msgid "stock keeping unit for this product" msgstr "Единица складского учета для данного продукта" -#: core/models.py:599 +#: core/models.py:613 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 " @@ -1725,69 +1725,69 @@ msgstr "" "плавающую форму, булевую форму, массив и объект. Это позволяет динамично и " "гибко структурировать данные." -#: core/models.py:611 +#: core/models.py:625 msgid "category of this attribute" msgstr "Категория этого атрибута" -#: core/models.py:619 +#: core/models.py:633 msgid "group of this attribute" msgstr "Группа этого атрибута" -#: core/models.py:625 +#: core/models.py:639 msgid "string" msgstr "Строка" -#: core/models.py:626 +#: core/models.py:640 msgid "integer" msgstr "Целое число" -#: core/models.py:627 +#: core/models.py:641 msgid "float" msgstr "Поплавок" -#: core/models.py:628 +#: core/models.py:642 msgid "boolean" msgstr "Булево" -#: core/models.py:629 +#: core/models.py:643 msgid "array" msgstr "Массив" -#: core/models.py:630 +#: core/models.py:644 msgid "object" msgstr "Объект" -#: core/models.py:632 +#: core/models.py:646 msgid "type of the attribute's value" msgstr "Тип значения атрибута" -#: core/models.py:633 +#: core/models.py:647 msgid "value type" msgstr "Тип значения" -#: core/models.py:638 +#: core/models.py:652 msgid "name of this attribute" msgstr "Имя этого атрибута" -#: core/models.py:639 +#: core/models.py:653 msgid "attribute's name" msgstr "Имя атрибута" -#: core/models.py:645 +#: core/models.py:659 msgid "is filterable" msgstr "поддается фильтрации" -#: core/models.py:646 +#: core/models.py:660 msgid "designates whether this attribute can be used for filtering or not" msgstr "" "Какие атрибуты и значения можно использовать для фильтрации этой категории." -#: core/models.py:657 core/models.py:675 +#: core/models.py:671 core/models.py:689 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Атрибут" -#: core/models.py:663 +#: core/models.py:677 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" @@ -1797,19 +1797,19 @@ msgstr "" " Он связывает \"атрибут\" с уникальным \"значением\", позволяя лучше " "организовать и динамически представить характеристики продукта." -#: core/models.py:674 +#: core/models.py:688 msgid "attribute of this value" msgstr "Атрибут этого значения" -#: core/models.py:682 +#: core/models.py:696 msgid "the specific product associated with this attribute's value" msgstr "Конкретный продукт, связанный со значением этого атрибута" -#: core/models.py:688 +#: core/models.py:702 msgid "the specific value for this attribute" msgstr "Конкретное значение для этого атрибута" -#: core/models.py:701 +#: core/models.py:715 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -1823,41 +1823,41 @@ msgstr "" "товарам и определения порядка их отображения. Он также включает функцию " "доступности с альтернативным текстом для изображений." -#: core/models.py:712 +#: core/models.py:726 msgid "provide alternative text for the image for accessibility" msgstr "" "Предоставьте альтернативный текст для изображения, чтобы обеспечить " "доступность" -#: core/models.py:713 +#: core/models.py:727 msgid "image alt text" msgstr "Альтовый текст изображения" -#: core/models.py:716 +#: core/models.py:730 msgid "upload the image file for this product" msgstr "Загрузите файл изображения для этого продукта" -#: core/models.py:717 core/models.py:742 +#: core/models.py:731 core/models.py:756 msgid "product image" msgstr "Изображение продукта" -#: core/models.py:723 +#: core/models.py:737 msgid "determines the order in which images are displayed" msgstr "Определяет порядок отображения изображений" -#: core/models.py:724 +#: core/models.py:738 msgid "display priority" msgstr "Приоритет отображения" -#: core/models.py:729 +#: core/models.py:743 msgid "the product that this image represents" msgstr "Продукт, который представлен на этом изображении" -#: core/models.py:743 +#: core/models.py:757 msgid "product images" msgstr "Изображения товаров" -#: core/models.py:748 +#: core/models.py:762 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1873,39 +1873,39 @@ msgstr "" "акции и привязки ее к соответствующим товарам. Он интегрируется с каталогом " "товаров для определения товаров, на которые распространяется акция." -#: core/models.py:760 +#: core/models.py:774 msgid "percentage discount for the selected products" msgstr "Процентная скидка на выбранные продукты" -#: core/models.py:761 +#: core/models.py:775 msgid "discount percentage" msgstr "Процент скидки" -#: core/models.py:766 +#: core/models.py:780 msgid "provide a unique name for this promotion" msgstr "Укажите уникальное имя для этой акции" -#: core/models.py:767 +#: core/models.py:781 msgid "promotion name" msgstr "Название акции" -#: core/models.py:773 +#: core/models.py:787 msgid "promotion description" msgstr "Описание акции" -#: core/models.py:778 +#: core/models.py:792 msgid "select which products are included in this promotion" msgstr "Выберите, какие продукты участвуют в этой акции" -#: core/models.py:779 +#: core/models.py:793 msgid "included products" msgstr "Включенные продукты" -#: core/models.py:783 +#: core/models.py:797 msgid "promotion" msgstr "Продвижение" -#: core/models.py:794 +#: core/models.py:808 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1918,23 +1918,23 @@ msgstr "" "товаров, а также поддерживая операции добавления и удаления нескольких " "товаров одновременно." -#: core/models.py:806 +#: core/models.py:820 msgid "products that the user has marked as wanted" msgstr "Продукты, которые пользователь отметил как желаемые" -#: core/models.py:814 +#: core/models.py:828 msgid "user who owns this wishlist" msgstr "Пользователь, владеющий этим списком желаний" -#: core/models.py:815 +#: core/models.py:829 msgid "wishlist owner" msgstr "Владелец вишлиста" -#: core/models.py:823 +#: core/models.py:837 msgid "wishlist" msgstr "Список желаний" -#: core/models.py:865 +#: core/models.py:879 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1950,19 +1950,19 @@ msgstr "" "документальных файлов. Он расширяет функциональность определенных миксинов и" " предоставляет дополнительные пользовательские возможности." -#: core/models.py:878 +#: core/models.py:892 msgid "documentary" msgstr "Документальный фильм" -#: core/models.py:879 +#: core/models.py:893 msgid "documentaries" msgstr "Документальные фильмы" -#: core/models.py:889 +#: core/models.py:903 msgid "unresolved" msgstr "Неразрешенные" -#: core/models.py:894 +#: core/models.py:908 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1983,59 +1983,59 @@ msgstr "" "обработки или проверки. Класс также позволяет ассоциировать адрес с " "пользователем, что облегчает работу с персонализированными данными." -#: core/models.py:909 +#: core/models.py:923 msgid "address line for the customer" msgstr "Адресная строка для клиента" -#: core/models.py:910 +#: core/models.py:924 msgid "address line" msgstr "Адресная строка" -#: core/models.py:912 +#: core/models.py:926 msgid "street" msgstr "Улица" -#: core/models.py:913 +#: core/models.py:927 msgid "district" msgstr "Округ" -#: core/models.py:914 +#: core/models.py:928 msgid "city" msgstr "Город" -#: core/models.py:915 +#: core/models.py:929 msgid "region" msgstr "Регион" -#: core/models.py:916 +#: core/models.py:930 msgid "postal code" msgstr "Почтовый индекс" -#: core/models.py:917 +#: core/models.py:931 msgid "country" msgstr "Страна" -#: core/models.py:924 +#: core/models.py:938 msgid "geolocation point: (longitude, latitude)" msgstr "Геолокационная точка(долгота, широта)" -#: core/models.py:927 +#: core/models.py:941 msgid "full JSON response from geocoder for this address" msgstr "Полный JSON-ответ от геокодера для этого адреса" -#: core/models.py:932 +#: core/models.py:946 msgid "stored JSON response from the geocoding service" msgstr "Сохраненный JSON-ответ от сервиса геокодирования" -#: core/models.py:940 +#: core/models.py:954 msgid "address" msgstr "Адрес" -#: core/models.py:941 +#: core/models.py:955 msgid "addresses" msgstr "Адреса" -#: core/models.py:953 +#: core/models.py:967 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2052,74 +2052,74 @@ msgstr "" "функциональность для проверки и применения промокода к заказу, обеспечивая " "при этом соблюдение ограничений." -#: core/models.py:967 +#: core/models.py:981 msgid "unique code used by a user to redeem a discount" msgstr "Уникальный код, используемый пользователем для получения скидки" -#: core/models.py:968 +#: core/models.py:982 msgid "promo code identifier" msgstr "Идентификатор промо-кода" -#: core/models.py:975 +#: core/models.py:989 msgid "fixed discount amount applied if percent is not used" msgstr "Фиксированная сумма скидки, применяемая, если процент не используется" -#: core/models.py:976 +#: core/models.py:990 msgid "fixed discount amount" msgstr "Фиксированная сумма скидки" -#: core/models.py:982 +#: core/models.py:996 msgid "percentage discount applied if fixed amount is not used" msgstr "" "Процентная скидка, применяемая, если фиксированная сумма не используется" -#: core/models.py:983 +#: core/models.py:997 msgid "percentage discount" msgstr "Процентная скидка" -#: core/models.py:988 +#: core/models.py:1002 msgid "timestamp when the promocode expires" msgstr "Временная метка, когда истекает срок действия промокода" -#: core/models.py:989 +#: core/models.py:1003 msgid "end validity time" msgstr "Время окончания срока действия" -#: core/models.py:994 +#: core/models.py:1008 msgid "timestamp from which this promocode is valid" msgstr "Время, с которого действует этот промокод" -#: core/models.py:995 +#: core/models.py:1009 msgid "start validity time" msgstr "Время начала действия" -#: core/models.py:1000 +#: core/models.py:1014 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Временная метка, когда был использован промокод, пустая, если он еще не " "использовался" -#: core/models.py:1001 +#: core/models.py:1015 msgid "usage timestamp" msgstr "Временная метка использования" -#: core/models.py:1006 +#: core/models.py:1020 msgid "user assigned to this promocode if applicable" msgstr "Пользователь, назначенный на этот промокод, если применимо" -#: core/models.py:1007 +#: core/models.py:1021 msgid "assigned user" msgstr "Назначенный пользователь" -#: core/models.py:1014 +#: core/models.py:1028 msgid "promo code" msgstr "Промокод" -#: core/models.py:1015 +#: core/models.py:1029 msgid "promo codes" msgstr "Промокоды" -#: core/models.py:1022 +#: core/models.py:1044 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2127,16 +2127,16 @@ msgstr "" "Следует определить только один тип скидки (сумма или процент), но не оба или" " ни один из них." -#: core/models.py:1037 +#: core/models.py:1065 msgid "promocode already used" msgstr "Промокоды" -#: core/models.py:1053 +#: core/models.py:1081 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Неверный тип скидки для промокода {self.uuid}!" -#: core/models.py:1062 +#: core/models.py:1090 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 " @@ -2153,138 +2153,138 @@ msgstr "" "доставке или выставлении счета. Кроме того, функциональность поддерживает " "управление продуктами в жизненном цикле заказа." -#: core/models.py:1079 +#: core/models.py:1107 msgid "the billing address used for this order" msgstr "Адрес для выставления счетов, используемый для данного заказа" -#: core/models.py:1087 +#: core/models.py:1115 msgid "optional promo code applied to this order" msgstr "Дополнительный промокод, применяемый к этому заказу" -#: core/models.py:1088 +#: core/models.py:1116 msgid "applied promo code" msgstr "Примененный промокод" -#: core/models.py:1096 +#: core/models.py:1124 msgid "the shipping address used for this order" msgstr "Адрес доставки, используемый для данного заказа" -#: core/models.py:1097 +#: core/models.py:1125 msgid "shipping address" msgstr "Адрес доставки" -#: core/models.py:1103 +#: core/models.py:1131 msgid "current status of the order in its lifecycle" msgstr "Текущий статус заказа в его жизненном цикле" -#: core/models.py:1104 +#: core/models.py:1132 msgid "order status" msgstr "Статус заказа" -#: core/models.py:1109 core/models.py:1560 +#: core/models.py:1137 core/models.py:1618 msgid "json structure of notifications to display to users" msgstr "" "JSON-структура уведомлений для отображения пользователям, в административном" " интерфейсе используется табличный вид" -#: core/models.py:1115 +#: core/models.py:1143 msgid "json representation of order attributes for this order" msgstr "JSON-представление атрибутов заказа для этого заказа" -#: core/models.py:1121 +#: core/models.py:1149 msgid "the user who placed the order" msgstr "Пользователь, разместивший заказ" -#: core/models.py:1122 +#: core/models.py:1150 msgid "user" msgstr "Пользователь" -#: core/models.py:1128 +#: core/models.py:1156 msgid "the timestamp when the order was finalized" msgstr "Временная метка, когда заказ был завершен" -#: core/models.py:1129 +#: core/models.py:1157 msgid "buy time" msgstr "Время покупки" -#: core/models.py:1136 +#: core/models.py:1164 msgid "a human-readable identifier for the order" msgstr "Человекочитаемый идентификатор для заказа" -#: core/models.py:1137 +#: core/models.py:1165 msgid "human readable id" msgstr "человекочитаемый идентификатор" -#: core/models.py:1143 +#: core/models.py:1171 msgid "order" msgstr "Заказ" -#: core/models.py:1168 +#: core/models.py:1209 msgid "a user must have only one pending order at a time" msgstr "Пользователь может одновременно иметь только один отложенный ордер!" -#: core/models.py:1202 +#: core/models.py:1249 msgid "you cannot add products to an order that is not a pending one" msgstr "Вы не можете добавить товары в заказ, который не является отложенным." -#: core/models.py:1207 +#: core/models.py:1254 msgid "you cannot add inactive products to order" msgstr "Вы не можете добавить неактивные товары в заказ" -#: core/models.py:1224 +#: core/models.py:1271 msgid "you cannot add more products than available in stock" msgstr "Вы не можете добавить больше товаров, чем есть на складе" -#: core/models.py:1246 core/models.py:1271 core/models.py:1279 +#: core/models.py:1293 core/models.py:1318 core/models.py:1326 msgid "you cannot remove products from an order that is not a pending one" msgstr "" "Вы не можете удалить товары из заказа, который не является отложенным." -#: core/models.py:1267 +#: core/models.py:1314 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} не существует с запросом <{query}>!" -#: core/models.py:1299 +#: core/models.py:1346 msgid "promocode does not exist" msgstr "Промокод не существует" -#: core/models.py:1305 +#: core/models.py:1352 msgid "you can only buy physical products with shipping address specified" msgstr "" "Вы можете купить физические товары только с указанным адресом доставки!" -#: core/models.py:1324 +#: core/models.py:1371 msgid "address does not exist" msgstr "Адрес не существует" -#: core/models.py:1345 core/models.py:1414 +#: core/models.py:1392 core/models.py:1461 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "В данный момент вы не можете совершить покупку, пожалуйста, повторите " "попытку через несколько минут." -#: core/models.py:1348 core/models.py:1410 +#: core/models.py:1395 core/models.py:1457 msgid "invalid force value" msgstr "Недопустимое значение силы" -#: core/models.py:1354 core/models.py:1417 +#: core/models.py:1401 core/models.py:1464 msgid "you cannot purchase an empty order!" msgstr "Вы не можете приобрести пустой заказ!" -#: core/models.py:1373 +#: core/models.py:1420 msgid "you cannot buy an order without a user" msgstr "Вы не можете купить заказ без пользователя!" -#: core/models.py:1387 +#: core/models.py:1434 msgid "a user without a balance cannot buy with balance" msgstr "Пользователь без баланса не может покупать с балансом!" -#: core/models.py:1392 +#: core/models.py:1439 msgid "insufficient funds to complete the order" msgstr "Недостаточно средств для выполнения заказа" -#: core/models.py:1426 +#: core/models.py:1473 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2292,14 +2292,14 @@ msgstr "" "Вы не можете купить без регистрации, пожалуйста, предоставьте следующую " "информацию: имя клиента, электронная почта клиента, номер телефона клиента" -#: core/models.py:1435 +#: core/models.py:1482 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "Неверный способ оплаты: {payment_method} от {available_payment_methods}!" -#: core/models.py:1533 +#: core/models.py:1591 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2321,109 +2321,109 @@ msgstr "" "для цифровых продуктов. Модель интегрируется с моделями Order и Product и " "хранит ссылки на них." -#: core/models.py:1548 +#: core/models.py:1606 msgid "the price paid by the customer for this product at purchase time" msgstr "Цена, уплаченная клиентом за данный продукт на момент покупки" -#: core/models.py:1549 +#: core/models.py:1607 msgid "purchase price at order time" msgstr "Покупная цена на момент заказа" -#: core/models.py:1554 +#: core/models.py:1612 msgid "internal comments for admins about this ordered product" msgstr "" "Внутренние комментарии для администраторов об этом заказанном продукте" -#: core/models.py:1555 +#: core/models.py:1613 msgid "internal comments" msgstr "Внутренние комментарии" -#: core/models.py:1561 +#: core/models.py:1619 msgid "user notifications" msgstr "Уведомления пользователей" -#: core/models.py:1566 +#: core/models.py:1624 msgid "json representation of this item's attributes" msgstr "JSON-представление атрибутов этого элемента" -#: core/models.py:1567 +#: core/models.py:1625 msgid "ordered product attributes" msgstr "Атрибуты заказанного продукта" -#: core/models.py:1572 +#: core/models.py:1630 msgid "reference to the parent order that contains this product" msgstr "Ссылка на родительский заказ, содержащий данный продукт" -#: core/models.py:1573 +#: core/models.py:1631 msgid "parent order" msgstr "Родительский приказ" -#: core/models.py:1582 +#: core/models.py:1640 msgid "the specific product associated with this order line" msgstr "Конкретный продукт, связанный с этой линией заказа" -#: core/models.py:1589 +#: core/models.py:1647 msgid "quantity of this specific product in the order" msgstr "Количество данного товара в заказе" -#: core/models.py:1590 +#: core/models.py:1648 msgid "product quantity" msgstr "Количество продукта" -#: core/models.py:1597 +#: core/models.py:1655 msgid "current status of this product in the order" msgstr "Текущий статус этого продукта в заказе" -#: core/models.py:1598 +#: core/models.py:1656 msgid "product line status" msgstr "Состояние продуктовой линейки" -#: core/models.py:1661 +#: core/models.py:1719 msgid "order product must have an order" msgstr "У заказанного продукта должен быть связанный с ним заказ!" -#: core/models.py:1663 +#: core/models.py:1721 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Для обратной связи указано неверное действие: {action}!" -#: core/models.py:1677 +#: core/models.py:1735 msgid "you cannot feedback an order which is not received" msgstr "Вы не можете отозвать заказ, который не был получен" -#: core/models.py:1683 +#: core/models.py:1741 msgid "name" msgstr "Имя" -#: core/models.py:1684 +#: core/models.py:1742 msgid "URL of the integration" msgstr "URL-адрес интеграции" -#: core/models.py:1685 +#: core/models.py:1743 msgid "authentication credentials" msgstr "Учетные данные для аутентификации" -#: core/models.py:1699 +#: core/models.py:1765 msgid "you can only have one default CRM provider" msgstr "У вас может быть только один поставщик CRM по умолчанию" -#: core/models.py:1703 +#: core/models.py:1775 msgid "CRM" msgstr "CRM" -#: core/models.py:1704 +#: core/models.py:1776 msgid "CRMs" msgstr "CRM" -#: core/models.py:1716 +#: core/models.py:1788 msgid "order CRM link" msgstr "Ссылка на CRM заказа" -#: core/models.py:1717 +#: core/models.py:1789 msgid "orders CRM links" msgstr "Ссылки на CRM заказов" -#: core/models.py:1722 +#: core/models.py:1794 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2439,19 +2439,15 @@ msgstr "" " общедоступным. Он включает метод для генерации URL-адреса для загрузки " "актива, когда связанный заказ находится в состоянии завершения." -#: core/models.py:1736 +#: core/models.py:1808 msgid "download" msgstr "Скачать" -#: core/models.py:1737 +#: core/models.py:1809 msgid "downloads" msgstr "Скачать" -#: core/models.py:1745 -msgid "you can not download a digital asset for a non-finished order" -msgstr "Вы не можете загрузить цифровой актив для незавершенного заказа" - -#: core/models.py:1754 +#: core/models.py:1823 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2466,29 +2462,29 @@ msgstr "" "пользователем. Класс использует поля базы данных для эффективного " "моделирования и управления данными отзывов." -#: core/models.py:1766 +#: core/models.py:1835 msgid "user-provided comments about their experience with the product" msgstr "Комментарии пользователей об их опыте использования продукта" -#: core/models.py:1767 +#: core/models.py:1836 msgid "feedback comments" msgstr "Комментарии к отзывам" -#: core/models.py:1774 +#: core/models.py:1843 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Ссылка на конкретный продукт в заказе, о котором идет речь в этом отзыве" -#: core/models.py:1775 +#: core/models.py:1844 msgid "related order product" msgstr "Сопутствующий товар для заказа" -#: core/models.py:1780 +#: core/models.py:1849 msgid "user-assigned rating for the product" msgstr "Присвоенный пользователем рейтинг продукта" -#: core/models.py:1781 +#: core/models.py:1850 msgid "product rating" msgstr "Рейтинг продукции" @@ -2693,11 +2689,11 @@ msgstr "" "все права\n" " защищены" -#: core/utils/caching.py:41 +#: core/utils/caching.py:48 msgid "both data and timeout are required" msgstr "Требуются как данные, так и тайм-аут" -#: core/utils/caching.py:43 +#: core/utils/caching.py:50 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "" "Неверное значение тайм-аута, оно должно находиться в диапазоне от 0 до " @@ -2731,26 +2727,350 @@ msgstr "У вас нет разрешения на выполнение этог msgid "NOMINATIM_URL must be configured." msgstr "Параметр NOMINATIM_URL должен быть настроен!" -#: core/validators.py:16 +#: core/validators.py:14 #, 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/validators.py:22 -msgid "invalid phone number format" -msgstr "Неверный формат телефонного номера" +#: core/views.py:72 +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:489 +#: core/views.py:87 +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 +msgid "" +"Returns a list of supported languages and their corresponding information." +msgstr "" +"Возвращает список поддерживаемых языков и соответствующую информацию о них." + +#: core/views.py:148 +msgid "Returns the parameters of the website as a JSON object." +msgstr "Возвращает параметры сайта в виде объекта JSON." + +#: core/views.py:167 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +msgstr "" +"Выполняет операции с кэшем, такие как чтение и установка данных кэша с " +"заданным ключом и таймаутом." + +#: core/views.py:194 +msgid "Handles `contact us` form submissions." +msgstr "Обрабатывает отправленные формы `contact us`." + +#: core/views.py:215 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "" +"Обрабатывает запросы на обработку и проверку URL из входящих POST-запросов." + +#: core/views.py:255 +msgid "Handles global search queries." +msgstr "Обрабатывает глобальные поисковые запросы." + +#: core/views.py:270 +msgid "Handles the logic of buying as a business without registration." +msgstr "Работает с логикой покупки как бизнеса без регистрации." + +#: core/views.py:312 msgid "you can only download the digital asset once" msgstr "Вы можете загрузить цифровой актив только один раз" -#: core/views.py:547 +#: core/views.py:315 +msgid "the order must be paid before downloading the digital asset" +msgstr "заказ должен быть оплачен до загрузки цифрового актива" + +#: core/views.py:353 +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." +msgstr "" +"Обрабатывает загрузку цифрового актива, связанного с заказом.\n" +"Эта функция пытается обслужить файл цифрового актива, расположенный в каталоге хранения проекта. Если файл не найден, выдается ошибка HTTP 404, указывающая на недоступность ресурса." + +#: core/views.py:365 msgid "favicon not found" msgstr "favicon не найден" -#: core/viewsets.py:1357 +#: core/views.py:370 +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." +msgstr "" +"Обрабатывает запросы на фавикон веб-сайта.\n" +"Эта функция пытается обслужить файл favicon, расположенный в статической директории проекта. Если файл favicon не найден, выдается ошибка HTTP 404, указывающая на недоступность ресурса." + +#: core/views.py:382 +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 "" +"Перенаправляет запрос на индексную страницу админки. Функция обрабатывает " +"входящие HTTP-запросы и перенаправляет их на индексную страницу интерфейса " +"администратора Django. Для обработки HTTP-перенаправления используется " +"функция Django `redirect`." + +#: core/viewsets.py:128 +msgid "" +"Defines a viewset for managing Evibes-related operations. The EvibesViewSet " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" +"Определяет набор представлений для управления операциями, связанными с " +"Evibes. Класс EvibesViewSet наследует от ModelViewSet и предоставляет " +"функциональность для обработки действий и операций над сущностями Evibes. Он" +" включает в себя поддержку динамических классов сериализаторов в зависимости" +" от текущего действия, настраиваемые разрешения и форматы рендеринга." + +#: core/viewsets.py:147 +msgid "" +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." +msgstr "" +"Представляет собой набор представлений для управления объектами " +"AttributeGroup. Обрабатывает операции, связанные с AttributeGroup, включая " +"фильтрацию, сериализацию и извлечение данных. Этот класс является частью " +"уровня API приложения и обеспечивает стандартизированный способ обработки " +"запросов и ответов на данные AttributeGroup." + +#: core/viewsets.py:166 +msgid "" +"Handles operations related to Attribute objects within the application. " +"Provides a set of API endpoints to interact with Attribute data. This class " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"Обрабатывает операции, связанные с объектами Attribute в приложении. " +"Предоставляет набор конечных точек API для взаимодействия с данными " +"Attribute. Этот класс управляет запросами, фильтрацией и сериализацией " +"объектов Attribute, позволяя динамически управлять возвращаемыми данными, " +"например, фильтровать по определенным полям или получать подробную или " +"упрощенную информацию в зависимости от запроса." + +#: core/viewsets.py:185 +msgid "" +"A viewset for managing AttributeValue objects. This viewset provides " +"functionality for listing, retrieving, creating, updating, and deleting " +"AttributeValue objects. It integrates with Django REST Framework's viewset " +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." +msgstr "" +"Набор представлений для управления объектами AttributeValue. Этот набор " +"представлений предоставляет функциональность для перечисления, извлечения, " +"создания, обновления и удаления объектов AttributeValue. Он интегрируется с " +"механизмами наборов представлений Django REST Framework и использует " +"соответствующие сериализаторы для различных действий. Возможности фильтрации" +" предоставляются через DjangoFilterBackend." + +#: core/viewsets.py:204 +msgid "" +"Manages views for Category-related operations. The CategoryViewSet class is " +"responsible for handling operations related to the Category model in the " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" +"Управляет представлениями для операций, связанных с категорией. Класс " +"CategoryViewSet отвечает за обработку операций, связанных с моделью Category" +" в системе. Он поддерживает получение, фильтрацию и сериализацию данных " +"категории. Набор представлений также обеспечивает соблюдение прав доступа, " +"чтобы только авторизованные пользователи могли получить доступ к " +"определенным данным." + +#: core/viewsets.py:315 +msgid "" +"Represents a viewset for managing Brand instances. This class provides " +"functionality for querying, filtering, and serializing Brand objects. It " +"uses Django's ViewSet framework to simplify the implementation of API " +"endpoints for Brand objects." +msgstr "" +"Представляет собой набор представлений для управления экземплярами Brand. " +"Этот класс предоставляет функциональность для запросов, фильтрации и " +"сериализации объектов Brand. Он использует фреймворк Django ViewSet для " +"упрощения реализации конечных точек API для объектов Brand." + +#: core/viewsets.py:427 +msgid "" +"Manages operations related to the `Product` model in the system. This class " +"provides a viewset for managing products, including their filtering, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" +"Управляет операциями, связанными с моделью `Product` в системе. Этот класс " +"предоставляет набор представлений для управления продуктами, включая их " +"фильтрацию, сериализацию и операции над конкретными экземплярами. Он " +"расширяется от `EvibesViewSet` для использования общей функциональности и " +"интегрируется с фреймворком Django REST для операций RESTful API. Включает " +"методы для получения информации о продукте, применения разрешений и доступа " +"к связанным отзывам о продукте." + +#: core/viewsets.py:547 +msgid "" +"Represents a viewset for managing Vendor objects. This viewset allows " +"fetching, filtering, and serializing Vendor data. It defines the queryset, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" +"Представляет собой набор представлений для управления объектами Vendor. Этот" +" набор представлений позволяет получать, фильтровать и сериализовать данные " +"о поставщиках. Он определяет наборы запросов, конфигурации фильтров и классы" +" сериализаторов, используемые для выполнения различных действий. Цель этого " +"класса - обеспечить упрощенный доступ к ресурсам, связанным с Vendor, через " +"фреймворк Django REST." + +#: core/viewsets.py:567 +msgid "" +"Representation of a view set handling Feedback objects. This class manages " +"operations related to Feedback objects, including listing, filtering, and " +"retrieving details. The purpose of this view set is to provide different " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"use of Django's filtering system for querying data." +msgstr "" +"Представление набора представлений, обрабатывающих объекты Feedback. Этот " +"класс управляет операциями, связанными с объектами отзывов, включая " +"составление списка, фильтрацию и получение подробной информации. Цель этого " +"набора представлений - предоставить различные сериализаторы для различных " +"действий и реализовать обработку доступных объектов Feedback на основе прав " +"доступа. Он расширяет базовый `EvibesViewSet` и использует систему " +"фильтрации Django для запроса данных." + +#: core/viewsets.py:593 +msgid "" +"ViewSet for managing orders and related operations. This class provides " +"functionality to retrieve, modify, and manage order objects. It includes " +"various endpoints for handling order operations such as adding or removing " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " +"enforces permissions accordingly while interacting with order data." +msgstr "" +"ViewSet для управления заказами и связанными с ними операциями. Этот класс " +"предоставляет функциональность для получения, изменения и управления " +"объектами заказов. Он включает в себя различные конечные точки для обработки" +" операций с заказами, таких как добавление или удаление продуктов, " +"выполнение покупок для зарегистрированных и незарегистрированных " +"пользователей, а также получение информации о текущих заказах " +"аутентифицированного пользователя. ViewSet использует несколько " +"сериализаторов в зависимости от конкретного выполняемого действия и " +"соответствующим образом устанавливает разрешения при взаимодействии с " +"данными заказа." + +#: core/viewsets.py:782 +msgid "" +"Provides a viewset for managing OrderProduct entities. This viewset enables " +"CRUD operations and custom actions specific to the OrderProduct model. It " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " +"feedback on OrderProduct instances" +msgstr "" +"Предоставляет набор представлений для управления сущностями OrderProduct. " +"Этот набор представлений позволяет выполнять CRUD-операции и " +"пользовательские действия, специфичные для модели OrderProduct. Он включает " +"фильтрацию, проверку прав доступа и переключение сериализатора в зависимости" +" от запрашиваемого действия. Кроме того, он предоставляет подробное действие" +" для обработки отзывов об экземплярах OrderProduct" + +#: core/viewsets.py:833 +msgid "Manages operations related to Product images in the application. " +msgstr "" +"Управляет операциями, связанными с изображениями продуктов в приложении." + +#: core/viewsets.py:845 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +msgstr "" +"Управляет получением и обработкой экземпляров PromoCode с помощью различных " +"действий API." + +#: core/viewsets.py:866 +msgid "Represents a view set for managing promotions. " +msgstr "" +"Представляет собой набор представлений для управления рекламными акциями." + +#: core/viewsets.py:878 +msgid "Handles operations related to Stock data in the system." +msgstr "Выполняет операции, связанные с данными о запасах в системе." + +#: core/viewsets.py:892 +msgid "" +"ViewSet for managing Wishlist operations. The WishlistViewSet provides " +"endpoints for interacting with a user's wish list, allowing for the " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " +"actions for wishlist products. Permission checks are integrated to ensure " +"that users can only manage their own wishlists unless explicit permissions " +"are granted." +msgstr "" +"Набор ViewSet для управления операциями со списком желаний. Набор " +"WishlistViewSet предоставляет конечные точки для взаимодействия со списком " +"желаний пользователя, позволяя извлекать, изменять и настраивать продукты в " +"списке желаний. Этот набор ViewSet облегчает такие функции, как добавление, " +"удаление и массовые действия для продуктов списка желаний. Встроенная " +"проверка прав доступа гарантирует, что пользователи смогут управлять только " +"своими списками желаний, если не предоставлены явные права." + +#: core/viewsets.py:1007 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" +"Этот класс предоставляет функциональность набора представлений для " +"управления объектами `Адрес`. Класс AddressViewSet позволяет выполнять CRUD-" +"операции, фильтрацию и пользовательские действия, связанные с объектами " +"адреса. Он включает в себя специализированное поведение для различных " +"методов HTTP, переопределение сериализатора и обработку разрешений в " +"зависимости от контекста запроса." + +#: core/viewsets.py:1074 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Ошибка геокодирования: {e}" + +#: core/viewsets.py:1081 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" +"Обрабатывает операции, связанные с тегами продуктов в приложении. Этот класс" +" предоставляет функциональность для получения, фильтрации и сериализации " +"объектов Product Tag. Он поддерживает гибкую фильтрацию по определенным " +"атрибутам с помощью указанного бэкэнда фильтрации и динамически использует " +"различные сериализаторы в зависимости от выполняемого действия." diff --git a/core/locale/sv_SE/LC_MESSAGES/django.mo b/core/locale/sv_SE/LC_MESSAGES/django.mo index 4a83b96ca5a2870414dcfd9797113674874736f7..bb340ca4b0a56e9dace3a36ecaf3a3f32d86a17d 100644 GIT binary patch delta 26563 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 SBwNOO?RU9|3QUtpI delta 12292 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 diff --git a/core/locale/sv_SE/LC_MESSAGES/django.po b/core/locale/sv_SE/LC_MESSAGES/django.po index e41bebcf..dd16b52c 100644 --- a/core/locale/sv_SE/LC_MESSAGES/django.po +++ b/core/locale/sv_SE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+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:11 +#: core/abstract.py:12 msgid "unique id" msgstr "Unikt ID" -#: core/abstract.py:12 +#: 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:19 +#: core/abstract.py:20 msgid "is active" msgstr "Är aktiv" -#: core/abstract.py:20 +#: core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" @@ -33,19 +33,19 @@ msgstr "" "Om det är inställt på false kan objektet inte ses av användare utan " "nödvändigt tillstånd" -#: core/abstract.py:22 core/choices.py:18 +#: core/abstract.py:23 core/choices.py:18 msgid "created" msgstr "Skapad" -#: core/abstract.py:22 +#: 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:23 +#: core/abstract.py:24 msgid "modified" msgstr "Modifierad" -#: core/abstract.py:23 +#: core/abstract.py:24 msgid "when the object was last modified" msgstr "När objektet senast redigerades" @@ -88,11 +88,11 @@ msgid "selected items have been deactivated." msgstr "Valda objekt har avaktiverats!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 +#: core/graphene/object_types.py:616 core/models.py:701 core/models.py:709 msgid "attribute value" msgstr "Attributvärde" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 msgid "attribute values" msgstr "Attributets värden" @@ -104,7 +104,7 @@ msgstr "Bild" msgid "images" msgstr "Bilder" -#: core/admin.py:155 core/models.py:445 +#: core/admin.py:155 core/models.py:459 msgid "stock" msgstr "Stock" @@ -112,11 +112,11 @@ msgstr "Stock" msgid "stocks" msgstr "Stocks" -#: core/admin.py:166 core/models.py:1609 +#: core/admin.py:166 core/models.py:1667 msgid "order product" msgstr "Beställ produkt" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 msgid "order products" msgstr "Beställ produkter" @@ -728,7 +728,7 @@ msgstr "ta bort en order-produktrelation" msgid "add or remove feedback on an order–product relation" msgstr "lägga till eller ta bort feedback om en order-produktrelation" -#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 msgid "no search term provided." msgstr "Ingen sökterm angavs." @@ -781,7 +781,7 @@ msgid "Quantity" msgstr "Kvantitet" #: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:287 core/models.py:369 core/models.py:522 +#: core/models.py:301 core/models.py:383 core/models.py:536 msgid "Slug" msgstr "Snigel" @@ -797,7 +797,7 @@ msgstr "Inkludera underkategorier" msgid "Include personal ordered" msgstr "Inkludera personligt beställda produkter" -#: core/filters.py:85 core/models.py:526 +#: core/filters.py:85 core/models.py:540 msgid "SKU" msgstr "SKU" @@ -872,7 +872,7 @@ msgstr "Cachad data" msgid "camelized JSON data from the requested URL" msgstr "Cameliserad JSON-data från den begärda URL:en" -#: core/graphene/mutations.py:65 core/views.py:360 +#: core/graphene/mutations.py:65 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "Endast webbadresser som börjar med http(s):// är tillåtna" @@ -905,7 +905,7 @@ msgstr "" "uteslutande!" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:839 +#: core/graphene/mutations.py:527 core/viewsets.py:679 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Fel typ kom från order.buy()-metoden: {type(instance)!s}" @@ -980,9 +980,9 @@ msgstr "Orderprodukt {order_product_uuid} hittades inte!" msgid "original address string provided by the user" msgstr "Originaladresssträng som tillhandahålls av användaren" -#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 -#: core/models.py:1234 core/models.py:1263 core/models.py:1288 -#: core/viewsets.py:842 +#: core/graphene/mutations.py:656 core/models.py:849 core/models.py:862 +#: core/models.py:1281 core/models.py:1310 core/models.py:1335 +#: core/viewsets.py:682 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} existerar inte: {uuid}!" @@ -996,8 +996,8 @@ msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - fungerar som en smäck" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 -#: core/models.py:1686 +#: core/graphene/object_types.py:444 core/models.py:672 core/models.py:1144 +#: core/models.py:1744 msgid "attributes" msgstr "Attribut" @@ -1010,11 +1010,11 @@ 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:224 core/models.py:312 core/models.py:612 +#: core/graphene/object_types.py:224 core/models.py:326 core/models.py:626 msgid "categories" msgstr "Kategorier" -#: core/graphene/object_types.py:124 core/models.py:383 +#: core/graphene/object_types.py:124 core/models.py:397 msgid "brands" msgstr "Brands" @@ -1023,7 +1023,7 @@ msgid "category image url" msgstr "Kategorier" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:249 +#: core/models.py:263 msgid "markup percentage" msgstr "Procentuell påslagning" @@ -1046,7 +1046,7 @@ msgstr "Taggar för denna kategori" msgid "products in this category" msgstr "Produkter i denna kategori" -#: core/graphene/object_types.py:351 core/models.py:155 +#: core/graphene/object_types.py:351 core/models.py:169 msgid "vendors" msgstr "Leverantörer" @@ -1071,7 +1071,7 @@ msgid "represents feedback from a user." msgstr "Representerar feedback från en användare." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1110 +#: core/models.py:1138 msgid "notifications" msgstr "Meddelanden" @@ -1079,7 +1079,7 @@ msgstr "Meddelanden" msgid "download url for this order product if applicable" msgstr "Nedladdningsadress för denna orderprodukt om tillämpligt" -#: core/graphene/object_types.py:400 core/models.py:1791 +#: core/graphene/object_types.py:400 core/models.py:1860 msgid "feedback" msgstr "Återkoppling" @@ -1087,7 +1087,7 @@ msgstr "Återkoppling" msgid "a list of order products in this order" msgstr "En lista över orderprodukter i den här ordern" -#: core/graphene/object_types.py:436 core/models.py:1080 +#: core/graphene/object_types.py:436 core/models.py:1108 msgid "billing address" msgstr "Faktureringsadress" @@ -1115,7 +1115,7 @@ msgstr "Är alla produkter i beställningen digitala" msgid "transactions for this order" msgstr "Transaktioner för denna order" -#: core/graphene/object_types.py:465 core/models.py:1144 +#: core/graphene/object_types.py:465 core/models.py:1172 msgid "orders" msgstr "Beställningar" @@ -1127,15 +1127,15 @@ msgstr "URL för bild" msgid "product's images" msgstr "Produktens bilder" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 +#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 msgid "category" msgstr "Kategori" -#: core/graphene/object_types.py:502 core/models.py:1792 +#: core/graphene/object_types.py:502 core/models.py:1861 msgid "feedbacks" msgstr "Återkoppling" -#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 +#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 msgid "brand" msgstr "Varumärke" @@ -1167,7 +1167,7 @@ msgstr "Antal återkopplingar" msgid "only available for personal orders" msgstr "Produkter endast tillgängliga för personliga beställningar" -#: core/graphene/object_types.py:534 core/models.py:536 +#: core/graphene/object_types.py:534 core/models.py:550 msgid "products" msgstr "Produkter" @@ -1179,15 +1179,15 @@ msgstr "Promokoder" msgid "products on sale" msgstr "Produkter på rea" -#: core/graphene/object_types.py:651 core/models.py:784 +#: core/graphene/object_types.py:651 core/models.py:798 msgid "promotions" msgstr "Kampanjer" -#: core/graphene/object_types.py:655 core/models.py:154 +#: core/graphene/object_types.py:655 core/models.py:168 msgid "vendor" msgstr "Leverantör" -#: core/graphene/object_types.py:656 core/models.py:535 +#: core/graphene/object_types.py:656 core/models.py:549 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1195,11 +1195,11 @@ msgstr "Leverantör" msgid "product" msgstr "Produkt" -#: core/graphene/object_types.py:667 core/models.py:807 +#: core/graphene/object_types.py:667 core/models.py:821 msgid "wishlisted products" msgstr "Önskelistade produkter" -#: core/graphene/object_types.py:673 core/models.py:824 +#: core/graphene/object_types.py:673 core/models.py:838 msgid "wishlists" msgstr "Önskelistor" @@ -1207,7 +1207,7 @@ msgstr "Önskelistor" msgid "tagged products" msgstr "Taggade produkter" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 +#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 msgid "product tags" msgstr "Produkttaggar" @@ -1317,7 +1317,7 @@ msgstr "Överordnad attributgrupp" msgid "attribute group's name" msgstr "Attributgruppens namn" -#: core/models.py:100 core/models.py:620 +#: core/models.py:100 core/models.py:634 msgid "attribute group" msgstr "Attributgrupp" @@ -1367,7 +1367,7 @@ msgstr "Namn på denna säljare" msgid "vendor name" msgstr "Leverantörens namn" -#: core/models.py:163 +#: core/models.py:177 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1382,27 +1382,27 @@ msgstr "" "operationer som exporteras via mixins och tillhandahåller metadataanpassning" " för administrativa ändamål." -#: core/models.py:175 core/models.py:206 +#: core/models.py:189 core/models.py:220 msgid "internal tag identifier for the product tag" msgstr "Intern taggidentifierare för produkttaggen" -#: core/models.py:176 core/models.py:207 +#: core/models.py:190 core/models.py:221 msgid "tag name" msgstr "Tagg namn" -#: core/models.py:180 core/models.py:211 +#: core/models.py:194 core/models.py:225 msgid "user-friendly name for the product tag" msgstr "Användarvänligt namn för produkttaggen" -#: core/models.py:181 core/models.py:212 +#: core/models.py:195 core/models.py:226 msgid "tag display name" msgstr "Taggens visningsnamn" -#: core/models.py:189 +#: core/models.py:203 msgid "product tag" msgstr "Produktmärkning" -#: core/models.py:195 +#: core/models.py:209 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 " @@ -1413,15 +1413,15 @@ msgstr "" "klassificera produkter. Den innehåller attribut för en intern " "taggidentifierare och ett användarvänligt visningsnamn." -#: core/models.py:220 +#: core/models.py:234 msgid "category tag" msgstr "kategori tagg" -#: core/models.py:221 core/models.py:293 +#: core/models.py:235 core/models.py:307 msgid "category tags" msgstr "Kategoritaggar" -#: core/models.py:226 +#: core/models.py:240 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1443,51 +1443,51 @@ msgstr "" " ange namn, beskrivning och hierarki för kategorier samt tilldela attribut " "som bilder, taggar eller prioritet." -#: core/models.py:240 +#: core/models.py:254 msgid "upload an image representing this category" msgstr "Ladda upp en bild som representerar denna kategori" -#: core/models.py:243 +#: core/models.py:257 msgid "category image" msgstr "Kategori bild" -#: core/models.py:248 +#: core/models.py:262 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:257 +#: core/models.py:271 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:258 +#: core/models.py:272 msgid "parent category" msgstr "Föräldrakategori" -#: core/models.py:263 +#: core/models.py:277 msgid "category name" msgstr "Namn på kategori" -#: core/models.py:264 +#: core/models.py:278 msgid "provide a name for this category" msgstr "Ange ett namn för denna kategori" -#: core/models.py:271 +#: core/models.py:285 msgid "add a detailed description for this category" msgstr "Lägg till en detaljerad beskrivning för denna kategori" -#: core/models.py:272 +#: core/models.py:286 msgid "category description" msgstr "Beskrivning av kategori" -#: core/models.py:292 +#: core/models.py:306 msgid "tags that help describe or group this category" msgstr "taggar som hjälper till att beskriva eller gruppera denna kategori" -#: core/models.py:299 core/models.py:375 +#: core/models.py:313 core/models.py:389 msgid "priority" msgstr "Prioritet" -#: core/models.py:318 +#: core/models.py:332 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1501,47 +1501,47 @@ msgstr "" "prioritetsordning. Den gör det möjligt att organisera och representera " "varumärkesrelaterade data i applikationen." -#: core/models.py:328 +#: core/models.py:342 msgid "name of this brand" msgstr "Namn på detta varumärke" -#: core/models.py:329 +#: core/models.py:343 msgid "brand name" msgstr "Varumärke" -#: core/models.py:336 +#: core/models.py:350 msgid "upload a logo representing this brand" msgstr "Ladda upp en logotyp som representerar detta varumärke" -#: core/models.py:338 +#: core/models.py:352 msgid "brand small image" msgstr "Varumärke liten image" -#: core/models.py:344 +#: core/models.py:358 msgid "upload a big logo representing this brand" msgstr "Ladda upp en stor logotyp som representerar detta varumärke" -#: core/models.py:346 +#: core/models.py:360 msgid "brand big image" msgstr "Varumärke med stor image" -#: core/models.py:351 +#: core/models.py:365 msgid "add a detailed description of the brand" msgstr "Lägg till en detaljerad beskrivning av varumärket" -#: core/models.py:352 +#: core/models.py:366 msgid "brand description" msgstr "Varumärkesbeskrivning" -#: core/models.py:357 +#: core/models.py:371 msgid "optional categories that this brand is associated with" msgstr "Valfria kategorier som detta varumärke är förknippat med" -#: core/models.py:358 +#: core/models.py:372 msgid "associated categories" msgstr "Kategorier" -#: core/models.py:388 +#: core/models.py:402 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1557,68 +1557,68 @@ 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:400 +#: core/models.py:414 msgid "the vendor supplying this product stock" msgstr "Leverantören som levererar denna produkt lager" -#: core/models.py:401 +#: core/models.py:415 msgid "associated vendor" msgstr "Associerad leverantör" -#: core/models.py:405 +#: core/models.py:419 msgid "final price to the customer after markups" msgstr "Slutligt pris till kunden efter påslag" -#: core/models.py:406 +#: core/models.py:420 msgid "selling price" msgstr "Försäljningspris" -#: core/models.py:411 +#: core/models.py:425 msgid "the product associated with this stock entry" msgstr "Produkten som är associerad med denna lagerpost" -#: core/models.py:412 core/models.py:683 core/models.py:730 -#: core/models.py:1583 +#: core/models.py:426 core/models.py:697 core/models.py:744 +#: core/models.py:1641 msgid "associated product" msgstr "Tillhörande produkt" -#: core/models.py:419 +#: core/models.py:433 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:420 +#: core/models.py:434 msgid "vendor purchase price" msgstr "Leverantörens inköpspris" -#: core/models.py:424 +#: core/models.py:438 msgid "available quantity of the product in stock" msgstr "Tillgänglig kvantitet av produkten i lager" -#: core/models.py:425 +#: core/models.py:439 msgid "quantity in stock" msgstr "Antal i lager" -#: core/models.py:429 +#: core/models.py:443 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU som tilldelats av leverantören för identifiering av produkten" -#: core/models.py:430 +#: core/models.py:444 msgid "vendor sku" msgstr "Leverantörens SKU" -#: core/models.py:436 +#: core/models.py:450 msgid "digital file associated with this stock if applicable" msgstr "Digital fil associerad med detta lager om tillämpligt" -#: core/models.py:437 +#: core/models.py:451 msgid "digital file" msgstr "Digital fil" -#: core/models.py:446 +#: core/models.py:460 msgid "stock entries" msgstr "Lagerposter" -#: core/models.py:451 +#: core/models.py:465 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1639,55 +1639,55 @@ msgstr "" "för att definiera och manipulera produktdata och tillhörande information i " "en applikation." -#: core/models.py:464 +#: core/models.py:478 msgid "category this product belongs to" msgstr "Kategori som denna produkt tillhör" -#: core/models.py:473 +#: core/models.py:487 msgid "optionally associate this product with a brand" msgstr "Möjlighet att associera produkten med ett varumärke" -#: core/models.py:479 +#: core/models.py:493 msgid "tags that help describe or group this product" msgstr "Taggar som hjälper till att beskriva eller gruppera denna produkt" -#: core/models.py:484 +#: core/models.py:498 msgid "indicates whether this product is digitally delivered" msgstr "Anger om denna produkt levereras digitalt" -#: core/models.py:485 +#: core/models.py:499 msgid "is product digital" msgstr "Är produkten digital" -#: core/models.py:491 +#: core/models.py:505 msgid "provide a clear identifying name for the product" msgstr "Tillhandahålla ett tydligt identifierande namn för produkten" -#: core/models.py:492 +#: core/models.py:506 msgid "product name" msgstr "Produktens namn" -#: core/models.py:497 core/models.py:772 +#: core/models.py:511 core/models.py:786 msgid "add a detailed description of the product" msgstr "Lägg till en detaljerad beskrivning av produkten" -#: core/models.py:498 +#: core/models.py:512 msgid "product description" msgstr "Produktbeskrivning" -#: core/models.py:505 +#: core/models.py:519 msgid "part number for this product" msgstr "Artikelnummer för denna produkt" -#: core/models.py:506 +#: core/models.py:520 msgid "part number" msgstr "Artikelnummer" -#: core/models.py:525 +#: core/models.py:539 msgid "stock keeping unit for this product" msgstr "Lagerhållningsenhet för denna produkt" -#: core/models.py:599 +#: core/models.py:613 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 " @@ -1703,69 +1703,69 @@ msgstr "" "sträng, heltal, flottör, boolean, array och objekt. Detta ger möjlighet till" " dynamisk och flexibel datastrukturering." -#: core/models.py:611 +#: core/models.py:625 msgid "category of this attribute" msgstr "Kategori för detta attribut" -#: core/models.py:619 +#: core/models.py:633 msgid "group of this attribute" msgstr "Grupp av detta attribut" -#: core/models.py:625 +#: core/models.py:639 msgid "string" msgstr "Sträng" -#: core/models.py:626 +#: core/models.py:640 msgid "integer" msgstr "Heltal" -#: core/models.py:627 +#: core/models.py:641 msgid "float" msgstr "Flottör" -#: core/models.py:628 +#: core/models.py:642 msgid "boolean" msgstr "Boolean" -#: core/models.py:629 +#: core/models.py:643 msgid "array" msgstr "Array" -#: core/models.py:630 +#: core/models.py:644 msgid "object" msgstr "Objekt" -#: core/models.py:632 +#: core/models.py:646 msgid "type of the attribute's value" msgstr "Typ av attributets värde" -#: core/models.py:633 +#: core/models.py:647 msgid "value type" msgstr "Typ av värde" -#: core/models.py:638 +#: core/models.py:652 msgid "name of this attribute" msgstr "Namn på detta attribut" -#: core/models.py:639 +#: core/models.py:653 msgid "attribute's name" msgstr "Attributets namn" -#: core/models.py:645 +#: core/models.py:659 msgid "is filterable" msgstr "är filtrerbar" -#: core/models.py:646 +#: core/models.py:660 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:657 core/models.py:675 +#: core/models.py:671 core/models.py:689 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attribut" -#: core/models.py:663 +#: core/models.py:677 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" @@ -1776,19 +1776,19 @@ msgstr "" "möjliggör bättre organisation och dynamisk representation av " "produktegenskaper." -#: core/models.py:674 +#: core/models.py:688 msgid "attribute of this value" msgstr "Attribut för detta värde" -#: core/models.py:682 +#: core/models.py:696 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:688 +#: core/models.py:702 msgid "the specific value for this attribute" msgstr "Det specifika värdet för detta attribut" -#: core/models.py:701 +#: core/models.py:715 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -1802,39 +1802,39 @@ msgstr "" "produkter och bestämma deras visningsordning. Den innehåller också en " "tillgänglighetsfunktion med alternativ text för bilderna." -#: core/models.py:712 +#: core/models.py:726 msgid "provide alternative text for the image for accessibility" msgstr "Tillhandahåll alternativ text för bilden för tillgänglighet" -#: core/models.py:713 +#: core/models.py:727 msgid "image alt text" msgstr "Alt-text för bild" -#: core/models.py:716 +#: core/models.py:730 msgid "upload the image file for this product" msgstr "Ladda upp bildfilen för den här produkten" -#: core/models.py:717 core/models.py:742 +#: core/models.py:731 core/models.py:756 msgid "product image" msgstr "Produktbild" -#: core/models.py:723 +#: core/models.py:737 msgid "determines the order in which images are displayed" msgstr "Bestämmer i vilken ordning bilderna ska visas" -#: core/models.py:724 +#: core/models.py:738 msgid "display priority" msgstr "Prioritet för visning" -#: core/models.py:729 +#: core/models.py:743 msgid "the product that this image represents" msgstr "Den produkt som denna bild representerar" -#: core/models.py:743 +#: core/models.py:757 msgid "product images" msgstr "Produktbilder" -#: core/models.py:748 +#: core/models.py:762 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1850,39 +1850,39 @@ msgstr "" "tillämpliga produkterna. Den integreras med produktkatalogen för att " "fastställa vilka artiklar som påverkas av kampanjen." -#: core/models.py:760 +#: core/models.py:774 msgid "percentage discount for the selected products" msgstr "Procentuell rabatt för de valda produkterna" -#: core/models.py:761 +#: core/models.py:775 msgid "discount percentage" msgstr "Rabattprocent" -#: core/models.py:766 +#: core/models.py:780 msgid "provide a unique name for this promotion" msgstr "Ange ett unikt namn för denna kampanj" -#: core/models.py:767 +#: core/models.py:781 msgid "promotion name" msgstr "Kampanjens namn" -#: core/models.py:773 +#: core/models.py:787 msgid "promotion description" msgstr "Beskrivning av kampanjen" -#: core/models.py:778 +#: core/models.py:792 msgid "select which products are included in this promotion" msgstr "Välj vilka produkter som ingår i denna kampanj" -#: core/models.py:779 +#: core/models.py:793 msgid "included products" msgstr "Inkluderade produkter" -#: core/models.py:783 +#: core/models.py:797 msgid "promotion" msgstr "Marknadsföring" -#: core/models.py:794 +#: core/models.py:808 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1895,23 +1895,23 @@ msgstr "" "produkter, samt stöd för operationer för att lägga till och ta bort flera " "produkter samtidigt." -#: core/models.py:806 +#: core/models.py:820 msgid "products that the user has marked as wanted" msgstr "Produkter som användaren har markerat som önskade" -#: core/models.py:814 +#: core/models.py:828 msgid "user who owns this wishlist" msgstr "Användare som äger denna önskelista" -#: core/models.py:815 +#: core/models.py:829 msgid "wishlist owner" msgstr "Wishlist's ägare" -#: core/models.py:823 +#: core/models.py:837 msgid "wishlist" msgstr "Önskelista" -#: core/models.py:865 +#: core/models.py:879 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1927,19 +1927,19 @@ msgstr "" "för dokumentärfilerna. Den utökar funktionaliteten från specifika mixins och" " tillhandahåller ytterligare anpassade funktioner." -#: core/models.py:878 +#: core/models.py:892 msgid "documentary" msgstr "Dokumentärfilm" -#: core/models.py:879 +#: core/models.py:893 msgid "documentaries" msgstr "Dokumentärer" -#: core/models.py:889 +#: core/models.py:903 msgid "unresolved" msgstr "Olöst" -#: core/models.py:894 +#: core/models.py:908 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1960,59 +1960,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:909 +#: core/models.py:923 msgid "address line for the customer" msgstr "Adressrad till kunden" -#: core/models.py:910 +#: core/models.py:924 msgid "address line" msgstr "Adresslinje" -#: core/models.py:912 +#: core/models.py:926 msgid "street" msgstr "Gata" -#: core/models.py:913 +#: core/models.py:927 msgid "district" msgstr "Distrikt" -#: core/models.py:914 +#: core/models.py:928 msgid "city" msgstr "Stad" -#: core/models.py:915 +#: core/models.py:929 msgid "region" msgstr "Region" -#: core/models.py:916 +#: core/models.py:930 msgid "postal code" msgstr "Postnummer" -#: core/models.py:917 +#: core/models.py:931 msgid "country" msgstr "Land" -#: core/models.py:924 +#: core/models.py:938 msgid "geolocation point: (longitude, latitude)" msgstr "Geolokaliseringspunkt (longitud, latitud)" -#: core/models.py:927 +#: core/models.py:941 msgid "full JSON response from geocoder for this address" msgstr "Fullständigt JSON-svar från geokodaren för denna adress" -#: core/models.py:932 +#: core/models.py:946 msgid "stored JSON response from the geocoding service" msgstr "Lagrad JSON-svar från geokodningstjänsten" -#: core/models.py:940 +#: core/models.py:954 msgid "address" msgstr "Adress" -#: core/models.py:941 +#: core/models.py:955 msgid "addresses" msgstr "Adresser" -#: core/models.py:953 +#: core/models.py:967 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2029,72 +2029,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:967 +#: core/models.py:981 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:968 +#: core/models.py:982 msgid "promo code identifier" msgstr "Identifierare för kampanjkod" -#: core/models.py:975 +#: core/models.py:989 msgid "fixed discount amount applied if percent is not used" msgstr "Fast rabattbelopp tillämpas om procent inte används" -#: core/models.py:976 +#: core/models.py:990 msgid "fixed discount amount" msgstr "Fast diskonteringsbelopp" -#: core/models.py:982 +#: core/models.py:996 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:983 +#: core/models.py:997 msgid "percentage discount" msgstr "Procentuell rabatt" -#: core/models.py:988 +#: core/models.py:1002 msgid "timestamp when the promocode expires" msgstr "Tidsstämpel när kampanjkoden upphör att gälla" -#: core/models.py:989 +#: core/models.py:1003 msgid "end validity time" msgstr "Slutgiltig giltighetstid" -#: core/models.py:994 +#: core/models.py:1008 msgid "timestamp from which this promocode is valid" msgstr "Tidsstämpel från vilken denna promokod är giltig" -#: core/models.py:995 +#: core/models.py:1009 msgid "start validity time" msgstr "Start giltighetstid" -#: core/models.py:1000 +#: core/models.py:1014 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:1001 +#: core/models.py:1015 msgid "usage timestamp" msgstr "Tidsstämpel för användning" -#: core/models.py:1006 +#: core/models.py:1020 msgid "user assigned to this promocode if applicable" msgstr "Användare som tilldelats denna promokod om tillämpligt" -#: core/models.py:1007 +#: core/models.py:1021 msgid "assigned user" msgstr "Tilldelad användare" -#: core/models.py:1014 +#: core/models.py:1028 msgid "promo code" msgstr "Kampanjkod" -#: core/models.py:1015 +#: core/models.py:1029 msgid "promo codes" msgstr "Kampanjkoder" -#: core/models.py:1022 +#: core/models.py:1044 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2102,16 +2102,16 @@ msgstr "" "Endast en typ av rabatt ska definieras (belopp eller procent), men inte båda" " eller ingendera." -#: core/models.py:1037 +#: core/models.py:1065 msgid "promocode already used" msgstr "Promokoden har redan använts" -#: core/models.py:1053 +#: core/models.py:1081 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Ogiltig rabattyp för promokod {self.uuid}!" -#: core/models.py:1062 +#: core/models.py:1090 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 " @@ -2128,136 +2128,136 @@ msgstr "" "faktureringsuppgifter kan uppdateras. På samma sätt stöder funktionaliteten " "hanteringen av produkterna i orderns livscykel." -#: core/models.py:1079 +#: core/models.py:1107 msgid "the billing address used for this order" msgstr "Den faktureringsadress som används för denna order" -#: core/models.py:1087 +#: core/models.py:1115 msgid "optional promo code applied to this order" msgstr "Valfri kampanjkod tillämpas på denna beställning" -#: core/models.py:1088 +#: core/models.py:1116 msgid "applied promo code" msgstr "Tillämpad kampanjkod" -#: core/models.py:1096 +#: core/models.py:1124 msgid "the shipping address used for this order" msgstr "Den leveransadress som används för denna order" -#: core/models.py:1097 +#: core/models.py:1125 msgid "shipping address" msgstr "Leveransadress" -#: core/models.py:1103 +#: core/models.py:1131 msgid "current status of the order in its lifecycle" msgstr "Aktuell status för ordern i dess livscykel" -#: core/models.py:1104 +#: core/models.py:1132 msgid "order status" msgstr "Orderstatus" -#: core/models.py:1109 core/models.py:1560 +#: core/models.py:1137 core/models.py:1618 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:1115 +#: core/models.py:1143 msgid "json representation of order attributes for this order" msgstr "JSON-representation av orderattribut för denna order" -#: core/models.py:1121 +#: core/models.py:1149 msgid "the user who placed the order" msgstr "Användaren som gjorde beställningen" -#: core/models.py:1122 +#: core/models.py:1150 msgid "user" msgstr "Användare" -#: core/models.py:1128 +#: core/models.py:1156 msgid "the timestamp when the order was finalized" msgstr "Tidsstämpel när ordern slutfördes" -#: core/models.py:1129 +#: core/models.py:1157 msgid "buy time" msgstr "Köp tid" -#: core/models.py:1136 +#: core/models.py:1164 msgid "a human-readable identifier for the order" msgstr "En mänskligt läsbar identifierare för ordern" -#: core/models.py:1137 +#: core/models.py:1165 msgid "human readable id" msgstr "mänskligt läsbart ID" -#: core/models.py:1143 +#: core/models.py:1171 msgid "order" msgstr "Beställning" -#: core/models.py:1168 +#: core/models.py:1209 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:1202 +#: core/models.py:1249 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:1207 +#: core/models.py:1254 msgid "you cannot add inactive products to order" msgstr "Du kan inte lägga till inaktiva produkter i ordern" -#: core/models.py:1224 +#: core/models.py:1271 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:1246 core/models.py:1271 core/models.py:1279 +#: core/models.py:1293 core/models.py:1318 core/models.py:1326 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:1267 +#: core/models.py:1314 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} finns inte med frågan <{query}>!" -#: core/models.py:1299 +#: core/models.py:1346 msgid "promocode does not exist" msgstr "Promokoden finns inte" -#: core/models.py:1305 +#: core/models.py:1352 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:1324 +#: core/models.py:1371 msgid "address does not exist" msgstr "Adressen finns inte" -#: core/models.py:1345 core/models.py:1414 +#: core/models.py:1392 core/models.py:1461 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:1348 core/models.py:1410 +#: core/models.py:1395 core/models.py:1457 msgid "invalid force value" msgstr "Ogiltigt kraftvärde" -#: core/models.py:1354 core/models.py:1417 +#: core/models.py:1401 core/models.py:1464 msgid "you cannot purchase an empty order!" msgstr "Du kan inte köpa en tom order!" -#: core/models.py:1373 +#: core/models.py:1420 msgid "you cannot buy an order without a user" msgstr "Du kan inte köpa en order utan en användare!" -#: core/models.py:1387 +#: core/models.py:1434 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:1392 +#: core/models.py:1439 msgid "insufficient funds to complete the order" msgstr "Otillräckliga medel för att slutföra ordern" -#: core/models.py:1426 +#: core/models.py:1473 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2265,14 +2265,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:1435 +#: core/models.py:1482 #, 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:1533 +#: core/models.py:1591 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2294,108 +2294,108 @@ msgstr "" " digitala produkter. Modellen integreras med Order- och Product-modellerna " "och lagrar en referens till dem." -#: core/models.py:1548 +#: core/models.py:1606 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:1549 +#: core/models.py:1607 msgid "purchase price at order time" msgstr "Inköpspris vid ordertillfället" -#: core/models.py:1554 +#: core/models.py:1612 msgid "internal comments for admins about this ordered product" msgstr "Interna kommentarer för administratörer om denna beställda produkt" -#: core/models.py:1555 +#: core/models.py:1613 msgid "internal comments" msgstr "Interna kommentarer" -#: core/models.py:1561 +#: core/models.py:1619 msgid "user notifications" msgstr "Meddelanden till användare" -#: core/models.py:1566 +#: core/models.py:1624 msgid "json representation of this item's attributes" msgstr "JSON-representation av detta objekts attribut" -#: core/models.py:1567 +#: core/models.py:1625 msgid "ordered product attributes" msgstr "Sorterade produktattribut" -#: core/models.py:1572 +#: core/models.py:1630 msgid "reference to the parent order that contains this product" msgstr "Referens till den överordnade order som innehåller denna produkt" -#: core/models.py:1573 +#: core/models.py:1631 msgid "parent order" msgstr "Föräldraorder" -#: core/models.py:1582 +#: core/models.py:1640 msgid "the specific product associated with this order line" msgstr "Den specifika produkt som är kopplad till denna orderrad" -#: core/models.py:1589 +#: core/models.py:1647 msgid "quantity of this specific product in the order" msgstr "Antal av denna specifika produkt i ordern" -#: core/models.py:1590 +#: core/models.py:1648 msgid "product quantity" msgstr "Produktens kvantitet" -#: core/models.py:1597 +#: core/models.py:1655 msgid "current status of this product in the order" msgstr "Aktuell status för denna produkt i ordern" -#: core/models.py:1598 +#: core/models.py:1656 msgid "product line status" msgstr "Status för produktlinje" -#: core/models.py:1661 +#: core/models.py:1719 msgid "order product must have an order" msgstr "Orderprodukt måste ha en tillhörande order!" -#: core/models.py:1663 +#: core/models.py:1721 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Fel åtgärd angiven för återkoppling: {action}!" -#: core/models.py:1677 +#: core/models.py:1735 msgid "you cannot feedback an order which is not received" msgstr "du kan inte återkoppla en order som inte mottagits" -#: core/models.py:1683 +#: core/models.py:1741 msgid "name" msgstr "Namn" -#: core/models.py:1684 +#: core/models.py:1742 msgid "URL of the integration" msgstr "URL för integrationen" -#: core/models.py:1685 +#: core/models.py:1743 msgid "authentication credentials" msgstr "Autentiseringsuppgifter" -#: core/models.py:1699 +#: core/models.py:1765 msgid "you can only have one default CRM provider" msgstr "Du kan bara ha en CRM-leverantör som standard" -#: core/models.py:1703 +#: core/models.py:1775 msgid "CRM" msgstr "CRM" -#: core/models.py:1704 +#: core/models.py:1776 msgid "CRMs" msgstr "CRM-system" -#: core/models.py:1716 +#: core/models.py:1788 msgid "order CRM link" msgstr "Beställningens CRM-länk" -#: core/models.py:1717 +#: core/models.py:1789 msgid "orders CRM links" msgstr "Beställningarnas CRM-länkar" -#: core/models.py:1722 +#: core/models.py:1794 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2412,19 +2412,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:1736 +#: core/models.py:1808 msgid "download" msgstr "Nedladdningar" -#: core/models.py:1737 +#: core/models.py:1809 msgid "downloads" msgstr "Nedladdningar" -#: core/models.py:1745 -msgid "you can not download a digital asset for a non-finished order" -msgstr "Du kan inte ladda ner en digital tillgång för en oavslutad order" - -#: core/models.py:1754 +#: core/models.py:1823 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2439,30 +2435,30 @@ msgstr "" " betyg. Klassen använder databasfält för att effektivt modellera och hantera" " feedbackdata." -#: core/models.py:1766 +#: core/models.py:1835 msgid "user-provided comments about their experience with the product" msgstr "Kommentarer från användare om deras erfarenhet av produkten" -#: core/models.py:1767 +#: core/models.py:1836 msgid "feedback comments" msgstr "Återkoppling av kommentarer" -#: core/models.py:1774 +#: core/models.py:1843 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:1775 +#: core/models.py:1844 msgid "related order product" msgstr "Relaterad order produkt" -#: core/models.py:1780 +#: core/models.py:1849 msgid "user-assigned rating for the product" msgstr "Användartilldelat betyg för produkten" -#: core/models.py:1781 +#: core/models.py:1850 msgid "product rating" msgstr "Produktbetyg" @@ -2668,11 +2664,11 @@ msgstr "" "Alla rättigheter\n" " reserverade" -#: core/utils/caching.py:41 +#: core/utils/caching.py:48 msgid "both data and timeout are required" msgstr "Både data och timeout krävs" -#: core/utils/caching.py:43 +#: core/utils/caching.py:50 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" @@ -2704,24 +2700,339 @@ msgstr "Du har inte behörighet att utföra den här åtgärden." msgid "NOMINATIM_URL must be configured." msgstr "Parametern NOMINATIM_URL måste konfigureras!" -#: core/validators.py:16 +#: core/validators.py:14 #, 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/validators.py:22 -msgid "invalid phone number format" -msgstr "Ogiltigt format på telefonnumret" +#: core/views.py:72 +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 "" +"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:489 +#: core/views.py:87 +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 "" +"Hanterar det detaljerade vysvaret för en webbplatskarta. Denna funktion " +"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 +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 +msgid "Returns the parameters of the website as a JSON object." +msgstr "Returnerar webbplatsens parametrar som ett JSON-objekt." + +#: core/views.py:167 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +msgstr "" +"Hanterar cacheoperationer som att läsa och ställa in cachedata med en " +"angiven nyckel och timeout." + +#: core/views.py:194 +msgid "Handles `contact us` form submissions." +msgstr "Hanterar formulärinlämningar för `kontakta oss`." + +#: core/views.py:215 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "" +"Hanterar förfrågningar om bearbetning och validering av URL:er från " +"inkommande POST-förfrågningar." + +#: core/views.py:255 +msgid "Handles global search queries." +msgstr "Hanterar globala sökfrågor." + +#: core/views.py:270 +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:312 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:547 +#: core/views.py:315 +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:353 +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." +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:365 msgid "favicon not found" msgstr "favicon hittades inte" -#: core/viewsets.py:1357 +#: core/views.py:370 +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." +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:382 +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 "" +"Omdirigerar begäran till indexsidan för admin. Funktionen hanterar " +"inkommande HTTP-begäranden och omdirigerar dem till indexsidan för Djangos " +"admin-gränssnitt. Den använder Djangos `redirect`-funktion för att hantera " +"HTTP-omdirigeringen." + +#: core/viewsets.py:128 +msgid "" +"Defines a viewset for managing Evibes-related operations. The EvibesViewSet " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" +"Definierar en vy för hantering av Evibes-relaterade operationer. Klassen " +"EvibesViewSet ärver från ModelViewSet och tillhandahåller funktionalitet för" +" att hantera åtgärder och operationer på Evibes-entiteter. Den innehåller " +"stöd för dynamiska serializerklasser baserat på den aktuella åtgärden, " +"anpassningsbara behörigheter och renderingsformat." + +#: core/viewsets.py:147 +msgid "" +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." +msgstr "" +"Representerar en vy för hantering av AttributeGroup-objekt. Hanterar " +"åtgärder relaterade till AttributeGroup, inklusive filtrering, serialisering" +" och hämtning av data. Denna klass är en del av applikationens API-lager och" +" tillhandahåller ett standardiserat sätt att behandla förfrågningar och svar" +" för AttributeGroup-data." + +#: core/viewsets.py:166 +msgid "" +"Handles operations related to Attribute objects within the application. " +"Provides a set of API endpoints to interact with Attribute data. This class " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"Hanterar operationer relaterade till Attribute-objekt inom applikationen. " +"Tillhandahåller en uppsättning API-slutpunkter för att interagera med " +"attributdata. Denna klass hanterar frågor, filtrering och serialisering av " +"Attribute-objekt, vilket möjliggör dynamisk kontroll över de data som " +"returneras, t.ex. filtrering efter specifika fält eller hämtning av " +"detaljerad eller förenklad information beroende på begäran." + +#: core/viewsets.py:185 +msgid "" +"A viewset for managing AttributeValue objects. This viewset provides " +"functionality for listing, retrieving, creating, updating, and deleting " +"AttributeValue objects. It integrates with Django REST Framework's viewset " +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." +msgstr "" +"Ett viewset för hantering av AttributeValue-objekt. Denna viewset " +"tillhandahåller funktionalitet för att lista, hämta, skapa, uppdatera och " +"radera AttributeValue-objekt. Den integreras med Django REST Framework's " +"viewset-mekanismer och använder lämpliga serializers för olika åtgärder. " +"Filtreringsfunktioner tillhandahålls genom DjangoFilterBackend." + +#: core/viewsets.py:204 +msgid "" +"Manages views for Category-related operations. The CategoryViewSet class is " +"responsible for handling operations related to the Category model in the " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" +"Hanterar vyer för Category-relaterade operationer. Klassen CategoryViewSet " +"är ansvarig för att hantera operationer som är relaterade till Category-" +"modellen i systemet. Den stöder hämtning, filtrering och serialisering av " +"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:315 +msgid "" +"Represents a viewset for managing Brand instances. This class provides " +"functionality for querying, filtering, and serializing Brand objects. It " +"uses Django's ViewSet framework to simplify the implementation of API " +"endpoints for Brand objects." +msgstr "" +"Representerar en vy för hantering av varumärkesinstanser. Denna klass " +"tillhandahåller funktionalitet för att fråga, filtrera och serialisera " +"Brand-objekt. Den använder Djangos ViewSet-ramverk för att förenkla " +"implementeringen av API-slutpunkter för varumärkesobjekt." + +#: core/viewsets.py:427 +msgid "" +"Manages operations related to the `Product` model in the system. This class " +"provides a viewset for managing products, including their filtering, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" +"Hanterar operationer relaterade till modellen `Product` i systemet. Denna " +"klass tillhandahåller en vy för att hantera produkter, inklusive filtrering," +" serialisering och operationer på specifika instanser. Den utökar från " +"`EvibesViewSet` för att använda gemensam funktionalitet och integreras med " +"Django REST-ramverket för RESTful API-operationer. Innehåller metoder för " +"att hämta produktinformation, tillämpa behörigheter och få tillgång till " +"relaterad feedback för en produkt." + +#: core/viewsets.py:547 +msgid "" +"Represents a viewset for managing Vendor objects. This viewset allows " +"fetching, filtering, and serializing Vendor data. It defines the queryset, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" +"Representerar en vy för hantering av Vendor-objekt. Denna vy gör det möjligt" +" att hämta, filtrera och serialisera Vendor-data. Den definierar queryset, " +"filterkonfigurationer och serializer-klasser som används för att hantera " +"olika åtgärder. Syftet med denna klass är att ge strömlinjeformad åtkomst " +"till Vendor-relaterade resurser genom Django REST-ramverket." + +#: core/viewsets.py:567 +msgid "" +"Representation of a view set handling Feedback objects. This class manages " +"operations related to Feedback objects, including listing, filtering, and " +"retrieving details. The purpose of this view set is to provide different " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"use of Django's filtering system for querying data." +msgstr "" +"Representation av en vyuppsättning som hanterar Feedback-objekt. Denna klass" +" hanterar åtgärder relaterade till Feedback-objekt, inklusive listning, " +"filtrering och hämtning av detaljer. Syftet med denna vyuppsättning är att " +"tillhandahålla olika serializers för olika åtgärder och implementera " +"behörighetsbaserad hantering av tillgängliga Feedback-objekt. Den utökar " +"basen `EvibesViewSet` och använder Djangos filtreringssystem för att fråga " +"data." + +#: core/viewsets.py:593 +msgid "" +"ViewSet for managing orders and related operations. This class provides " +"functionality to retrieve, modify, and manage order objects. It includes " +"various endpoints for handling order operations such as adding or removing " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " +"enforces permissions accordingly while interacting with order data." +msgstr "" +"ViewSet för hantering av order och relaterade operationer. Den här klassen " +"innehåller funktioner för att hämta, ändra och hantera orderobjekt. Den " +"innehåller olika slutpunkter för hantering av orderoperationer som att lägga" +" till eller ta bort produkter, utföra inköp för registrerade och " +"oregistrerade användare och hämta den aktuella autentiserade användarens " +"pågående order. ViewSet använder flera serializers baserat på den specifika " +"åtgärd som utförs och verkställer behörigheter i enlighet med detta vid " +"interaktion med orderdata." + +#: core/viewsets.py:782 +msgid "" +"Provides a viewset for managing OrderProduct entities. This viewset enables " +"CRUD operations and custom actions specific to the OrderProduct model. It " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " +"feedback on OrderProduct instances" +msgstr "" +"Tillhandahåller en vy för hantering av OrderProduct-enheter. Denna " +"vyuppsättning möjliggör CRUD-operationer och anpassade åtgärder som är " +"specifika för OrderProduct-modellen. Det inkluderar filtrering, " +"behörighetskontroller och serializer-växling baserat på den begärda " +"åtgärden. Dessutom innehåller den en detaljerad åtgärd för att hantera " +"feedback på OrderProduct-instanser" + +#: core/viewsets.py:833 +msgid "Manages operations related to Product images in the application. " +msgstr "Hanterar åtgärder relaterade till produktbilder i applikationen." + +#: core/viewsets.py:845 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +msgstr "" +"Hanterar hämtning och hantering av PromoCode-instanser genom olika API-" +"åtgärder." + +#: core/viewsets.py:866 +msgid "Represents a view set for managing promotions. " +msgstr "Representerar en vyuppsättning för hantering av kampanjer." + +#: core/viewsets.py:878 +msgid "Handles operations related to Stock data in the system." +msgstr "Hanterar åtgärder relaterade till lagerdata i systemet." + +#: core/viewsets.py:892 +msgid "" +"ViewSet for managing Wishlist operations. The WishlistViewSet provides " +"endpoints for interacting with a user's wish list, allowing for the " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " +"actions for wishlist products. Permission checks are integrated to ensure " +"that users can only manage their own wishlists unless explicit permissions " +"are granted." +msgstr "" +"ViewSet för hantering av önskelistor. WishlistViewSet tillhandahåller " +"slutpunkter för att interagera med en användares önskelista, vilket " +"möjliggör hämtning, modifiering och anpassning av produkter i önskelistan. " +"Denna ViewSet underlättar funktionalitet som att lägga till, ta bort och " +"bulkåtgärder för önskelistans produkter. Behörighetskontroller är " +"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:1007 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" +"Denna klass tillhandahåller viewset-funktionalitet för hantering av " +"`Address`-objekt. Klassen AddressViewSet möjliggör CRUD-operationer, " +"filtrering och anpassade åtgärder relaterade till adressentiteter. Den " +"innehåller specialiserade beteenden för olika HTTP-metoder, serializer-" +"överskrivningar och behörighetshantering baserat på förfrågningskontexten." + +#: core/viewsets.py:1074 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Fel i geokodningen: {e}" + +#: core/viewsets.py:1081 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" +"Hanterar operationer relaterade till Product Tags inom applikationen. " +"Klassen tillhandahåller funktionalitet för att hämta, filtrera och " +"serialisera Product Tag-objekt. Den stöder flexibel filtrering på specifika " +"attribut med hjälp av det angivna filterbackend och använder dynamiskt olika" +" serializers baserat på den åtgärd som utförs." diff --git a/core/locale/th_TH/LC_MESSAGES/django.mo b/core/locale/th_TH/LC_MESSAGES/django.mo index d09cc8bd2032b245f21575cbf39e5bed27f75eff..f11e5dccc9b6c060ddadc9d6aa1aa6d2c0512241 100644 GIT binary patch delta 27626 zcmb`P2YeO9-mrHeKmr1R^w16+1VRTJ9YIi$D%g-ia)2Xgq)=>!A|fJ17hD6P21KqX z0!9QbilFF46w9?@4X6kx3fR3~e4qc!>^Ub9eSLr5cYaKsnc3MX|2DI`-h0RE)i*7T z4SiBSW`)IXa23mH2uIhqtc0qTbyo|iwXF9$Sym!E2(Py->l+wLc~}?AstL!!R5%f) z!JA+;xB}9RwF<_-2jQ*oVJP=C?`m1`mKCxx$RttG2QG(WV0CyLO2bpIF9ZJuW#C@j zEvqRU1Y5%?FdZ&~TUo?o@O;Yt^K`$fAXU~D!!HdR(I}Detx;rJNk`BRm%_&I6ugCj z<1etR%i)p>EvqN>A6;Zw!(n1C%lZ)p;1+moZ_BDhyE=VX4CVB`dO=r1k-)dG9{e7r z!s`7jE1B`FCS>AZ4=5|{3sc~wP(+yt<%S^SpEZ|1&)Jr>7hXyEwgISt@`rE$?0T{8 zZ^j_aIj|}17D1WFMz{(-2}9M%3>%Ej;TU)h3_{WQbU2(27eNvIN0(UEr|=8-DD^K6 zv8?tm?^4UU2GQStnPq*z^`D1XRx$N&U4e?=kP((O6iypyS>xa{qgV*-lg1$b5-P@y zwXCP$sd1L|3LQLhHO5G};2O*N4lcdcvN}>fZ#<-222WG|?0U<(n)1677=#WxPsH#j z-;|{%SZ|VL*fR$tNk5{WUA&`RvTCo zis-sRsXxz@`#{FB20}5?M`1GM<9WKhov&3;9g1q>;S02D0IM>wPeaozs{2g{aP=;ba)0ff@#w= zLp{kz!!fWs48cUW6^aq=ha#%Oum&FAco6o1ZDuk# zI0e>+8(}-~|J`K7_`Zg9pfyW3s0(kR*bKIW4?yvTy|6ai50l{gP&)huihJ2N>WL)4 zx|AEiWY_`5!+|gbj#1aqe~!6ui{TO|x_S_%!wpa-_#*VdgYaDVE9?SWGD}g_I4JdZ zLK%1~6p6hEo52H67I4yB{}I+>e5?A+dcagDD`*bI$ht#W=|xaF7z#z?IZ$ljMkpem z2W!E_P$p1fuJ47ikONRA^uDP-3Pr`IU`Rw>{T404Bq#&6f$6XZlmSPW`ti_5IUC9Z z7DMrhd!ej!6_kP2LQzc_l>T0Z($9NP2L2q%eZSm-{^iCqRLIJ!->R7krQx|ybl(Sx z?gCI$F&(DCI}IO(GVm@aw(uI1ehi6I)__Z)Tz8>N@KGqnbO?5Y zwHIm?_JTtwkAS`5Di{YpfTGIJVSUE8PLt^YtKF&hf{S2R$~VBO@B!Ecu7PsnE3g4P zXv#mp#+0ir(xPt$MN(s7Yj}g3T<-vl;;!{AkL8Wc&s0^7nWOLe>Uuo~rSU>)d(GG6{tKXq9C!vcgteCGm9~M^DGz|+u0x^RcMX(<-2v;u2cdYuCMbdJD3t#G z8zNJSOwGG>$H`E1+ZBrOT>-`D<{K`CBB2#f86WIG`4AMht9y^G9|#9hz8Q*y_P`PF zb138WaP&k%{mF=E#zN86bx;PJ1QTE`6v@nmB8g?D{y``!D1-5Ex4Hf%lmW`k^{>tK zU!e3~bGeS336T3jRtGZT-@Tz2*_BW_o(pTjrBF7Ll~6j~3`MlhK(UdxU_JOXl=f#} z9E@9`?@NF(@wQN|p9ed^0njJ@Uqq%26)T|VXcv?Ye}du#arf#oUR!uB*QF7O2?{rm{egKbvpdjD$VFBQwFkOl_~ ze}^K<&JXBKV*-@x_d^lkYp@?oeo&Xk!M>CqGCTx(QEv8-uAcx!Ql+ptd>4vDe|;#V zt=m_sMVG&m1l^srXNZg?T(qp&Y* zu}-%SK+(AaTfyB>j6U=w8Mz_;5iO$2U`xt#py+TtYy|%eMb{@`ADFsc2dHsSI$i=> zz@6|SSPo^SjsBq})&`3EW>&O>mP~yr=0lmteNa~N6qFke z!rst&Os}L5tV!`=SRD?BscjnxGHBdD5Br}v{uCz@O;YlHa*aVP*ha_N5lDsAHbg|cigU3 z(Rzm-s4o=JkB7?{a0zTmx%p1r|HV6z|L;{e5SR-8E*>gqa0|pStk~z+5#bXsrWyvi z8~stP_oANAr|{pDlV3s_@R;Ep|3XTXTkqoq1$5vU_ze{AIPo&CUs&+Dq5YhC$b3w% zC0tnkCL09Ipw}u)tm<2qwU3!se}}M2`So{+f?V%?ke!kG51|;_)DLyXbD-#c7wiD- zk2E{NCX}y(qLN!+T^L$VMs&9gq896O7>|G4`!N%vy#5e3QXYSpt(J-2dPE;KM;_Ol z21OOi;5qOM*p`W%h7Bk;{8}Go&x1WEXT$MuEo@&E{Z~1mb=vVH6|As7Y{`Imr&%fG z6+g12BKj`BU>lTM{LW;V$PnAMYC*f2ZMB89V{NM&>{-jU{z?1nI<|G1a_dCfx|9CW zQ*Eme_pjr{(j)MN#5&keM#cep-!h;7|Vf9LYja4Fma>%kGjY;~N^gd+OM za1P^JGswijU(AK7SJ+CF32+1TK4{bNE3h5q10!t}aDIW!Dc2umE357S-(w=sc-z8ktlcoQmdr|C?257Uo?u&(U^cu8z6Hm^4u0F33FpHJ z@QmU06KzZG-wiK@Sva+D1H1{IgbQGHmTkQczlU=DKtMBLlFj*#imN8s%8D1j7L->* z2_VnI^WkxGy~Si(8R-S^LF&JToLQ{9rq~vqWwj1!Nt}dofBhRYFMwiv6JaM<0`oA^ z{WpYcfJ41(XTJ@NuCj<6G^?NQc9q zT(|*>5#0mD=w3GURd3a9*bYj&hoR{9RVep=1xsKJj9Nro3Pn;U;4D~owl>CvP_91< zLlSu6=4eqR7`B3UQhz>_j`zZwV7Vz@JJ+^GQl1Hyz*nG1=<0deTNc6jlwX6QiqW^} z1>FE;!lh7*dG~Gjzf`31QhovK31tP(L1Kz^)$Mu$&n(abybq;a+#Nb%-VOIsUIpvY ze!@cAdVzBOoq9pt7TMMm%7dY}^=7yjeh1gUId>r%xzJ*lp_rL+vKMUoAWG~S( z?gNidcHw4t>r&fV4?8Z?6M7GdzaN4*FzIevZM*ZJ7~@(fl6o47gue`txs^=8JzA%y zpfpHxbfg;!Cs6(k-T|*$t|xp1-bT6Y3T<3ZK(X#V_v(IfpiE>1ydS;{We=F-+ExuD z^#&9#3%!4z4j^AZ@zaqdwm#!QDL()uaBPFp!S|*-exTiLwX{`P;OiT?}ewK80W%L z9Y5AVF}D3sR#pxr9-M$8(GF`g$3qE3OBM0Ir_63`)i=s#8N1S&}X4sPkmggVhjv5 zrJ~_R9VmK3F`5Z*9b672!d>u$txmxkpy)bw6Gtdm0z1RLo3%F-KoM>8EqXzhKvBgk zC=$3GiWh7#*Y|G0|K)}ss1T+H?>hf?nMPc5pupseIU zI0^2B55RUiZL1XShY}I9pRuiH;rCFy;K^t81ouI?zsfGX&9^qphw@+(+F>eEp3@B` z7(NPbq`_$@E6Leys}~Xbpt$R&P(tXUJ+`$PW;}0O&%jsVKj6X_bbnp;>Ns!{6k|LJ zXTszcl}bX^QZf=CYQ3a62a1vXWXgB^%eKCxd+;ce^z~!!>SOhX@9AxJ*!w#6?}MU>9tX7~E`wq-D_|B~ybfE7|9AUP z9~`cQ5`fk~F}5e6i2fK9HyZen-n~Y^_b7h~uq}oYsQ>6o{9k6;>!>!8*>F7N6Hs)0*)eSsAHxxp zM;+&x4X%UYcGrKUC9nWCrF=J(c4cq^toF5b-$_sc&rT?j^)*-k8_Ch=5;Dt9*w*v# zAQZp6{~OJN@D0kz-)cAe5=unOJE`6AQ#gV0pi_E6>!A$vI$RD9Ls8|7)B3(Apty14 z@3h3{hseA{#Th6!zWBY?+51q+|Ak@$@jvK@I2B5Wz7vWu?SkU}KSOCh`$ve%99Tg4 zk)QN{X+LYXoDF4xZGX`=7n(#yMD{q8NOuNGgHgX~9WR5qlvDmA?m`TQhv7xP+169A z$$#}j>f2Cs9Xg{Yl>9qS!;~L@b77HH#kz=z{RAaGbgNRux|!zI$7Ft?;%feT2+_^x zm@3x4;99r@POVnOx(xmbB{UDNUPT?V9Vij(Ae6&o&l*+KQEMq=9Q6_cSPiT2Mx7+~ zA-_^CZqQl&TN3dURZyyHY-^i&g{jZAm96C(s6)vxb?r(xfrh9*1e9@zk?-S?5z1FBkdsA^uo<$oxja z^Q?5zSW;t>{3M7Zld6-tQ&*3h`;q3E>r`7c$@ih|3RB0vV@;<1eUiLSl3#y#i2Bi_ zPNtosuCV@t) zQ+tK3(f<{dF^zM%AZ|y5RGY+e@I}h8qzrSDG_OX! zC++3enS6n{_Aq7H#2QiFW9rsZW;3+<(mtPj6H*STx9DGf>FRIfPX-O^bHhnfRSRy4 zT(%xI9Up)fnMp`cX-Nv2YtlT8{95QE-AA5aYRx1`e33K4#p3_hP;m)qBNY+>eTv?1Na^;<}F$*+RVNl%l`_Pc}1aa{X=L;$sB==Jk0jzSmG zG#V5^@AnCrTPX+Nb#RNhFrWM~@*5!$S-o5y3NIv;lj?D8CzM}b(x;L!zuMGKB;8C3 zE#glhNq%iu0b9HJ96OM54EZoHt zPjjsUbvsErB>r5$g$Wdjl7J1ol?jr3Y9Vb=($@|=IXnQUx!CY)bT{|;S zBU9G{)-`n>8p@?Bjs2-+4f#97T+jqyP3A%QSL&@qb%&A&P<8*dNmKwD2<+y6u=ekIB8QPK<= zMgIyYTu*XL{q2Uon?}vxLF(3$t|B!cy+itrbdG8BD*62;KZ5*uOrS*ce}u}@q_0W4 zOoK!&eoP*y-^<+aZqrh)Pzo7hw?j5Lp_$8tiomH`g@e*3HS)*RBu(3 zLuLHwMUr0&l1+ol;c{35ehxcu!-G(M55RwsJ|KUP)QkL9(i7ybCVfPDmh=+o2GTl` z_v=c#B>Fl7%`c=LG&Y-xbGUen{Ht9352-Qfqex@RZ}KIuyIDn|>FIUYnYwFWQ*$j1 zCQ*LVv>6YJNL{G!q1vGT=-)UBi%9cLWfcbcfqYFG&m#W}`KIs*lKftR=b3zS+DtNe zx#lzZHB#Vrp@x-CyTM*N8NUJPGtyxye=&_dhe1+2bx)C6a8nz~+s%zjO*;<*sK3`- zle#C(g>G;a>1}gufvK+s6X-KkpFi>&M1ysv(Nx%qx3)^de_Den zrX#On|MPYv#2n`S7-E;U}5-{eCLUw>7ndkVG;MV_Z0-VDKK5- zGYbNKU0a-=Wpe)9EMHb2J0SIcI>L}5Uof{QFuA~A6e#q~2o_E84ZOjhJ2}rc^5RjW zeS-@8Ie{5@1yfsl(+Cy$asruC{JFuxoI;Cg913}y$5g3?Ptz(+sRgIR$rU(u9;yyD4I zV8F~t?y4Cm=&-xpHS%N)-fq@$}%tKw*c1KsFQ0^5x|RSg4-D zXu8#xuS6xIP)TOCzpxN-Okrk4OuZm4$9H)iBJ>)_YR&YxT%0Sbah@GoD}*?*vSl@9 zfl4ls!F+kSW+)$0P)p75DamJM7iTg1!s7h=yaH_$S+jEeIl;^*De8&QY@)wV7Llt& zl385f$+SBwYVXS|E-cE+3Et?Rn2i(z1v$aOLRo5iH5=MyX^A7C96#1oR;yEon2^kz zt|w&XQUX9kn76Vy-57K9 zYs2#U3iAV*!AU_DF*PttO)FFs%n9Tb7e$7coSiq(pG_zJ0=k}7%%lT_k;_qIds;2Z zikVqUI@F_4q5y#*mm52(p{cOt}qFFOyHQ`V&yQiKm= z`m%xrY;Ac3v!r_&jWvX1w?m7%qCzL^ez|!P7mIVTdw;I)lF_4w`?_`N<_i=QU^QGX z@CPL-D!0uNH`jA12o&ZO7i0#cNpY@!I@T|NF|u$OTziH1fNaZ1r!b#@i3sSL_`t$* z{Q1V?!)rHE$L*yHBT?)LlnLY(7Goqv@y1y2FujXQf6CojN_b z-9PoOV`(r4Im>}WjaOk8vo4pTBNxx!gUn=t36&FkIdX<^I*x9UeD+h4v$=PY*kBNg zi)>$BY*Sm8w$`Y@qGM_>x3I{cOC-`Vnu#5=|ES~BgbF9D3F4(37kz}J9D49vinvw1 zNSz1n8JQG{K7UT~&YwzQawMHpoUJzO$XpoJ(?Cw3XiA=pU139!7^5~P?e4PUaw1UX z@`q!RKQrWoRPT5(DG#5_VvJF)A+L;X*xluXSoxvr z3JHreQl=3(msfb?3gpVBQRo{ma?HSJUlTR!^R}nC@Zd6Q5u(#R#_h;V?2@~(*C z`Pelwr;*feo z%GD#PP-YGzY8&?sBPQ%d^`GN)Y+`}eKgaS(e%aGiwALeGjp_+hH|05XLV=m;1YgLD zFv^F*>lXEx8R$WgUIr`7$5$|f@L^qtOZA)(zIRYK8h8)sQKwq(dB6)!A&fZ6w<_O@ zwp8R2C5IpDql`qXEaG5Bmqb|+Zhmn=ejcGz9i!M~)d5Bh0OYYi!W70Il5N_1_>S0? z4v>*6Cio~l$a6s;2Pt^2h-^A&3k=IZjvdP5R8XnBs;FIHoVFIZ-B)=lkj3Trr(zYd zBhY17fnf>wbi`50^B%Eu1S#v?vuQ#ovS=~u@Y@vDo|9*u@*`UP({}{nN3y|$<^0G~ z#U;#8eBV=MMO|`NNWZgDw?(TmJb#|lczTsrAyJ!XWUpY&e|Vxqd-;Ce1Sqwt>e-PgQ^UAgB8Xzv=pe7km3y!gipZ)DfK=^>NxiE-+;DEgo%p(kfZ!pHZIJDbGG0RJ`98-11H}i-r3~v)=F(9%2K$h zCmlXz5D?WWX1TJsHmGUsIelV;%`b#b6!zkX3lo z*DvbWAKAxLED1-73GAIriC11x`VPpBDz%;oYU%ySQ9x;so*(KzyxI#D`8!Vh6yHivk)K=zQ@a_srKJqe6I`ZD8iBG5(YJQ3M1;n!%^sF{M z<}B~PLefNT5f=%^$@X#zOHAcRBYI=)KJdB!3{!8z!OH-rJ6l+s8&$95qvvU6FWrcNgkOO3L?Fj^ z>_gt<7~2ZJ#*|aOIWu{3qDi4Ir#QPP$XO@6NB`j^UgV{r`fO48ZJv@{#Rr$}`i;As zj*tlxMWHjMsP`afN?s|;{5g!-u0 zKC=1>FKWt47Q7W(wqe=x)nd2bS-yRH`S#^*dB9F|k94)`JDm>1IekBgb#C5Qv(@_Y z?OV#XuPEPsFU=xvqxE;E@(MRQ1AeOSblus>ss3KNTc?R#+kLjT9beN|zI{&l_9x4? zuXWQV+YM}=v-^j%Yr~c0+c&BqR+aCV%`_OxSH6QA)|GGH9My>8%JS|1%WO(jPbJRm zQ%w?O&~@cIZc}|kud)AJHROV`f47Pne8)Ul-;RZ9`3PaXn%642b(>7KQ|_H=$0ac3 z$I7=eF6(2u8_2uUy4opD?&sBGWC_le-&0v~-|srsU_xsdTHTz%EnCZFgvZnf_m}Uu zLv>OT_30}7<;rsWCmNP5xcAPOgfcZ?iIP=__XERy)((^x`R{pdy12NEF%U5l{mXUPpRWc zSij71N`FXlHtmRWKKrWvpvd@t6l?kR1xm#9vr=h}DX>x|%S4`1io_75h*Z;kXacP; zJN{w8+(oe@%G^d|*$J`RSq+lD!@2JBrq2H3b!+Y@-;S-JjFqn4#BR+0s;cz$#4_J1 zUrpz;gZ0nl0wbWP4N4_ZGur;3lFQoi9d|JWUu)OyXeYR5*4eRDT3gPcgNcZ|g=m>I z-sx;QnU=6ItW`CjvWJWVK6lw2cD=ST1!*a&6eGj7*QlDUl94gInV)(k&0SH?Zsr_5 znBaEq&!E4xvy+&(9@A5Eo76vX51&)_XqWVeu^GE5-){8e?z-7-TunVKxNo|4io3h9 zUClZEQA20UC-`sp(C^&+Op0@2V}g5VxSi~a2wG`IOdAD8{Ksv4vz^lP&!(ij9X%{? z`wYij{=2H7Gi=kj@d$)FP$e03TIz1ewHvx~gG8kzyV8;o5GIOQ;B@4-EBTg)teqFu zBsD@omm<8TPt^yLra#mq=Aix|dCX}ei$ge1 zE5%@ftc>AyaLrvD!*rkBla$DHS+JTaUMa=O8fop`*41u=^t(FCpGkGD_^G<_nFely z$#&Y`6QOh0ku>*>d+f&UL*wi^?!e)8{pQ9pB1TGtR`WJ)vtyypIrLSd1eRs=60xS0 z@1$!_wGT9OcJGV{MPyXIgH<41gfP#YjcP?S>M5;34f^1Y5@*kMU9kN6PV&!n>Wd&)FmoZii;1Y_HCc_(dDvsB zJI4>D#LCo^pYQr0#r>|C-K1^U&Ez8+c4fk8wB6`$ZBFPvDb-4u!ykrVM@e*dH@92X z^0hIayW0Ak&O6i7m>R)NYY+=%`ucCF^X9t^6GiCw1l!h#)y=@zPY6Y)8 z)Yv^7uru7cww+K<7J0wYEPur)+yl*R*{Bg}_pngaDn;?7DlDN_TJx8YjrLgv{_?a~ z)v7~2_o^v&!}>~sf9yOI5v2&O^06VxF|=dJf>^t)0{#Q{17e?Ih=4r-u`dQvceBYDF25E zApOsc$XT{N%^lX>PH&HZ{)SbkIcj6588HU8^9sAs|7SaBN8CU<{KEp!ECCOzLCzGh zUFsLfo}jGB{dk<+!d-Ed?Tf(@m%E)xycP ztUlDpE$(cm)KT9Jm0L;db#{G_?6i5S8P^*pV|W|~jJjpEdSZJ9+6kA46)~KdtS4vB zUC(A?XSa~DUh9_FoLwpez#0!Jc|72p`mUMNXY zOMj|a2-th&A2nf-Aq2Qk_{cXPU(n7%=E&y4Pqj09s@w3^KLJwEs16i!i}6xlVM z-cK}f;}_Y@v_8{lq^%w)OB9RTR{DCQ9%1J|dPs;hAXR-r;;sczA1fs?ns8krhx10} zR=pb8AGA2-e0aNB7Jh!xQ?ksEGp0A7gTVUi# z1*tL}~gGV`?j%rn}OeTlU38J^ZxBM&sQclkL>>c}mILY_@WrC`WoKk;Bse z;YjB4{~XdGCVYBr@A;hA8tcS*^@2HAViU4f9)xG0(JKm}KZhgmhEY3Z-47uG>)2`>NIg{#)dcC3Z*~>{Xzj}^u zLrkJR8KA7q;i*{ehQ4;=vL7}$RqDxz`T;b0b`d@3w*Ya@p3f6gDt_^+xSkp~4=0C( z&J~;5I#_XC{Q)#$O?i78I*tF4>MomaCpe*d&y_xptCrCht|pJx|1nO(wZlt>J+5=i$TKGAhW!Qj=f>m?JjDBpgfmy`CDf z!7d0YC8`oLK{3b-!x2Y{K2hjc(n7UnrCcNWa~n6%6jP@XWr@JuzRTH)@PC+`4sJ60|7AW=yQwEW34JV*;@We(*h^Sk zG41}AWYuB9a?ZS+QgKTP@D$~I zeK4-}dbKKyN#1X{yNm3`-cxQ=3~6(=X8Ns0tP}f=e$gdI9fXULFat84IftDf>axV| z7AP(4#g_Fvd#dPBHH}AM8cye@(ykOiGD|w$s!RiAp49`8Gk%q09Qz~tQ$x=LBKuR+ zZoTJtlDxDMyHzh}vHw)3L3{rBI!G*EqFAXpaNhF>j(xBr%ZCEoD1tAgBM6?Xsp zTo^gxR5Dj}pY{nhl8w%DZ>OhG#E0%tvl8uv4ZqU+yhM3}bkSd|LVA$+LJxSc^shXI z!ytKjUgPY1r$NQ|S@}Cbv7ygXybNeRSO?yUSs0o*qhL4I!QD1$0 zZv1>6-=6*^-5LLFgSwcT7fw~^B&NrD(Z(q)OG(4{x2csGFDnCx)^%A5U+jo-*C4v3C6$#+uyt zc6MuL$Nv8A>>vl70qxj>y-V``!@X#@ogTxfb%C?^NNP2od^#^%{p(G(^X8-Jo(si$ zra9gGFOy_nPP})%9VZ*A*jg)J|^Mt?H8WtY0ns z^_Hj_%ie@Zc@vVLf}SuT{_3+FF@{Dw`EekXXvud83k z&F1k;O_>>$s-1@^GgCB410!4|HgkltcyH*=>50j8{H-X~3lZVdP<8JBE1w_SvRKqO z`#w9)tvk_9$ndrCKDxK{c{#6#a?cLcv#x|!r`|R`m}q<67#=`<3UCMAPN?=ePIMQx z;>GqmhnqUT{Zd~&Ii+j2<>lW(74zms+?Y=H#S{ zD-pByT~v+;D5AI*?{vg2}mBj}k34W1>YZcHi zF@!@0G%pE%whwD2ta^9c?RF#gvhu zL9~R92}oShk5`PR@-lGb&5AdJ1~_` zq8tQ41rf!@5y4IsY^eAD&RTeU?mYL)Z+&ZK&#YN(?}K;W%J4<+We>3F<|^f*WmRiT`|8FN#10sagE0a}VG&HhqPP^Z;dTtg-57@Za3&r^eXe$#G5N76 zMjI0}k5E`k#YoJKzoRbnYS;(n#xms5SPAQ4F&u&~)6nVIfV@U+|Ayu;LC#dWb7H*SUlc*Ak^jk!$ysfNZ(rhaQ9dIF0! zF{UH7Xv#xySu@I9f33MOPm@<_MYrP{t&KUu=clw~h{;>FGv+Q1X;1%m-~*3#G-e$Y z&vrIu7uN1-%mnH`f5ez9@~%CMnUC3fs>^s#FFVE?QE#*bE8{NI8=rUemt6h@j-dW3 z7Q*(u?R7(X)Boza5mczFlQ0(3unO+LiueK6#9xu&HZgr{PYpoLi4j;1m!UqlAFJVI zcRoj7TOWsXqUnd4Lu>oe|0OBxqe7l_7yf|pI@Kg2qhwx3M#cOUq!3A=)c|9vVsF&sn1gxoN!0o6I0Fx31*|jB zPR9P2hdcqJF$s13Jk(HSpc=9Z^I;~c!6z_31}{_4oBiM}2pwckL^;c&h9(}1VRKXi z2Vek`F$Py*EqoOhjPbb}r;cy=hU*h2>BUi*x7uqwYH#)e}j6eUNodLCbF;s>?T^x^Oq@fv=<9 z{9V)ozj5_HV}Lv)!8V{AYW7z{y=hIH5op36*sXydGTR( zOYMnj$O`9ks0Y8~@)M{AT*RXIoilW}Z9qvZOMNV=A>B|zG#oV)Y5v<<@X2b0X5k@^x!tA9kMt2U5Og&@mL1a-1%ovlW-gAfghn7as``X=t$eZ)+6bE zy%!ZXl*&dF? zM&yY>3To*V%z+=Gw$jf~ZjG4lZbZ$E0~o-QsLA>b>IFi^7}Es{ z;uIW)1`XuVjwqae&!dSe4wXp=v55;b%hV;Zd_yp?4 zOI^MLOOd~f8iEf|_syAPzcWhsGXAY8sH?|0S73mAKbFJ~um;}5(ilj#=bK|y@}U@p z%TYbG1~mlRFdUD${1mn$zv}9%PT;)Oe;o>Wu?gx%ol(oOJF3N_QC&C#i{MJkgF9XQ zA=FTv#_IS1YPOq+eA7WWR8KyERq!C{x-T%ONsuSSHXsW1z_OSR<53T4g8_ULt6?gt z!J9ER?#B}N8tTn2qZ)J%^Wy{5=kiRlFV+xs|L&6*e{DEJsn9H5kGkPL%!Nl$H$H_L z+iR#v=%w1pSI^lDqo{9(nuG%|7Spi~zTxWcV{7v2lWh-8noR$9r{YN}^uTYiApVT% znVhT{jbT32Y%hX(Pyp34bx=Lg($#lIy}(G+o2R(*b5ZwS|u>$!3m(RwcQl% zi{qm>6;gPX*LB2NsJT~@Fgy8EA1}KTQL}8`7WJT@^8l(VuVN#NoNdo{MfKn;Y=Ng-9x=y$ z+x2j!V-wDQ=<>+9+*@7sD1~yk2-T%~P_z3ymc=Wm*&I5L?*}Z1nmiLxt6>&uwX8*b zZatR6ov0yw7vt~(w#3l+w!ZCr`d=4xp+aNS6LrHOs0U6$O{RIM$+R4`acn}(_I;=x zIf+{D_wY29TVM=rHaAd1k+RVC#Cp_qpQ1LToQvr4iWKTDva@{7Hc+80-QFA64BXB1c!A$Ic?_w1!w9LLhbBrNRM7{88R8IyEQwXDQ3e`1d zF%thkH6-tH`zA4{4?coTaSG~9UPd+GRm_ejQ4KkZx$rt_Ip0BD7rw&2NEGJa`KA>G zR+Q<4)$tuHgTG>HEVk0lfgzZed^BoOPDRa?^{5_s5o7T%Y6!2RRzulUcGizTO};Hy z4X$`+f_|aV?GMCOg5n2_%doTd28&tosSx-!>Aj6=ITqQ^AhAeP&?g5)PpXf zx;|vBoinkhq3MM&Jl_Nqz&%(OuVW;Z%wXkU4d;CP zh5RyVD9%4+@BahFk>`AxrOI;}U{GCsZoPfLEobg$j9Ef`W!#RLI0*Y~V6HIeS$LNG z=w{oHC0lq1`5U+q*KW1e-e$~L^7E)U(3G2LHS|RF-0JQ0zsBrCDrCs>cCW92>Y{F# z52vHLa*56}TeGkf`K1@E_fb6%z1yyu$FK@-I2F}%oA=n?j<2D5?lum_%6m2b6c+Af zyhE5wc$+t@x1X*juX2coh4QoeFtZu6AEgc>k1hjJ3}LBVCnbh zaz6jU1^%}Kp1Nqv5$cma=G!kj_xPM`oa@I2ukt<54Z45B%*Qc5(tTW5`wkO_3r^j4 z-{ZgAU%mTLJ#r9d<6EfN-}Vn%-wktw{w5NhayvnkA@uocH( zKV3Ua{%cb(;&=V7@5u57xmzcs7drLmdCG9TX2r-p1&&MQ0K?s0Sw|MteL|z z>+u6Th2z3K|IOob>hnSVea0{F0o3H!fi>_8OlA`0i}1__@?b8{Urr@*d;aW=$0F2E zbNOm)K>i^X$Gmwwf8EER?%T`d%Uqs?<$1ojL7_HA<+T^KL)~B|s;k#yWAyTQ{y!o$ zMRnzJ9D)~6v$=MDI}~fMEBW`RxzeD3XU1U%)MP(|>bZ9?7(?MUg;H1|(mtpW>cVNL z`lZ+&UvT+d)SE{}dH(l(RcuDy0B2zu>hr&&uFF%<^LNsUsJsiRhZ75WL4PbV+=(No zu|1ES@E4c2injHmu@CjjQM3FS>J9Ip#y+HweX}B{+1=bZ4D}-OPz~LRy8ddRpl#`I zRH#dG7q*kF4yuL2@JUQZ^;Ap|Ti**c)(f1+UH$LQszvP(4#Z@xo96r$HFSN8*`eJS zq`>!s$yVGmtMF-5OJn$lS~aKx>P;r1=0v)y--nu1mrxDKThdFa!`8LR^H}=a3T5Qs5c0!;F)18 z&yA=Ddi;~PhO8v&x~{05@gsZ-uOJJ>Y_IH@6XY*f(F?Ku(qcR_nu=wpmfgeUSih=g zw%|!r{g`TY4(xGW!dBFW#Crbkg|?^$&%^8Z8Scju)jhKVQ{!xdO4P7DToK3feAAyo zX*`AM;%`xJ@&~GmtJU=U|Adl-niF+v+4F-@JKai5z!tSV!|znH1=ZlHbv%D-PeKjl zUDO|DvEVuUOaabp27^1;1bpx@>4YyWGaqw;Rb6)H=S3weW$<;~Log zqdn^L^Id)uXOLHGXdAE-HAx#ZV*O91@KPgtH~F~dS*B7 zL#_J(&Ft(SiwWf0Q4P!9+d)>^@Q#wf+aR2--KBNQE|rnW(OR-FXwW zAq84m+n~-rhHAhwn2NhmlQPiCGmp??ub^HmqK$p?S*RX)fEwb&wx0h}EGMSc)fAJN`6ARZf$C!+THEvOsccJ*N$Y!5U?jr}&%i`+srG`gdG zUT_};js1_Puh~E+&-BNxs0Qsq4aIdVgL^w$-$Q-wHg3lXUF=SG2K8I9QCGL2;q&A% zbW2VA0QX~PH@`tabC80%^b^#c9?{*tX<^hGwM3oog?fVp&fTa6ypP&1!g|<-l|$9H zLDi=@pF+K07HTeB!x~!u-lO)$wNMZ0gPN_2P;VU8(=NM;&aSA9Y6_}r_o9~DZ>S%k zjeFVit5FX+g&N|oQLC*~Z(H9M6SV$^QBaqkK#fhQK6bqy#*XCm`r4tGgIVOqP}fiG zXV0HU^;F6J_C;!7B6%;|h(~cV4j5o}#y{~j^7#W<|5^sE2H6(&Lv?XF>ihn%(;IBZ zv?Hp1r}MV6;SkSEr+zM~VSiyE?3ZAd>jczJT4JbYp2cH$6bB7s{qLkuY`DGg3Dhr@ z+#~E*rJ>gS4%CnYM%rby!5NuoC)py@aw|H@GvDA!T!m9d+s}uO@$`?OW;SZM-o^7c z`Z3o3I}{p?^~@`nZJcM0<8f3M%^q*_W=WoTnOr{zb^RgC&N`np!85nX7f!UMrBKQL zjh)0~#&M}OPn&GdPoLuXzplqkwcoa11}Ti^2K}bl9qB))F8&-fX)309hL<-9sLAv8 zbo&G1C)5U1dxo8Ctx#P*9kq%sqQ1nw!b>>ear@=d{t5fJ9;nq297aL2cNJ>vFQDec zuc#d{?@YTYx}x$RYDkWuhNM0{xR?eWM79Xibhe$uOXhfH0q4ulwQsx|XOowjXB+$+ z&eQk*B?{W32hO+Oc6U)b+RO!ZPd|%lVD*J|ZcN0%CfpGNJB%a>bEK#;m12y*ETD#*7MD2hxP;+P>F2wIp*H2uB4Andgrcjabq8UAncug!CA_8iROgp(T-R|{J=SeJZK^)=m_D1 z&tn%tKPYtECNw`z5t?vXmfsRO-XgvsDifb^kAbKouf;@hzlTRD&hH_HP_f)qvY5n52L0#I{xFWb827D3xg+I~?(Atj|Mb5uu0XjUq5b>IPBQoY3(Y@d4#9_mYp;_vhy^C)N|8?gT{> z&xL1H;J8FoA_h>`2-)ELf2?Mw^^beliReaFk61!kza4eN6Zy!ai7I~0|NiJ7z5Y4a zUHv0~y@?)VH{4l|yf5WC_`ubDiHWW}n)()$dlS} zH3ZwZDaysKQr3@*yp-!xcZ+C39_f0g1$k@oniz$niN}dIiLumG#3-zaO>rvm1)-xL zae(p>Kd1jMQ7FTW4`MR0%fF2Oy6InFlSe6+=9;3eZUogMDWAZ@_zF>!^5@9U0sp^@ z=#xJZ3&=|=;W$pY2I@=fEz0-#{_%e(UclM9g5x&j4{$Jcz~Kbn(Ec&TspP7yGLxw5 zMbsv8y1Got5j42E%OBE;`XWRRB8|%6JMPS{RCFco5ao&d)bGWe#01KG#rsDi)K7FB zUr}C5EU~G%3dgF0qBU$wf~PZHR}*FAod< z@*B>7M81Oflc-9*o0#K1SDXguC`(=*zjXDx@GpLU_&+#w!F>JU$mu@NkMevj`U%TX zmyI|}-if>l&7RPP_D%pIGsIv4%w z@?3nlxGU@bMYk~J)|{VAj3NrJx4kFd2{@-8?DxzJ* zUVN22FY)lWM)_@G9~H5*xZMm$C|BsLQ|dJ!K{9)pRl?gcDE{6-w5ewn_1 zR#7-YWOo;J#zN$ASc&+PSV~?6bu7XJBGjfvD@ey|EQ@Q2twb^Ma%kwabCh!tZ;;N# z4a5WD5siOa3ZHP|KiEJY;J9q@|L&vymdnE_*CoCqpH7@4`jP)k=;)5G6Xz*c;=vD( zFDRtDq@KGrNx8;<78Pyrdtw{0&RuW@Um?$igYhfk58~nRt}6_5*T>*u>Rxzw0p=$1 z(U8ww-9oO3Byvz!gt}l${xqPXr@Np7pPlzzet8p>$8s(bAMB+So zL2jyJ1Mx9&k~$r4I;&CMK}5UjvOE^U1a~qAC)yB)37yYQ{Bu+uIc@0h)GC2)Daj)y z4^IvB>eZojW|vwAyv%0tF=6Sqny=5i+Ny__nbtPa3-3O8Xj1B!)U?c`PGzDpn+%K1 zmC?PcS13I+>G|~UlWS&Popd}pYQpH`q>+K7$>WEOObH|=r;Hz(nz?>)kK&n?x1S4- zPfAV=j7XlEG%k7Qh``Xmh%uwaqz)Yy7&>Xv$W&cTT~cyVY~q-tF_T7*91%!P88I>? z^QXOMvSq9(N1qR diff --git a/core/locale/th_TH/LC_MESSAGES/django.po b/core/locale/th_TH/LC_MESSAGES/django.po index be188c4a..460a22cd 100644 --- a/core/locale/th_TH/LC_MESSAGES/django.po +++ b/core/locale/th_TH/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+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:11 +#: core/abstract.py:12 msgid "unique id" msgstr "รหัสประจำตัวที่ไม่ซ้ำกัน" -#: core/abstract.py:12 +#: core/abstract.py:13 msgid "unique id is used to surely identify any database object" msgstr "รหัสประจำตัวที่ไม่ซ้ำกันใช้เพื่อระบุวัตถุฐานข้อมูลใด ๆ อย่างแน่นอน" -#: core/abstract.py:19 +#: core/abstract.py:20 msgid "is active" msgstr "กำลังใช้งานอยู่" -#: core/abstract.py:20 +#: core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" @@ -33,19 +33,19 @@ msgstr "" "หากตั้งค่าเป็น false, " "วัตถุนี้ไม่สามารถมองเห็นได้โดยผู้ใช้ที่ไม่มีสิทธิ์ที่ต้องการ" -#: core/abstract.py:22 core/choices.py:18 +#: core/abstract.py:23 core/choices.py:18 msgid "created" msgstr "สร้างขึ้น" -#: core/abstract.py:22 +#: core/abstract.py:23 msgid "when the object first appeared on the database" msgstr "เมื่อวัตถุปรากฏขึ้นครั้งแรกในฐานข้อมูล" -#: core/abstract.py:23 +#: core/abstract.py:24 msgid "modified" msgstr "แก้ไขแล้ว" -#: core/abstract.py:23 +#: core/abstract.py:24 msgid "when the object was last modified" msgstr "เมื่อครั้งล่าสุดที่มีการแก้ไขวัตถุ" @@ -88,11 +88,11 @@ msgid "selected items have been deactivated." msgstr "รายการที่เลือกถูกยกเลิกการใช้งานแล้ว!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 +#: core/graphene/object_types.py:616 core/models.py:701 core/models.py:709 msgid "attribute value" msgstr "ค่าคุณสมบัติ" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 msgid "attribute values" msgstr "ค่าของแอตทริบิวต์" @@ -104,7 +104,7 @@ msgstr "ภาพ" msgid "images" msgstr "รูปภาพ" -#: core/admin.py:155 core/models.py:445 +#: core/admin.py:155 core/models.py:459 msgid "stock" msgstr "สต็อก" @@ -112,11 +112,11 @@ msgstr "สต็อก" msgid "stocks" msgstr "หุ้น" -#: core/admin.py:166 core/models.py:1609 +#: core/admin.py:166 core/models.py:1667 msgid "order product" msgstr "สั่งซื้อสินค้า" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 msgid "order products" msgstr "สั่งซื้อสินค้า" @@ -723,7 +723,7 @@ msgid "add or remove feedback on an order–product relation" msgstr "" "เพิ่มหรือลบความคิดเห็นเกี่ยวกับความสัมพันธ์ระหว่างคำสั่งซื้อและผลิตภัณฑ์" -#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 msgid "no search term provided." msgstr "ไม่พบคำค้นหา" @@ -776,7 +776,7 @@ msgid "Quantity" msgstr "ปริมาณ" #: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:287 core/models.py:369 core/models.py:522 +#: core/models.py:301 core/models.py:383 core/models.py:536 msgid "Slug" msgstr "ทาก" @@ -792,7 +792,7 @@ msgstr "รวมหมวดหมู่ย่อย" msgid "Include personal ordered" msgstr "รวมสินค้าสั่งทำส่วนตัว" -#: core/filters.py:85 core/models.py:526 +#: core/filters.py:85 core/models.py:540 msgid "SKU" msgstr "SKU" @@ -865,7 +865,7 @@ msgstr "ข้อมูลที่เก็บไว้ในแคช" msgid "camelized JSON data from the requested URL" msgstr "ข้อมูล JSON ที่ผ่านการคาราเมลไลซ์จาก URL ที่ร้องขอ" -#: core/graphene/mutations.py:65 core/views.py:360 +#: core/graphene/mutations.py:65 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "อนุญาตเฉพาะ URL ที่ขึ้นต้นด้วย http(s):// เท่านั้น" @@ -897,7 +897,7 @@ msgstr "" "กรุณาให้ order_uuid หรือ order_hr_id - ต้องเลือกอย่างใดอย่างหนึ่งเท่านั้น!" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:839 +#: core/graphene/mutations.py:527 core/viewsets.py:679 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "ประเภทไม่ถูกต้องมาจากเมธอด order.buy(): {type(instance)!s}" @@ -972,9 +972,9 @@ msgstr "ไม่พบคำสั่งซื้อสินค้า {order_p msgid "original address string provided by the user" msgstr "สตริงที่อยู่ต้นฉบับที่ผู้ใช้ให้มา" -#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 -#: core/models.py:1234 core/models.py:1263 core/models.py:1288 -#: core/viewsets.py:842 +#: core/graphene/mutations.py:656 core/models.py:849 core/models.py:862 +#: core/models.py:1281 core/models.py:1310 core/models.py:1335 +#: core/viewsets.py:682 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} ไม่พบ: {uuid}!" @@ -988,8 +988,8 @@ msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - ทำงานได้อย่างยอดเยี่ยม" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 -#: core/models.py:1686 +#: core/graphene/object_types.py:444 core/models.py:672 core/models.py:1144 +#: core/models.py:1744 msgid "attributes" msgstr "คุณลักษณะ" @@ -1002,11 +1002,11 @@ msgid "groups of attributes" msgstr "กลุ่มของลักษณะ" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:612 +#: core/graphene/object_types.py:224 core/models.py:326 core/models.py:626 msgid "categories" msgstr "หมวดหมู่" -#: core/graphene/object_types.py:124 core/models.py:383 +#: core/graphene/object_types.py:124 core/models.py:397 msgid "brands" msgstr "แบรนด์" @@ -1015,7 +1015,7 @@ msgid "category image url" msgstr "หมวดหมู่" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:249 +#: core/models.py:263 msgid "markup percentage" msgstr "เปอร์เซ็นต์มาร์กอัป" @@ -1036,7 +1036,7 @@ msgstr "แท็กสำหรับหมวดหมู่นี้" msgid "products in this category" msgstr "สินค้าในหมวดหมู่" -#: core/graphene/object_types.py:351 core/models.py:155 +#: core/graphene/object_types.py:351 core/models.py:169 msgid "vendors" msgstr "ผู้ขาย" @@ -1061,7 +1061,7 @@ msgid "represents feedback from a user." msgstr "แสดงความคิดเห็นจากผู้ใช้" #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1110 +#: core/models.py:1138 msgid "notifications" msgstr "การแจ้งเตือน" @@ -1069,7 +1069,7 @@ msgstr "การแจ้งเตือน" msgid "download url for this order product if applicable" msgstr "ดาวน์โหลด url สำหรับคำสั่งซื้อสินค้านี้ หากมี" -#: core/graphene/object_types.py:400 core/models.py:1791 +#: core/graphene/object_types.py:400 core/models.py:1860 msgid "feedback" msgstr "ข้อเสนอแนะ" @@ -1077,7 +1077,7 @@ msgstr "ข้อเสนอแนะ" msgid "a list of order products in this order" msgstr "รายการสินค้าที่สั่งซื้อในคำสั่งซื้อนี้" -#: core/graphene/object_types.py:436 core/models.py:1080 +#: core/graphene/object_types.py:436 core/models.py:1108 msgid "billing address" msgstr "ที่อยู่สำหรับออกใบแจ้งหนี้" @@ -1105,7 +1105,7 @@ msgstr "สินค้าทั้งหมดในคำสั่งซื้ msgid "transactions for this order" msgstr "รายการธุรกรรมสำหรับคำสั่งนี้" -#: core/graphene/object_types.py:465 core/models.py:1144 +#: core/graphene/object_types.py:465 core/models.py:1172 msgid "orders" msgstr "คำสั่ง" @@ -1117,15 +1117,15 @@ msgstr "URL ของรูปภาพ" msgid "product's images" msgstr "รูปภาพของสินค้า" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 +#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 msgid "category" msgstr "หมวดหมู่" -#: core/graphene/object_types.py:502 core/models.py:1792 +#: core/graphene/object_types.py:502 core/models.py:1861 msgid "feedbacks" msgstr "ข้อเสนอแนะ" -#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 +#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 msgid "brand" msgstr "แบรนด์" @@ -1157,7 +1157,7 @@ msgstr "จำนวนความคิดเห็น" msgid "only available for personal orders" msgstr "สินค้าที่มีจำหน่ายเฉพาะการสั่งซื้อส่วนบุคคลเท่านั้น" -#: core/graphene/object_types.py:534 core/models.py:536 +#: core/graphene/object_types.py:534 core/models.py:550 msgid "products" msgstr "ผลิตภัณฑ์" @@ -1169,15 +1169,15 @@ msgstr "รหัสส่งเสริมการขาย" msgid "products on sale" msgstr "สินค้าลดราคา" -#: core/graphene/object_types.py:651 core/models.py:784 +#: core/graphene/object_types.py:651 core/models.py:798 msgid "promotions" msgstr "โปรโมชั่น" -#: core/graphene/object_types.py:655 core/models.py:154 +#: core/graphene/object_types.py:655 core/models.py:168 msgid "vendor" msgstr "ผู้ขาย" -#: core/graphene/object_types.py:656 core/models.py:535 +#: core/graphene/object_types.py:656 core/models.py:549 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1185,11 +1185,11 @@ msgstr "ผู้ขาย" msgid "product" msgstr "สินค้า" -#: core/graphene/object_types.py:667 core/models.py:807 +#: core/graphene/object_types.py:667 core/models.py:821 msgid "wishlisted products" msgstr "สินค้าที่อยู่ในรายการต้องการ" -#: core/graphene/object_types.py:673 core/models.py:824 +#: core/graphene/object_types.py:673 core/models.py:838 msgid "wishlists" msgstr "รายการสิ่งที่ต้องการ" @@ -1197,7 +1197,7 @@ msgstr "รายการสิ่งที่ต้องการ" msgid "tagged products" msgstr "สินค้าที่ติดแท็ก" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 +#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 msgid "product tags" msgstr "แท็กสินค้า" @@ -1306,7 +1306,7 @@ msgstr "กลุ่มแอตทริบิวต์ของพ่อแม msgid "attribute group's name" msgstr "ชื่อกลุ่มคุณสมบัติ" -#: core/models.py:100 core/models.py:620 +#: core/models.py:100 core/models.py:634 msgid "attribute group" msgstr "กลุ่มคุณลักษณะ" @@ -1352,7 +1352,7 @@ msgstr "ชื่อของผู้ขายนี้" msgid "vendor name" msgstr "ชื่อผู้ขาย" -#: core/models.py:163 +#: core/models.py:177 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1365,27 +1365,27 @@ msgstr "" " รองรับการดำเนินการที่ส่งออกผ่าน mixins " "และให้การปรับแต่งเมตาดาต้าสำหรับวัตถุประสงค์ในการบริหารจัดการ" -#: core/models.py:175 core/models.py:206 +#: core/models.py:189 core/models.py:220 msgid "internal tag identifier for the product tag" msgstr "ตัวระบุแท็กภายในสำหรับแท็กสินค้า" -#: core/models.py:176 core/models.py:207 +#: core/models.py:190 core/models.py:221 msgid "tag name" msgstr "ชื่อวัน" -#: core/models.py:180 core/models.py:211 +#: core/models.py:194 core/models.py:225 msgid "user-friendly name for the product tag" msgstr "ชื่อที่เป็นมิตรกับผู้ใช้สำหรับแท็กสินค้า" -#: core/models.py:181 core/models.py:212 +#: core/models.py:195 core/models.py:226 msgid "tag display name" msgstr "แสดงชื่อแท็ก" -#: core/models.py:189 +#: core/models.py:203 msgid "product tag" msgstr "แท็กสินค้า" -#: core/models.py:195 +#: core/models.py:209 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 " @@ -1395,15 +1395,15 @@ msgstr "" "คลาสนี้จำลองแท็กหมวดหมู่ที่สามารถใช้เพื่อเชื่อมโยงและจัดประเภทผลิตภัณฑ์ได้ " "รวมถึงแอตทริบิวต์สำหรับตัวระบุแท็กภายในและชื่อแสดงผลที่เป็นมิตรกับผู้ใช้" -#: core/models.py:220 +#: core/models.py:234 msgid "category tag" msgstr "แท็กหมวดหมู่" -#: core/models.py:221 core/models.py:293 +#: core/models.py:235 core/models.py:307 msgid "category tags" msgstr "แท็กหมวดหมู่" -#: core/models.py:226 +#: core/models.py:240 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1423,51 +1423,51 @@ msgstr "" " ช่วยให้ผู้ใช้หรือผู้ดูแลระบบสามารถระบุชื่อ คำอธิบาย และลำดับชั้นของหมวดหมู่" " รวมถึงกำหนดคุณลักษณะต่างๆ เช่น รูปภาพ แท็ก หรือความสำคัญ" -#: core/models.py:240 +#: core/models.py:254 msgid "upload an image representing this category" msgstr "อัปโหลดรูปภาพที่แสดงถึงหมวดหมู่นี้" -#: core/models.py:243 +#: core/models.py:257 msgid "category image" msgstr "ภาพหมวดหมู่" -#: core/models.py:248 +#: core/models.py:262 msgid "define a markup percentage for products in this category" msgstr "กำหนดเปอร์เซ็นต์มาร์กอัปสำหรับสินค้าในหมวดหมู่นี้" -#: core/models.py:257 +#: core/models.py:271 msgid "parent of this category to form a hierarchical structure" msgstr "ผู้ปกครองของหมวดหมู่นี้เพื่อสร้างโครงสร้างลำดับชั้น" -#: core/models.py:258 +#: core/models.py:272 msgid "parent category" msgstr "หมวดหมู่หลัก" -#: core/models.py:263 +#: core/models.py:277 msgid "category name" msgstr "ชื่อหมวดหมู่" -#: core/models.py:264 +#: core/models.py:278 msgid "provide a name for this category" msgstr "กรุณาตั้งชื่อสำหรับหมวดหมู่นี้" -#: core/models.py:271 +#: core/models.py:285 msgid "add a detailed description for this category" msgstr "เพิ่มคำอธิบายโดยละเอียดสำหรับหมวดหมู่นี้" -#: core/models.py:272 +#: core/models.py:286 msgid "category description" msgstr "หมวดหมู่คำอธิบาย" -#: core/models.py:292 +#: core/models.py:306 msgid "tags that help describe or group this category" msgstr "แท็กที่ช่วยอธิบายหรือจัดกลุ่มหมวดหมู่นี้" -#: core/models.py:299 core/models.py:375 +#: core/models.py:313 core/models.py:389 msgid "priority" msgstr "ลำดับความสำคัญ" -#: core/models.py:318 +#: core/models.py:332 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1479,47 +1479,47 @@ msgstr "" "รวมถึงชื่อ โลโก้ คำอธิบาย หมวดหมู่ที่เกี่ยวข้อง สลักเฉพาะ และลำดับความสำคัญ " "ช่วยให้สามารถจัดระเบียบและแสดงข้อมูลที่เกี่ยวข้องกับแบรนด์ภายในแอปพลิเคชันได้" -#: core/models.py:328 +#: core/models.py:342 msgid "name of this brand" msgstr "ชื่อของแบรนด์นี้" -#: core/models.py:329 +#: core/models.py:343 msgid "brand name" msgstr "ชื่อแบรนด์" -#: core/models.py:336 +#: core/models.py:350 msgid "upload a logo representing this brand" msgstr "อัปโหลดโลโก้ที่เป็นตัวแทนของแบรนด์นี้" -#: core/models.py:338 +#: core/models.py:352 msgid "brand small image" msgstr "แบรนด์รูปภาพขนาดเล็ก" -#: core/models.py:344 +#: core/models.py:358 msgid "upload a big logo representing this brand" msgstr "อัปโหลดโลโก้ขนาดใหญ่ที่เป็นตัวแทนของแบรนด์นี้" -#: core/models.py:346 +#: core/models.py:360 msgid "brand big image" msgstr "แบรนด์ภาพใหญ่" -#: core/models.py:351 +#: core/models.py:365 msgid "add a detailed description of the brand" msgstr "เพิ่มคำอธิบายรายละเอียดของแบรนด์" -#: core/models.py:352 +#: core/models.py:366 msgid "brand description" msgstr "คำอธิบายแบรนด์" -#: core/models.py:357 +#: core/models.py:371 msgid "optional categories that this brand is associated with" msgstr "หมวดหมู่เพิ่มเติมที่แบรนด์นี้เกี่ยวข้อง" -#: core/models.py:358 +#: core/models.py:372 msgid "associated categories" msgstr "หมวดหมู่" -#: core/models.py:388 +#: core/models.py:402 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1535,68 +1535,68 @@ msgstr "" "เป็นส่วนหนึ่งของระบบการจัดการสินค้าคงคลังเพื่อให้สามารถติดตามและประเมินสินค้าที่มีจากผู้จำหน่ายต่างๆ" " ได้" -#: core/models.py:400 +#: core/models.py:414 msgid "the vendor supplying this product stock" msgstr "ผู้จัดจำหน่ายที่จัดหาสินค้าคงคลังนี้" -#: core/models.py:401 +#: core/models.py:415 msgid "associated vendor" msgstr "ผู้ขายที่เกี่ยวข้อง" -#: core/models.py:405 +#: core/models.py:419 msgid "final price to the customer after markups" msgstr "ราคาสุดท้ายที่ลูกค้าต้องชำระหลังจากการบวกกำไร" -#: core/models.py:406 +#: core/models.py:420 msgid "selling price" msgstr "ราคาขาย" -#: core/models.py:411 +#: core/models.py:425 msgid "the product associated with this stock entry" msgstr "สินค้าที่เกี่ยวข้องกับรายการสินค้าคงคลังนี้" -#: core/models.py:412 core/models.py:683 core/models.py:730 -#: core/models.py:1583 +#: core/models.py:426 core/models.py:697 core/models.py:744 +#: core/models.py:1641 msgid "associated product" msgstr "ผลิตภัณฑ์ที่เกี่ยวข้อง" -#: core/models.py:419 +#: core/models.py:433 msgid "the price paid to the vendor for this product" msgstr "ราคาที่จ่ายให้กับผู้ขายสำหรับสินค้านี้" -#: core/models.py:420 +#: core/models.py:434 msgid "vendor purchase price" msgstr "ราคาซื้อจากผู้ขาย" -#: core/models.py:424 +#: core/models.py:438 msgid "available quantity of the product in stock" msgstr "จำนวนสินค้าที่มีในสต็อก" -#: core/models.py:425 +#: core/models.py:439 msgid "quantity in stock" msgstr "จำนวนในสต็อก" -#: core/models.py:429 +#: core/models.py:443 msgid "vendor-assigned SKU for identifying the product" msgstr "รหัสสินค้าที่ผู้ขายกำหนดเพื่อระบุตัวผลิตภัณฑ์" -#: core/models.py:430 +#: core/models.py:444 msgid "vendor sku" msgstr "รหัสสินค้าของผู้ขาย" -#: core/models.py:436 +#: core/models.py:450 msgid "digital file associated with this stock if applicable" msgstr "ไฟล์ดิจิทัลที่เกี่ยวข้องกับสต็อกนี้ หากมี" -#: core/models.py:437 +#: core/models.py:451 msgid "digital file" msgstr "ไฟล์ดิจิทัล" -#: core/models.py:446 +#: core/models.py:460 msgid "stock entries" msgstr "รายการสินค้าคงคลัง" -#: core/models.py:451 +#: core/models.py:465 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1616,55 +1616,55 @@ msgstr "" " " "และจัดการการแคชสำหรับคุณสมบัติที่เข้าถึงบ่อยเพื่อปรับปรุงประสิทธิภาพใช้เพื่อกำหนดและจัดการข้อมูลผลิตภัณฑ์และข้อมูลที่เกี่ยวข้องภายในแอปพลิเคชัน" -#: core/models.py:464 +#: core/models.py:478 msgid "category this product belongs to" msgstr "หมวดหมู่ที่สินค้านี้จัดอยู่ใน" -#: core/models.py:473 +#: core/models.py:487 msgid "optionally associate this product with a brand" msgstr "เลือกเชื่อมโยงผลิตภัณฑ์นี้กับแบรนด์" -#: core/models.py:479 +#: core/models.py:493 msgid "tags that help describe or group this product" msgstr "แท็กที่ช่วยอธิบายหรือจัดกลุ่มผลิตภัณฑ์นี้" -#: core/models.py:484 +#: core/models.py:498 msgid "indicates whether this product is digitally delivered" msgstr "บ่งชี้ว่าสินค้านี้จัดส่งในรูปแบบดิจิทัลหรือไม่" -#: core/models.py:485 +#: core/models.py:499 msgid "is product digital" msgstr "สินค้าเป็นดิจิทัล" -#: core/models.py:491 +#: core/models.py:505 msgid "provide a clear identifying name for the product" msgstr "ระบุชื่อที่ชัดเจนสำหรับผลิตภัณฑ์" -#: core/models.py:492 +#: core/models.py:506 msgid "product name" msgstr "ชื่อสินค้า" -#: core/models.py:497 core/models.py:772 +#: core/models.py:511 core/models.py:786 msgid "add a detailed description of the product" msgstr "เพิ่มคำอธิบายรายละเอียดของสินค้า" -#: core/models.py:498 +#: core/models.py:512 msgid "product description" msgstr "รายละเอียดสินค้า" -#: core/models.py:505 +#: core/models.py:519 msgid "part number for this product" msgstr "หมายเลขชิ้นส่วนสำหรับสินค้านี้" -#: core/models.py:506 +#: core/models.py:520 msgid "part number" msgstr "หมายเลขชิ้นส่วน" -#: core/models.py:525 +#: core/models.py:539 msgid "stock keeping unit for this product" msgstr "หน่วยเก็บสินค้าสำหรับสินค้านี้" -#: core/models.py:599 +#: core/models.py:613 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 " @@ -1680,68 +1680,68 @@ msgstr "" "อาร์เรย์, และออบเจ็กต์. " "ซึ่งช่วยให้สามารถจัดโครงสร้างข้อมูลได้ไดนามิกและยืดหยุ่น." -#: core/models.py:611 +#: core/models.py:625 msgid "category of this attribute" msgstr "หมวดหมู่ของแอตทริบิวต์นี้" -#: core/models.py:619 +#: core/models.py:633 msgid "group of this attribute" msgstr "กลุ่มของแอตทริบิวต์นี้" -#: core/models.py:625 +#: core/models.py:639 msgid "string" msgstr "สตริง" -#: core/models.py:626 +#: core/models.py:640 msgid "integer" msgstr "ความซื่อสัตย์" -#: core/models.py:627 +#: core/models.py:641 msgid "float" msgstr "ลอย" -#: core/models.py:628 +#: core/models.py:642 msgid "boolean" msgstr "บูลีน" -#: core/models.py:629 +#: core/models.py:643 msgid "array" msgstr "อาร์เรย์" -#: core/models.py:630 +#: core/models.py:644 msgid "object" msgstr "วัตถุ" -#: core/models.py:632 +#: core/models.py:646 msgid "type of the attribute's value" msgstr "ประเภทของค่าของแอตทริบิวต์" -#: core/models.py:633 +#: core/models.py:647 msgid "value type" msgstr "ประเภทของค่า" -#: core/models.py:638 +#: core/models.py:652 msgid "name of this attribute" msgstr "ชื่อของแอตทริบิวต์นี้" -#: core/models.py:639 +#: core/models.py:653 msgid "attribute's name" msgstr "ชื่อของแอตทริบิวต์" -#: core/models.py:645 +#: core/models.py:659 msgid "is filterable" msgstr "สามารถกรองได้" -#: core/models.py:646 +#: core/models.py:660 msgid "designates whether this attribute can be used for filtering or not" msgstr "กำหนดว่าแอตทริบิวต์นี้สามารถใช้สำหรับการกรองหรือไม่" -#: core/models.py:657 core/models.py:675 +#: core/models.py:671 core/models.py:689 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "คุณสมบัติ" -#: core/models.py:663 +#: core/models.py:677 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" @@ -1751,19 +1751,19 @@ msgstr "" "กับ 'ค่า' ที่ไม่ซ้ำกัน " "ทำให้การจัดระเบียบและการแสดงลักษณะของผลิตภัณฑ์เป็นไปอย่างมีประสิทธิภาพและยืดหยุ่นมากขึ้น" -#: core/models.py:674 +#: core/models.py:688 msgid "attribute of this value" msgstr "คุณลักษณะของค่านี้" -#: core/models.py:682 +#: core/models.py:696 msgid "the specific product associated with this attribute's value" msgstr "ผลิตภัณฑ์เฉพาะที่เกี่ยวข้องกับค่าของแอตทริบิวต์นี้" -#: core/models.py:688 +#: core/models.py:702 msgid "the specific value for this attribute" msgstr "ค่าเฉพาะสำหรับคุณสมบัตินี้" -#: core/models.py:701 +#: core/models.py:715 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -1778,39 +1778,39 @@ msgstr "" "นอกจากนี้ยังมีคุณสมบัติการเข้าถึงสำหรับผู้ใช้ที่มีความต้องการพิเศษ " "โดยให้ข้อความทางเลือกสำหรับภาพ." -#: core/models.py:712 +#: core/models.py:726 msgid "provide alternative text for the image for accessibility" msgstr "ให้ข้อความทางเลือกสำหรับภาพเพื่อการเข้าถึง" -#: core/models.py:713 +#: core/models.py:727 msgid "image alt text" msgstr "ข้อความแสดงแทนภาพ" -#: core/models.py:716 +#: core/models.py:730 msgid "upload the image file for this product" msgstr "อัปโหลดไฟล์รูปภาพสำหรับสินค้านี้" -#: core/models.py:717 core/models.py:742 +#: core/models.py:731 core/models.py:756 msgid "product image" msgstr "รูปภาพสินค้า" -#: core/models.py:723 +#: core/models.py:737 msgid "determines the order in which images are displayed" msgstr "กำหนดลำดับการแสดงผลของภาพ" -#: core/models.py:724 +#: core/models.py:738 msgid "display priority" msgstr "ลำดับความสำคัญในการแสดงผล" -#: core/models.py:729 +#: core/models.py:743 msgid "the product that this image represents" msgstr "สินค้าที่ภาพนี้แทน" -#: core/models.py:743 +#: core/models.py:757 msgid "product images" msgstr "รูปภาพสินค้า" -#: core/models.py:748 +#: core/models.py:762 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1825,39 +1825,39 @@ msgstr "" "ให้รายละเอียดเกี่ยวกับโปรโมชั่น, และเชื่อมโยงกับสินค้าที่เกี่ยวข้อง. " "คลาสนี้ผสานการทำงานกับแคตตาล็อกสินค้าเพื่อกำหนดสินค้าที่ได้รับผลกระทบในแคมเปญ." -#: core/models.py:760 +#: core/models.py:774 msgid "percentage discount for the selected products" msgstr "เปอร์เซ็นต์ส่วนลดสำหรับสินค้าที่เลือก" -#: core/models.py:761 +#: core/models.py:775 msgid "discount percentage" msgstr "เปอร์เซ็นต์ส่วนลด" -#: core/models.py:766 +#: core/models.py:780 msgid "provide a unique name for this promotion" msgstr "กรุณาตั้งชื่อที่ไม่ซ้ำกันสำหรับการส่งเสริมการขายนี้" -#: core/models.py:767 +#: core/models.py:781 msgid "promotion name" msgstr "ชื่อโปรโมชั่น" -#: core/models.py:773 +#: core/models.py:787 msgid "promotion description" msgstr "รายละเอียดโปรโมชั่น" -#: core/models.py:778 +#: core/models.py:792 msgid "select which products are included in this promotion" msgstr "เลือกผลิตภัณฑ์ที่รวมอยู่ในโปรโมชั่นนี้" -#: core/models.py:779 +#: core/models.py:793 msgid "included products" msgstr "สินค้าที่รวมอยู่" -#: core/models.py:783 +#: core/models.py:797 msgid "promotion" msgstr "โปรโมชั่น" -#: core/models.py:794 +#: core/models.py:808 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1869,23 +1869,23 @@ msgstr "" "ซึ่งรวมถึงการเพิ่มและลบสินค้าออกจากคอลเลกชัน " "ตลอดจนการเพิ่มและลบสินค้าหลายรายการพร้อมกัน" -#: core/models.py:806 +#: core/models.py:820 msgid "products that the user has marked as wanted" msgstr "สินค้าที่ผู้ใช้ได้ทำเครื่องหมายว่าต้องการ" -#: core/models.py:814 +#: core/models.py:828 msgid "user who owns this wishlist" msgstr "ผู้ใช้ที่เป็นเจ้าของรายการความปรารถนา" -#: core/models.py:815 +#: core/models.py:829 msgid "wishlist owner" msgstr "เจ้าของรายการที่อยากได้" -#: core/models.py:823 +#: core/models.py:837 msgid "wishlist" msgstr "รายการสิ่งที่ต้องการ" -#: core/models.py:865 +#: core/models.py:879 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1901,19 +1901,19 @@ msgstr "" " คลาสนี้ขยายฟังก์ชันการทำงานจากมิกซ์อินเฉพาะ " "และให้คุณสมบัติเพิ่มเติมตามความต้องการ." -#: core/models.py:878 +#: core/models.py:892 msgid "documentary" msgstr "สารคดี" -#: core/models.py:879 +#: core/models.py:893 msgid "documentaries" msgstr "สารคดี" -#: core/models.py:889 +#: core/models.py:903 msgid "unresolved" msgstr "ยังไม่ได้รับการแก้ไข" -#: core/models.py:894 +#: core/models.py:908 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1934,59 +1934,59 @@ msgstr "" "ดิบเพื่อการประมวลผลหรือตรวจสอบเพิ่มเติมได้คลาสนี้ยังอนุญาตให้เชื่อมโยงที่อยู่กับผู้ใช้ได้" " ซึ่งช่วยให้การจัดการข้อมูลส่วนบุคคลเป็นไปอย่างสะดวก" -#: core/models.py:909 +#: core/models.py:923 msgid "address line for the customer" msgstr "ที่อยู่สำหรับลูกค้า" -#: core/models.py:910 +#: core/models.py:924 msgid "address line" msgstr "บรรทัดที่อยู่" -#: core/models.py:912 +#: core/models.py:926 msgid "street" msgstr "ถนน" -#: core/models.py:913 +#: core/models.py:927 msgid "district" msgstr "เขต" -#: core/models.py:914 +#: core/models.py:928 msgid "city" msgstr "เมือง" -#: core/models.py:915 +#: core/models.py:929 msgid "region" msgstr "ภูมิภาค" -#: core/models.py:916 +#: core/models.py:930 msgid "postal code" msgstr "รหัสไปรษณีย์" -#: core/models.py:917 +#: core/models.py:931 msgid "country" msgstr "ประเทศ" -#: core/models.py:924 +#: core/models.py:938 msgid "geolocation point: (longitude, latitude)" msgstr "จุดพิกัดภูมิศาสตร์ (ลองจิจูด, ละติจูด)" -#: core/models.py:927 +#: core/models.py:941 msgid "full JSON response from geocoder for this address" msgstr "การตอบกลับ JSON แบบเต็มจากตัวแปลงที่อยู่ทางภูมิศาสตร์สำหรับที่อยู่นี้" -#: core/models.py:932 +#: core/models.py:946 msgid "stored JSON response from the geocoding service" msgstr "เก็บคำตอบ JSON จากบริการการแปลงที่อยู่ทางภูมิศาสตร์" -#: core/models.py:940 +#: core/models.py:954 msgid "address" msgstr "ที่อยู่" -#: core/models.py:941 +#: core/models.py:955 msgid "addresses" msgstr "ที่อยู่" -#: core/models.py:953 +#: core/models.py:967 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2003,71 +2003,71 @@ msgstr "" "รวมถึงฟังก์ชันการทำงานเพื่อตรวจสอบและใช้รหัสโปรโมชั่นกับคำสั่งซื้อในขณะที่ตรวจสอบให้แน่ใจว่าข้อจำกัดต่างๆ" " ได้รับการปฏิบัติตาม" -#: core/models.py:967 +#: core/models.py:981 msgid "unique code used by a user to redeem a discount" msgstr "รหัสเฉพาะที่ผู้ใช้ใช้เพื่อแลกรับส่วนลด" -#: core/models.py:968 +#: core/models.py:982 msgid "promo code identifier" msgstr "รหัสโปรโมชั่น" -#: core/models.py:975 +#: core/models.py:989 msgid "fixed discount amount applied if percent is not used" msgstr "จำนวนส่วนลดคงที่ที่ใช้หากไม่ได้ใช้เปอร์เซ็นต์" -#: core/models.py:976 +#: core/models.py:990 msgid "fixed discount amount" msgstr "จำนวนส่วนลดคงที่" -#: core/models.py:982 +#: core/models.py:996 msgid "percentage discount applied if fixed amount is not used" msgstr "ส่วนลดเป็นเปอร์เซ็นต์ที่ใช้เมื่อไม่ได้ใช้จำนวนเงินคงที่" -#: core/models.py:983 +#: core/models.py:997 msgid "percentage discount" msgstr "เปอร์เซ็นต์ส่วนลด" -#: core/models.py:988 +#: core/models.py:1002 msgid "timestamp when the promocode expires" msgstr "เวลาที่โค้ดโปรโมชั่นหมดอายุ" -#: core/models.py:989 +#: core/models.py:1003 msgid "end validity time" msgstr "เวลาสิ้นสุดความถูกต้อง" -#: core/models.py:994 +#: core/models.py:1008 msgid "timestamp from which this promocode is valid" msgstr "เวลาที่ตราไว้ซึ่งรหัสโปรโมชั่นนี้ใช้ได้" -#: core/models.py:995 +#: core/models.py:1009 msgid "start validity time" msgstr "เวลาเริ่มต้นความถูกต้อง" -#: core/models.py:1000 +#: core/models.py:1014 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "เวลาที่ตราประทับเมื่อใช้รหัสโปรโมชั่น, ว่างเปล่าหากยังไม่ได้ใช้" -#: core/models.py:1001 +#: core/models.py:1015 msgid "usage timestamp" msgstr "เวลาการใช้งาน" -#: core/models.py:1006 +#: core/models.py:1020 msgid "user assigned to this promocode if applicable" msgstr "ผู้ใช้ที่ได้รับมอบหมายให้ใช้รหัสโปรโมชั่นนี้ หากมี" -#: core/models.py:1007 +#: core/models.py:1021 msgid "assigned user" msgstr "ผู้ใช้ที่ได้รับมอบหมาย" -#: core/models.py:1014 +#: core/models.py:1028 msgid "promo code" msgstr "รหัสโปรโมชั่น" -#: core/models.py:1015 +#: core/models.py:1029 msgid "promo codes" msgstr "รหัสส่งเสริมการขาย" -#: core/models.py:1022 +#: core/models.py:1044 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2075,16 +2075,16 @@ msgstr "" "ควรกำหนดประเภทส่วนลดเพียงประเภทเดียว (จำนวนเงินหรือเปอร์เซ็นต์) เท่านั้น " "ไม่ควรกำหนดทั้งสองประเภทหรือไม่ได้กำหนดเลย" -#: core/models.py:1037 +#: core/models.py:1065 msgid "promocode already used" msgstr "รหัสโปรโมชั่นถูกใช้ไปแล้ว" -#: core/models.py:1053 +#: core/models.py:1081 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "ประเภทส่วนลดไม่ถูกต้องสำหรับรหัสโปรโมชั่น {self.uuid}!" -#: core/models.py:1062 +#: core/models.py:1090 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 " @@ -2102,138 +2102,138 @@ msgstr "" "และรายละเอียดการจัดส่งหรือการเรียกเก็บเงินสามารถอัปเดตได้เช่นกัน นอกจากนี้ " "ฟังก์ชันการทำงานยังรองรับการจัดการสินค้าในวงจรชีวิตของคำสั่งซื้อ" -#: core/models.py:1079 +#: core/models.py:1107 msgid "the billing address used for this order" msgstr "ที่อยู่สำหรับเรียกเก็บเงินที่ใช้สำหรับคำสั่งซื้อนี้" -#: core/models.py:1087 +#: core/models.py:1115 msgid "optional promo code applied to this order" msgstr "รหัสโปรโมชั่นเสริมใช้กับคำสั่งซื้อนี้แล้ว" -#: core/models.py:1088 +#: core/models.py:1116 msgid "applied promo code" msgstr "ใช้รหัสโปรโมชั่น" -#: core/models.py:1096 +#: core/models.py:1124 msgid "the shipping address used for this order" msgstr "ที่อยู่สำหรับจัดส่งที่ใช้สำหรับคำสั่งซื้อนี้" -#: core/models.py:1097 +#: core/models.py:1125 msgid "shipping address" msgstr "ที่อยู่สำหรับจัดส่ง" -#: core/models.py:1103 +#: core/models.py:1131 msgid "current status of the order in its lifecycle" msgstr "สถานะปัจจุบันของคำสั่งซื้อในวงจรชีวิต" -#: core/models.py:1104 +#: core/models.py:1132 msgid "order status" msgstr "สถานะการสั่งซื้อ" -#: core/models.py:1109 core/models.py:1560 +#: core/models.py:1137 core/models.py:1618 msgid "json structure of notifications to display to users" msgstr "" "โครงสร้าง JSON ของการแจ้งเตือนที่จะแสดงให้ผู้ใช้เห็น ใน UI " "ของผู้ดูแลระบบจะใช้การแสดงผลแบบตาราง" -#: core/models.py:1115 +#: core/models.py:1143 msgid "json representation of order attributes for this order" msgstr "การแสดงผล JSON ของคุณลักษณะคำสั่งซื้อสำหรับคำสั่งซื้อนี้" -#: core/models.py:1121 +#: core/models.py:1149 msgid "the user who placed the order" msgstr "ผู้ใช้ที่ทำการสั่งซื้อ" -#: core/models.py:1122 +#: core/models.py:1150 msgid "user" msgstr "ผู้ใช้" -#: core/models.py:1128 +#: core/models.py:1156 msgid "the timestamp when the order was finalized" msgstr "เวลาที่คำสั่งซื้อได้รับการยืนยัน" -#: core/models.py:1129 +#: core/models.py:1157 msgid "buy time" msgstr "ซื้อเวลา" -#: core/models.py:1136 +#: core/models.py:1164 msgid "a human-readable identifier for the order" msgstr "ตัวระบุที่มนุษย์อ่านได้สำหรับคำสั่ง" -#: core/models.py:1137 +#: core/models.py:1165 msgid "human readable id" msgstr "รหัสที่สามารถอ่านได้โดยมนุษย์" -#: core/models.py:1143 +#: core/models.py:1171 msgid "order" msgstr "คำสั่ง" -#: core/models.py:1168 +#: core/models.py:1209 msgid "a user must have only one pending order at a time" msgstr "" "ผู้ใช้ต้องมีคำสั่งซื้อที่รอดำเนินการเพียงหนึ่งรายการเท่านั้นในแต่ละครั้ง!" -#: core/models.py:1202 +#: core/models.py:1249 msgid "you cannot add products to an order that is not a pending one" msgstr "" "คุณไม่สามารถเพิ่มสินค้าในคำสั่งซื้อที่ไม่ใช่คำสั่งซื้อที่รอดำเนินการได้" -#: core/models.py:1207 +#: core/models.py:1254 msgid "you cannot add inactive products to order" msgstr "คุณไม่สามารถเพิ่มสินค้าที่ไม่ใช้งานในคำสั่งซื้อได้" -#: core/models.py:1224 +#: core/models.py:1271 msgid "you cannot add more products than available in stock" msgstr "คุณไม่สามารถเพิ่มสินค้าได้มากกว่าที่มีในสต็อก" -#: core/models.py:1246 core/models.py:1271 core/models.py:1279 +#: core/models.py:1293 core/models.py:1318 core/models.py:1326 msgid "you cannot remove products from an order that is not a pending one" msgstr "" "คุณไม่สามารถลบสินค้าออกจากคำสั่งซื้อที่ไม่ใช่คำสั่งซื้อที่อยู่ในสถานะรอดำเนินการได้" -#: core/models.py:1267 +#: core/models.py:1314 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} ไม่มีอยู่จริงกับคำค้นหา <{query}>!" -#: core/models.py:1299 +#: core/models.py:1346 msgid "promocode does not exist" msgstr "รหัสโปรโมชั่นไม่มีอยู่" -#: core/models.py:1305 +#: core/models.py:1352 msgid "you can only buy physical products with shipping address specified" msgstr "" "คุณสามารถซื้อได้เฉพาะสินค้าทางกายภาพที่มีที่อยู่สำหรับจัดส่งระบุไว้เท่านั้น!" -#: core/models.py:1324 +#: core/models.py:1371 msgid "address does not exist" msgstr "ไม่มีที่อยู่" -#: core/models.py:1345 core/models.py:1414 +#: core/models.py:1392 core/models.py:1461 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "ขณะนี้คุณไม่สามารถซื้อได้ กรุณาลองใหม่อีกครั้งในอีกไม่กี่นาที" -#: core/models.py:1348 core/models.py:1410 +#: core/models.py:1395 core/models.py:1457 msgid "invalid force value" msgstr "ค่าแรงบังคับไม่ถูกต้อง" -#: core/models.py:1354 core/models.py:1417 +#: core/models.py:1401 core/models.py:1464 msgid "you cannot purchase an empty order!" msgstr "คุณไม่สามารถซื้อคำสั่งซื้อที่ว่างเปล่าได้!" -#: core/models.py:1373 +#: core/models.py:1420 msgid "you cannot buy an order without a user" msgstr "คุณไม่สามารถซื้อคำสั่งซื้อได้หากไม่มีผู้ใช้!" -#: core/models.py:1387 +#: core/models.py:1434 msgid "a user without a balance cannot buy with balance" msgstr "ผู้ใช้ที่ไม่มียอดคงเหลือไม่สามารถซื้อด้วยยอดคงเหลือได้!" -#: core/models.py:1392 +#: core/models.py:1439 msgid "insufficient funds to complete the order" msgstr "เงินไม่เพียงพอในการทำรายการให้เสร็จสมบูรณ์" -#: core/models.py:1426 +#: core/models.py:1473 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2241,14 +2241,14 @@ msgstr "" "คุณไม่สามารถซื้อได้หากไม่มีการลงทะเบียน กรุณาให้ข้อมูลต่อไปนี้: ชื่อลูกค้า, " "อีเมลลูกค้า, หมายเลขโทรศัพท์ลูกค้า" -#: core/models.py:1435 +#: core/models.py:1482 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "วิธีการชำระเงินไม่ถูกต้อง: {payment_method} จาก {available_payment_methods}!" -#: core/models.py:1533 +#: core/models.py:1591 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2270,108 +2270,108 @@ msgstr "" "โมเดลนี้ผสานรวมกับโมเดล Order และ Product " "และเก็บการอ้างอิงถึงโมเดลเหล่านี้ไว้" -#: core/models.py:1548 +#: core/models.py:1606 msgid "the price paid by the customer for this product at purchase time" msgstr "ราคาที่ลูกค้าชำระสำหรับสินค้านี้ ณ เวลาที่ซื้อ" -#: core/models.py:1549 +#: core/models.py:1607 msgid "purchase price at order time" msgstr "ราคาซื้อ ณ เวลาที่สั่งซื้อ" -#: core/models.py:1554 +#: core/models.py:1612 msgid "internal comments for admins about this ordered product" msgstr "ความคิดเห็นภายในสำหรับผู้ดูแลระบบเกี่ยวกับสินค้าที่สั่งซื้อ" -#: core/models.py:1555 +#: core/models.py:1613 msgid "internal comments" msgstr "ความคิดเห็นภายใน" -#: core/models.py:1561 +#: core/models.py:1619 msgid "user notifications" msgstr "การแจ้งเตือนผู้ใช้" -#: core/models.py:1566 +#: core/models.py:1624 msgid "json representation of this item's attributes" msgstr "การแสดงผล JSON ของคุณลักษณะของรายการนี้" -#: core/models.py:1567 +#: core/models.py:1625 msgid "ordered product attributes" msgstr "จัดเรียงคุณลักษณะของสินค้า" -#: core/models.py:1572 +#: core/models.py:1630 msgid "reference to the parent order that contains this product" msgstr "การอ้างอิงถึงคำสั่งซื้อหลักที่มีสินค้านี้อยู่" -#: core/models.py:1573 +#: core/models.py:1631 msgid "parent order" msgstr "ลำดับของผู้ปกครอง" -#: core/models.py:1582 +#: core/models.py:1640 msgid "the specific product associated with this order line" msgstr "สินค้าเฉพาะที่เกี่ยวข้องกับรายการคำสั่งซื้อนี้" -#: core/models.py:1589 +#: core/models.py:1647 msgid "quantity of this specific product in the order" msgstr "ปริมาณของสินค้าชนิดนี้ในคำสั่งซื้อ" -#: core/models.py:1590 +#: core/models.py:1648 msgid "product quantity" msgstr "จำนวนสินค้า" -#: core/models.py:1597 +#: core/models.py:1655 msgid "current status of this product in the order" msgstr "สถานะปัจจุบันของสินค้านี้ในคำสั่งซื้อ" -#: core/models.py:1598 +#: core/models.py:1656 msgid "product line status" msgstr "สถานะสายผลิตภัณฑ์" -#: core/models.py:1661 +#: core/models.py:1719 msgid "order product must have an order" msgstr "Orderproduct ต้องมีการสั่งซื้อที่เกี่ยวข้อง!" -#: core/models.py:1663 +#: core/models.py:1721 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "ระบุการกระทำที่ไม่ถูกต้องสำหรับข้อเสนอแนะ: {action}!" -#: core/models.py:1677 +#: core/models.py:1735 msgid "you cannot feedback an order which is not received" msgstr "คุณไม่สามารถให้ข้อเสนอแนะเกี่ยวกับคำสั่งซื้อที่ไม่ได้รับ" -#: core/models.py:1683 +#: core/models.py:1741 msgid "name" msgstr "ชื่อ" -#: core/models.py:1684 +#: core/models.py:1742 msgid "URL of the integration" msgstr "URL ของการผสานรวม" -#: core/models.py:1685 +#: core/models.py:1743 msgid "authentication credentials" msgstr "ข้อมูลประจำตัวสำหรับการยืนยันตัวตน" -#: core/models.py:1699 +#: core/models.py:1765 msgid "you can only have one default CRM provider" msgstr "คุณสามารถมีผู้ให้บริการ CRM เริ่มต้นได้เพียงรายเดียวเท่านั้น" -#: core/models.py:1703 +#: core/models.py:1775 msgid "CRM" msgstr "ระบบบริหารความสัมพันธ์ลูกค้า" -#: core/models.py:1704 +#: core/models.py:1776 msgid "CRMs" msgstr "ระบบบริหารความสัมพันธ์ลูกค้า" -#: core/models.py:1716 +#: core/models.py:1788 msgid "order CRM link" msgstr "ลิงก์ CRM ของคำสั่ง" -#: core/models.py:1717 +#: core/models.py:1789 msgid "orders CRM links" msgstr "ลิงก์ CRM ของคำสั่งซื้อ" -#: core/models.py:1722 +#: core/models.py:1794 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2387,20 +2387,15 @@ msgstr "" "และว่าสินทรัพย์นั้นสามารถมองเห็นได้สาธารณะหรือไม่ รวมถึงวิธีการสร้าง URL " "สำหรับการดาวน์โหลดสินทรัพย์เมื่อคำสั่งซื้อที่เกี่ยวข้องอยู่ในสถานะเสร็จสมบูรณ์" -#: core/models.py:1736 +#: core/models.py:1808 msgid "download" msgstr "ดาวน์โหลด" -#: core/models.py:1737 +#: core/models.py:1809 msgid "downloads" msgstr "ดาวน์โหลด" -#: core/models.py:1745 -msgid "you can not download a digital asset for a non-finished order" -msgstr "" -"คุณไม่สามารถดาวน์โหลดสินทรัพย์ดิจิทัลสำหรับคำสั่งซื้อที่ยังไม่เสร็จสมบูรณ์ได้" - -#: core/models.py:1754 +#: core/models.py:1823 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2414,28 +2409,28 @@ msgstr "" "การอ้างอิงถึงผลิตภัณฑ์ที่เกี่ยวข้องในคำสั่งซื้อ และคะแนนที่ผู้ใช้กำหนด " "คลาสนี้ใช้ฟิลด์ในฐานข้อมูลเพื่อสร้างแบบจำลองและจัดการข้อมูลข้อเสนอแนะอย่างมีประสิทธิภาพ" -#: core/models.py:1766 +#: core/models.py:1835 msgid "user-provided comments about their experience with the product" msgstr "ความคิดเห็นที่ผู้ใช้ให้ไว้เกี่ยวกับประสบการณ์ของพวกเขาต่อผลิตภัณฑ์" -#: core/models.py:1767 +#: core/models.py:1836 msgid "feedback comments" msgstr "ความคิดเห็นจากผู้ตอบแบบสอบถาม" -#: core/models.py:1774 +#: core/models.py:1843 msgid "" "references the specific product in an order that this feedback is about" msgstr "อ้างอิงถึงผลิตภัณฑ์เฉพาะในคำสั่งซื้อที่ความคิดเห็นนี้เกี่ยวข้อง" -#: core/models.py:1775 +#: core/models.py:1844 msgid "related order product" msgstr "สินค้าที่เกี่ยวข้อง" -#: core/models.py:1780 +#: core/models.py:1849 msgid "user-assigned rating for the product" msgstr "คะแนนที่ผู้ใช้กำหนดให้กับผลิตภัณฑ์" -#: core/models.py:1781 +#: core/models.py:1850 msgid "product rating" msgstr "การให้คะแนนสินค้า" @@ -2632,11 +2627,11 @@ msgid "" " reserved" msgstr "สงวนลิขสิทธิ์" -#: core/utils/caching.py:41 +#: core/utils/caching.py:48 msgid "both data and timeout are required" msgstr "จำเป็นต้องมีทั้งข้อมูลและเวลาหมดอายุ" -#: core/utils/caching.py:43 +#: core/utils/caching.py:50 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "ค่าหมดเวลาไม่ถูกต้อง ต้องอยู่ระหว่าง 0 ถึง 216000 วินาที" @@ -2668,24 +2663,337 @@ msgstr "คุณไม่มีสิทธิ์ดำเนินการน msgid "NOMINATIM_URL must be configured." msgstr "ต้องกำหนดค่าพารามิเตอร์ NOMINATIM_URL!" -#: core/validators.py:16 +#: core/validators.py:14 #, 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/validators.py:22 -msgid "invalid phone number format" -msgstr "หมายเลขโทรศัพท์ไม่ถูกต้อง" +#: core/views.py:72 +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:489 +#: core/views.py:87 +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 +msgid "" +"Returns a list of supported languages and their corresponding information." +msgstr "ส่งคืนรายการของภาษาที่รองรับและข้อมูลที่เกี่ยวข้อง" + +#: core/views.py:148 +msgid "Returns the parameters of the website as a JSON object." +msgstr "ส่งคืนพารามิเตอร์ของเว็บไซต์ในรูปแบบอ็อบเจ็กต์ JSON" + +#: core/views.py:167 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +msgstr "" +"จัดการการดำเนินการแคช เช่น " +"การอ่านและการตั้งค่าข้อมูลแคชด้วยคีย์ที่กำหนดและเวลาหมดอายุ" + +#: core/views.py:194 +msgid "Handles `contact us` form submissions." +msgstr "จัดการการส่งแบบฟอร์ม 'ติดต่อเรา'" + +#: core/views.py:215 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "" +"จัดการคำขอสำหรับการประมวลผลและตรวจสอบความถูกต้องของ URL จากคำขอ POST " +"ที่เข้ามา" + +#: core/views.py:255 +msgid "Handles global search queries." +msgstr "จัดการคำค้นหาทั่วโลก" + +#: core/views.py:270 +msgid "Handles the logic of buying as a business without registration." +msgstr "จัดการตรรกะของการซื้อในฐานะธุรกิจโดยไม่ต้องจดทะเบียน" + +#: core/views.py:312 msgid "you can only download the digital asset once" msgstr "คุณสามารถดาวน์โหลดสินทรัพย์ดิจิทัลได้เพียงครั้งเดียวเท่านั้น" -#: core/views.py:547 +#: core/views.py:315 +msgid "the order must be paid before downloading the digital asset" +msgstr "คำสั่งซื้อจะต้องชำระเงินก่อนดาวน์โหลดสินทรัพย์ดิจิทัล" + +#: core/views.py:353 +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." +msgstr "" +"จัดการการดาวน์โหลดสินทรัพย์ดิจิทัลที่เกี่ยวข้องกับคำสั่งซื้อ " +"ฟังก์ชันนี้พยายามให้บริการไฟล์สินทรัพย์ดิจิทัลที่อยู่ในไดเรกทอรีจัดเก็บของโครงการ" +" หากไม่พบไฟล์ จะเกิดข้อผิดพลาด HTTP 404 เพื่อระบุว่าทรัพยากรไม่พร้อมใช้งาน" + +#: core/views.py:365 msgid "favicon not found" msgstr "ไม่พบไอคอนเว็บไซต์" -#: core/viewsets.py:1357 +#: core/views.py:370 +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." +msgstr "" +"จัดการคำขอสำหรับไอคอนเว็บไซต์ (favicon) ฟังก์ชันนี้พยายามให้บริการไฟล์ " +"favicon ที่อยู่ในไดเรกทอรีแบบคงที่ของโปรเจกต์ หากไม่พบไฟล์ favicon " +"จะเกิดข้อผิดพลาด HTTP 404 เพื่อแสดงว่าทรัพยากรไม่พร้อมใช้งาน" + +#: core/views.py:382 +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 "" +"เปลี่ยนเส้นทางคำขอไปยังหน้าดัชนีของผู้ดูแลระบบ ฟังก์ชันนี้จัดการคำขอ HTTP " +"ที่เข้ามาและเปลี่ยนเส้นทางไปยังหน้าดัชนีของอินเทอร์เฟซผู้ดูแลระบบ Django " +"โดยใช้ฟังก์ชัน `redirect` ของ Django สำหรับการเปลี่ยนเส้นทาง HTTP" + +#: core/viewsets.py:128 +msgid "" +"Defines a viewset for managing Evibes-related operations. The EvibesViewSet " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" +"กำหนดชุดมุมมองสำหรับการจัดการการดำเนินการที่เกี่ยวข้องกับ Evibes คลาส " +"EvibesViewSet สืบทอดมาจาก ModelViewSet " +"และให้ฟังก์ชันการทำงานสำหรับการจัดการการกระทำและการดำเนินการบนเอนทิตีของ " +"Evibes รวมถึงการรองรับคลาสตัวแปลงแบบไดนามิกตามการกระทำปัจจุบัน " +"การอนุญาตที่ปรับแต่งได้ และรูปแบบการแสดงผล" + +#: core/viewsets.py:147 +msgid "" +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." +msgstr "" +"แสดงชุดมุมมองสำหรับการจัดการวัตถุ AttributeGroup ดำเนินการที่เกี่ยวข้องกับ " +"AttributeGroup รวมถึงการกรอง การแปลงข้อมูลเป็นรูปแบบที่ส่งผ่านได้ " +"และการดึงข้อมูล คลาสนี้เป็นส่วนหนึ่งของชั้น API " +"ของแอปพลิเคชันและให้วิธีการมาตรฐานในการประมวลผลคำขอและการตอบสนองสำหรับข้อมูล" +" AttributeGroup" + +#: core/viewsets.py:166 +msgid "" +"Handles operations related to Attribute objects within the application. " +"Provides a set of API endpoints to interact with Attribute data. This class " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"จัดการการดำเนินการที่เกี่ยวข้องกับวัตถุ Attribute ภายในแอปพลิเคชัน " +"ให้ชุดของจุดสิ้นสุด API สำหรับการโต้ตอบกับข้อมูล Attribute " +"คลาสนี้จัดการการค้นหา การกรอง และการแปลงวัตถุ Attribute เป็นรูปแบบที่อ่านได้" +" ช่วยให้สามารถควบคุมข้อมูลที่ส่งคืนได้อย่างยืดหยุ่น เช่น " +"การกรองตามฟิลด์เฉพาะ หรือการดึงข้อมูลแบบละเอียดหรือแบบย่อ " +"ขึ้นอยู่กับความต้องการของคำขอ" + +#: core/viewsets.py:185 +msgid "" +"A viewset for managing AttributeValue objects. This viewset provides " +"functionality for listing, retrieving, creating, updating, and deleting " +"AttributeValue objects. It integrates with Django REST Framework's viewset " +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." +msgstr "" +"ชุดมุมมองสำหรับการจัดการวัตถุ AttributeValue " +"ชุดมุมมองนี้ให้ฟังก์ชันการทำงานสำหรับการแสดงรายการ การดึงข้อมูล การสร้าง " +"การอัปเดต และการลบวัตถุ AttributeValue มันผสานรวมกับกลไกชุดมุมมองของ Django " +"REST Framework และใช้ตัวแปลงข้อมูลที่เหมาะสมสำหรับแต่ละการกระทำ " +"ความสามารถในการกรองข้อมูลมีให้ผ่าน DjangoFilterBackend" + +#: core/viewsets.py:204 +msgid "" +"Manages views for Category-related operations. The CategoryViewSet class is " +"responsible for handling operations related to the Category model in the " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" +"จัดการมุมมองสำหรับการดำเนินการที่เกี่ยวข้องกับหมวดหมู่ คลาส CategoryViewSet " +"รับผิดชอบในการจัดการการดำเนินการที่เกี่ยวข้องกับโมเดลหมวดหมู่ในระบบ " +"มันรองรับการดึงข้อมูล การกรอง และการแปลงข้อมูลหมวดหมู่เป็นรูปแบบที่ส่งต่อได้" +" " +"ชุดมุมมองนี้ยังบังคับใช้สิทธิ์การเข้าถึงเพื่อให้แน่ใจว่าเฉพาะผู้ใช้ที่ได้รับอนุญาตเท่านั้นที่สามารถเข้าถึงข้อมูลเฉพาะได้" + +#: core/viewsets.py:315 +msgid "" +"Represents a viewset for managing Brand instances. This class provides " +"functionality for querying, filtering, and serializing Brand objects. It " +"uses Django's ViewSet framework to simplify the implementation of API " +"endpoints for Brand objects." +msgstr "" +"แทนชุดมุมมองสำหรับการจัดการอินสแตนซ์ของแบรนด์ " +"คลาสนี้ให้ฟังก์ชันการทำงานสำหรับการค้นหา การกรอง " +"และการแปลงออบเจ็กต์แบรนด์เป็นรูปแบบที่ส่งผ่านได้ โดยใช้เฟรมเวิร์ก ViewSet " +"ของ Django เพื่อทำให้การพัฒนาระบบจุดสิ้นสุด API " +"สำหรับออบเจ็กต์แบรนด์เป็นเรื่องง่ายขึ้น" + +#: core/viewsets.py:427 +msgid "" +"Manages operations related to the `Product` model in the system. This class " +"provides a viewset for managing products, including their filtering, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" +"จัดการการดำเนินงานที่เกี่ยวข้องกับโมเดล `Product` ในระบบ " +"คลาสนี้ให้ชุดมุมมองสำหรับการจัดการผลิตภัณฑ์ รวมถึงการกรอง การแปลงเป็นลำดับ " +"และปฏิบัติการบนอินสแตนซ์เฉพาะ มันขยายจาก `EvibesViewSet` " +"เพื่อใช้ฟังก์ชันทั่วไปและผสานรวมกับเฟรมเวิร์ก Django REST สำหรับการดำเนินการ" +" API แบบ RESTful รวมถึงวิธีการสำหรับการดึงรายละเอียดผลิตภัณฑ์ การใช้สิทธิ์ " +"และการเข้าถึงข้อเสนอแนะที่เกี่ยวข้องของผลิตภัณฑ์" + +#: core/viewsets.py:547 +msgid "" +"Represents a viewset for managing Vendor objects. This viewset allows " +"fetching, filtering, and serializing Vendor data. It defines the queryset, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" +"แสดงชุดมุมมองสำหรับการจัดการวัตถุ Vendor ชุดมุมมองนี้อนุญาตให้ดึงข้อมูล กรอง" +" และแปลงข้อมูล Vendor เป็นรูปแบบที่อ่านได้ ชุดมุมมองนี้กำหนด queryset " +"การกำหนดค่าตัวกรอง และคลาส serializer ที่ใช้จัดการการดำเนินการต่างๆ " +"วัตถุประสงค์ของคลาสนี้คือการให้การเข้าถึงทรัพยากรที่เกี่ยวข้องกับ Vendor " +"อย่างมีประสิทธิภาพผ่านกรอบงาน Django REST" + +#: core/viewsets.py:567 +msgid "" +"Representation of a view set handling Feedback objects. This class manages " +"operations related to Feedback objects, including listing, filtering, and " +"retrieving details. The purpose of this view set is to provide different " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"use of Django's filtering system for querying data." +msgstr "" +"การแสดงชุดมุมมองที่จัดการวัตถุข้อเสนอแนะ " +"คลาสนี้จัดการการดำเนินการที่เกี่ยวข้องกับวัตถุข้อเสนอแนะ รวมถึงการแสดงรายการ" +" การกรอง และการดึงรายละเอียด " +"วัตถุประสงค์ของชุดมุมมองนี้คือการจัดเตรียมตัวแปลงอนุกรมที่แตกต่างกันสำหรับการดำเนินการต่างๆ" +" และจัดการวัตถุข้อเสนอแนะที่เข้าถึงได้บนพื้นฐานของสิทธิ์ มันขยายคลาสพื้นฐาน " +"`EvibesViewSet` และใช้ระบบกรองของ Django สำหรับการสืบค้นข้อมูล" + +#: core/viewsets.py:593 +msgid "" +"ViewSet for managing orders and related operations. This class provides " +"functionality to retrieve, modify, and manage order objects. It includes " +"various endpoints for handling order operations such as adding or removing " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " +"enforces permissions accordingly while interacting with order data." +msgstr "" +"ViewSet สำหรับการจัดการคำสั่งซื้อและกิจกรรมที่เกี่ยวข้อง " +"คลาสนี้ให้ฟังก์ชันการทำงานในการดึงข้อมูล แก้ไข และจัดการอ็อบเจ็กต์คำสั่งซื้อ" +" รวมถึงจุดสิ้นสุดต่างๆ สำหรับการจัดการคำสั่งซื้อ เช่น " +"การเพิ่มหรือลบผลิตภัณฑ์ " +"การดำเนินการซื้อสำหรับผู้ใช้ที่ลงทะเบียนและไม่ได้ลงทะเบียน " +"และการดึงคำสั่งซื้อที่รอดำเนินการของผู้ใช้ที่เข้าสู่ระบบปัจจุบัน ViewSet " +"ใช้ตัวแปลงข้อมูลหลายแบบตามการกระทำที่เฉพาะเจาะจงและบังคับใช้สิทธิ์การเข้าถึงอย่างเหมาะสมขณะโต้ตอบกับข้อมูลคำสั่งซื้อ" + +#: core/viewsets.py:782 +msgid "" +"Provides a viewset for managing OrderProduct entities. This viewset enables " +"CRUD operations and custom actions specific to the OrderProduct model. It " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " +"feedback on OrderProduct instances" +msgstr "" +"ให้ชุดมุมมองสำหรับการจัดการเอนทิตี OrderProduct " +"ชุดมุมมองนี้ช่วยให้สามารถดำเนินการ CRUD และดำเนินการเฉพาะที่เกี่ยวกับโมเดล " +"OrderProduct รวมถึงการกรอง การตรวจสอบสิทธิ์ " +"และการสลับตัวแปลงตามการดำเนินการที่ร้องขอ " +"นอกจากนี้ยังมีรายละเอียดการดำเนินการสำหรับการจัดการข้อเสนอแนะเกี่ยวกับอินสแตนซ์ของ" +" OrderProduct" + +#: core/viewsets.py:833 +msgid "Manages operations related to Product images in the application. " +msgstr "จัดการการดำเนินงานที่เกี่ยวข้องกับภาพผลิตภัณฑ์ในแอปพลิเคชัน" + +#: core/viewsets.py:845 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +msgstr "" +"จัดการการดึงและการจัดการของตัวอย่าง PromoCode ผ่านการกระทำของ API ต่าง ๆ" + +#: core/viewsets.py:866 +msgid "Represents a view set for managing promotions. " +msgstr "แสดงมุมมองที่ตั้งค่าไว้สำหรับการจัดการโปรโมชั่น" + +#: core/viewsets.py:878 +msgid "Handles operations related to Stock data in the system." +msgstr "จัดการการดำเนินงานที่เกี่ยวข้องกับข้อมูลสต็อกในระบบ" + +#: core/viewsets.py:892 +msgid "" +"ViewSet for managing Wishlist operations. The WishlistViewSet provides " +"endpoints for interacting with a user's wish list, allowing for the " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " +"actions for wishlist products. Permission checks are integrated to ensure " +"that users can only manage their own wishlists unless explicit permissions " +"are granted." +msgstr "" +"ViewSet สำหรับการจัดการการดำเนินการในรายการที่ต้องการ (Wishlist) " +"WishlistViewSet ให้จุดเชื่อมต่อสำหรับการโต้ตอบกับรายการที่ต้องการของผู้ใช้ " +"ซึ่งช่วยให้สามารถดึงข้อมูล แก้ไข และปรับแต่งผลิตภัณฑ์ในรายการที่ต้องการได้ " +"ViewSet นี้อำนวยความสะดวกในการทำงาน เช่น การเพิ่ม การลบ " +"และการดำเนินการแบบกลุ่มสำหรับผลิตภัณฑ์ในรายการที่ต้องการ " +"มีการตรวจสอบสิทธิ์เพื่อรับรองว่าผู้ใช้สามารถจัดการรายการที่ต้องการของตนเองเท่านั้น" +" เว้นแต่จะได้รับสิทธิ์อนุญาตอย่างชัดเจน" + +#: core/viewsets.py:1007 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" +"คลาสนี้ให้ฟังก์ชันการทำงานของ viewset สำหรับจัดการออบเจ็กต์ `Address` คลาส " +"AddressViewSet ช่วยให้สามารถดำเนินการ CRUD การกรอง " +"และการดำเนินการที่กำหนดเองที่เกี่ยวข้องกับเอนทิตีที่อยู่ " +"รวมถึงพฤติกรรมเฉพาะสำหรับวิธีการ HTTP ที่แตกต่างกัน การแทนที่ตัวแปลงข้อมูล " +"และการจัดการสิทธิ์ตามบริบทของคำขอ" + +#: core/viewsets.py:1074 #, python-brace-format msgid "Geocoding error: {e}" msgstr "ข้อผิดพลาดในการแปลงพิกัดภูมิศาสตร์: {e}" + +#: core/viewsets.py:1081 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" +"จัดการการดำเนินการที่เกี่ยวข้องกับแท็กสินค้าภายในแอปพลิเคชัน " +"คลาสนี้ให้ฟังก์ชันการทำงานสำหรับการดึงข้อมูล การกรอง " +"และการแปลงออบเจ็กต์แท็กสินค้าเป็นรูปแบบที่ส่งต่อได้ " +"รองรับการกรองที่ยืดหยุ่นบนคุณสมบัติเฉพาะโดยใช้แบ็กเอนด์ตัวกรองที่กำหนดไว้ " +"และใช้ตัวแปลงรูปแบบที่แตกต่างกันโดยอัตโนมัติตามการดำเนินการที่กำลังดำเนินการอยู่" diff --git a/core/locale/tr_TR/LC_MESSAGES/django.mo b/core/locale/tr_TR/LC_MESSAGES/django.mo index 204ac6e746d76cdb442d7eda93483b02339a8f3a..b9863b1338a701b154ea60a7f47668a642009676 100644 GIT binary patch delta 26849 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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:11 +#: core/abstract.py:12 msgid "unique id" msgstr "Benzersiz Kimlik" -#: core/abstract.py:12 +#: 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:19 +#: core/abstract.py:20 msgid "is active" msgstr "Aktif mi" -#: core/abstract.py:20 +#: core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" @@ -35,19 +35,19 @@ msgstr "" "false olarak ayarlanırsa, bu nesne gerekli izne sahip olmayan kullanıcılar " "tarafından görülemez" -#: core/abstract.py:22 core/choices.py:18 +#: core/abstract.py:23 core/choices.py:18 msgid "created" msgstr "Oluşturuldu" -#: core/abstract.py:22 +#: 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:23 +#: core/abstract.py:24 msgid "modified" msgstr "Değiştirilmiş" -#: core/abstract.py:23 +#: core/abstract.py:24 msgid "when the object was last modified" msgstr "Nesne en son ne zaman düzenlendi" @@ -90,11 +90,11 @@ msgid "selected items have been deactivated." msgstr "Seçilen öğeler devre dışı bırakıldı!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 +#: core/graphene/object_types.py:616 core/models.py:701 core/models.py:709 msgid "attribute value" msgstr "Öznitelik Değeri" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 msgid "attribute values" msgstr "Öznitelik Değerleri" @@ -106,7 +106,7 @@ msgstr "Resim" msgid "images" msgstr "Görüntüler" -#: core/admin.py:155 core/models.py:445 +#: core/admin.py:155 core/models.py:459 msgid "stock" msgstr "Stok" @@ -114,11 +114,11 @@ msgstr "Stok" msgid "stocks" msgstr "Stoklar" -#: core/admin.py:166 core/models.py:1609 +#: core/admin.py:166 core/models.py:1667 msgid "order product" msgstr "Ürün Siparişi" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 msgid "order products" msgstr "Sipariş Ürünleri" @@ -743,7 +743,7 @@ msgstr "sipariş-ürün ilişkisini silme" msgid "add or remove feedback on an order–product relation" msgstr "sipariş-ürün ilişkisine geri bildirim ekleme veya kaldırma" -#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 msgid "no search term provided." msgstr "Arama terimi belirtilmemiştir." @@ -796,7 +796,7 @@ msgid "Quantity" msgstr "Miktar" #: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:287 core/models.py:369 core/models.py:522 +#: core/models.py:301 core/models.py:383 core/models.py:536 msgid "Slug" msgstr "Sümüklüböcek" @@ -812,7 +812,7 @@ msgstr "Alt kategorileri dahil edin" msgid "Include personal ordered" msgstr "Kişisel sipariş edilen ürünleri dahil edin" -#: core/filters.py:85 core/models.py:526 +#: core/filters.py:85 core/models.py:540 msgid "SKU" msgstr "SKU" @@ -886,7 +886,7 @@ msgstr "Önbelleğe alınmış veriler" msgid "camelized JSON data from the requested URL" msgstr "İstenen URL'den kameleştirilmiş JSON verileri" -#: core/graphene/mutations.py:65 core/views.py:360 +#: core/graphene/mutations.py:65 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "Yalnızca http(s):// ile başlayan URL'lere izin verilir" @@ -919,7 +919,7 @@ msgstr "" " dışlayan bilgiler!" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:839 +#: core/graphene/mutations.py:527 core/viewsets.py:679 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "order.buy() metodundan yanlış tip geldi: {type(instance)!s}" @@ -995,9 +995,9 @@ msgstr "Orderproduct {order_product_uuid} bulunamadı!" msgid "original address string provided by the user" msgstr "Kullanıcı tarafından sağlanan orijinal adres dizesi" -#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 -#: core/models.py:1234 core/models.py:1263 core/models.py:1288 -#: core/viewsets.py:842 +#: core/graphene/mutations.py:656 core/models.py:849 core/models.py:862 +#: core/models.py:1281 core/models.py:1310 core/models.py:1335 +#: core/viewsets.py:682 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} mevcut değil: {uuid}!" @@ -1011,8 +1011,8 @@ msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - bir cazibe gibi çalışır" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 -#: core/models.py:1686 +#: core/graphene/object_types.py:444 core/models.py:672 core/models.py:1144 +#: core/models.py:1744 msgid "attributes" msgstr "Nitelikler" @@ -1025,11 +1025,11 @@ msgid "groups of attributes" msgstr "Nitelik grupları" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:612 +#: core/graphene/object_types.py:224 core/models.py:326 core/models.py:626 msgid "categories" msgstr "Kategoriler" -#: core/graphene/object_types.py:124 core/models.py:383 +#: core/graphene/object_types.py:124 core/models.py:397 msgid "brands" msgstr "Markalar" @@ -1038,7 +1038,7 @@ msgid "category image url" msgstr "Kategoriler" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:249 +#: core/models.py:263 msgid "markup percentage" msgstr "İşaretleme Yüzdesi" @@ -1060,7 +1060,7 @@ msgstr "Bu kategori için etiketler" msgid "products in this category" msgstr "Bu kategorideki ürünler" -#: core/graphene/object_types.py:351 core/models.py:155 +#: core/graphene/object_types.py:351 core/models.py:169 msgid "vendors" msgstr "Satıcılar" @@ -1085,7 +1085,7 @@ msgid "represents feedback from a user." msgstr "Bir kullanıcıdan gelen geri bildirimi temsil eder." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1110 +#: core/models.py:1138 msgid "notifications" msgstr "Bildirimler" @@ -1093,7 +1093,7 @@ msgstr "Bildirimler" 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:400 core/models.py:1791 +#: core/graphene/object_types.py:400 core/models.py:1860 msgid "feedback" msgstr "Geri bildirim" @@ -1101,7 +1101,7 @@ msgstr "Geri bildirim" msgid "a list of order products in this order" msgstr "Bu siparişteki sipariş ürünlerinin bir listesi" -#: core/graphene/object_types.py:436 core/models.py:1080 +#: core/graphene/object_types.py:436 core/models.py:1108 msgid "billing address" msgstr "Fatura adresi" @@ -1129,7 +1129,7 @@ msgstr "Siparişteki tüm ürünler dijital mi" msgid "transactions for this order" msgstr "Bu sipariş için işlemler" -#: core/graphene/object_types.py:465 core/models.py:1144 +#: core/graphene/object_types.py:465 core/models.py:1172 msgid "orders" msgstr "Siparişler" @@ -1141,15 +1141,15 @@ msgstr "Resim URL'si" msgid "product's images" msgstr "Ürün görselleri" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 +#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 msgid "category" msgstr "Kategori" -#: core/graphene/object_types.py:502 core/models.py:1792 +#: core/graphene/object_types.py:502 core/models.py:1861 msgid "feedbacks" msgstr "Geri Bildirimler" -#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 +#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 msgid "brand" msgstr "Marka" @@ -1181,7 +1181,7 @@ msgstr "Geri bildirim sayısı" msgid "only available for personal orders" msgstr "Ürünler sadece kişisel siparişler için mevcuttur" -#: core/graphene/object_types.py:534 core/models.py:536 +#: core/graphene/object_types.py:534 core/models.py:550 msgid "products" msgstr "Ürünler" @@ -1193,15 +1193,15 @@ msgstr "Promosyon Kodları" msgid "products on sale" msgstr "Satıştaki ürünler" -#: core/graphene/object_types.py:651 core/models.py:784 +#: core/graphene/object_types.py:651 core/models.py:798 msgid "promotions" msgstr "Promosyonlar" -#: core/graphene/object_types.py:655 core/models.py:154 +#: core/graphene/object_types.py:655 core/models.py:168 msgid "vendor" msgstr "Satıcı" -#: core/graphene/object_types.py:656 core/models.py:535 +#: core/graphene/object_types.py:656 core/models.py:549 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1209,11 +1209,11 @@ msgstr "Satıcı" msgid "product" msgstr "Ürün" -#: core/graphene/object_types.py:667 core/models.py:807 +#: core/graphene/object_types.py:667 core/models.py:821 msgid "wishlisted products" msgstr "İstek listesindeki ürünler" -#: core/graphene/object_types.py:673 core/models.py:824 +#: core/graphene/object_types.py:673 core/models.py:838 msgid "wishlists" msgstr "Dilek Listeleri" @@ -1221,7 +1221,7 @@ msgstr "Dilek Listeleri" msgid "tagged products" msgstr "Etiketlenmiş ürünler" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 +#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 msgid "product tags" msgstr "Ürün etiketleri" @@ -1331,7 +1331,7 @@ msgstr "Üst öznitelik grubu" msgid "attribute group's name" msgstr "Öznitelik grubunun adı" -#: core/models.py:100 core/models.py:620 +#: core/models.py:100 core/models.py:634 msgid "attribute group" msgstr "Öznitelik grubu" @@ -1379,7 +1379,7 @@ msgstr "Bu satıcının adı" msgid "vendor name" msgstr "Satıcı adı" -#: core/models.py:163 +#: core/models.py:177 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1394,27 +1394,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:175 core/models.py:206 +#: core/models.py:189 core/models.py:220 msgid "internal tag identifier for the product tag" msgstr "Ürün etiketi için dahili etiket tanımlayıcısı" -#: core/models.py:176 core/models.py:207 +#: core/models.py:190 core/models.py:221 msgid "tag name" msgstr "Etiket adı" -#: core/models.py:180 core/models.py:211 +#: core/models.py:194 core/models.py:225 msgid "user-friendly name for the product tag" msgstr "Ürün etiketi için kullanıcı dostu ad" -#: core/models.py:181 core/models.py:212 +#: core/models.py:195 core/models.py:226 msgid "tag display name" msgstr "Etiket görünen adı" -#: core/models.py:189 +#: core/models.py:203 msgid "product tag" msgstr "Ürün etiketi" -#: core/models.py:195 +#: core/models.py:209 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 " @@ -1425,15 +1425,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:220 +#: core/models.py:234 msgid "category tag" msgstr "kategori etiketi" -#: core/models.py:221 core/models.py:293 +#: core/models.py:235 core/models.py:307 msgid "category tags" msgstr "kategori etiketleri" -#: core/models.py:226 +#: core/models.py:240 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1455,51 +1455,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:240 +#: core/models.py:254 msgid "upload an image representing this category" msgstr "Bu kategoriyi temsil eden bir resim yükleyin" -#: core/models.py:243 +#: core/models.py:257 msgid "category image" msgstr "Kategori görüntüsü" -#: core/models.py:248 +#: core/models.py:262 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:257 +#: core/models.py:271 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:258 +#: core/models.py:272 msgid "parent category" msgstr "Ana kategori" -#: core/models.py:263 +#: core/models.py:277 msgid "category name" msgstr "Kategori adı" -#: core/models.py:264 +#: core/models.py:278 msgid "provide a name for this category" msgstr "Bu kategori için bir ad girin" -#: core/models.py:271 +#: core/models.py:285 msgid "add a detailed description for this category" msgstr "Bu kategori için ayrıntılı bir açıklama ekleyin" -#: core/models.py:272 +#: core/models.py:286 msgid "category description" msgstr "Kategori açıklaması" -#: core/models.py:292 +#: core/models.py:306 msgid "tags that help describe or group this category" msgstr "bu kategoriyi tanımlamaya veya gruplandırmaya yardımcı olan etiketler" -#: core/models.py:299 core/models.py:375 +#: core/models.py:313 core/models.py:389 msgid "priority" msgstr "Öncelik" -#: core/models.py:318 +#: core/models.py:332 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1513,47 +1513,47 @@ msgstr "" "Uygulama içinde markayla ilgili verilerin düzenlenmesini ve temsil " "edilmesini sağlar." -#: core/models.py:328 +#: core/models.py:342 msgid "name of this brand" msgstr "Bu markanın adı" -#: core/models.py:329 +#: core/models.py:343 msgid "brand name" msgstr "Marka adı" -#: core/models.py:336 +#: core/models.py:350 msgid "upload a logo representing this brand" msgstr "Bu markayı temsil eden bir logo yükleyin" -#: core/models.py:338 +#: core/models.py:352 msgid "brand small image" msgstr "Marka küçük imajı" -#: core/models.py:344 +#: core/models.py:358 msgid "upload a big logo representing this brand" msgstr "Bu markayı temsil eden büyük bir logo yükleyin" -#: core/models.py:346 +#: core/models.py:360 msgid "brand big image" msgstr "Marka büyük imaj" -#: core/models.py:351 +#: core/models.py:365 msgid "add a detailed description of the brand" msgstr "Markanın ayrıntılı bir açıklamasını ekleyin" -#: core/models.py:352 +#: core/models.py:366 msgid "brand description" msgstr "Marka açıklaması" -#: core/models.py:357 +#: core/models.py:371 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:358 +#: core/models.py:372 msgid "associated categories" msgstr "Kategoriler" -#: core/models.py:388 +#: core/models.py:402 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1569,68 +1569,68 @@ msgstr "" " ürünlerin izlenmesine ve değerlendirilmesine olanak sağlamak için envanter " "yönetim sisteminin bir parçasıdır." -#: core/models.py:400 +#: core/models.py:414 msgid "the vendor supplying this product stock" msgstr "Bu ürün stokunu tedarik eden satıcı" -#: core/models.py:401 +#: core/models.py:415 msgid "associated vendor" msgstr "İlişkili satıcı" -#: core/models.py:405 +#: core/models.py:419 msgid "final price to the customer after markups" msgstr "Fiyat artışlarından sonra müşteriye verilen nihai fiyat" -#: core/models.py:406 +#: core/models.py:420 msgid "selling price" msgstr "Satış fiyatı" -#: core/models.py:411 +#: core/models.py:425 msgid "the product associated with this stock entry" msgstr "Bu stok girişi ile ilişkili ürün" -#: core/models.py:412 core/models.py:683 core/models.py:730 -#: core/models.py:1583 +#: core/models.py:426 core/models.py:697 core/models.py:744 +#: core/models.py:1641 msgid "associated product" msgstr "İlişkili ürün" -#: core/models.py:419 +#: core/models.py:433 msgid "the price paid to the vendor for this product" msgstr "Bu ürün için satıcıya ödenen fiyat" -#: core/models.py:420 +#: core/models.py:434 msgid "vendor purchase price" msgstr "Satıcı satın alma fiyatı" -#: core/models.py:424 +#: core/models.py:438 msgid "available quantity of the product in stock" msgstr "Stoktaki mevcut ürün miktarı" -#: core/models.py:425 +#: core/models.py:439 msgid "quantity in stock" msgstr "Stoktaki miktar" -#: core/models.py:429 +#: core/models.py:443 msgid "vendor-assigned SKU for identifying the product" msgstr "Ürünü tanımlamak için satıcı tarafından atanan SKU" -#: core/models.py:430 +#: core/models.py:444 msgid "vendor sku" msgstr "Satıcının SKU'su" -#: core/models.py:436 +#: core/models.py:450 msgid "digital file associated with this stock if applicable" msgstr "Varsa bu stokla ilişkili dijital dosya" -#: core/models.py:437 +#: core/models.py:451 msgid "digital file" msgstr "Dijital dosya" -#: core/models.py:446 +#: core/models.py:460 msgid "stock entries" msgstr "Stok girişleri" -#: core/models.py:451 +#: core/models.py:465 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1651,55 +1651,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:464 +#: core/models.py:478 msgid "category this product belongs to" msgstr "Bu ürünün ait olduğu kategori" -#: core/models.py:473 +#: core/models.py:487 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:479 +#: core/models.py:493 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:484 +#: core/models.py:498 msgid "indicates whether this product is digitally delivered" msgstr "Bu ürünün dijital olarak teslim edilip edilmediğini belirtir" -#: core/models.py:485 +#: core/models.py:499 msgid "is product digital" msgstr "Ürün dijital mi" -#: core/models.py:491 +#: core/models.py:505 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:492 +#: core/models.py:506 msgid "product name" msgstr "Ürün adı" -#: core/models.py:497 core/models.py:772 +#: core/models.py:511 core/models.py:786 msgid "add a detailed description of the product" msgstr "Ürünün ayrıntılı bir açıklamasını ekleyin" -#: core/models.py:498 +#: core/models.py:512 msgid "product description" msgstr "Ürün Açıklaması" -#: core/models.py:505 +#: core/models.py:519 msgid "part number for this product" msgstr "Bu ürün için parça numarası" -#: core/models.py:506 +#: core/models.py:520 msgid "part number" msgstr "Parça numarası" -#: core/models.py:525 +#: core/models.py:539 msgid "stock keeping unit for this product" msgstr "Bu ürün için Stok Tutma Birimi" -#: core/models.py:599 +#: core/models.py:613 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 " @@ -1715,69 +1715,69 @@ 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:611 +#: core/models.py:625 msgid "category of this attribute" msgstr "Bu niteliğin kategorisi" -#: core/models.py:619 +#: core/models.py:633 msgid "group of this attribute" msgstr "Bu niteliğin grubu" -#: core/models.py:625 +#: core/models.py:639 msgid "string" msgstr "String" -#: core/models.py:626 +#: core/models.py:640 msgid "integer" msgstr "Tamsayı" -#: core/models.py:627 +#: core/models.py:641 msgid "float" msgstr "Yüzer" -#: core/models.py:628 +#: core/models.py:642 msgid "boolean" msgstr "Boolean" -#: core/models.py:629 +#: core/models.py:643 msgid "array" msgstr "Dizi" -#: core/models.py:630 +#: core/models.py:644 msgid "object" msgstr "Nesne" -#: core/models.py:632 +#: core/models.py:646 msgid "type of the attribute's value" msgstr "Özniteliğin değerinin türü" -#: core/models.py:633 +#: core/models.py:647 msgid "value type" msgstr "Değer türü" -#: core/models.py:638 +#: core/models.py:652 msgid "name of this attribute" msgstr "Bu niteliğin adı" -#: core/models.py:639 +#: core/models.py:653 msgid "attribute's name" msgstr "Özniteliğin adı" -#: core/models.py:645 +#: core/models.py:659 msgid "is filterable" msgstr "filtrelenebilir" -#: core/models.py:646 +#: core/models.py:660 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:657 core/models.py:675 +#: core/models.py:671 core/models.py:689 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Öznitelik" -#: core/models.py:663 +#: core/models.py:677 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" @@ -1787,19 +1787,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:674 +#: core/models.py:688 msgid "attribute of this value" msgstr "Bu değerin niteliği" -#: core/models.py:682 +#: core/models.py:696 msgid "the specific product associated with this attribute's value" msgstr "Bu özniteliğin değeriyle ilişkili belirli ürün" -#: core/models.py:688 +#: core/models.py:702 msgid "the specific value for this attribute" msgstr "Bu öznitelik için özel değer" -#: core/models.py:701 +#: core/models.py:715 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -1813,39 +1813,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:712 +#: core/models.py:726 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:713 +#: core/models.py:727 msgid "image alt text" msgstr "Resim alt metni" -#: core/models.py:716 +#: core/models.py:730 msgid "upload the image file for this product" msgstr "Bu ürün için resim dosyasını yükleyin" -#: core/models.py:717 core/models.py:742 +#: core/models.py:731 core/models.py:756 msgid "product image" msgstr "Ürün görseli" -#: core/models.py:723 +#: core/models.py:737 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:724 +#: core/models.py:738 msgid "display priority" msgstr "Ekran önceliği" -#: core/models.py:729 +#: core/models.py:743 msgid "the product that this image represents" msgstr "Bu görselin temsil ettiği ürün" -#: core/models.py:743 +#: core/models.py:757 msgid "product images" msgstr "Ürün görselleri" -#: core/models.py:748 +#: core/models.py:762 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1861,39 +1861,39 @@ msgstr "" "öznitelikler içerir. Kampanyadaki etkilenen ürünleri belirlemek için ürün " "kataloğu ile entegre olur." -#: core/models.py:760 +#: core/models.py:774 msgid "percentage discount for the selected products" msgstr "Seçilen ürünler için yüzde indirim" -#: core/models.py:761 +#: core/models.py:775 msgid "discount percentage" msgstr "İndirim yüzdesi" -#: core/models.py:766 +#: core/models.py:780 msgid "provide a unique name for this promotion" msgstr "Bu promosyon için benzersiz bir ad girin" -#: core/models.py:767 +#: core/models.py:781 msgid "promotion name" msgstr "Promosyon adı" -#: core/models.py:773 +#: core/models.py:787 msgid "promotion description" msgstr "Promosyon açıklaması" -#: core/models.py:778 +#: core/models.py:792 msgid "select which products are included in this promotion" msgstr "Bu promosyona hangi ürünlerin dahil olduğunu seçin" -#: core/models.py:779 +#: core/models.py:793 msgid "included products" msgstr "Dahil olan ürünler" -#: core/models.py:783 +#: core/models.py:797 msgid "promotion" msgstr "Promosyon" -#: core/models.py:794 +#: core/models.py:808 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1905,23 +1905,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:806 +#: core/models.py:820 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:814 +#: core/models.py:828 msgid "user who owns this wishlist" msgstr "Bu istek listesine sahip olan kullanıcı" -#: core/models.py:815 +#: core/models.py:829 msgid "wishlist owner" msgstr "Dilek Listesi Sahibi" -#: core/models.py:823 +#: core/models.py:837 msgid "wishlist" msgstr "İstek Listesi" -#: core/models.py:865 +#: core/models.py:879 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1936,19 +1936,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:878 +#: core/models.py:892 msgid "documentary" msgstr "Belgesel" -#: core/models.py:879 +#: core/models.py:893 msgid "documentaries" msgstr "Belgeseller" -#: core/models.py:889 +#: core/models.py:903 msgid "unresolved" msgstr "Çözümlenmemiş" -#: core/models.py:894 +#: core/models.py:908 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1969,59 +1969,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:909 +#: core/models.py:923 msgid "address line for the customer" msgstr "Müşteri için adres satırı" -#: core/models.py:910 +#: core/models.py:924 msgid "address line" msgstr "Adres hattı" -#: core/models.py:912 +#: core/models.py:926 msgid "street" msgstr "Sokak" -#: core/models.py:913 +#: core/models.py:927 msgid "district" msgstr "Bölge" -#: core/models.py:914 +#: core/models.py:928 msgid "city" msgstr "Şehir" -#: core/models.py:915 +#: core/models.py:929 msgid "region" msgstr "Bölge" -#: core/models.py:916 +#: core/models.py:930 msgid "postal code" msgstr "Posta kodu" -#: core/models.py:917 +#: core/models.py:931 msgid "country" msgstr "Ülke" -#: core/models.py:924 +#: core/models.py:938 msgid "geolocation point: (longitude, latitude)" msgstr "Coğrafi Konum Noktası(Boylam, Enlem)" -#: core/models.py:927 +#: core/models.py:941 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:932 +#: core/models.py:946 msgid "stored JSON response from the geocoding service" msgstr "Coğrafi kodlama hizmetinden depolanan JSON yanıtı" -#: core/models.py:940 +#: core/models.py:954 msgid "address" msgstr "Adres" -#: core/models.py:941 +#: core/models.py:955 msgid "addresses" msgstr "Adresler" -#: core/models.py:953 +#: core/models.py:967 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2038,74 +2038,74 @@ msgstr "" "karşılandığından emin olurken promosyon kodunu doğrulamak ve siparişe " "uygulamak için işlevsellik içerir." -#: core/models.py:967 +#: core/models.py:981 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:968 +#: core/models.py:982 msgid "promo code identifier" msgstr "Promosyon kodu tanımlayıcı" -#: core/models.py:975 +#: core/models.py:989 msgid "fixed discount amount applied if percent is not used" msgstr "Yüzde kullanılmazsa uygulanan sabit indirim tutarı" -#: core/models.py:976 +#: core/models.py:990 msgid "fixed discount amount" msgstr "Sabit iskonto tutarı" -#: core/models.py:982 +#: core/models.py:996 msgid "percentage discount applied if fixed amount is not used" msgstr "Sabit tutar kullanılmazsa uygulanan yüzde indirimi" -#: core/models.py:983 +#: core/models.py:997 msgid "percentage discount" msgstr "Yüzde indirim" -#: core/models.py:988 +#: core/models.py:1002 msgid "timestamp when the promocode expires" msgstr "Promosyon kodunun sona erdiği zaman damgası" -#: core/models.py:989 +#: core/models.py:1003 msgid "end validity time" msgstr "Geçerlilik süresi sonu" -#: core/models.py:994 +#: core/models.py:1008 msgid "timestamp from which this promocode is valid" msgstr "Bu promosyon kodunun geçerli olduğu zaman damgası" -#: core/models.py:995 +#: core/models.py:1009 msgid "start validity time" msgstr "Geçerlilik süresini başlat" -#: core/models.py:1000 +#: core/models.py:1014 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:1001 +#: core/models.py:1015 msgid "usage timestamp" msgstr "Kullanım zaman damgası" -#: core/models.py:1006 +#: core/models.py:1020 msgid "user assigned to this promocode if applicable" msgstr "Varsa bu promosyon koduna atanan kullanıcı" -#: core/models.py:1007 +#: core/models.py:1021 msgid "assigned user" msgstr "Atanmış kullanıcı" -#: core/models.py:1014 +#: core/models.py:1028 msgid "promo code" msgstr "Promosyon kodu" -#: core/models.py:1015 +#: core/models.py:1029 msgid "promo codes" msgstr "Promosyon kodları" -#: core/models.py:1022 +#: core/models.py:1044 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2113,16 +2113,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:1037 +#: core/models.py:1065 msgid "promocode already used" msgstr "Promosyon kodu zaten kullanılmış" -#: core/models.py:1053 +#: core/models.py:1081 #, 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:1062 +#: core/models.py:1090 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 " @@ -2139,136 +2139,136 @@ msgstr "" "güncellenebilir. Aynı şekilde işlevsellik, sipariş yaşam döngüsündeki " "ürünlerin yönetilmesini de destekler." -#: core/models.py:1079 +#: core/models.py:1107 msgid "the billing address used for this order" msgstr "Bu sipariş için kullanılan fatura adresi" -#: core/models.py:1087 +#: core/models.py:1115 msgid "optional promo code applied to this order" msgstr "Bu siparişe isteğe bağlı promosyon kodu uygulanır" -#: core/models.py:1088 +#: core/models.py:1116 msgid "applied promo code" msgstr "Uygulanan promosyon kodu" -#: core/models.py:1096 +#: core/models.py:1124 msgid "the shipping address used for this order" msgstr "Bu sipariş için kullanılan gönderim adresi" -#: core/models.py:1097 +#: core/models.py:1125 msgid "shipping address" msgstr "Nakliye adresi" -#: core/models.py:1103 +#: core/models.py:1131 msgid "current status of the order in its lifecycle" msgstr "Siparişin yaşam döngüsündeki mevcut durumu" -#: core/models.py:1104 +#: core/models.py:1132 msgid "order status" msgstr "Sipariş durumu" -#: core/models.py:1109 core/models.py:1560 +#: core/models.py:1137 core/models.py:1618 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:1115 +#: core/models.py:1143 msgid "json representation of order attributes for this order" msgstr "Bu sipariş için sipariş özniteliklerinin JSON gösterimi" -#: core/models.py:1121 +#: core/models.py:1149 msgid "the user who placed the order" msgstr "Siparişi veren kullanıcı" -#: core/models.py:1122 +#: core/models.py:1150 msgid "user" msgstr "Kullanıcı" -#: core/models.py:1128 +#: core/models.py:1156 msgid "the timestamp when the order was finalized" msgstr "Siparişin sonlandırıldığı zaman damgası" -#: core/models.py:1129 +#: core/models.py:1157 msgid "buy time" msgstr "Zaman satın alın" -#: core/models.py:1136 +#: core/models.py:1164 msgid "a human-readable identifier for the order" msgstr "Sipariş için insan tarafından okunabilir bir tanımlayıcı" -#: core/models.py:1137 +#: core/models.py:1165 msgid "human readable id" msgstr "insan tarafından okunabilir kimlik" -#: core/models.py:1143 +#: core/models.py:1171 msgid "order" msgstr "Sipariş" -#: core/models.py:1168 +#: core/models.py:1209 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:1202 +#: core/models.py:1249 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:1207 +#: core/models.py:1254 msgid "you cannot add inactive products to order" msgstr "Aktif olmayan ürünleri siparişe ekleyemezsiniz" -#: core/models.py:1224 +#: core/models.py:1271 msgid "you cannot add more products than available in stock" msgstr "Stokta mevcut olandan daha fazla ürün ekleyemezsiniz" -#: core/models.py:1246 core/models.py:1271 core/models.py:1279 +#: core/models.py:1293 core/models.py:1318 core/models.py:1326 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:1267 +#: core/models.py:1314 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} <{query}> sorgusu ile mevcut değil!" -#: core/models.py:1299 +#: core/models.py:1346 msgid "promocode does not exist" msgstr "Promosyon kodu mevcut değil" -#: core/models.py:1305 +#: core/models.py:1352 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:1324 +#: core/models.py:1371 msgid "address does not exist" msgstr "Adres mevcut değil" -#: core/models.py:1345 core/models.py:1414 +#: core/models.py:1392 core/models.py:1461 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:1348 core/models.py:1410 +#: core/models.py:1395 core/models.py:1457 msgid "invalid force value" msgstr "Geçersiz kuvvet değeri" -#: core/models.py:1354 core/models.py:1417 +#: core/models.py:1401 core/models.py:1464 msgid "you cannot purchase an empty order!" msgstr "Boş bir sipariş satın alamazsınız!" -#: core/models.py:1373 +#: core/models.py:1420 msgid "you cannot buy an order without a user" msgstr "Kullanıcı olmadan sipariş alamazsınız!" -#: core/models.py:1387 +#: core/models.py:1434 msgid "a user without a balance cannot buy with balance" msgstr "Bakiyesi olmayan bir kullanıcı bakiye ile satın alamaz!" -#: core/models.py:1392 +#: core/models.py:1439 msgid "insufficient funds to complete the order" msgstr "Siparişi tamamlamak için yeterli fon yok" -#: core/models.py:1426 +#: core/models.py:1473 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2276,14 +2276,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:1435 +#: core/models.py:1482 #, 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:1533 +#: core/models.py:1591 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2305,108 +2305,108 @@ msgstr "" "destekleyen yöntemler ve özellikler sağlar. Model, Sipariş ve Ürün " "modelleriyle entegre olur ve bunlara referans depolar." -#: core/models.py:1548 +#: core/models.py:1606 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:1549 +#: core/models.py:1607 msgid "purchase price at order time" msgstr "Sipariş anındaki satın alma fiyatı" -#: core/models.py:1554 +#: core/models.py:1612 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:1555 +#: core/models.py:1613 msgid "internal comments" msgstr "Dahili yorumlar" -#: core/models.py:1561 +#: core/models.py:1619 msgid "user notifications" msgstr "Kullanıcı bildirimleri" -#: core/models.py:1566 +#: core/models.py:1624 msgid "json representation of this item's attributes" msgstr "Bu öğenin özniteliklerinin JSON gösterimi" -#: core/models.py:1567 +#: core/models.py:1625 msgid "ordered product attributes" msgstr "Sıralı ürün özellikleri" -#: core/models.py:1572 +#: core/models.py:1630 msgid "reference to the parent order that contains this product" msgstr "Bu ürünü içeren ana siparişe referans" -#: core/models.py:1573 +#: core/models.py:1631 msgid "parent order" msgstr "Ana sipariş" -#: core/models.py:1582 +#: core/models.py:1640 msgid "the specific product associated with this order line" msgstr "Bu sipariş satırıyla ilişkili belirli ürün" -#: core/models.py:1589 +#: core/models.py:1647 msgid "quantity of this specific product in the order" msgstr "Siparişteki bu belirli ürünün miktarı" -#: core/models.py:1590 +#: core/models.py:1648 msgid "product quantity" msgstr "Ürün miktarı" -#: core/models.py:1597 +#: core/models.py:1655 msgid "current status of this product in the order" msgstr "Bu ürünün siparişteki mevcut durumu" -#: core/models.py:1598 +#: core/models.py:1656 msgid "product line status" msgstr "Ürün hattı durumu" -#: core/models.py:1661 +#: core/models.py:1719 msgid "order product must have an order" msgstr "Orderproduct ilişkili bir siparişe sahip olmalıdır!" -#: core/models.py:1663 +#: core/models.py:1721 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Geri bildirim için yanlış eylem belirtildi: {action}!" -#: core/models.py:1677 +#: core/models.py:1735 msgid "you cannot feedback an order which is not received" msgstr "alınmamış bir siparişe geri bildirim yapamazsınız" -#: core/models.py:1683 +#: core/models.py:1741 msgid "name" msgstr "İsim" -#: core/models.py:1684 +#: core/models.py:1742 msgid "URL of the integration" msgstr "Entegrasyonun URL'si" -#: core/models.py:1685 +#: core/models.py:1743 msgid "authentication credentials" msgstr "Kimlik doğrulama bilgileri" -#: core/models.py:1699 +#: core/models.py:1765 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:1703 +#: core/models.py:1775 msgid "CRM" msgstr "CRM" -#: core/models.py:1704 +#: core/models.py:1776 msgid "CRMs" msgstr "CRM'ler" -#: core/models.py:1716 +#: core/models.py:1788 msgid "order CRM link" msgstr "Siparişin CRM bağlantısı" -#: core/models.py:1717 +#: core/models.py:1789 msgid "orders CRM links" msgstr "Siparişlerin CRM bağlantıları" -#: core/models.py:1722 +#: core/models.py:1794 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2422,19 +2422,15 @@ msgstr "" " sipariş tamamlandı durumundayken varlığın indirilmesi için bir URL " "oluşturmaya yönelik bir yöntem içerir." -#: core/models.py:1736 +#: core/models.py:1808 msgid "download" msgstr "İndir" -#: core/models.py:1737 +#: core/models.py:1809 msgid "downloads" msgstr "İndirmeler" -#: core/models.py:1745 -msgid "you can not download a digital asset for a non-finished order" -msgstr "Tamamlanmamış bir sipariş için dijital varlık indiremezsiniz" - -#: core/models.py:1754 +#: core/models.py:1823 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2449,31 +2445,31 @@ 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:1766 +#: core/models.py:1835 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:1767 +#: core/models.py:1836 msgid "feedback comments" msgstr "Geri bildirim yorumları" -#: core/models.py:1774 +#: core/models.py:1843 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:1775 +#: core/models.py:1844 msgid "related order product" msgstr "İlgili sipariş ürünü" -#: core/models.py:1780 +#: core/models.py:1849 msgid "user-assigned rating for the product" msgstr "Ürün için kullanıcı tarafından atanan derecelendirme" -#: core/models.py:1781 +#: core/models.py:1850 msgid "product rating" msgstr "Ürün değerlendirmesi" @@ -2679,11 +2675,11 @@ msgstr "" "Tüm hakları\n" " ayrılmış" -#: core/utils/caching.py:41 +#: core/utils/caching.py:48 msgid "both data and timeout are required" msgstr "Hem veri hem de zaman aşımı gereklidir" -#: core/utils/caching.py:43 +#: core/utils/caching.py:50 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" @@ -2715,24 +2711,343 @@ msgstr "Bu eylemi gerçekleştirmek için izniniz yok." msgid "NOMINATIM_URL must be configured." msgstr "NOMINATIM_URL parametresi yapılandırılmalıdır!" -#: core/validators.py:16 +#: core/validators.py:14 #, 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/validators.py:22 -msgid "invalid phone number format" -msgstr "Geçersiz telefon numarası biçimi" +#: core/views.py:72 +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 "" +"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:489 +#: core/views.py:87 +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 "" +"Bir site haritası için ayrıntılı görünüm yanıtını işler. Bu fonksiyon isteği" +" 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 +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 +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 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +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 +msgid "Handles `contact us` form submissions." +msgstr "Bize ulaşın` form gönderimlerini işler." + +#: core/views.py:215 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "" +"Gelen POST isteklerinden gelen URL'leri işleme ve doğrulama isteklerini " +"işler." + +#: core/views.py:255 +msgid "Handles global search queries." +msgstr "Küresel arama sorgularını işler." + +#: core/views.py:270 +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:312 msgid "you can only download the digital asset once" msgstr "Dijital varlığı yalnızca bir kez indirebilirsiniz" -#: core/views.py:547 +#: core/views.py:315 +msgid "the order must be paid before downloading the digital asset" +msgstr "dijital varlık indirilmeden önce siparişin ödenmesi gerekir" + +#: core/views.py:353 +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." +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:365 msgid "favicon not found" msgstr "favicon bulunamadı" -#: core/viewsets.py:1357 +#: core/views.py:370 +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." +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:382 +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 "" +"İsteği yönetici dizin sayfasına yönlendirir. Bu fonksiyon gelen HTTP " +"isteklerini işler ve onları Django yönetici arayüzü dizin sayfasına " +"yönlendirir. HTTP yönlendirmesini işlemek için Django'nun `redirect` " +"fonksiyonunu kullanır." + +#: core/viewsets.py:128 +msgid "" +"Defines a viewset for managing Evibes-related operations. The EvibesViewSet " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" +"Evibes ile ilgili işlemleri yönetmek için bir görünüm kümesi tanımlar. " +"EvibesViewSet sınıfı ModelViewSet'ten miras alınır ve Evibes varlıkları " +"üzerindeki eylemleri ve işlemleri yönetmek için işlevsellik sağlar. Geçerli " +"eyleme dayalı dinamik serileştirici sınıfları, özelleştirilebilir izinler ve" +" işleme biçimleri için destek içerir." + +#: core/viewsets.py:147 +msgid "" +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." +msgstr "" +"AttributeGroup nesnelerini yönetmek için bir görünüm kümesini temsil eder. " +"Filtreleme, serileştirme ve veri alma dahil olmak üzere AttributeGroup ile " +"ilgili işlemleri gerçekleştirir. Bu sınıf, uygulamanın API katmanının bir " +"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:166 +msgid "" +"Handles operations related to Attribute objects within the application. " +"Provides a set of API endpoints to interact with Attribute data. This class " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"Uygulama içinde Öznitelik nesneleriyle ilgili işlemleri gerçekleştirir. " +"Öznitelik verileriyle etkileşim için bir dizi API uç noktası sağlar. Bu " +"sınıf, Attribute nesnelerinin sorgulanmasını, filtrelenmesini ve " +"serileştirilmesini yöneterek, belirli alanlara göre filtreleme veya isteğe " +"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:185 +msgid "" +"A viewset for managing AttributeValue objects. This viewset provides " +"functionality for listing, retrieving, creating, updating, and deleting " +"AttributeValue objects. It integrates with Django REST Framework's viewset " +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." +msgstr "" +"AttributeValue nesnelerini yönetmek için bir görünüm kümesi. Bu görünüm " +"kümesi, AttributeValue nesnelerini listelemek, almak, oluşturmak, " +"güncellemek ve silmek için işlevsellik sağlar. Django REST Framework'ün " +"görünüm kümesi mekanizmalarıyla bütünleşir ve farklı eylemler için uygun " +"serileştiriciler kullanır. Filtreleme yetenekleri DjangoFilterBackend " +"aracılığıyla sağlanır." + +#: core/viewsets.py:204 +msgid "" +"Manages views for Category-related operations. The CategoryViewSet class is " +"responsible for handling operations related to the Category model in the " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" +"Kategori ile ilgili işlemler için görünümleri yönetir. CategoryViewSet " +"sınıfı, sistemdeki Kategori modeliyle ilgili işlemlerin yürütülmesinden " +"sorumludur. Kategori verilerinin alınmasını, filtrelenmesini ve " +"serileştirilmesini destekler. Görünüm kümesi, yalnızca yetkili " +"kullanıcıların belirli verilere erişebilmesini sağlamak için izinleri de " +"zorlar." + +#: core/viewsets.py:315 +msgid "" +"Represents a viewset for managing Brand instances. This class provides " +"functionality for querying, filtering, and serializing Brand objects. It " +"uses Django's ViewSet framework to simplify the implementation of API " +"endpoints for Brand objects." +msgstr "" +"Brand örneklerini yönetmek için bir görünüm kümesini temsil eder. Bu sınıf, " +"Brand nesnelerini sorgulamak, filtrelemek ve serileştirmek için işlevsellik " +"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:427 +msgid "" +"Manages operations related to the `Product` model in the system. This class " +"provides a viewset for managing products, including their filtering, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" +"Sistemdeki `Product` modeliyle ilgili işlemleri yönetir. Bu sınıf, " +"filtreleme, serileştirme ve belirli örnekler üzerindeki işlemler dahil olmak" +" üzere ürünleri yönetmek için bir görünüm kümesi sağlar. Ortak işlevselliği " +"kullanmak için `EvibesViewSet`ten genişletilir ve RESTful API işlemleri için" +" Django REST çerçevesi ile entegre olur. Ürün ayrıntılarını almak, izinleri " +"uygulamak ve bir ürünün ilgili geri bildirimlerine erişmek için yöntemler " +"içerir." + +#: core/viewsets.py:547 +msgid "" +"Represents a viewset for managing Vendor objects. This viewset allows " +"fetching, filtering, and serializing Vendor data. It defines the queryset, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" +"Satıcı nesnelerini yönetmek için bir görünüm kümesini temsil eder. Bu " +"görünüm kümesi, Satıcı verilerinin alınmasına, filtrelenmesine ve " +"serileştirilmesine olanak tanır. Farklı eylemleri işlemek için kullanılan " +"sorgu kümesini, filtre yapılandırmalarını ve serileştirici sınıflarını " +"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:567 +msgid "" +"Representation of a view set handling Feedback objects. This class manages " +"operations related to Feedback objects, including listing, filtering, and " +"retrieving details. The purpose of this view set is to provide different " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"use of Django's filtering system for querying data." +msgstr "" +"Geri Bildirim nesnelerini işleyen bir görünüm kümesinin temsili. Bu sınıf, " +"listeleme, filtreleme ve ayrıntıları alma dahil olmak üzere Geri Bildirim " +"nesneleriyle ilgili işlemleri yönetir. Bu görünüm kümesinin amacı, farklı " +"eylemler için farklı serileştiriciler sağlamak ve erişilebilir Geri Bildirim" +" nesnelerinin izin tabanlı kullanımını uygulamaktır. Temel `EvibesViewSet`i " +"genişletir ve verileri sorgulamak için Django'nun filtreleme sistemini " +"kullanır." + +#: core/viewsets.py:593 +msgid "" +"ViewSet for managing orders and related operations. This class provides " +"functionality to retrieve, modify, and manage order objects. It includes " +"various endpoints for handling order operations such as adding or removing " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " +"enforces permissions accordingly while interacting with order data." +msgstr "" +"Siparişleri ve ilgili işlemleri yönetmek için ViewSet. Bu sınıf, sipariş " +"nesnelerini almak, değiştirmek ve yönetmek için işlevsellik sağlar. Ürün " +"ekleme veya kaldırma, kayıtlı ve kayıtsız kullanıcılar için satın alma " +"işlemleri gerçekleştirme ve mevcut kimliği doğrulanmış kullanıcının bekleyen" +" siparişlerini alma gibi sipariş işlemlerini gerçekleştirmek için çeşitli uç" +" noktalar içerir. ViewSet, gerçekleştirilen belirli eyleme bağlı olarak " +"birden fazla serileştirici kullanır ve sipariş verileriyle etkileşime " +"girerken izinleri buna göre zorlar." + +#: core/viewsets.py:782 +msgid "" +"Provides a viewset for managing OrderProduct entities. This viewset enables " +"CRUD operations and custom actions specific to the OrderProduct model. It " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " +"feedback on OrderProduct instances" +msgstr "" +"OrderProduct varlıklarını yönetmek için bir görünüm kümesi sağlar. Bu " +"görünüm kümesi, CRUD işlemlerini ve OrderProduct modeline özgü özel " +"eylemleri etkinleştirir. Filtreleme, izin kontrolleri ve istenen eyleme göre" +" 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:833 +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:845 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +msgstr "" +"Çeşitli API eylemleri aracılığıyla PromoCode örneklerinin alınmasını ve " +"işlenmesini yönetir." + +#: core/viewsets.py:866 +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:878 +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:892 +msgid "" +"ViewSet for managing Wishlist operations. The WishlistViewSet provides " +"endpoints for interacting with a user's wish list, allowing for the " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " +"actions for wishlist products. Permission checks are integrated to ensure " +"that users can only manage their own wishlists unless explicit permissions " +"are granted." +msgstr "" +"İstek Listesi işlemlerini yönetmek için ViewSet. WishlistViewSet, bir " +"kullanıcının istek listesiyle etkileşim için uç noktalar sağlayarak istek " +"listesindeki ürünlerin alınmasına, değiştirilmesine ve özelleştirilmesine " +"olanak tanır. Bu ViewSet, istek listesi ürünleri için ekleme, kaldırma ve " +"toplu eylemler gibi işlevleri kolaylaştırır. İzin kontrolleri, açık izinler " +"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:1007 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" +"Bu sınıf, `Address` nesnelerini yönetmek için görünüm kümesi işlevselliği " +"sağlar. AddressViewSet sınıfı, CRUD işlemlerini, filtrelemeyi ve adres " +"varlıklarıyla ilgili özel eylemleri etkinleştirir. Farklı HTTP yöntemleri, " +"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:1074 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Coğrafi kodlama hatası: {e}" + +#: core/viewsets.py:1081 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" +"Uygulama içinde Ürün Etiketleri ile ilgili işlemleri gerçekleştirir. Bu " +"sınıf, Ürün Etiketi nesnelerinin alınması, filtrelenmesi ve serileştirilmesi" +" için işlevsellik sağlar. Belirtilen filtre arka ucunu kullanarak belirli " +"nitelikler üzerinde esnek filtrelemeyi destekler ve gerçekleştirilen eyleme " +"göre dinamik olarak farklı serileştiriciler kullanır." diff --git a/core/locale/vi_VN/LC_MESSAGES/django.mo b/core/locale/vi_VN/LC_MESSAGES/django.mo index 74e3f236b8d88bd32e7881e56fd17e5f81a88c8d..c5aeeb339d63817eb3a9a2e5529860a1a76ab87f 100644 GIT binary patch delta 28007 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 TCRbjzaImZJ&PIb>VcGu&JB{KS diff --git a/core/locale/vi_VN/LC_MESSAGES/django.po b/core/locale/vi_VN/LC_MESSAGES/django.po index 20bd531d..5e062ffd 100644 --- a/core/locale/vi_VN/LC_MESSAGES/django.po +++ b/core/locale/vi_VN/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+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:11 +#: core/abstract.py:12 msgid "unique id" msgstr "ID duy nhất" -#: core/abstract.py:12 +#: 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:19 +#: core/abstract.py:20 msgid "is active" msgstr "Đang hoạt động" -#: core/abstract.py:20 +#: core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" @@ -35,19 +35,19 @@ 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:22 core/choices.py:18 +#: core/abstract.py:23 core/choices.py:18 msgid "created" msgstr "Được tạo ra" -#: core/abstract.py:22 +#: 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:23 +#: core/abstract.py:24 msgid "modified" msgstr "Đã sửa đổi" -#: core/abstract.py:23 +#: 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" @@ -90,11 +90,11 @@ msgid "selected items have been deactivated." msgstr "Các mục đã chọn đã bị vô hiệu hóa!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 +#: core/graphene/object_types.py:616 core/models.py:701 core/models.py:709 msgid "attribute value" msgstr "Giá trị thuộc tính" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 msgid "attribute values" msgstr "Giá trị thuộc tính" @@ -106,7 +106,7 @@ msgstr "Hình ảnh" msgid "images" msgstr "Hình ảnh" -#: core/admin.py:155 core/models.py:445 +#: core/admin.py:155 core/models.py:459 msgid "stock" msgstr "Cổ phiếu" @@ -114,11 +114,11 @@ msgstr "Cổ phiếu" msgid "stocks" msgstr "Cổ phiếu" -#: core/admin.py:166 core/models.py:1609 +#: core/admin.py:166 core/models.py:1667 msgid "order product" msgstr "Đặt hàng sản phẩm" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 msgid "order products" msgstr "Đặt hàng sản phẩm" @@ -749,7 +749,7 @@ msgstr "Xóa mối quan hệ giữa đơn hàng và sản phẩm" 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/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 msgid "no search term provided." msgstr "Không có từ khóa tìm kiếm được cung cấp." @@ -802,7 +802,7 @@ msgid "Quantity" msgstr "Số lượng" #: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:287 core/models.py:369 core/models.py:522 +#: core/models.py:301 core/models.py:383 core/models.py:536 msgid "Slug" msgstr "Sên" @@ -818,7 +818,7 @@ msgstr "Bao gồm các danh mục con" msgid "Include personal ordered" msgstr "Gồm các sản phẩm đặt hàng cá nhân" -#: core/filters.py:85 core/models.py:526 +#: core/filters.py:85 core/models.py:540 msgid "SKU" msgstr "Mã sản phẩm" @@ -892,7 +892,7 @@ 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:65 core/views.py:360 +#: core/graphene/mutations.py:65 core/views.py:232 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." @@ -925,7 +925,7 @@ msgstr "" "trường này là tương hỗ!" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:839 +#: core/graphene/mutations.py:527 core/viewsets.py:679 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}" @@ -1003,9 +1003,9 @@ msgstr "Sản phẩm {order_product_uuid} không tìm thấy!" 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:656 core/models.py:835 core/models.py:848 -#: core/models.py:1234 core/models.py:1263 core/models.py:1288 -#: core/viewsets.py:842 +#: core/graphene/mutations.py:656 core/models.py:849 core/models.py:862 +#: core/models.py:1281 core/models.py:1310 core/models.py:1335 +#: core/viewsets.py:682 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} không tồn tại: {uuid}!" @@ -1019,8 +1019,8 @@ 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:397 -#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 -#: core/models.py:1686 +#: core/graphene/object_types.py:444 core/models.py:672 core/models.py:1144 +#: core/models.py:1744 msgid "attributes" msgstr "Thuộc tính" @@ -1033,11 +1033,11 @@ 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:224 core/models.py:312 core/models.py:612 +#: core/graphene/object_types.py:224 core/models.py:326 core/models.py:626 msgid "categories" msgstr "Các danh mục" -#: core/graphene/object_types.py:124 core/models.py:383 +#: core/graphene/object_types.py:124 core/models.py:397 msgid "brands" msgstr "Thương hiệu" @@ -1046,7 +1046,7 @@ msgid "category image url" msgstr "Các danh mục" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:249 +#: core/models.py:263 msgid "markup percentage" msgstr "Tỷ lệ phần trăm đánh dấu" @@ -1069,7 +1069,7 @@ msgstr "Thẻ cho danh mục này" msgid "products in this category" msgstr "Sản phẩm trong danh mục này" -#: core/graphene/object_types.py:351 core/models.py:155 +#: core/graphene/object_types.py:351 core/models.py:169 msgid "vendors" msgstr "Nhà cung cấp" @@ -1096,7 +1096,7 @@ 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:398 core/graphene/object_types.py:445 -#: core/models.py:1110 +#: core/models.py:1138 msgid "notifications" msgstr "Thông báo" @@ -1104,7 +1104,7 @@ msgstr "Thông báo" 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:400 core/models.py:1791 +#: core/graphene/object_types.py:400 core/models.py:1860 msgid "feedback" msgstr "Phản hồi" @@ -1112,7 +1112,7 @@ msgstr "Phản hồi" 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:436 core/models.py:1080 +#: core/graphene/object_types.py:436 core/models.py:1108 msgid "billing address" msgstr "Địa chỉ thanh toán" @@ -1141,7 +1141,7 @@ msgstr "" msgid "transactions for this order" msgstr "Giao dịch cho đơn hàng này" -#: core/graphene/object_types.py:465 core/models.py:1144 +#: core/graphene/object_types.py:465 core/models.py:1172 msgid "orders" msgstr "Đơn hàng" @@ -1153,15 +1153,15 @@ msgstr "URL hình ảnh" msgid "product's images" msgstr "Hình ảnh sản phẩm" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 +#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 msgid "category" msgstr "Thể loại" -#: core/graphene/object_types.py:502 core/models.py:1792 +#: core/graphene/object_types.py:502 core/models.py:1861 msgid "feedbacks" msgstr "Phản hồi" -#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 +#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 msgid "brand" msgstr "Thương hiệu" @@ -1193,7 +1193,7 @@ msgstr "Số lượng phản hồi" 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:534 core/models.py:536 +#: core/graphene/object_types.py:534 core/models.py:550 msgid "products" msgstr "Sản phẩm" @@ -1205,15 +1205,15 @@ msgstr "Mã khuyến mãi" msgid "products on sale" msgstr "Sản phẩm đang khuyến mãi" -#: core/graphene/object_types.py:651 core/models.py:784 +#: core/graphene/object_types.py:651 core/models.py:798 msgid "promotions" msgstr "Khuyến mãi" -#: core/graphene/object_types.py:655 core/models.py:154 +#: core/graphene/object_types.py:655 core/models.py:168 msgid "vendor" msgstr "Nhà cung cấp" -#: core/graphene/object_types.py:656 core/models.py:535 +#: core/graphene/object_types.py:656 core/models.py:549 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1221,11 +1221,11 @@ msgstr "Nhà cung cấp" msgid "product" msgstr "Sản phẩm" -#: core/graphene/object_types.py:667 core/models.py:807 +#: core/graphene/object_types.py:667 core/models.py:821 msgid "wishlisted products" msgstr "Sản phẩm đã thêm vào danh sách mong muốn" -#: core/graphene/object_types.py:673 core/models.py:824 +#: core/graphene/object_types.py:673 core/models.py:838 msgid "wishlists" msgstr "Danh sách mong muốn" @@ -1233,7 +1233,7 @@ msgstr "Danh sách mong muốn" msgid "tagged products" msgstr "Sản phẩm được gắn thẻ" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 +#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 msgid "product tags" msgstr "Thẻ sản phẩm" @@ -1344,7 +1344,7 @@ msgstr "Nhóm thuộc tính cha" msgid "attribute group's name" msgstr "Tên nhóm thuộc tính" -#: core/models.py:100 core/models.py:620 +#: core/models.py:100 core/models.py:634 msgid "attribute group" msgstr "Nhóm thuộc tính" @@ -1394,7 +1394,7 @@ msgstr "Tên của nhà cung cấp này" msgid "vendor name" msgstr "Tên nhà cung cấp" -#: core/models.py:163 +#: core/models.py:177 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1408,27 +1408,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:175 core/models.py:206 +#: core/models.py:189 core/models.py:220 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:176 core/models.py:207 +#: core/models.py:190 core/models.py:221 msgid "tag name" msgstr "Tên ngày" -#: core/models.py:180 core/models.py:211 +#: core/models.py:194 core/models.py:225 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:181 core/models.py:212 +#: core/models.py:195 core/models.py:226 msgid "tag display name" msgstr "Hiển thị tên thẻ" -#: core/models.py:189 +#: core/models.py:203 msgid "product tag" msgstr "Thẻ sản phẩm" -#: core/models.py:195 +#: core/models.py:209 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 " @@ -1439,15 +1439,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:220 +#: core/models.py:234 msgid "category tag" msgstr "Thẻ danh mục" -#: core/models.py:221 core/models.py:293 +#: core/models.py:235 core/models.py:307 msgid "category tags" msgstr "Thẻ danh mục" -#: core/models.py:226 +#: core/models.py:240 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1468,52 +1468,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:240 +#: core/models.py:254 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:243 +#: core/models.py:257 msgid "category image" msgstr "Hình ảnh danh mục" -#: core/models.py:248 +#: core/models.py:262 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:257 +#: core/models.py:271 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:258 +#: core/models.py:272 msgid "parent category" msgstr "Danh mục cha" -#: core/models.py:263 +#: core/models.py:277 msgid "category name" msgstr "Tên danh mục" -#: core/models.py:264 +#: core/models.py:278 msgid "provide a name for this category" msgstr "Đặt tên cho danh mục này." -#: core/models.py:271 +#: core/models.py:285 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:272 +#: core/models.py:286 msgid "category description" msgstr "Mô tả danh mục" -#: core/models.py:292 +#: core/models.py:306 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:299 core/models.py:375 +#: core/models.py:313 core/models.py:389 msgid "priority" msgstr "Ưu tiên" -#: core/models.py:318 +#: core/models.py:332 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1526,47 +1526,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:328 +#: core/models.py:342 msgid "name of this brand" msgstr "Tên của thương hiệu này" -#: core/models.py:329 +#: core/models.py:343 msgid "brand name" msgstr "Tên thương hiệu" -#: core/models.py:336 +#: core/models.py:350 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:338 +#: core/models.py:352 msgid "brand small image" msgstr "Hình ảnh nhỏ của thương hiệu" -#: core/models.py:344 +#: core/models.py:358 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:346 +#: core/models.py:360 msgid "brand big image" msgstr "Hình ảnh thương hiệu lớn" -#: core/models.py:351 +#: core/models.py:365 msgid "add a detailed description of the brand" msgstr "Thêm mô tả chi tiết về thương hiệu" -#: core/models.py:352 +#: core/models.py:366 msgid "brand description" msgstr "Mô tả thương hiệu" -#: core/models.py:357 +#: core/models.py:371 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:358 +#: core/models.py:372 msgid "associated categories" msgstr "Các danh mục" -#: core/models.py:388 +#: core/models.py:402 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1582,68 +1582,68 @@ 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:400 +#: core/models.py:414 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:401 +#: core/models.py:415 msgid "associated vendor" msgstr "Nhà cung cấp liên kết" -#: core/models.py:405 +#: core/models.py:419 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:406 +#: core/models.py:420 msgid "selling price" msgstr "Giá bán" -#: core/models.py:411 +#: core/models.py:425 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:412 core/models.py:683 core/models.py:730 -#: core/models.py:1583 +#: core/models.py:426 core/models.py:697 core/models.py:744 +#: core/models.py:1641 msgid "associated product" msgstr "Sản phẩm liên quan" -#: core/models.py:419 +#: core/models.py:433 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:420 +#: core/models.py:434 msgid "vendor purchase price" msgstr "Giá mua của nhà cung cấp" -#: core/models.py:424 +#: core/models.py:438 msgid "available quantity of the product in stock" msgstr "Số lượng sản phẩm hiện có trong kho" -#: core/models.py:425 +#: core/models.py:439 msgid "quantity in stock" msgstr "Số lượng hàng tồn kho" -#: core/models.py:429 +#: core/models.py:443 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:430 +#: core/models.py:444 msgid "vendor sku" msgstr "Mã SKU của nhà cung cấp" -#: core/models.py:436 +#: core/models.py:450 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:437 +#: core/models.py:451 msgid "digital file" msgstr "Tệp tin kỹ thuật số" -#: core/models.py:446 +#: core/models.py:460 msgid "stock entries" msgstr "Nhập kho" -#: core/models.py:451 +#: core/models.py:465 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1664,56 +1664,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:464 +#: core/models.py:478 msgid "category this product belongs to" msgstr "Danh mục mà sản phẩm này thuộc về" -#: core/models.py:473 +#: core/models.py:487 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:479 +#: core/models.py:493 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:484 +#: core/models.py:498 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:485 +#: core/models.py:499 msgid "is product digital" msgstr "Sản phẩm có phải là sản phẩm số không?" -#: core/models.py:491 +#: core/models.py:505 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:492 +#: core/models.py:506 msgid "product name" msgstr "Tên sản phẩm" -#: core/models.py:497 core/models.py:772 +#: core/models.py:511 core/models.py:786 msgid "add a detailed description of the product" msgstr "Thêm mô tả chi tiết về sản phẩm" -#: core/models.py:498 +#: core/models.py:512 msgid "product description" msgstr "Mô tả sản phẩm" -#: core/models.py:505 +#: core/models.py:519 msgid "part number for this product" msgstr "Số hiệu sản phẩm cho sản phẩm này" -#: core/models.py:506 +#: core/models.py:520 msgid "part number" msgstr "Số hiệu linh kiện" -#: core/models.py:525 +#: core/models.py:539 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:599 +#: core/models.py:613 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 " @@ -1729,68 +1729,68 @@ 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:611 +#: core/models.py:625 msgid "category of this attribute" msgstr "Loại của thuộc tính này" -#: core/models.py:619 +#: core/models.py:633 msgid "group of this attribute" msgstr "Nhóm có thuộc tính này" -#: core/models.py:625 +#: core/models.py:639 msgid "string" msgstr "Dây" -#: core/models.py:626 +#: core/models.py:640 msgid "integer" msgstr "Chính trực" -#: core/models.py:627 +#: core/models.py:641 msgid "float" msgstr "Nổi" -#: core/models.py:628 +#: core/models.py:642 msgid "boolean" msgstr "Boolean" -#: core/models.py:629 +#: core/models.py:643 msgid "array" msgstr "Mảng" -#: core/models.py:630 +#: core/models.py:644 msgid "object" msgstr "Đối tượng" -#: core/models.py:632 +#: core/models.py:646 msgid "type of the attribute's value" msgstr "Loại giá trị của thuộc tính" -#: core/models.py:633 +#: core/models.py:647 msgid "value type" msgstr "Kiểu giá trị" -#: core/models.py:638 +#: core/models.py:652 msgid "name of this attribute" msgstr "Tên của thuộc tính này" -#: core/models.py:639 +#: core/models.py:653 msgid "attribute's name" msgstr "Tên thuộc tính" -#: core/models.py:645 +#: core/models.py:659 msgid "is filterable" msgstr "có thể lọc được" -#: core/models.py:646 +#: core/models.py:660 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:657 core/models.py:675 +#: core/models.py:671 core/models.py:689 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Thuộc tính" -#: core/models.py:663 +#: core/models.py:677 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" @@ -1800,19 +1800,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:674 +#: core/models.py:688 msgid "attribute of this value" msgstr "Thuộc tính của giá trị này" -#: core/models.py:682 +#: core/models.py:696 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:688 +#: core/models.py:702 msgid "the specific value for this attribute" msgstr "Giá trị cụ thể cho thuộc tính này" -#: core/models.py:701 +#: core/models.py:715 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -1826,39 +1826,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:712 +#: core/models.py:726 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:713 +#: core/models.py:727 msgid "image alt text" msgstr "Nội dung thay thế cho hình ảnh" -#: core/models.py:716 +#: core/models.py:730 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:717 core/models.py:742 +#: core/models.py:731 core/models.py:756 msgid "product image" msgstr "Hình ảnh sản phẩm" -#: core/models.py:723 +#: core/models.py:737 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:724 +#: core/models.py:738 msgid "display priority" msgstr "Ưu tiên hiển thị" -#: core/models.py:729 +#: core/models.py:743 msgid "the product that this image represents" msgstr "Sản phẩm mà hình ảnh này đại diện" -#: core/models.py:743 +#: core/models.py:757 msgid "product images" msgstr "Hình ảnh sản phẩm" -#: core/models.py:748 +#: core/models.py:762 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1874,39 +1874,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:760 +#: core/models.py:774 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:761 +#: core/models.py:775 msgid "discount percentage" msgstr "Tỷ lệ giảm giá" -#: core/models.py:766 +#: core/models.py:780 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:767 +#: core/models.py:781 msgid "promotion name" msgstr "Tên chương trình khuyến mãi" -#: core/models.py:773 +#: core/models.py:787 msgid "promotion description" msgstr "Mô tả chương trình khuyến mãi" -#: core/models.py:778 +#: core/models.py:792 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:779 +#: core/models.py:793 msgid "included products" msgstr "Các sản phẩm được bao gồm" -#: core/models.py:783 +#: core/models.py:797 msgid "promotion" msgstr "Khuyến mãi" -#: core/models.py:794 +#: core/models.py:808 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1918,23 +1918,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:806 +#: core/models.py:820 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:814 +#: core/models.py:828 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:815 +#: core/models.py:829 msgid "wishlist owner" msgstr "Chủ sở hữu Danh sách mong muốn" -#: core/models.py:823 +#: core/models.py:837 msgid "wishlist" msgstr "Danh sách mong muốn" -#: core/models.py:865 +#: core/models.py:879 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1950,19 +1950,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:878 +#: core/models.py:892 msgid "documentary" msgstr "Phim tài liệu" -#: core/models.py:879 +#: core/models.py:893 msgid "documentaries" msgstr "Phim tài liệu" -#: core/models.py:889 +#: core/models.py:903 msgid "unresolved" msgstr "Chưa được giải quyết" -#: core/models.py:894 +#: core/models.py:908 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1982,59 +1982,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:909 +#: core/models.py:923 msgid "address line for the customer" msgstr "Địa chỉ của khách hàng" -#: core/models.py:910 +#: core/models.py:924 msgid "address line" msgstr "Dòng địa chỉ" -#: core/models.py:912 +#: core/models.py:926 msgid "street" msgstr "Phố" -#: core/models.py:913 +#: core/models.py:927 msgid "district" msgstr "Quận" -#: core/models.py:914 +#: core/models.py:928 msgid "city" msgstr "Thành phố" -#: core/models.py:915 +#: core/models.py:929 msgid "region" msgstr "Khu vực" -#: core/models.py:916 +#: core/models.py:930 msgid "postal code" msgstr "Mã bưu chính" -#: core/models.py:917 +#: core/models.py:931 msgid "country" msgstr "Quốc gia" -#: core/models.py:924 +#: core/models.py:938 msgid "geolocation point: (longitude, latitude)" msgstr "Điểm định vị địa lý (Kinh độ, Vĩ độ)" -#: core/models.py:927 +#: core/models.py:941 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:932 +#: core/models.py:946 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:940 +#: core/models.py:954 msgid "address" msgstr "Địa chỉ" -#: core/models.py:941 +#: core/models.py:955 msgid "addresses" msgstr "Địa chỉ" -#: core/models.py:953 +#: core/models.py:967 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2050,72 +2050,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:967 +#: core/models.py:981 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:968 +#: core/models.py:982 msgid "promo code identifier" msgstr "Mã khuyến mãi" -#: core/models.py:975 +#: core/models.py:989 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:976 +#: core/models.py:990 msgid "fixed discount amount" msgstr "Số tiền giảm giá cố định" -#: core/models.py:982 +#: core/models.py:996 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:983 +#: core/models.py:997 msgid "percentage discount" msgstr "Giảm giá theo phần trăm" -#: core/models.py:988 +#: core/models.py:1002 msgid "timestamp when the promocode expires" msgstr "Thời gian hết hạn của mã khuyến mãi" -#: core/models.py:989 +#: core/models.py:1003 msgid "end validity time" msgstr "Thời hạn hiệu lực kết thúc" -#: core/models.py:994 +#: core/models.py:1008 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:995 +#: core/models.py:1009 msgid "start validity time" msgstr "Thời gian bắt đầu có hiệu lực" -#: core/models.py:1000 +#: core/models.py:1014 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:1001 +#: core/models.py:1015 msgid "usage timestamp" msgstr "Dấu thời gian sử dụng" -#: core/models.py:1006 +#: core/models.py:1020 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:1007 +#: core/models.py:1021 msgid "assigned user" msgstr "Người dùng được chỉ định" -#: core/models.py:1014 +#: core/models.py:1028 msgid "promo code" msgstr "Mã khuyến mãi" -#: core/models.py:1015 +#: core/models.py:1029 msgid "promo codes" msgstr "Mã khuyến mãi" -#: core/models.py:1022 +#: core/models.py:1044 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2123,16 +2123,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:1037 +#: core/models.py:1065 msgid "promocode already used" msgstr "Mã khuyến mãi đã được sử dụng." -#: core/models.py:1053 +#: core/models.py:1081 #, 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:1062 +#: core/models.py:1090 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 " @@ -2149,140 +2149,140 @@ 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:1079 +#: core/models.py:1107 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:1087 +#: core/models.py:1115 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:1088 +#: core/models.py:1116 msgid "applied promo code" msgstr "Đã áp dụng mã khuyến mãi" -#: core/models.py:1096 +#: core/models.py:1124 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:1097 +#: core/models.py:1125 msgid "shipping address" msgstr "Địa chỉ giao hàng" -#: core/models.py:1103 +#: core/models.py:1131 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:1104 +#: core/models.py:1132 msgid "order status" msgstr "Tình trạng đơn hàng" -#: core/models.py:1109 core/models.py:1560 +#: core/models.py:1137 core/models.py:1618 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:1115 +#: core/models.py:1143 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:1121 +#: core/models.py:1149 msgid "the user who placed the order" msgstr "Người dùng đã đặt đơn hàng" -#: core/models.py:1122 +#: core/models.py:1150 msgid "user" msgstr "Người dùng" -#: core/models.py:1128 +#: core/models.py:1156 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:1129 +#: core/models.py:1157 msgid "buy time" msgstr "Mua thời gian" -#: core/models.py:1136 +#: core/models.py:1164 msgid "a human-readable identifier for the order" msgstr "Một định danh dễ đọc cho đơn hàng" -#: core/models.py:1137 +#: core/models.py:1165 msgid "human readable id" msgstr "ID dễ đọc cho con người" -#: core/models.py:1143 +#: core/models.py:1171 msgid "order" msgstr "Đặt hàng" -#: core/models.py:1168 +#: core/models.py:1209 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:1202 +#: core/models.py:1249 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:1207 +#: core/models.py:1254 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:1224 +#: core/models.py:1271 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:1246 core/models.py:1271 core/models.py:1279 +#: core/models.py:1293 core/models.py:1318 core/models.py:1326 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:1267 +#: core/models.py:1314 #, 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:1299 +#: core/models.py:1346 msgid "promocode does not exist" msgstr "Mã khuyến mãi không tồn tại" -#: core/models.py:1305 +#: core/models.py:1352 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:1324 +#: core/models.py:1371 msgid "address does not exist" msgstr "Địa chỉ không tồn tại" -#: core/models.py:1345 core/models.py:1414 +#: core/models.py:1392 core/models.py:1461 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:1348 core/models.py:1410 +#: core/models.py:1395 core/models.py:1457 msgid "invalid force value" msgstr "Giá trị lực không hợp lệ" -#: core/models.py:1354 core/models.py:1417 +#: core/models.py:1401 core/models.py:1464 msgid "you cannot purchase an empty order!" msgstr "Bạn không thể đặt hàng trống!" -#: core/models.py:1373 +#: core/models.py:1420 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:1387 +#: core/models.py:1434 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:1392 +#: core/models.py:1439 msgid "insufficient funds to complete the order" msgstr "Không đủ số tiền để hoàn tất đơn hàng." -#: core/models.py:1426 +#: core/models.py:1473 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2291,7 +2291,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:1435 +#: core/models.py:1482 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2299,7 +2299,7 @@ msgstr "" "Phương thức thanh toán không hợp lệ: {payment_method} từ " "{available_payment_methods}!" -#: core/models.py:1533 +#: core/models.py:1591 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2321,108 +2321,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:1548 +#: core/models.py:1606 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:1549 +#: core/models.py:1607 msgid "purchase price at order time" msgstr "Giá mua tại thời điểm đặt hàng" -#: core/models.py:1554 +#: core/models.py:1612 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:1555 +#: core/models.py:1613 msgid "internal comments" msgstr "Nhận xét nội bộ" -#: core/models.py:1561 +#: core/models.py:1619 msgid "user notifications" msgstr "Thông báo cho người dùng" -#: core/models.py:1566 +#: core/models.py:1624 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:1567 +#: core/models.py:1625 msgid "ordered product attributes" msgstr "Thuộc tính sản phẩm đã đặt hàng" -#: core/models.py:1572 +#: core/models.py:1630 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:1573 +#: core/models.py:1631 msgid "parent order" msgstr "Đơn đặt hàng của phụ huynh" -#: core/models.py:1582 +#: core/models.py:1640 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:1589 +#: core/models.py:1647 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:1590 +#: core/models.py:1648 msgid "product quantity" msgstr "Số lượng sản phẩm" -#: core/models.py:1597 +#: core/models.py:1655 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:1598 +#: core/models.py:1656 msgid "product line status" msgstr "Tình trạng dòng sản phẩm" -#: core/models.py:1661 +#: core/models.py:1719 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:1663 +#: core/models.py:1721 #, 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:1677 +#: core/models.py:1735 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:1683 +#: core/models.py:1741 msgid "name" msgstr "Tên" -#: core/models.py:1684 +#: core/models.py:1742 msgid "URL of the integration" msgstr "Đường dẫn URL của tích hợp" -#: core/models.py:1685 +#: core/models.py:1743 msgid "authentication credentials" msgstr "Thông tin xác thực" -#: core/models.py:1699 +#: core/models.py:1765 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:1703 +#: core/models.py:1775 msgid "CRM" msgstr "Hệ thống Quản lý Quan hệ Khách hàng" -#: core/models.py:1704 +#: core/models.py:1776 msgid "CRMs" msgstr "Hệ thống Quản lý Quan hệ Khách hàng (CR" -#: core/models.py:1716 +#: core/models.py:1788 msgid "order CRM link" msgstr "Liên kết CRM của đơn hàng" -#: core/models.py:1717 +#: core/models.py:1789 msgid "orders CRM links" msgstr "Liên kết CRM của đơn hàng" -#: core/models.py:1722 +#: core/models.py:1794 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2438,21 +2438,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:1736 +#: core/models.py:1808 msgid "download" msgstr "Tải xuống" -#: core/models.py:1737 +#: core/models.py:1809 msgid "downloads" msgstr "Tải xuống" -#: core/models.py:1745 -msgid "you can not download a digital asset for a non-finished order" -msgstr "" -"Bạn không thể tải xuống tài sản kỹ thuật số cho một đơn hàng chưa hoàn " -"thành." - -#: core/models.py:1754 +#: core/models.py:1823 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,30 +2461,30 @@ 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:1766 +#: core/models.py:1835 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:1767 +#: core/models.py:1836 msgid "feedback comments" msgstr "Phản hồi" -#: core/models.py:1774 +#: core/models.py:1843 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:1775 +#: core/models.py:1844 msgid "related order product" msgstr "Sản phẩm liên quan đến đơn hàng" -#: core/models.py:1780 +#: core/models.py:1849 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:1781 +#: core/models.py:1850 msgid "product rating" msgstr "Đánh giá sản phẩm" @@ -2692,11 +2686,11 @@ msgid "" " reserved" msgstr "Tất cả các quyền được bảo lưu." -#: core/utils/caching.py:41 +#: core/utils/caching.py:48 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:43 +#: core/utils/caching.py:50 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 " @@ -2730,25 +2724,347 @@ msgstr "Bạn không có quyền thực hiện hành động này." msgid "NOMINATIM_URL must be configured." msgstr "Tham số NOMINATIM_URL phải được cấu hình!" -#: core/validators.py:16 +#: core/validators.py:14 #, 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/validators.py:22 -msgid "invalid phone number format" -msgstr "Định dạng số điện thoại không hợp lệ" +#: core/views.py:72 +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 "" +"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:489 +#: core/views.py:87 +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 "" +"Xử lý phản hồi chi tiết cho sơ đồ trang web. Chức năng này xử lý yêu cầu, " +"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 +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 +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 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +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 +msgid "Handles `contact us` form submissions." +msgstr "Xử lý các biểu mẫu liên hệ." + +#: core/views.py:215 +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 +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 +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:312 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:547 +#: core/views.py:315 +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:353 +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." +msgstr "" +"Xử lý việc tải xuống tài sản kỹ thuật số liên quan đến một đơn hàng. Chức " +"năng này cố gắng cung cấp tệp tài sản kỹ thuật số được lưu trữ trong thư mục" +" 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:365 msgid "favicon not found" msgstr "Biểu tượng trang web không tìm thấy" -#: core/viewsets.py:1357 +#: core/views.py:370 +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." +msgstr "" +"Xử lý yêu cầu về biểu tượng favicon của một trang web. Chức năng này cố gắng" +" cung cấp tệp favicon nằm trong thư mục tĩnh của dự án. Nếu tệp favicon " +"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:382 +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 "" +"Chuyển hướng yêu cầu đến trang chỉ mục quản trị. Chức năng này xử lý các yêu" +" cầu HTTP đến và chuyển hướng chúng đến trang chỉ mục giao diện quản trị " +"Django. Nó sử dụng hàm `redirect` của Django để xử lý việc chuyển hướng " +"HTTP." + +#: core/viewsets.py:128 +msgid "" +"Defines a viewset for managing Evibes-related operations. The EvibesViewSet " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" +"Xác định một tập hợp xem (viewset) để quản lý các thao tác liên quan đến " +"Evibes. Lớp EvibesViewSet kế thừa từ ModelViewSet và cung cấp các chức năng " +"để xử lý các hành động và thao tác trên các thực thể Evibes. Nó bao gồm hỗ " +"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:147 +msgid "" +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." +msgstr "" +"Đại diện cho một tập hợp các đối tượng để quản lý các đối tượng " +"AttributeGroup. Xử lý các thao tác liên quan đến AttributeGroup, bao gồm " +"lọc, serialization và truy xuất dữ liệu. Lớp này là một phần của lớp API của" +" ứ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:166 +msgid "" +"Handles operations related to Attribute objects within the application. " +"Provides a set of API endpoints to interact with Attribute data. This class " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"Quản lý các thao tác liên quan đến các đối tượng thuộc tính (Attribute) " +"trong ứng dụng. Cung cấp một bộ các điểm cuối API để tương tác với dữ liệu " +"thuộc tính. Lớp này quản lý việc truy vấn, lọc và serialization của các đối " +"tượng thuộc tính, cho phép kiểm soát động đối với dữ liệu được trả về, chẳng" +" 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:185 +msgid "" +"A viewset for managing AttributeValue objects. This viewset provides " +"functionality for listing, retrieving, creating, updating, and deleting " +"AttributeValue objects. It integrates with Django REST Framework's viewset " +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." +msgstr "" +"Bộ xem (viewset) để quản lý các đối tượng AttributeValue. Bộ xem này cung " +"cấp các chức năng để liệt kê, truy xuất, tạo, cập nhật và xóa các đối tượng " +"AttributeValue. Nó tích hợp với cơ chế bộ xem của Django REST Framework và " +"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:204 +msgid "" +"Manages views for Category-related operations. The CategoryViewSet class is " +"responsible for handling operations related to the Category model in the " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" +"Quản lý các chế độ xem liên quan đến các thao tác của mô hình Category. Lớp " +"CategoryViewSet chịu trách nhiệm xử lý các thao tác liên quan đến mô hình " +"Category trong hệ thống. Nó hỗ trợ việc truy xuất, lọc và serialize dữ liệu " +"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:315 +msgid "" +"Represents a viewset for managing Brand instances. This class provides " +"functionality for querying, filtering, and serializing Brand objects. It " +"uses Django's ViewSet framework to simplify the implementation of API " +"endpoints for Brand objects." +msgstr "" +"Đại diện cho một tập hợp các view để quản lý các thực thể thương hiệu. Lớp " +"này cung cấp các chức năng để truy vấn, lọc và serialize các đối tượng " +"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:427 +msgid "" +"Manages operations related to the `Product` model in the system. This class " +"provides a viewset for managing products, including their filtering, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" +"Quản lý các hoạt động liên quan đến mô hình `Product` trong hệ thống. Lớp " +"này cung cấp một tập hợp các phương thức (viewset) để quản lý sản phẩm, bao " +"gồm lọc, serialization và các thao tác trên các thực thể cụ thể. Nó kế thừa " +"từ `EvibesViewSet` để sử dụng các chức năng chung và tích hợp với khung làm " +"việc Django REST để thực hiện các thao tác API RESTful. Bao gồm các phương " +"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:547 +msgid "" +"Represents a viewset for managing Vendor objects. This viewset allows " +"fetching, filtering, and serializing Vendor data. It defines the queryset, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" +"Đại diện cho một tập hợp các chế độ xem (viewset) để quản lý các đối tượng " +"Nhà cung cấp (Vendor). Tập hợp chế độ xem này cho phép truy xuất, lọc và " +"serialize dữ liệu Nhà cung cấp. Nó định nghĩa tập hợp truy vấn (queryset), " +"cấu hình bộ lọc và các lớp serializer được sử dụng để xử lý các hành động " +"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:567 +msgid "" +"Representation of a view set handling Feedback objects. This class manages " +"operations related to Feedback objects, including listing, filtering, and " +"retrieving details. The purpose of this view set is to provide different " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"use of Django's filtering system for querying data." +msgstr "" +"Đại diện cho tập hợp các đối tượng Feedback. Lớp này quản lý các thao tác " +"liên quan đến đối tượng Feedback, bao gồm liệt kê, lọc và truy xuất chi " +"tiết. Mục đích của tập hợp này là cung cấp các trình serializer khác nhau " +"cho các hành động khác nhau và thực hiện xử lý dựa trên quyền truy cập đối " +"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:593 +msgid "" +"ViewSet for managing orders and related operations. This class provides " +"functionality to retrieve, modify, and manage order objects. It includes " +"various endpoints for handling order operations such as adding or removing " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " +"enforces permissions accordingly while interacting with order data." +msgstr "" +"ViewSet để quản lý đơn hàng và các hoạt động liên quan. Lớp này cung cấp các" +" chức năng để truy xuất, sửa đổi và quản lý các đối tượng đơn hàng. Nó bao " +"gồm các điểm cuối (endpoint) khác nhau để xử lý các hoạt động liên quan đến " +"đơn hàng như thêm hoặc xóa sản phẩm, thực hiện giao dịch mua hàng cho cả " +"người dùng đã đăng ký và chưa đăng ký, cũng như truy xuất các đơn hàng đang " +"chờ xử lý của người dùng đã đăng nhập hiện tại. ViewSet sử dụng nhiều trình " +"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:782 +msgid "" +"Provides a viewset for managing OrderProduct entities. This viewset enables " +"CRUD operations and custom actions specific to the OrderProduct model. It " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " +"feedback on OrderProduct instances" +msgstr "" +"Cung cấp một bộ xem (viewset) để quản lý các thực thể OrderProduct. Bộ xem " +"này cho phép thực hiện các thao tác CRUD (Tạo, Đọc, Cập nhật, Xóa) và các " +"hành động tùy chỉnh đặc thù cho mô hình OrderProduct. Nó bao gồm các tính " +"năng lọc, kiểm tra quyền truy cập và chuyển đổi trình serializer dựa trên " +"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:833 +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:845 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +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:866 +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:878 +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:892 +msgid "" +"ViewSet for managing Wishlist operations. The WishlistViewSet provides " +"endpoints for interacting with a user's wish list, allowing for the " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " +"actions for wishlist products. Permission checks are integrated to ensure " +"that users can only manage their own wishlists unless explicit permissions " +"are granted." +msgstr "" +"Bộ công cụ ViewSet để quản lý các thao tác liên quan đến Danh sách mong " +"muốn. Bộ công cụ WishlistViewSet cung cấp các điểm cuối để tương tác với " +"danh sách mong muốn của người dùng, cho phép truy xuất, chỉnh sửa và tùy " +"chỉnh các sản phẩm trong danh sách mong muốn. Bộ công cụ này hỗ trợ các chức" +" năng như thêm, xóa và thực hiện các thao tác hàng loạt đối với các sản phẩm" +" trong danh sách mong muốn. Các kiểm tra quyền truy cập được tích hợp để đảm" +" 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:1007 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" +"Lớp này cung cấp chức năng viewset để quản lý các đối tượng `Address`. Lớp " +"AddressViewSet cho phép thực hiện các thao tác CRUD, lọc dữ liệu và các hành" +" động tùy chỉnh liên quan đến các thực thể địa chỉ. Nó bao gồm các hành vi " +"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:1074 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Lỗi địa chỉ địa lý: {e}" + +#: core/viewsets.py:1081 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" +"Xử lý các tác vụ liên quan đến Thẻ Sản phẩm trong ứng dụng. Lớp này cung cấp" +" chức năng để truy xuất, lọc và serialize các đối tượng Thẻ Sản phẩm. Nó hỗ " +"trợ lọc linh hoạt trên các thuộc tính cụ thể bằng cách sử dụng backend lọc " +"được chỉ định và động sử dụng các serializer khác nhau tùy thuộc vào hành " +"động đang thực hiện." diff --git a/core/locale/zh_Hans/LC_MESSAGES/django.mo b/core/locale/zh_Hans/LC_MESSAGES/django.mo index 4c62d661a528fb152ca1e3a88310fc833dbe51f2..f69d1af0e2535b52064ea671b00edbca1874fbdd 100644 GIT binary patch delta 25132 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 ac5sDhx?=YMCR4KDvjJz8)c;Gy>Hi0S)imt@ delta 12252 zcmZA72Xqxh`^WJOp@yCiS|}l*20{;22u+GK>0MevQAnuLgbTbhr3s;ffHW!63=j~I zDk4p3(h;SDfUk-Tl>hg4=fT(W-*cXP=9!(Hot>GzH{`J6Q0hOf2KufCr=II^M5Xe) zeAq9$=iQ{dCqlKJ*RZtb<-kUm9^b$q?2Wl`5az+Dm<$%6MKj ztcjtX=kuCVm_tQ8ro}%|4Fk%$8)m{ndpa`>oh6!1Iow+DBA!mO>4< z5^4t8<6`WBdcZ$01ii|hmx=p(IVj}7LZ~UOgr(>>7CZ5T{i=B0W$KSs^Sq(dudL2Y zV4fPD_Zrr&$xU!tEM?l?uH|_P$&1xx+VMa=&pXcbZ`Wsu$?G)myq~daL*~B`7qoiK z^X5|VK@-nghZUN6-T>;aHTS#}@@6ePZz85`ttsP1ZQL3!MLp39ERO3?PkhGeFIavZ z1FeHmmDy$+~7G^aiDpP#~JD&$FP_z+{rLp!*oX^gqZyCIY14aanN2y^0b z%!J>g`gwwSu*@CVBbW=BR4)-(CGRt2RlL7_6oM(#?c{kSu`OzIjK?fE4|RSuj>4T- z1S@uSo3SHiChvx!n1E_O0ku@~Q3F|rSuq(k;6s=VeU~Zd$sSsRz%K4Yh*=o5G%=VL zYoP|%3BxfFqwsw!kGoMz_1Nme-*7i>jGD1d7=b;Jx5?*CvIf&oBVK~K;U>#>p*GoZ z)RUe;b#MbU<$+z@UdV=e(ma?EBT)k@W9K`f`t6CDi3ESWkN2E{UcbqxDPMw`!VRb! zeujGT6Q~>BwfbK$oIF)GH-Jdg?k|OU(sHO9RYfgLBUFD~QT_DC96kyoDd@tPs0-(y ze1V_r~#bEJb2#>?CA!OA0w!bMh)b3)DrbXEk*yHtbZK}!>K5b zyHQi~81?!+L*1YppB}pLtEf-Nw&s{0Xr0VN= zO)&?)jXkhGUP2AX*WgXJ>ziVIDmr5ZT#0FMBdViqs3kdq#ql|6z(wA2=c7>rjKz{T z49nn3)DoV>MtB#)uv|ZW2hjW9l!9(J4Yj88P*1iBD`5&o<72FV`51m6zK$A5Ys`$J zQ5{dU{39$tz8$p$=TQA-NO0d7`TVl}^(bhn`Q>}W@Prsbyx#wc6tZ9qR7XuvuVo9=i2IZ zTKx{xQXRw6cpA0ay@7nwK_qG>M`H=xhH7^mecA+>2e|=+pl%p}SuqB6qgOE;TVW|2 zf*SCLm9A<531v% zsI|R~+Jpf^+~%un#$pKd4N#k~6GmeaR>T8V|0~ubFFn-F(BPrWe+w$+QK1{&!yNbv zYGyL<&S(v@qIP?3)Q!SXGgA>Y6LqY<1?mCfQBOX|&i@D1|7<(I)Xs14QP2(cpguxB zw-eu@-t!+(n=Jh>*KtJ*BCn01*aX#a56p=Ps68?fv*S`!`z@%qY&Yt<&rt*SU9koa zuq+i%F&v8ycdu6i)DjIqb+``o7VJhoO}#4^g|$YwrFskXKvPidXQ4LRO00xuur6j8 z>F<~KpMqYCNvKV83N^y>s1ZLz-S8=DSBH*rR>30Voh%=RdB|6x*8DTn-uW3d1KHl8 zErww$9ESDSf8KEljnrVY+oc^boP08BFRVp%yce|;7qA=#j&a7IW}vq@8;hwuR>Rw< z*DjoUsoiT>9<}$%5#CyURKd%3B4n(~>!WVuGq<9q@+MZt;BoGJGt>-@#oBn(@}TkV z+peXVgf%#S&hp^@(6^?l6@^Hgf|}BgQM>yLM&J$9ZVsHl_XFlYZJvRsw_z;mZJC3* zZV^V}TGW!Bz%qCi>tNtSS6_c3^REU?sn8m=Ms?T~b;H4^%`^eEnWm#YIF_My`)1UP z96`PBPw^N=PVzj)>^(*;#h}SyWthU07o|{Xirej7P*XbzH8TgX2>ymz zyZrCE?}Ub^j(cG&&cGNvh3YuElCcce&lI^Gg?8dZs1T~P8m=W)wUgw`s?b6S14-$guxW8AI z0&kSp7)#@qSO|Z|dYE^n+XG!O3wa;ZrW}UaD~nJwvI(PcCu#}rpx%av_ua0KLv6kl zSPE}rl-~c~S#GLopw_%M>NQz{dg9Bd%@i=(y|)ulOSKc#;Z>_In8ZVnw?uu?Ek)hv zJZkDw&2f7s8nrZSFpB$oJ_`A9J;n#H6qt#;^gL&E)YLXaO=WX4-s(qTF!kfjxyYO5 zt+n&f^Xhg&RaI=ih(iS3YEE$S1Gh z*Cq1RE4evNSjCi5KW;Vak2BY}cKx_(PxANH@fQ`^Jzmcnq4sn(oBGBd^RF$uzL7y< zif=R1NFn1^o*Lsn;X56RZR59H9J1X_)!H5I2@a#4@HCdfi5dMLh(y*QG_kvoer5T9Dag@0V^+|XVb^TM++UD5h zEQ@8yn_zAnZO%jb_j#Ks==C^vAh*( zVBM^K0BV54tbUy3vn*e%ocntl?8J6d$NNxEdcyLv<_**oJ~GpO=02zjnq5#cxER&X z8Pov2MZNd;QT@I^4K(dO=3fnSQjn3T6J=2iYgv5*)QwwP-rpRFA=FQ{d@+_GUyHi& zMN~iE+xh#J|7!VP`U<5esnvHe-$dPD7;1Bm!9utW z!|*ujt-0&7Le_)sHLQ#pNW3}7^qJGlg{T3nF?U$~5zIsVS<4@xmf}y;fKnfFuXRS$ zKzwB>=!Q*Dp939G9Zxprqb~di)zKz%C+hRzpq;;qdeX<1=Q->?C&IBV^^H(_XgX?1 z)?lRG|6LSxgKL-_Z=nYCs~PyY%d?@TFh6SQVsRSwMqU34YT(bX0%kno>SM7nd3}5p zXQN){iP9)JN%d)WCvHxT(*Mxo^B$>I$RU)j*xEXL$=ON!}i{ zcP8Kllq`PrG&%&Dt1FeKXY3 zC89c>i0XJ6YGyZ~`af&uZ(tPpU90y6pK()G5Y?~*>WM31FgC~H*aLNbD(XfHPy=3u zWpOhWz#FK6zd#MV*je{Fw!v`ncd-GkNBZ-5KT!y#;svVX;B#(3c~E&I>c&xKWwRdY zx)zqlnFGx+=2UZmxf<2)Cm5>tf0v#33f19N)RR21`Yh+&0K!mHUEK1TsF`YP^>OA% zJO945)x5^G?d%Wh!pE;IiTR4k!F7w*GScpWvMj91)~7C?=>uKAYLCz(6VYgmqU zsjj-~Dw-Won{6Gir&;{E`?p_PjHTT|)R)U8 zd<6@B>*_nB@+FpELM>gM8*YYc`mE3nwRQtA3`bkO5Sx*&vHU4&W>S6UmMRo=T|Uf> zC9J*<>WLd+ERMALPf?$c2Q2p;r=T02L3R8X)nUN*&Mama>U?q3)Kxco;Uw}|*bZ~w zbW1q^wPZ8R6f8vkE$V&&xBTsVUVaLil2=d{bjMJ97xhHTP&eL*>fkum#z&|nDs$V_ z_rwC^6H!mR3iYJ7P@DR(`4shl&oNBze}+5m21QT}t5_b38c<7AMv_tsI+h%TU>;1=r11Mj&3D7eHG|2h*YHc!m(&GR`@sAB@c}cVPixtef<`_AwfncAZg3s-gb%R@{*CIm z@B??g8kQk%fK_oAM&VXeKUYyp6!g&bUlSwAyP?`mc*y*#;byD2hK0$~|G*y`Fd8+m z`KTw{g=&8W)y{jwUqzq@Do;S&AjwR@V&qpa8Ur7@8<)d;Ia9OMn?n7 z^HYAE@)LipTW1w@v5p-?an2X=XXKQ(Te%KpE$>_+8)bbG>gZ1SH)0IYNex~eA5!2u z$N$GB)g7Y2N&K0pMHEiud0$hfV+eM`eMCFTpJ7cx$9-$_33j!z>hDl~pLq7Kx_|E9 zp9blPcR1OQ2qYr7A)DHNOyK9&L~H8PQ(q8^<3OB8eOk&@FdynK9E*ujL|*E6)4Z<; z9Sw*n#6!-V*8~Mo(29qB)eWNjCsC9<+0LgX*XPH}qX&hl)V&CB_xEm+d_d@3%w!$u z%VYzwfJo9g4tN0jPH-I4{g3^t zaS_Tnh(u2QfZK`l#C+oA@%Ue5{S7cb9nZ9rYskk~`8%@Mg}2(%Lvy%-uESApXKQH$;jc#4gQ*C|&f-lP1QPH@B!S;<3*68@V1 z{qSX=^5wC@%Hi0SXvqmaDg8$Pd3#C~@wwG~i@mJehx*!-+Y%!whvOq$i`jUn&+-2s z0jZe({nRcbW)rKpAP48=?r-3dR+J0UCXdy{Q5{eD5bnfJi9D3A z;dCO6yUgQz%9})9(DMD1^=sK5#9_+6`uLHFI7^JPM*pRJn(`ai2zwIqDC_8Js(e#F zI0jSKhNwVfa8+J1z`;RuE5UG@5voczOKx zvhXkOa{e3g8N^>iN%9TEc)Ko)0qBSzFO1(>{W|N+K1ZBQtT9=uPCb{{Ez#kMq?~M;D@%oEm_7H=p%ShCqtmCrzg7Q|PqbfO$QlE|(;!^)lUs)SZz%W0URJjr3lV=1d#InL@1OT6 z>>|=yqb8V>ybKm2{vxK5mp~m;up1HRQcrJ?j&T@)bBL8hUh+uvn6*=sGZF_#|AR}2 z=R|X@e|-voiXWA z|2;_$63Zpu9K1g?WI&(9g!u4;q5XTr4+`&BJpqBO}V z+rAD+9-q=Pb<$4<<|Ge4987kkNI;soTkcPunVkLjnk>l&uO3dH^!@EKNxScsPk!;B zR!Hu\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,37 +13,37 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: core/abstract.py:11 +#: core/abstract.py:12 msgid "unique id" msgstr "唯一 ID" -#: core/abstract.py:12 +#: core/abstract.py:13 msgid "unique id is used to surely identify any database object" msgstr "唯一 ID 用于确定识别任何数据库对象" -#: core/abstract.py:19 +#: core/abstract.py:20 msgid "is active" msgstr "处于活动状态" -#: core/abstract.py:20 +#: 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:22 core/choices.py:18 +#: core/abstract.py:23 core/choices.py:18 msgid "created" msgstr "创建" -#: core/abstract.py:22 +#: core/abstract.py:23 msgid "when the object first appeared on the database" msgstr "对象首次出现在数据库中的时间" -#: core/abstract.py:23 +#: core/abstract.py:24 msgid "modified" msgstr "改装" -#: core/abstract.py:23 +#: core/abstract.py:24 msgid "when the object was last modified" msgstr "对象最后一次编辑的时间" @@ -86,11 +86,11 @@ msgid "selected items have been deactivated." msgstr "选定项目已停用!" #: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:687 core/models.py:695 +#: core/graphene/object_types.py:616 core/models.py:701 core/models.py:709 msgid "attribute value" msgstr "属性值" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:696 +#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 msgid "attribute values" msgstr "属性值" @@ -102,7 +102,7 @@ msgstr "图片" msgid "images" msgstr "图片" -#: core/admin.py:155 core/models.py:445 +#: core/admin.py:155 core/models.py:459 msgid "stock" msgstr "库存" @@ -110,11 +110,11 @@ msgstr "库存" msgid "stocks" msgstr "股票" -#: core/admin.py:166 core/models.py:1609 +#: core/admin.py:166 core/models.py:1667 msgid "order product" msgstr "订购产品" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1610 +#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 msgid "order products" msgstr "订购产品" @@ -687,7 +687,7 @@ msgstr "删除订单-产品关系" msgid "add or remove feedback on an order–product relation" msgstr "添加或删除订单与产品关系中的反馈信息" -#: core/elasticsearch/__init__.py:115 core/elasticsearch/__init__.py:495 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 msgid "no search term provided." msgstr "未提供搜索条件。" @@ -740,7 +740,7 @@ msgid "Quantity" msgstr "数量" #: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:287 core/models.py:369 core/models.py:522 +#: core/models.py:301 core/models.py:383 core/models.py:536 msgid "Slug" msgstr "蛞蝓" @@ -756,7 +756,7 @@ msgstr "包括子类别" msgid "Include personal ordered" msgstr "包括个人订购的产品" -#: core/filters.py:85 core/models.py:526 +#: core/filters.py:85 core/models.py:540 msgid "SKU" msgstr "商品编号" @@ -829,7 +829,7 @@ msgstr "缓存数据" msgid "camelized JSON data from the requested URL" msgstr "从请求的 URL 中获取驼峰化 JSON 数据" -#: core/graphene/mutations.py:65 core/views.py:360 +#: core/graphene/mutations.py:65 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "只允许使用以 http(s):// 开头的 URL" @@ -860,7 +860,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "请提供 order_uuid 或 order_hr_id(互斥)!" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:839 +#: core/graphene/mutations.py:527 core/viewsets.py:679 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "order.buy() 方法中的类型有误:{type(instance)!s}" @@ -934,9 +934,9 @@ msgstr "未找到订购产品 {order_product_uuid}!" msgid "original address string provided by the user" msgstr "用户提供的原始地址字符串" -#: core/graphene/mutations.py:656 core/models.py:835 core/models.py:848 -#: core/models.py:1234 core/models.py:1263 core/models.py:1288 -#: core/viewsets.py:842 +#: core/graphene/mutations.py:656 core/models.py:849 core/models.py:862 +#: core/models.py:1281 core/models.py:1310 core/models.py:1335 +#: core/viewsets.py:682 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} 不存在:{uuid}!" @@ -950,8 +950,8 @@ msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - 工作起来得心应手" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:658 core/models.py:1116 -#: core/models.py:1686 +#: core/graphene/object_types.py:444 core/models.py:672 core/models.py:1144 +#: core/models.py:1744 msgid "attributes" msgstr "属性" @@ -964,11 +964,11 @@ msgid "groups of attributes" msgstr "属性组" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:312 core/models.py:612 +#: core/graphene/object_types.py:224 core/models.py:326 core/models.py:626 msgid "categories" msgstr "类别" -#: core/graphene/object_types.py:124 core/models.py:383 +#: core/graphene/object_types.py:124 core/models.py:397 msgid "brands" msgstr "品牌" @@ -977,7 +977,7 @@ msgid "category image url" msgstr "类别" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:249 +#: core/models.py:263 msgid "markup percentage" msgstr "加价百分比" @@ -998,7 +998,7 @@ msgstr "此类别的标签" msgid "products in this category" msgstr "该类别中的产品" -#: core/graphene/object_types.py:351 core/models.py:155 +#: core/graphene/object_types.py:351 core/models.py:169 msgid "vendors" msgstr "供应商" @@ -1023,7 +1023,7 @@ msgid "represents feedback from a user." msgstr "代表用户的反馈意见。" #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1110 +#: core/models.py:1138 msgid "notifications" msgstr "通知" @@ -1031,7 +1031,7 @@ msgstr "通知" msgid "download url for this order product if applicable" msgstr "此订单产品的下载网址(如适用" -#: core/graphene/object_types.py:400 core/models.py:1791 +#: core/graphene/object_types.py:400 core/models.py:1860 msgid "feedback" msgstr "反馈意见" @@ -1039,7 +1039,7 @@ msgstr "反馈意见" msgid "a list of order products in this order" msgstr "该订单中的订单产品列表" -#: core/graphene/object_types.py:436 core/models.py:1080 +#: core/graphene/object_types.py:436 core/models.py:1108 msgid "billing address" msgstr "账单地址" @@ -1065,7 +1065,7 @@ msgstr "订单中的所有产品都是数字产品吗?" msgid "transactions for this order" msgstr "此订单的交易" -#: core/graphene/object_types.py:465 core/models.py:1144 +#: core/graphene/object_types.py:465 core/models.py:1172 msgid "orders" msgstr "订单" @@ -1077,15 +1077,15 @@ msgstr "图片 URL" msgid "product's images" msgstr "产品图片" -#: core/graphene/object_types.py:500 core/models.py:311 core/models.py:465 +#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 msgid "category" msgstr "类别" -#: core/graphene/object_types.py:502 core/models.py:1792 +#: core/graphene/object_types.py:502 core/models.py:1861 msgid "feedbacks" msgstr "反馈意见" -#: core/graphene/object_types.py:503 core/models.py:382 core/models.py:474 +#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 msgid "brand" msgstr "品牌" @@ -1117,7 +1117,7 @@ msgstr "反馈数量" msgid "only available for personal orders" msgstr "仅限个人订购的产品" -#: core/graphene/object_types.py:534 core/models.py:536 +#: core/graphene/object_types.py:534 core/models.py:550 msgid "products" msgstr "产品" @@ -1129,15 +1129,15 @@ msgstr "促销代码" msgid "products on sale" msgstr "销售产品" -#: core/graphene/object_types.py:651 core/models.py:784 +#: core/graphene/object_types.py:651 core/models.py:798 msgid "promotions" msgstr "促销活动" -#: core/graphene/object_types.py:655 core/models.py:154 +#: core/graphene/object_types.py:655 core/models.py:168 msgid "vendor" msgstr "供应商" -#: core/graphene/object_types.py:656 core/models.py:535 +#: core/graphene/object_types.py:656 core/models.py:549 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1145,11 +1145,11 @@ msgstr "供应商" msgid "product" msgstr "产品" -#: core/graphene/object_types.py:667 core/models.py:807 +#: core/graphene/object_types.py:667 core/models.py:821 msgid "wishlisted products" msgstr "心愿单上的产品" -#: core/graphene/object_types.py:673 core/models.py:824 +#: core/graphene/object_types.py:673 core/models.py:838 msgid "wishlists" msgstr "愿望清单" @@ -1157,7 +1157,7 @@ msgstr "愿望清单" msgid "tagged products" msgstr "标签产品" -#: core/graphene/object_types.py:684 core/models.py:190 core/models.py:480 +#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 msgid "product tags" msgstr "产品标签" @@ -1263,7 +1263,7 @@ msgstr "父属性组" msgid "attribute group's name" msgstr "属性组名称" -#: core/models.py:100 core/models.py:620 +#: core/models.py:100 core/models.py:634 msgid "attribute group" msgstr "属性组" @@ -1303,7 +1303,7 @@ msgstr "供应商名称" msgid "vendor name" msgstr "供应商名称" -#: core/models.py:163 +#: core/models.py:177 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1314,42 +1314,42 @@ msgstr "" "代表用于分类或识别产品的产品标签。ProductTag " "类旨在通过内部标签标识符和用户友好显示名称的组合,对产品进行唯一标识和分类。它支持通过混合功能导出的操作,并为管理目的提供元数据定制功能。" -#: core/models.py:175 core/models.py:206 +#: core/models.py:189 core/models.py:220 msgid "internal tag identifier for the product tag" msgstr "产品标签的内部标签标识符" -#: core/models.py:176 core/models.py:207 +#: core/models.py:190 core/models.py:221 msgid "tag name" msgstr "标签名称" -#: core/models.py:180 core/models.py:211 +#: core/models.py:194 core/models.py:225 msgid "user-friendly name for the product tag" msgstr "方便用户使用的产品标签名称" -#: core/models.py:181 core/models.py:212 +#: core/models.py:195 core/models.py:226 msgid "tag display name" msgstr "标签显示名称" -#: core/models.py:189 +#: core/models.py:203 msgid "product tag" msgstr "产品标签" -#: core/models.py:195 +#: core/models.py:209 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:220 +#: core/models.py:234 msgid "category tag" msgstr "类别标签" -#: core/models.py:221 core/models.py:293 +#: core/models.py:235 core/models.py:307 msgid "category tags" msgstr "类别标签" -#: core/models.py:226 +#: core/models.py:240 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1363,51 +1363,51 @@ msgid "" msgstr "" "代表类别实体,用于在分层结构中组织和分组相关项目。类别可与其他类别建立层次关系,支持父子关系。该类包括元数据和可视化表示字段,是类别相关功能的基础。该类通常用于定义和管理应用程序中的产品类别或其他类似分组,允许用户或管理员指定类别的名称、描述和层次结构,以及分配图像、标记或优先级等属性。" -#: core/models.py:240 +#: core/models.py:254 msgid "upload an image representing this category" msgstr "上传代表该类别的图片" -#: core/models.py:243 +#: core/models.py:257 msgid "category image" msgstr "类别 图像" -#: core/models.py:248 +#: core/models.py:262 msgid "define a markup percentage for products in this category" msgstr "定义该类别产品的加价百分比" -#: core/models.py:257 +#: core/models.py:271 msgid "parent of this category to form a hierarchical structure" msgstr "该类别的父类别,形成等级结构" -#: core/models.py:258 +#: core/models.py:272 msgid "parent category" msgstr "父类" -#: core/models.py:263 +#: core/models.py:277 msgid "category name" msgstr "类别名称" -#: core/models.py:264 +#: core/models.py:278 msgid "provide a name for this category" msgstr "提供该类别的名称" -#: core/models.py:271 +#: core/models.py:285 msgid "add a detailed description for this category" msgstr "为该类别添加详细说明" -#: core/models.py:272 +#: core/models.py:286 msgid "category description" msgstr "类别说明" -#: core/models.py:292 +#: core/models.py:306 msgid "tags that help describe or group this category" msgstr "有助于描述或归类该类别的标签" -#: core/models.py:299 core/models.py:375 +#: core/models.py:313 core/models.py:389 msgid "priority" msgstr "优先权" -#: core/models.py:318 +#: core/models.py:332 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1417,47 +1417,47 @@ msgid "" msgstr "" "代表系统中的品牌对象。该类用于处理与品牌相关的信息和属性,包括名称、徽标、描述、相关类别、唯一标签和优先顺序。它允许在应用程序中组织和表示与品牌相关的数据。" -#: core/models.py:328 +#: core/models.py:342 msgid "name of this brand" msgstr "品牌名称" -#: core/models.py:329 +#: core/models.py:343 msgid "brand name" msgstr "品牌名称" -#: core/models.py:336 +#: core/models.py:350 msgid "upload a logo representing this brand" msgstr "上传代表该品牌的徽标" -#: core/models.py:338 +#: core/models.py:352 msgid "brand small image" msgstr "品牌小形象" -#: core/models.py:344 +#: core/models.py:358 msgid "upload a big logo representing this brand" msgstr "上传代表该品牌的大徽标" -#: core/models.py:346 +#: core/models.py:360 msgid "brand big image" msgstr "品牌大形象" -#: core/models.py:351 +#: core/models.py:365 msgid "add a detailed description of the brand" msgstr "添加品牌的详细描述" -#: core/models.py:352 +#: core/models.py:366 msgid "brand description" msgstr "品牌描述" -#: core/models.py:357 +#: core/models.py:371 msgid "optional categories that this brand is associated with" msgstr "与该品牌相关的可选类别" -#: core/models.py:358 +#: core/models.py:372 msgid "associated categories" msgstr "类别" -#: core/models.py:388 +#: core/models.py:402 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1469,68 +1469,68 @@ msgstr "" "代表系统中管理的产品库存。该类提供有关供应商、产品及其库存信息之间关系的详细信息,以及与库存相关的属性,如价格、购买价格、数量、SKU " "和数字资产。它是库存管理系统的一部分,用于跟踪和评估不同供应商提供的产品。" -#: core/models.py:400 +#: core/models.py:414 msgid "the vendor supplying this product stock" msgstr "提供该产品库存的供应商" -#: core/models.py:401 +#: core/models.py:415 msgid "associated vendor" msgstr "相关供应商" -#: core/models.py:405 +#: core/models.py:419 msgid "final price to the customer after markups" msgstr "加价后给客户的最终价格" -#: core/models.py:406 +#: core/models.py:420 msgid "selling price" msgstr "销售价格" -#: core/models.py:411 +#: core/models.py:425 msgid "the product associated with this stock entry" msgstr "与该库存条目相关的产品" -#: core/models.py:412 core/models.py:683 core/models.py:730 -#: core/models.py:1583 +#: core/models.py:426 core/models.py:697 core/models.py:744 +#: core/models.py:1641 msgid "associated product" msgstr "相关产品" -#: core/models.py:419 +#: core/models.py:433 msgid "the price paid to the vendor for this product" msgstr "为该产品支付给供应商的价格" -#: core/models.py:420 +#: core/models.py:434 msgid "vendor purchase price" msgstr "供应商购买价格" -#: core/models.py:424 +#: core/models.py:438 msgid "available quantity of the product in stock" msgstr "产品的可用库存量" -#: core/models.py:425 +#: core/models.py:439 msgid "quantity in stock" msgstr "库存数量" -#: core/models.py:429 +#: core/models.py:443 msgid "vendor-assigned SKU for identifying the product" msgstr "供应商指定的 SKU,用于识别产品" -#: core/models.py:430 +#: core/models.py:444 msgid "vendor sku" msgstr "供应商 SKU" -#: core/models.py:436 +#: core/models.py:450 msgid "digital file associated with this stock if applicable" msgstr "与该库存相关的数字文件(如适用" -#: core/models.py:437 +#: core/models.py:451 msgid "digital file" msgstr "数字文件" -#: core/models.py:446 +#: core/models.py:460 msgid "stock entries" msgstr "库存条目" -#: core/models.py:451 +#: core/models.py:465 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1544,55 +1544,55 @@ msgstr "" "代表产品的属性,如类别、品牌、标签、数字状态、名称、描述、零件编号和标签。提供相关的实用属性,以检索评级、反馈计数、价格、数量和订单总数。设计用于处理电子商务或库存管理的系统。该类可与相关模型(如类别、品牌和" " ProductTag)交互,并对频繁访问的属性进行缓存管理,以提高性能。它用于在应用程序中定义和操作产品数据及其相关信息。" -#: core/models.py:464 +#: core/models.py:478 msgid "category this product belongs to" msgstr "该产品所属类别" -#: core/models.py:473 +#: core/models.py:487 msgid "optionally associate this product with a brand" msgstr "可选择将该产品与某个品牌联系起来" -#: core/models.py:479 +#: core/models.py:493 msgid "tags that help describe or group this product" msgstr "有助于描述或归类该产品的标签" -#: core/models.py:484 +#: core/models.py:498 msgid "indicates whether this product is digitally delivered" msgstr "表示该产品是否以数字方式交付" -#: core/models.py:485 +#: core/models.py:499 msgid "is product digital" msgstr "产品是否数字化" -#: core/models.py:491 +#: core/models.py:505 msgid "provide a clear identifying name for the product" msgstr "为产品提供一个明确的标识名称" -#: core/models.py:492 +#: core/models.py:506 msgid "product name" msgstr "产品名称" -#: core/models.py:497 core/models.py:772 +#: core/models.py:511 core/models.py:786 msgid "add a detailed description of the product" msgstr "添加产品的详细描述" -#: core/models.py:498 +#: core/models.py:512 msgid "product description" msgstr "产品说明" -#: core/models.py:505 +#: core/models.py:519 msgid "part number for this product" msgstr "该产品的零件编号" -#: core/models.py:506 +#: core/models.py:520 msgid "part number" msgstr "部件编号" -#: core/models.py:525 +#: core/models.py:539 msgid "stock keeping unit for this product" msgstr "该产品的库存单位" -#: core/models.py:599 +#: core/models.py:613 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 " @@ -1603,87 +1603,87 @@ msgid "" msgstr "" "代表系统中的一个属性。该类用于定义和管理属性,属性是可与其他实体关联的自定义数据块。属性有相关的类别、组、值类型和名称。该模型支持多种类型的值,包括字符串、整数、浮点数、布尔值、数组和对象。这样就可以实现动态、灵活的数据结构。" -#: core/models.py:611 +#: core/models.py:625 msgid "category of this attribute" msgstr "该属性的类别" -#: core/models.py:619 +#: core/models.py:633 msgid "group of this attribute" msgstr "该属性的组" -#: core/models.py:625 +#: core/models.py:639 msgid "string" msgstr "字符串" -#: core/models.py:626 +#: core/models.py:640 msgid "integer" msgstr "整数" -#: core/models.py:627 +#: core/models.py:641 msgid "float" msgstr "浮动" -#: core/models.py:628 +#: core/models.py:642 msgid "boolean" msgstr "布尔型" -#: core/models.py:629 +#: core/models.py:643 msgid "array" msgstr "阵列" -#: core/models.py:630 +#: core/models.py:644 msgid "object" msgstr "对象" -#: core/models.py:632 +#: core/models.py:646 msgid "type of the attribute's value" msgstr "属性值的类型" -#: core/models.py:633 +#: core/models.py:647 msgid "value type" msgstr "价值类型" -#: core/models.py:638 +#: core/models.py:652 msgid "name of this attribute" msgstr "该属性的名称" -#: core/models.py:639 +#: core/models.py:653 msgid "attribute's name" msgstr "属性名称" -#: core/models.py:645 +#: core/models.py:659 msgid "is filterable" msgstr "可过滤" -#: core/models.py:646 +#: core/models.py:660 msgid "designates whether this attribute can be used for filtering or not" msgstr "指定该属性是否可用于筛选" -#: core/models.py:657 core/models.py:675 +#: core/models.py:671 core/models.py:689 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "属性" -#: core/models.py:663 +#: core/models.py:677 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:674 +#: core/models.py:688 msgid "attribute of this value" msgstr "该值的属性" -#: core/models.py:682 +#: core/models.py:696 msgid "the specific product associated with this attribute's value" msgstr "与该属性值相关的特定产品" -#: core/models.py:688 +#: core/models.py:702 msgid "the specific value for this attribute" msgstr "该属性的具体值" -#: core/models.py:701 +#: core/models.py:715 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -1693,39 +1693,39 @@ msgid "" msgstr "" "代表与系统中产品相关联的产品图片。该类用于管理产品图片,包括上传图片文件、将图片与特定产品关联以及确定图片显示顺序等功能。它还包括一个为图像提供替代文本的可访问性功能。" -#: core/models.py:712 +#: core/models.py:726 msgid "provide alternative text for the image for accessibility" msgstr "为图像提供替代文字,以便于访问" -#: core/models.py:713 +#: core/models.py:727 msgid "image alt text" msgstr "图片 alt 文本" -#: core/models.py:716 +#: core/models.py:730 msgid "upload the image file for this product" msgstr "上传该产品的图片文件" -#: core/models.py:717 core/models.py:742 +#: core/models.py:731 core/models.py:756 msgid "product image" msgstr "产品图片" -#: core/models.py:723 +#: core/models.py:737 msgid "determines the order in which images are displayed" msgstr "确定图像的显示顺序" -#: core/models.py:724 +#: core/models.py:738 msgid "display priority" msgstr "显示优先级" -#: core/models.py:729 +#: core/models.py:743 msgid "the product that this image represents" msgstr "该图片所代表的产品" -#: core/models.py:743 +#: core/models.py:757 msgid "product images" msgstr "产品图片" -#: core/models.py:748 +#: core/models.py:762 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1736,39 +1736,39 @@ msgid "" msgstr "" "代表有折扣的产品促销活动。该类用于定义和管理为产品提供百分比折扣的促销活动。该类包括用于设置折扣率、提供促销详情以及将其链接到适用产品的属性。它与产品目录集成,以确定促销活动中受影响的产品。" -#: core/models.py:760 +#: core/models.py:774 msgid "percentage discount for the selected products" msgstr "所选产品的折扣百分比" -#: core/models.py:761 +#: core/models.py:775 msgid "discount percentage" msgstr "折扣百分比" -#: core/models.py:766 +#: core/models.py:780 msgid "provide a unique name for this promotion" msgstr "为该促销活动提供一个独特的名称" -#: core/models.py:767 +#: core/models.py:781 msgid "promotion name" msgstr "推广名称" -#: core/models.py:773 +#: core/models.py:787 msgid "promotion description" msgstr "促销说明" -#: core/models.py:778 +#: core/models.py:792 msgid "select which products are included in this promotion" msgstr "选择促销活动包括哪些产品" -#: core/models.py:779 +#: core/models.py:793 msgid "included products" msgstr "包括产品" -#: core/models.py:783 +#: core/models.py:797 msgid "promotion" msgstr "促销活动" -#: core/models.py:794 +#: core/models.py:808 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1776,23 +1776,23 @@ msgid "" "operations for adding and removing multiple products at once." msgstr "代表用户用于存储和管理所需产品的愿望清单。该类提供管理产品集合的功能,支持添加和删除产品等操作,还支持同时添加和删除多个产品的操作。" -#: core/models.py:806 +#: core/models.py:820 msgid "products that the user has marked as wanted" msgstr "用户标记为想要的产品" -#: core/models.py:814 +#: core/models.py:828 msgid "user who owns this wishlist" msgstr "拥有此愿望清单的用户" -#: core/models.py:815 +#: core/models.py:829 msgid "wishlist owner" msgstr "心愿单所有者" -#: core/models.py:823 +#: core/models.py:837 msgid "wishlist" msgstr "愿望清单" -#: core/models.py:865 +#: core/models.py:879 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1803,19 +1803,19 @@ msgid "" msgstr "" "代表与产品相关的文档记录。该类用于存储与特定产品相关的文档信息,包括文件上传及其元数据。它包含处理文件类型和文档文件存储路径的方法和属性。它扩展了特定混合类的功能,并提供了额外的自定义功能。" -#: core/models.py:878 +#: core/models.py:892 msgid "documentary" msgstr "纪录片" -#: core/models.py:879 +#: core/models.py:893 msgid "documentaries" msgstr "纪录片" -#: core/models.py:889 +#: core/models.py:903 msgid "unresolved" msgstr "未解决" -#: core/models.py:894 +#: core/models.py:908 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1829,59 +1829,59 @@ msgstr "" "代表一个地址实体,其中包括位置详情以及与用户的关联。提供地理和地址数据存储功能,以及与地理编码服务集成的功能。该类旨在存储详细的地址信息,包括街道、城市、地区、国家和地理位置(经度和纬度)等组件。它支持与地理编码" " API 集成,可存储原始 API 响应,以便进一步处理或检查。该类还可以将地址与用户关联起来,方便个性化数据处理。" -#: core/models.py:909 +#: core/models.py:923 msgid "address line for the customer" msgstr "客户地址栏" -#: core/models.py:910 +#: core/models.py:924 msgid "address line" msgstr "地址栏" -#: core/models.py:912 +#: core/models.py:926 msgid "street" msgstr "街道" -#: core/models.py:913 +#: core/models.py:927 msgid "district" msgstr "地区" -#: core/models.py:914 +#: core/models.py:928 msgid "city" msgstr "城市" -#: core/models.py:915 +#: core/models.py:929 msgid "region" msgstr "地区" -#: core/models.py:916 +#: core/models.py:930 msgid "postal code" msgstr "邮政编码" -#: core/models.py:917 +#: core/models.py:931 msgid "country" msgstr "国家" -#: core/models.py:924 +#: core/models.py:938 msgid "geolocation point: (longitude, latitude)" msgstr "地理位置点(经度、纬度)" -#: core/models.py:927 +#: core/models.py:941 msgid "full JSON response from geocoder for this address" msgstr "地理编码器对此地址的完整 JSON 响应" -#: core/models.py:932 +#: core/models.py:946 msgid "stored JSON response from the geocoding service" msgstr "存储的来自地理编码服务的 JSON 响应" -#: core/models.py:940 +#: core/models.py:954 msgid "address" msgstr "地址" -#: core/models.py:941 +#: core/models.py:955 msgid "addresses" msgstr "地址" -#: core/models.py:953 +#: core/models.py:967 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -1893,86 +1893,86 @@ msgstr "" "代表可用于折扣的促销代码,管理其有效期、折扣类型和应用。PromoCode " "类存储促销代码的详细信息,包括其唯一标识符、折扣属性(金额或百分比)、有效期、关联用户(如有)及其使用状态。该类包含验证促销代码并将其应用于订单的功能,同时确保符合约束条件。" -#: core/models.py:967 +#: core/models.py:981 msgid "unique code used by a user to redeem a discount" msgstr "用户用于兑换折扣的唯一代码" -#: core/models.py:968 +#: core/models.py:982 msgid "promo code identifier" msgstr "促销代码标识符" -#: core/models.py:975 +#: core/models.py:989 msgid "fixed discount amount applied if percent is not used" msgstr "如果不使用百分比,则使用固定折扣额" -#: core/models.py:976 +#: core/models.py:990 msgid "fixed discount amount" msgstr "固定折扣额" -#: core/models.py:982 +#: core/models.py:996 msgid "percentage discount applied if fixed amount is not used" msgstr "未使用固定金额时适用的折扣百分比" -#: core/models.py:983 +#: core/models.py:997 msgid "percentage discount" msgstr "折扣百分比" -#: core/models.py:988 +#: core/models.py:1002 msgid "timestamp when the promocode expires" msgstr "促销代码过期的时间戳" -#: core/models.py:989 +#: core/models.py:1003 msgid "end validity time" msgstr "结束有效时间" -#: core/models.py:994 +#: core/models.py:1008 msgid "timestamp from which this promocode is valid" msgstr "该促销代码有效的时间戳" -#: core/models.py:995 +#: core/models.py:1009 msgid "start validity time" msgstr "开始有效时间" -#: core/models.py:1000 +#: core/models.py:1014 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "使用促销代码的时间戳,如果尚未使用,则留空" -#: core/models.py:1001 +#: core/models.py:1015 msgid "usage timestamp" msgstr "使用时间戳" -#: core/models.py:1006 +#: core/models.py:1020 msgid "user assigned to this promocode if applicable" msgstr "分配给此促销代码的用户(如适用" -#: core/models.py:1007 +#: core/models.py:1021 msgid "assigned user" msgstr "指定用户" -#: core/models.py:1014 +#: core/models.py:1028 msgid "promo code" msgstr "促销代码" -#: core/models.py:1015 +#: core/models.py:1029 msgid "promo codes" msgstr "促销代码" -#: core/models.py:1022 +#: core/models.py:1044 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "只能定义一种折扣类型(金额或百分比),而不能同时定义两种类型或两者都不定义。" -#: core/models.py:1037 +#: core/models.py:1065 msgid "promocode already used" msgstr "促销代码已被使用" -#: core/models.py:1053 +#: core/models.py:1081 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "促销代码 {self.uuid} 的折扣类型无效!" -#: core/models.py:1062 +#: core/models.py:1090 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 " @@ -1983,144 +1983,144 @@ msgid "" msgstr "" "代表用户下达的订单。该类在应用程序中模拟订单,包括订单的各种属性,如账单和发货信息、状态、关联用户、通知和相关操作。订单可以有关联的产品,可以应用促销活动,设置地址,更新发货或账单详情。同样,该功能还支持在订单生命周期中管理产品。" -#: core/models.py:1079 +#: core/models.py:1107 msgid "the billing address used for this order" msgstr "该订单使用的账单地址" -#: core/models.py:1087 +#: core/models.py:1115 msgid "optional promo code applied to this order" msgstr "此订单可选择使用促销代码" -#: core/models.py:1088 +#: core/models.py:1116 msgid "applied promo code" msgstr "应用促销代码" -#: core/models.py:1096 +#: core/models.py:1124 msgid "the shipping address used for this order" msgstr "该订单使用的送货地址" -#: core/models.py:1097 +#: core/models.py:1125 msgid "shipping address" msgstr "送货地址" -#: core/models.py:1103 +#: core/models.py:1131 msgid "current status of the order in its lifecycle" msgstr "订单在其生命周期中的当前状态" -#: core/models.py:1104 +#: core/models.py:1132 msgid "order status" msgstr "订单状态" -#: core/models.py:1109 core/models.py:1560 +#: core/models.py:1137 core/models.py:1618 msgid "json structure of notifications to display to users" msgstr "向用户显示的通知的 JSON 结构,在管理用户界面中使用表格视图" -#: core/models.py:1115 +#: core/models.py:1143 msgid "json representation of order attributes for this order" msgstr "该订单属性的 JSON 表示形式" -#: core/models.py:1121 +#: core/models.py:1149 msgid "the user who placed the order" msgstr "下订单的用户" -#: core/models.py:1122 +#: core/models.py:1150 msgid "user" msgstr "用户" -#: core/models.py:1128 +#: core/models.py:1156 msgid "the timestamp when the order was finalized" msgstr "订单确定的时间戳" -#: core/models.py:1129 +#: core/models.py:1157 msgid "buy time" msgstr "购买时间" -#: core/models.py:1136 +#: core/models.py:1164 msgid "a human-readable identifier for the order" msgstr "订单的人工可读标识符" -#: core/models.py:1137 +#: core/models.py:1165 msgid "human readable id" msgstr "人类可读 ID" -#: core/models.py:1143 +#: core/models.py:1171 msgid "order" msgstr "订购" -#: core/models.py:1168 +#: core/models.py:1209 msgid "a user must have only one pending order at a time" msgstr "用户每次只能有一个挂单!" -#: core/models.py:1202 +#: core/models.py:1249 msgid "you cannot add products to an order that is not a pending one" msgstr "您不能向非待处理订单添加产品" -#: core/models.py:1207 +#: core/models.py:1254 msgid "you cannot add inactive products to order" msgstr "您不能在订单中添加非活动产品" -#: core/models.py:1224 +#: core/models.py:1271 msgid "you cannot add more products than available in stock" msgstr "添加的产品数量不能超过现有库存" -#: core/models.py:1246 core/models.py:1271 core/models.py:1279 +#: core/models.py:1293 core/models.py:1318 core/models.py:1326 msgid "you cannot remove products from an order that is not a pending one" msgstr "您不能从非待处理订单中删除产品" -#: core/models.py:1267 +#: core/models.py:1314 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "查询 <{query}> 时,{name} 不存在!" -#: core/models.py:1299 +#: core/models.py:1346 msgid "promocode does not exist" msgstr "促销代码不存在" -#: core/models.py:1305 +#: core/models.py:1352 msgid "you can only buy physical products with shipping address specified" msgstr "您只能购买指定送货地址的实物产品!" -#: core/models.py:1324 +#: core/models.py:1371 msgid "address does not exist" msgstr "地址不存在" -#: core/models.py:1345 core/models.py:1414 +#: core/models.py:1392 core/models.py:1461 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "您现在无法购买,请稍后再试。" -#: core/models.py:1348 core/models.py:1410 +#: core/models.py:1395 core/models.py:1457 msgid "invalid force value" msgstr "力值无效" -#: core/models.py:1354 core/models.py:1417 +#: core/models.py:1401 core/models.py:1464 msgid "you cannot purchase an empty order!" msgstr "您不能购买空单!" -#: core/models.py:1373 +#: core/models.py:1420 msgid "you cannot buy an order without a user" msgstr "没有用户就无法购买订单!" -#: core/models.py:1387 +#: core/models.py:1434 msgid "a user without a balance cannot buy with balance" msgstr "没有余额的用户不能使用余额购买!" -#: core/models.py:1392 +#: core/models.py:1439 msgid "insufficient funds to complete the order" msgstr "资金不足,无法完成订单" -#: core/models.py:1426 +#: core/models.py:1473 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "未经注册不能购买,请提供以下信息:客户姓名、客户电子邮件、客户电话号码" -#: core/models.py:1435 +#: core/models.py:1482 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "付款方式无效:来自 {available_payment_methods} 的 {payment_method} !" -#: core/models.py:1533 +#: core/models.py:1591 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2136,108 +2136,108 @@ msgstr "" "模型维护订单中产品的相关信息,包括购买价格、数量、产品属性和状态等详细信息。它为用户和管理员管理通知,并处理返回产品余额或添加反馈等操作。该模型还提供支持业务逻辑的方法和属性,如计算总价或为数字产品生成下载" " URL。该模型与订单和产品模型集成,并存储对它们的引用。" -#: core/models.py:1548 +#: core/models.py:1606 msgid "the price paid by the customer for this product at purchase time" msgstr "客户购买该产品时支付的价格" -#: core/models.py:1549 +#: core/models.py:1607 msgid "purchase price at order time" msgstr "订购时的购买价格" -#: core/models.py:1554 +#: core/models.py:1612 msgid "internal comments for admins about this ordered product" msgstr "管理员对该订购产品的内部评论" -#: core/models.py:1555 +#: core/models.py:1613 msgid "internal comments" msgstr "内部意见" -#: core/models.py:1561 +#: core/models.py:1619 msgid "user notifications" msgstr "用户通知" -#: core/models.py:1566 +#: core/models.py:1624 msgid "json representation of this item's attributes" msgstr "该项属性的 JSON 表示形式" -#: core/models.py:1567 +#: core/models.py:1625 msgid "ordered product attributes" msgstr "有序的产品属性" -#: core/models.py:1572 +#: core/models.py:1630 msgid "reference to the parent order that contains this product" msgstr "对包含该产品的父订单的引用" -#: core/models.py:1573 +#: core/models.py:1631 msgid "parent order" msgstr "父顺序" -#: core/models.py:1582 +#: core/models.py:1640 msgid "the specific product associated with this order line" msgstr "与该订单项目相关的具体产品" -#: core/models.py:1589 +#: core/models.py:1647 msgid "quantity of this specific product in the order" msgstr "订单中该特定产品的数量" -#: core/models.py:1590 +#: core/models.py:1648 msgid "product quantity" msgstr "产品数量" -#: core/models.py:1597 +#: core/models.py:1655 msgid "current status of this product in the order" msgstr "订单中该产品的当前状态" -#: core/models.py:1598 +#: core/models.py:1656 msgid "product line status" msgstr "产品系列状态" -#: core/models.py:1661 +#: core/models.py:1719 msgid "order product must have an order" msgstr "订单产品必须有相关的订单!" -#: core/models.py:1663 +#: core/models.py:1721 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "为反馈指定了错误的操作:{action}!" -#: core/models.py:1677 +#: core/models.py:1735 msgid "you cannot feedback an order which is not received" msgstr "您不能反馈未收到的订单" -#: core/models.py:1683 +#: core/models.py:1741 msgid "name" msgstr "名称" -#: core/models.py:1684 +#: core/models.py:1742 msgid "URL of the integration" msgstr "集成的 URL" -#: core/models.py:1685 +#: core/models.py:1743 msgid "authentication credentials" msgstr "认证证书" -#: core/models.py:1699 +#: core/models.py:1765 msgid "you can only have one default CRM provider" msgstr "只能有一个默认 CRM 提供商" -#: core/models.py:1703 +#: core/models.py:1775 msgid "CRM" msgstr "客户关系管理" -#: core/models.py:1704 +#: core/models.py:1776 msgid "CRMs" msgstr "客户关系管理" -#: core/models.py:1716 +#: core/models.py:1788 msgid "order CRM link" msgstr "订单的客户关系管理链接" -#: core/models.py:1717 +#: core/models.py:1789 msgid "orders CRM links" msgstr "订单的客户关系管理链接" -#: core/models.py:1722 +#: core/models.py:1794 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2250,19 +2250,15 @@ msgstr "" "类提供了管理和访问与订单产品相关的下载的功能。该类维护相关订单产品的信息、下载次数以及资产是否公开可见。当相关订单处于完成状态时,该类包含一个生成用于下载资产的" " URL 的方法。" -#: core/models.py:1736 +#: core/models.py:1808 msgid "download" msgstr "下载" -#: core/models.py:1737 +#: core/models.py:1809 msgid "downloads" msgstr "下载" -#: core/models.py:1745 -msgid "you can not download a digital asset for a non-finished order" -msgstr "您无法下载未完成订单的数字资产" - -#: core/models.py:1754 +#: core/models.py:1823 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2272,28 +2268,28 @@ msgid "" msgstr "" "管理产品的用户反馈。该类用于捕获和存储用户对其购买的特定产品的反馈。它包含用于存储用户评论的属性、订单中相关产品的引用以及用户指定的评分。该类使用数据库字段对反馈数据进行有效建模和管理。" -#: core/models.py:1766 +#: core/models.py:1835 msgid "user-provided comments about their experience with the product" msgstr "用户提供的产品使用体验评论" -#: core/models.py:1767 +#: core/models.py:1836 msgid "feedback comments" msgstr "反馈意见" -#: core/models.py:1774 +#: core/models.py:1843 msgid "" "references the specific product in an order that this feedback is about" msgstr "引用该反馈意见涉及的订单中的具体产品" -#: core/models.py:1775 +#: core/models.py:1844 msgid "related order product" msgstr "相关订购产品" -#: core/models.py:1780 +#: core/models.py:1849 msgid "user-assigned rating for the product" msgstr "用户对产品的评分" -#: core/models.py:1781 +#: core/models.py:1850 msgid "product rating" msgstr "产品评级" @@ -2486,11 +2482,11 @@ msgstr "" "版权所有\n" " 保留所有权利" -#: core/utils/caching.py:41 +#: core/utils/caching.py:48 msgid "both data and timeout are required" msgstr "需要数据和超时" -#: core/utils/caching.py:43 +#: core/utils/caching.py:50 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "超时值无效,必须介于 0 和 216000 秒之间" @@ -2522,24 +2518,276 @@ msgstr "您没有执行此操作的权限。" msgid "NOMINATIM_URL must be configured." msgstr "必须配置 NOMINATIM_URL 参数!" -#: core/validators.py:16 +#: core/validators.py:14 #, 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/validators.py:22 -msgid "invalid phone number format" -msgstr "电话号码格式无效" +#: core/views.py:72 +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:489 +#: core/views.py:87 +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 +msgid "" +"Returns a list of supported languages and their corresponding information." +msgstr "返回支持语言及其相应信息的列表。" + +#: core/views.py:148 +msgid "Returns the parameters of the website as a JSON object." +msgstr "以 JSON 对象形式返回网站参数。" + +#: core/views.py:167 +msgid "" +"Handles cache operations such as reading and setting cache data with a " +"specified key and timeout." +msgstr "处理缓存操作,如使用指定的键和超时读取和设置缓存数据。" + +#: core/views.py:194 +msgid "Handles `contact us` form submissions." +msgstr "处理 \"联系我们 \"表单提交。" + +#: core/views.py:215 +msgid "" +"Handles requests for processing and validating URLs from incoming POST " +"requests." +msgstr "处理来自传入 POST 请求的处理和验证 URL 的请求。" + +#: core/views.py:255 +msgid "Handles global search queries." +msgstr "处理全局搜索查询。" + +#: core/views.py:270 +msgid "Handles the logic of buying as a business without registration." +msgstr "处理未注册企业的购买逻辑。" + +#: core/views.py:312 msgid "you can only download the digital asset once" msgstr "您只能下载一次数字资产" -#: core/views.py:547 +#: core/views.py:315 +msgid "the order must be paid before downloading the digital asset" +msgstr "在下载数字资产前必须支付订单费用" + +#: core/views.py:353 +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." +msgstr "" +"处理与订单相关的数字资产的下载。\n" +"此函数会尝试为位于项目存储目录中的数字资产文件提供服务。如果未找到文件,则会出现 HTTP 404 错误,表示资源不可用。" + +#: core/views.py:365 msgid "favicon not found" msgstr "未找到 favicon" -#: core/viewsets.py:1357 +#: core/views.py:370 +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." +msgstr "" +"处理网站的 favicon 请求。\n" +"该函数会尝试为位于项目静态目录中的 favicon 文件提供服务。如果找不到 favicon 文件,就会出现 HTTP 404 错误,表示资源不可用。" + +#: core/views.py:382 +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 "" +"将请求重定向到管理索引页面。该函数处理传入的 HTTP 请求并将其重定向到 Django 管理界面索引页面。它使用 Django 的 " +"`redirect` 函数来处理 HTTP 重定向。" + +#: core/viewsets.py:128 +msgid "" +"Defines a viewset for managing Evibes-related operations. The EvibesViewSet " +"class inherits from ModelViewSet and provides functionality for handling " +"actions and operations on Evibes entities. It includes support for dynamic " +"serializer classes based on the current action, customizable permissions, " +"and rendering formats." +msgstr "" +"定义用于管理 Evibes 相关操作的视图集。EvibesViewSet 类继承于 ModelViewSet,提供了处理 Evibes " +"实体上的操作和运行的功能。它包括支持基于当前操作的动态序列化类、可定制的权限和渲染格式。" + +#: core/viewsets.py:147 +msgid "" +"Represents a viewset for managing AttributeGroup objects. Handles operations" +" related to AttributeGroup, including filtering, serialization, and " +"retrieval of data. This class is part of the application's API layer and " +"provides a standardized way to process requests and responses for " +"AttributeGroup data." +msgstr "" +"代表用于管理属性组对象的视图集。处理与 AttributeGroup 相关的操作,包括过滤、序列化和检索数据。该类是应用程序 API 层的一部分,为处理" +" AttributeGroup 数据的请求和响应提供了标准化方法。" + +#: core/viewsets.py:166 +msgid "" +"Handles operations related to Attribute objects within the application. " +"Provides a set of API endpoints to interact with Attribute data. This class " +"manages querying, filtering, and serialization of Attribute objects, " +"allowing dynamic control over the data returned, such as filtering by " +"specific fields or retrieving detailed versus simplified information " +"depending on the request." +msgstr "" +"在应用程序中处理与属性对象相关的操作。提供一组 API " +"端点,用于与属性数据交互。该类管理属性对象的查询、过滤和序列化,允许对返回的数据进行动态控制,例如根据请求按特定字段进行过滤或检索详细信息与简化信息。" + +#: core/viewsets.py:185 +msgid "" +"A viewset for managing AttributeValue objects. This viewset provides " +"functionality for listing, retrieving, creating, updating, and deleting " +"AttributeValue objects. It integrates with Django REST Framework's viewset " +"mechanisms and uses appropriate serializers for different actions. Filtering" +" capabilities are provided through the DjangoFilterBackend." +msgstr "" +"用于管理 AttributeValue 对象的视图集。该视图集提供了用于列出、检索、创建、更新和删除 AttributeValue 对象的功能。它与 " +"Django REST 框架的视图集机制集成,并为不同的操作使用适当的序列化器。过滤功能通过 DjangoFilterBackend 提供。" + +#: core/viewsets.py:204 +msgid "" +"Manages views for Category-related operations. The CategoryViewSet class is " +"responsible for handling operations related to the Category model in the " +"system. It supports retrieving, filtering, and serializing category data. " +"The viewset also enforces permissions to ensure that only authorized users " +"can access specific data." +msgstr "" +"管理类别相关操作的视图。CategoryViewSet " +"类负责处理系统中与类别模型相关的操作。它支持类别数据的检索、过滤和序列化。视图集还强制执行权限,确保只有授权用户才能访问特定数据。" + +#: core/viewsets.py:315 +msgid "" +"Represents a viewset for managing Brand instances. This class provides " +"functionality for querying, filtering, and serializing Brand objects. It " +"uses Django's ViewSet framework to simplify the implementation of API " +"endpoints for Brand objects." +msgstr "" +"代表用于管理品牌实例的视图集。该类提供了查询、过滤和序列化品牌对象的功能。它使用 Django 的 ViewSet 框架来简化品牌对象 API " +"端点的实现。" + +#: core/viewsets.py:427 +msgid "" +"Manages operations related to the `Product` model in the system. This class " +"provides a viewset for managing products, including their filtering, " +"serialization, and operations on specific instances. It extends from " +"`EvibesViewSet` to use common functionality and integrates with the Django " +"REST framework for RESTful API operations. Includes methods for retrieving " +"product details, applying permissions, and accessing related feedback of a " +"product." +msgstr "" +"管理与系统中的 \"产品 \"模型相关的操作。该类为管理产品提供了一个视图集,包括产品的筛选、序列化和对特定实例的操作。该类从 " +"`EvibesViewSet` 扩展而来,使用通用功能,并与 Django REST 框架集成,用于 RESTful API " +"操作。包括检索产品详细信息、应用权限和访问产品相关反馈的方法。" + +#: core/viewsets.py:547 +msgid "" +"Represents a viewset for managing Vendor objects. This viewset allows " +"fetching, filtering, and serializing Vendor data. It defines the queryset, " +"filter configurations, and serializer classes used to handle different " +"actions. The purpose of this class is to provide streamlined access to " +"Vendor-related resources through the Django REST framework." +msgstr "" +"代表用于管理供应商对象的视图集。该视图集允许获取、过滤和序列化 Vendor " +"数据。它定义了用于处理不同操作的查询集、过滤器配置和序列化器类。该类的目的是通过 Django REST 框架提供对 Vendor 相关资源的简化访问。" + +#: core/viewsets.py:567 +msgid "" +"Representation of a view set handling Feedback objects. This class manages " +"operations related to Feedback objects, including listing, filtering, and " +"retrieving details. The purpose of this view set is to provide different " +"serializers for different actions and implement permission-based handling of" +" accessible Feedback objects. It extends the base `EvibesViewSet` and makes " +"use of Django's filtering system for querying data." +msgstr "" +"处理反馈对象的视图集的表示。该类管理与反馈对象相关的操作,包括列出、筛选和检索详细信息。该视图集的目的是为不同的操作提供不同的序列化器,并对可访问的反馈对象实施基于权限的处理。它扩展了基本的" +" `EvibesViewSet` 并使用 Django 的过滤系统来查询数据。" + +#: core/viewsets.py:593 +msgid "" +"ViewSet for managing orders and related operations. This class provides " +"functionality to retrieve, modify, and manage order objects. It includes " +"various endpoints for handling order operations such as adding or removing " +"products, performing purchases for registered as well as unregistered users," +" and retrieving the current authenticated user's pending orders. The ViewSet" +" uses multiple serializers based on the specific action being performed and " +"enforces permissions accordingly while interacting with order data." +msgstr "" +"用于管理订单和相关操作的 " +"ViewSet。该类提供了检索、修改和管理订单对象的功能。它包括用于处理订单操作的各种端点,如添加或删除产品、为注册用户和未注册用户执行购买操作,以及检索当前已验证用户的待处理订单。ViewSet" +" 根据正在执行的特定操作使用多个序列化器,并在与订单数据交互时执行相应的权限。" + +#: core/viewsets.py:782 +msgid "" +"Provides a viewset for managing OrderProduct entities. This viewset enables " +"CRUD operations and custom actions specific to the OrderProduct model. It " +"includes filtering, permission checks, and serializer switching based on the" +" requested action. Additionally, it provides a detailed action for handling " +"feedback on OrderProduct instances" +msgstr "" +"提供用于管理 OrderProduct 实体的视图集。该视图集可进行 CRUD 操作和特定于 OrderProduct " +"模型的自定义操作。它包括过滤、权限检查和根据请求的操作切换序列化器。此外,它还提供了一个详细的操作,用于处理有关 OrderProduct " +"实例的反馈信息" + +#: core/viewsets.py:833 +msgid "Manages operations related to Product images in the application. " +msgstr "管理应用程序中与产品图像相关的操作。" + +#: core/viewsets.py:845 +msgid "" +"Manages the retrieval and handling of PromoCode instances through various " +"API actions." +msgstr "通过各种 API 操作管理 PromoCode 实例的检索和处理。" + +#: core/viewsets.py:866 +msgid "Represents a view set for managing promotions. " +msgstr "代表用于管理促销活动的视图集。" + +#: core/viewsets.py:878 +msgid "Handles operations related to Stock data in the system." +msgstr "处理系统中与库存数据有关的操作。" + +#: core/viewsets.py:892 +msgid "" +"ViewSet for managing Wishlist operations. The WishlistViewSet provides " +"endpoints for interacting with a user's wish list, allowing for the " +"retrieval, modification, and customization of products within the wish list." +" This ViewSet facilitates functionality such as adding, removing, and bulk " +"actions for wishlist products. Permission checks are integrated to ensure " +"that users can only manage their own wishlists unless explicit permissions " +"are granted." +msgstr "" +"用于管理愿望清单操作的 ViewSet。WishlistViewSet 提供了与用户愿望清单交互的端点,允许检索、修改和定制愿望清单中的产品。该 " +"ViewSet 支持添加、删除和批量操作愿望清单产品等功能。此外,还集成了权限检查功能,以确保用户只能管理自己的愿望清单,除非获得明确的权限。" + +#: core/viewsets.py:1007 +msgid "" +"This class provides viewset functionality for managing `Address` objects. " +"The AddressViewSet class enables CRUD operations, filtering, and custom " +"actions related to address entities. It includes specialized behaviors for " +"different HTTP methods, serializer overrides, and permission handling based " +"on the request context." +msgstr "" +"该类为管理 \"地址 \"对象提供了视图集功能。AddressViewSet 类支持与地址实体相关的 CRUD 操作、过滤和自定义操作。它包括针对不同 " +"HTTP 方法的专门行为、序列化器重载以及基于请求上下文的权限处理。" + +#: core/viewsets.py:1074 #, python-brace-format msgid "Geocoding error: {e}" msgstr "地理编码错误:{e}" + +#: core/viewsets.py:1081 +msgid "" +"Handles operations related to Product Tags within the application. This " +"class provides functionality for retrieving, filtering, and serializing " +"Product Tag objects. It supports flexible filtering on specific attributes " +"using the specified filter backend and dynamically uses different " +"serializers based on the action being performed." +msgstr "" +"在应用程序中处理与产品标签相关的操作。该类提供了检索、筛选和序列化产品标签对象的功能。它支持使用指定的过滤后端对特定属性进行灵活过滤,并根据正在执行的操作动态使用不同的序列化器。" diff --git a/core/management/commands/__init__.py b/core/management/commands/__init__.py index 91990fd1..21794264 100644 --- a/core/management/commands/__init__.py +++ b/core/management/commands/__init__.py @@ -2,7 +2,7 @@ from django.conf import settings class RootDirectory: - def __init__(self): + def __init__(self) -> None: self.label = "root" self.path = settings.BASE_DIR / "evibes" diff --git a/core/management/commands/translate_fields.py b/core/management/commands/translate_fields.py index 2b0093df..0d4dc1e8 100644 --- a/core/management/commands/translate_fields.py +++ b/core/management/commands/translate_fields.py @@ -1,5 +1,6 @@ import importlib import os +from argparse import ArgumentParser import requests from django.core.management.base import BaseCommand, CommandError @@ -16,7 +17,7 @@ class Command(BaseCommand): "in the translated_ field created by django-modeltranslation." ) - def add_arguments(self, parser): + def add_arguments(self, parser: ArgumentParser) -> None: parser.add_argument( "-t", "--target", @@ -30,7 +31,7 @@ class Command(BaseCommand): help="Modeltranslation language code to translate into, e.g. de-de, fr-fr, zh-hans", ) - def handle(self, *args, **options): + def handle(self, *args, **options) -> None: target = options["target"] lang = options["language"].lower() diff --git a/core/models.py b/core/models.py index a263fa47..0bfa8f64 100644 --- a/core/models.py +++ b/core/models.py @@ -139,7 +139,15 @@ class Vendor(ExportModelOperationsMixin("vendor"), NiceModel): # type: ignore [ def __str__(self) -> str: return self.name - def save(self, **kwargs) -> None: + def save( + self, + *, + force_insert=False, + force_update=False, + using=None, + update_fields=None, + update_modified: bool = True, + ) -> None: users = self.users.filter(is_active=True) users = users.exclude(attributes__icontains="is_business") if users.count() > 0: @@ -148,7 +156,13 @@ class Vendor(ExportModelOperationsMixin("vendor"), NiceModel): # type: ignore [ user.attributes = {} user.attributes.update({"is_business": True}) user.save() - return super().save(**kwargs) + return super().save( + force_insert=force_insert, + force_update=force_update, + using=using, + update_fields=update_fields, + update_modified=update_modified, + ) class Meta: verbose_name = _("vendor") @@ -1014,14 +1028,28 @@ class PromoCode(ExportModelOperationsMixin("promocode"), NiceModel): # type: ig verbose_name = _("promo code") verbose_name_plural = _("promo codes") - def save(self, **kwargs): + def save( + self, + *args, + force_insert=False, + force_update=False, + using=None, + update_fields=None, + update_modified: bool = True, + ) -> None: if (self.discount_amount is not None and self.discount_percent is not None) or ( self.discount_amount is None and self.discount_percent is None ): raise ValidationError( _("only one type of discount should be defined (amount or percent), but not both or neither.") ) - super().save(**kwargs) + return super().save( + force_insert=force_insert, + force_update=force_update, + using=using, + update_fields=update_fields, + update_modified=update_modified, + ) def __str__(self) -> str: return self.code @@ -1152,21 +1180,40 @@ class Order(ExportModelOperationsMixin("order"), NiceModel): # type: ignore [mi self.attributes = {} self.save() return False + if self.user: + if type(self.user.attributes) is not dict: + self.user.attributes = {} + self.user.save() + return False with suppress(Exception): return (self.attributes.get("is_business", False) if self.attributes else False) or ( - (self.user.attributes.get("is_business", False) and self.user.attributes.get("business_identificator")) + (self.user.attributes.get("is_business", False) and self.user.attributes.get("business_identificator")) # type: ignore [union-attr] if self.user else False ) return False - def save(self, **kwargs) -> Self: + def save( + self, + *args, + force_insert=False, + force_update=False, + using=None, + update_fields=None, + update_modified: bool = True, + ) -> None: pending_orders = 0 if self.user: pending_orders = self.user.orders.filter(status="PENDING").count() if self.status == "PENDING" and pending_orders > 1: raise ValueError(_("a user must have only one pending order at a time")) - return super().save(**kwargs) + return super().save( + force_insert=force_insert, + force_update=force_update, + using=using, + update_fields=update_fields, + update_modified=update_modified, + ) @property def total_price(self) -> float: @@ -1313,8 +1360,8 @@ class Order(ExportModelOperationsMixin("order"), NiceModel): # type: ignore [mi shipping_address = billing_address else: - billing_address = Address.objects.get(uuid=billing_address_uuid) - shipping_address = Address.objects.get(uuid=shipping_address_uuid) + billing_address = Address.objects.get(uuid=str(billing_address_uuid)) + shipping_address = Address.objects.get(uuid=str(shipping_address_uuid)) self.billing_address = billing_address self.shipping_address = shipping_address @@ -1527,6 +1574,17 @@ class Order(ExportModelOperationsMixin("order"), NiceModel): # type: ignore [mi logger.error(traceback.format_exc()) return False + @property + def business_identificator(self) -> str | None: + if self.attributes: + return self.attributes.get("business_identificator") or self.attributes.get("businessIdentificator") + if self.user: + if self.user.attributes: + return self.user.attributes.get("business_identificator") or self.user.attributes.get( + "businessIdentificator" + ) + return None + class OrderProduct(ExportModelOperationsMixin("order_product"), NiceModel): # type: ignore [misc, django-manager-missing] __doc__ = _( # type: ignore @@ -1679,7 +1737,7 @@ class OrderProduct(ExportModelOperationsMixin("order_product"), NiceModel): # t return None -class CustomerRelationshipManagementProvider(ExportModelOperationsMixin("crm_provider"), NiceModel): +class CustomerRelationshipManagementProvider(ExportModelOperationsMixin("crm_provider"), NiceModel): # type: ignore [misc, django-manager-missing] name = CharField(max_length=128, unique=True, verbose_name=_("name")) integration_url = URLField(blank=True, null=True, help_text=_("URL of the integration")) authentication = JSONField(blank=True, null=True, help_text=_("authentication credentials")) @@ -1690,14 +1748,28 @@ class CustomerRelationshipManagementProvider(ExportModelOperationsMixin("crm_pro def __str__(self) -> str: return self.name - def save(self, **kwargs): + def save( + self, + *args, + force_insert=False, + force_update=False, + using=None, + update_fields=None, + update_modified: bool = True, + ) -> None: if self.default: qs = type(self).objects.all() if self.pk: qs = qs.exclude(pk=self.pk) if qs.filter(default=True).exists(): raise ValueError(_("you can only have one default CRM provider")) - super().save(**kwargs) + super().save( + force_insert=force_insert, + force_update=force_update, + using=using, + update_fields=update_fields, + update_modified=update_modified, + ) class Meta: verbose_name = _("CRM") @@ -1741,9 +1813,6 @@ class DigitalAssetDownload(ExportModelOperationsMixin("attribute_group"), NiceMo @property def url(self): - if self.order_product.status != "FINISHED": - raise ValueError(_("you can not download a digital asset for a non-finished order")) - return ( f"https://api.{config.BASE_DOMAIN}/download/{urlsafe_base64_encode(force_bytes(self.order_product.uuid))}" ) diff --git a/core/signals.py b/core/signals.py index 0f7a668e..e9f5b9e5 100644 --- a/core/signals.py +++ b/core/signals.py @@ -84,15 +84,18 @@ def process_order_changes(instance, created, **_kwargs): except IntegrityError: human_readable_id = generate_human_readable_id() while True: - if Order.objects.filter(human_readable_id=human_readable_id).exists(): - human_readable_id = generate_human_readable_id() + try: + if Order.objects.filter(human_readable_id=human_readable_id).exists(): + human_readable_id = generate_human_readable_id() + continue + Order.objects.create( + user=instance, + status="PENDING", + human_readable_id=human_readable_id, + ) + break + except IntegrityError: continue - Order.objects.create( - user=instance, - status="PENDING", - human_readable_id=human_readable_id, - ) - break if instance.status in ["CREATED", "PAYMENT"]: if not instance.is_whole_digital: @@ -110,12 +113,15 @@ def process_order_changes(instance, created, **_kwargs): if has_file: order_product.status = "FINISHED" - download = DigitalAssetDownload.objects.create(order_product=order_product) - order_product.download = download - order_product.save() - order_product.order.user.payments_balance.amount -= order_product.buy_price - order_product.order.user.payments_balance.save() - continue + if not order_product.download: + DigitalAssetDownload.objects.create(order_product=order_product) + order_product.order.user.payments_balance.amount -= order_product.buy_price + order_product.order.user.payments_balance.save() + order_product.save() + continue + + order_product.save() + try: vendor_name = ( order_product.product.stocks.filter(price=order_product.buy_price).first().vendor.name.lower() diff --git a/core/tasks.py b/core/tasks.py index 39faaca7..c71f5bdb 100644 --- a/core/tasks.py +++ b/core/tasks.py @@ -13,7 +13,7 @@ from django.core.cache import cache from core.models import Product, Promotion from core.utils.caching import set_default_cache -from core.vendors import delete_stale, VendorInactiveError +from core.vendors import VendorInactiveError, delete_stale from evibes.settings import MEDIA_ROOT logger = get_task_logger(__name__) @@ -38,7 +38,7 @@ def update_products_task() -> tuple[bool, str]: if not update_products_task_running: cache.set("update_products_task_running", True, 86400) - vendors_classes = [] + vendors_classes: list = [] for vendor_class in vendors_classes: vendor = vendor_class() @@ -69,7 +69,7 @@ def update_orderproducts_task() -> tuple[bool, str]: message confirming the successful execution of the task. :rtype: Tuple[bool, str] """ - vendors_classes = [] + vendors_classes: list = [] for vendor_class in vendors_classes: vendor = vendor_class() @@ -95,7 +95,7 @@ def set_default_caches_task() -> tuple[bool, str]: @shared_task(queue="default") -def remove_stale_product_images() -> tuple[bool, str] | None: +def remove_stale_product_images() -> tuple[bool, str]: """ Removes stale product images from the products directory by identifying directories whose names do not match any UUIDs currently present in the database. @@ -114,7 +114,7 @@ def remove_stale_product_images() -> tuple[bool, str] | None: products_dir = os.path.join(MEDIA_ROOT, "products") if not os.path.isdir(products_dir): logger.info("The products directory does not exist: %s", products_dir) - return + return True, "The products directory does not exist." # Load all current product UUIDs into a set. # This query returns all product UUIDs (as strings or UUID objects). @@ -139,6 +139,7 @@ def remove_stale_product_images() -> tuple[bool, str] | None: logger.info("Removed stale product images directory: %s", entry_path) except Exception as e: logger.error("Error removing directory %s: %s", entry_path, e) + return True, "Successfully removed stale product images." @shared_task(queue="default") diff --git a/core/templates/json_table_widget.html b/core/templates/json_table_widget.html index 5871a651..6d43c684 100644 --- a/core/templates/json_table_widget.html +++ b/core/templates/json_table_widget.html @@ -6,31 +6,31 @@ {% blocktrans %}value{% endblocktrans %} - - {% for key, value in widget.value.items %} - + + {% for idx, item in widget.value.items %} + - {% if value is list %} + {% if item.1 is list %} {% else %} {% endif %} {% endfor %} - + @@ -49,23 +49,38 @@ }); function addRow(event) { - let tableId = event.target.getAttribute("data-table-id"); - let table = document.getElementById(tableId); + const tableBodyId = event.target.getAttribute("data-table-id"); + const tbody = document.getElementById(tableBodyId); + if (!tbody) return; - if (table) { - let lastRow = table.querySelector("tr:last-child"); - let rowIndex = (parseInt(lastRow.getAttribute("data-row-index"), 10) + 1).toString(); + const lastRow = tbody.querySelector("tr:last-child"); + const lastIndex = lastRow ? parseInt(lastRow.getAttribute("data-row-index"), 10) : -1; + const rowIndex = Number.isFinite(lastIndex) ? lastIndex + 1 : 0; - let row = table.insertRow(); - row.setAttribute("data-row-index", rowIndex); + const namePrefix = tbody.getAttribute("data-name"); + if (!namePrefix) return; - let keyCell = row.insertCell(0); - let valueCell = row.insertCell(1); + const tr = document.createElement("tr"); + tr.setAttribute("data-row-index", String(rowIndex)); - let namePrefix = tableId.replace("json-fields-", ""); + const tdKey = document.createElement("td"); + const labelKey = document.createElement("label"); + const inputKey = document.createElement("input"); + inputKey.type = "text"; + inputKey.name = `${namePrefix}[${rowIndex}][key]`; + labelKey.appendChild(inputKey); + tdKey.appendChild(labelKey); - keyCell.innerHTML = ``; - valueCell.innerHTML = ``; - } + const tdVal = document.createElement("td"); + const labelVal = document.createElement("label"); + const inputVal = document.createElement("input"); + inputVal.type = "text"; + inputVal.name = `${namePrefix}[${rowIndex}][value]`; + labelVal.appendChild(inputVal); + tdVal.appendChild(labelVal); + + tr.appendChild(tdKey); + tr.appendChild(tdVal); + tbody.appendChild(tr); } - + \ No newline at end of file diff --git a/core/utils/__init__.py b/core/utils/__init__.py index 6b904606..a8416cfa 100644 --- a/core/utils/__init__.py +++ b/core/utils/__init__.py @@ -15,7 +15,7 @@ from evibes.settings import DEBUG, EXPOSABLE_KEYS, LANGUAGE_CODE logger = logging.getLogger("django") -def graphene_current_lang(): +def graphene_current_lang() -> str: """ Determines the currently active language code. @@ -45,7 +45,7 @@ def graphene_abs(request, path_or_url: str) -> str: Returns: str: The absolute URI corresponding to the provided path or URL. """ - return request.build_absolute_uri(path_or_url) + return str(request.build_absolute_uri(path_or_url)) def get_random_code() -> str: @@ -64,40 +64,10 @@ def get_random_code() -> str: def get_product_uuid_as_path(instance, filename: str = "") -> str: - """ - Generates a file path for a product using its UUID. - - This function constructs a standardized file path where an uploaded file - is saved for a product. The path includes a `products` directory, followed - by the product's UUID, and concludes with the original filename. It can be - utilized in file storage applications to ensure unique and organized file - storage based on the product's identity. - - Args: - instance: The object instance that contains a reference to the product. - filename: str, optional. The name of the file being uploaded. Default is an - empty string. - - Returns: - str: A string that represents the constructed file path. - """ return "products" + "/" + str(instance.product.uuid) + "/" + filename def get_brand_name_as_path(instance, filename: str = "") -> str: - """ - Generates a file path for a brand based on its name and the provided filename. - - This function constructs a unique file path within the 'brands/' directory using - the name of the given instance and appends the supplied filename. - - Parameters: - instance: An object containing a 'name' attribute. - filename: str, optional. The name of the file to be appended to the path. - - Returns: - str: A string representing the constructed file path. - """ return "brands/" + str(instance.name) + "/" + filename @@ -111,9 +81,6 @@ def atomic_if_not_debug(): database transaction, preventing partial updates to the database in case of an exception. If the DEBUG setting is enabled, no transaction is enforced, allowing for easier debugging. - - Yields: - None: This context manager does not return any values. """ if not DEBUG: with transaction.atomic(): @@ -123,18 +90,6 @@ def atomic_if_not_debug(): def is_url_safe(url: str) -> bool: - """ - Determines if a given URL starts with "https://" indicating it is a secure URL. - - This function checks if the provided URL adheres to secure HTTPS protocol. - It uses a regular expression to validate the URL prefix. - - Parameters: - url (str): The URL string to validate. - - Returns: - bool: True if the URL starts with "https://", False otherwise. - """ return bool(re.match(r"^https://", url, re.IGNORECASE)) @@ -146,14 +101,6 @@ def format_attributes(attributes: str | None = None) -> dict: formatted as `key=value` pairs separated by commas, and converts it into a dictionary. It returns an empty dictionary if the input is `None` or invalid. Invalid key-value pairs within the input string are skipped. - - Parameters: - attributes (str | None): A comma-separated string of key-value pairs in the - format `key=value`, or None. - - Returns: - dict: A dictionary where keys are the attribute names and values are their - corresponding values. """ if not attributes: return {} @@ -182,9 +129,6 @@ def get_project_parameters() -> dict: If they are not cached, it collects the parameters from a designated configuration source, formats their keys to lowercase, and then stores them in the cache for a limited period. - - Returns: - dict: A dictionary containing the project parameters with lowercase keys. """ parameters = cache.get("parameters", {}) @@ -197,19 +141,11 @@ def get_project_parameters() -> dict: return parameters -def resolve_translations_for_elasticsearch(instance, field_name) -> None: +def resolve_translations_for_elasticsearch(instance, field_name: str) -> None: """ Resolves translations for a given field in an Elasticsearch-compatible format. It checks if the localized version of the field contains data, and if not, sets it to the value of the default field. - - Parameters: - instance: The object instance containing the field to resolve. - field_name (str): The base name of the field for which translations - are being resolved. - - Returns: - None """ field = getattr(instance, f"{field_name}_{LANGUAGE_CODE}", "") filled_field = getattr(instance, field_name, "") diff --git a/core/utils/caching.py b/core/utils/caching.py index 6071e154..737e1070 100644 --- a/core/utils/caching.py +++ b/core/utils/caching.py @@ -1,10 +1,15 @@ import json import logging from pathlib import Path +from typing import Any +from django.contrib.auth.base_user import AbstractBaseUser +from django.contrib.auth.models import AnonymousUser 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 @@ -26,7 +31,9 @@ def get_cached_value(user: User, key: str, default=None) -> None | object: return None -def set_cached_value(user: User, key: str, value: object, timeout: int = 3600) -> None | object: +def set_cached_value( + user: User | AbstractBaseUser | AnonymousUser, key: str, value: object, timeout: int = 3600 +) -> None | object: if user.is_staff or user.is_superuser: cache.set(key, value, timeout) return value @@ -34,7 +41,7 @@ def set_cached_value(user: User, key: str, value: object, timeout: int = 3600) - return None -def web_cache(request, key, data, timeout): +def web_cache(request: Request | Context, key: str, data: dict[str, Any], timeout: int): if not data and not timeout: return {"data": get_cached_value(request.user, key)} if (data and not timeout) or (timeout and not data): @@ -44,7 +51,7 @@ def web_cache(request, key, data, timeout): return {"data": set_cached_value(request.user, key, data, timeout)} -def set_default_cache(): +def set_default_cache() -> None: data_dir = Path(__file__).resolve().parent.parent / "data" for json_file in data_dir.glob("*.json"): with json_file.open("r", encoding="utf-8") as f: diff --git a/core/validators.py b/core/validators.py index 59ccd7e6..409c6496 100644 --- a/core/validators.py +++ b/core/validators.py @@ -1,11 +1,9 @@ -import re - from django.core.exceptions import ValidationError -from django.core.files.images import get_image_dimensions +from django.core.files.images import ImageFile, get_image_dimensions from django.utils.translation import gettext_lazy as _ -def validate_category_image_dimensions(image): +def validate_category_image_dimensions(image: ImageFile) -> None: max_width = 99999 max_height = 99999 @@ -14,9 +12,3 @@ def validate_category_image_dimensions(image): if width > max_width or height > max_height: raise ValidationError(_(f"image dimensions should not exceed w{max_width} x h{max_height} pixels")) - - -def validate_phone_number(value, **_kwargs): - phone_regex = re.compile(r"^\+?1?\d{9,15}$") - if not phone_regex.match(value): - raise ValidationError(_("invalid phone number format")) diff --git a/core/vendors/__init__.py b/core/vendors/__init__.py index 8ec7137d..4f7bf541 100644 --- a/core/vendors/__init__.py +++ b/core/vendors/__init__.py @@ -5,6 +5,7 @@ from math import ceil, log10 from typing import Any from django.db import IntegrityError, transaction +from django.db.models import QuerySet from core.elasticsearch import process_system_query from core.models import ( @@ -235,7 +236,7 @@ class AbstractVendor: if not rate: raise RatesError(f"No rate found for {currency or self.currency} in {rates} with probider {provider}...") - return float(round(price / rate, 2)) if rate else round(price, 2) + return float(round(price / rate, 2)) if rate else float(round(price, 2)) # type: ignore [arg-type] @staticmethod def round_price_marketologically(price: float) -> float: @@ -282,13 +283,13 @@ class AbstractVendor: def get_products(self) -> None: pass - def get_products_queryset(self): + def get_products_queryset(self) -> QuerySet[Product]: return Product.objects.filter(stocks__vendor=self.get_vendor_instance(), orderproduct__isnull=True) - def get_stocks_queryset(self): + def get_stocks_queryset(self) -> QuerySet[Stock]: return Stock.objects.filter(product__in=self.get_products_queryset(), product__orderproduct__isnull=True) - def get_attribute_values_queryset(self): + def get_attribute_values_queryset(self) -> QuerySet[AttributeValue]: return AttributeValue.objects.filter( product__in=self.get_products_queryset(), product__orderproduct__isnull=True ) diff --git a/core/views.py b/core/views.py index 5083f47c..6cce9afb 100644 --- a/core/views.py +++ b/core/views.py @@ -8,7 +8,7 @@ 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 from django.core.exceptions import BadRequest -from django.http import FileResponse, Http404, JsonResponse +from django.http import FileResponse, Http404, JsonResponse, HttpRequest, HttpResponseRedirect from django.shortcuts import redirect from django.utils.decorators import method_decorator from django.utils.http import urlsafe_base64_decode @@ -24,6 +24,7 @@ from graphene_file_upload.django import FileUploadGraphQLView from rest_framework import status from rest_framework.permissions import AllowAny from rest_framework.renderers import MultiPartRenderer +from rest_framework.request import Request from rest_framework.response import Response from rest_framework.views import APIView from rest_framework_xml.renderers import XMLRenderer @@ -61,74 +62,40 @@ logger = logging.getLogger("django") @cache_page(60 * 60 * 12) @vary_on_headers("Host") def sitemap_index(request, *args, **kwargs): - """ - Handles the request for the sitemap index and returns an XML response. It ensures the response includes - the appropriate content type header for XML. - - Args: - request: The HTTP request object. - *args: Additional positional arguments passed to the view. - **kwargs: Additional keyword arguments passed to the view. - - Returns: - A response object containing the sitemap index in XML format, with the proper content type set as - "application/xml; charset=utf-8". - """ response = _sitemap_index_view(request, *args, **kwargs) response["Content-Type"] = "application/xml; charset=utf-8" return response +# noinspection PyTypeChecker +sitemap_index.__doc__ = _( # type: ignore [assignment] + "Handles the request for the sitemap index and returns an XML response. " + "It ensures the response includes the appropriate content type header for XML." +) + + @cache_page(60 * 60 * 24) @vary_on_headers("Host") def sitemap_detail(request, *args, **kwargs): - """ - 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 responses. - - Args: - request: An HTTP request object containing request metadata, such as - headers and HTTP method. - *args: Additional positional arguments provided dynamically to the - underlying sitemap detail view function. - **kwargs: Additional keyword arguments provided dynamically to the - underlying sitemap detail view function. - - Returns: - HttpResponse: A response object with content representing the requested - sitemap details. The Content-Type header is explicitly set to - "application/xml; charset=utf-8". - """ response = _sitemap_detail_view(request, *args, **kwargs) response["Content-Type"] = "application/xml; charset=utf-8" return response +# noinspection PyTypeChecker +sitemap_detail.__doc__ = _( # type: ignore [assignment] + "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." +) + + class CustomGraphQLView(FileUploadGraphQLView): - """ - A custom GraphQL view class that extends the functionality of FileUploadGraphQLView. - - This class serves as a customization extension of FileUploadGraphQLView that allows modification - or enhancement of specific behaviors, particularly the context handling for GraphQL requests. - - """ - def get_context(self, request): return request class CustomSwaggerView(SpectacularSwaggerView): - """ - CustomSwaggerView is a subclass of SpectacularSwaggerView. - - This class overrides the `get_context_data` method to - add extra context to the response. It modifies the context by - including the absolute URI of the current request as the `script_url`. - This can be useful in scenarios where the script or reference - URL needs to be dynamically generated and included in the context. - """ - def get_context_data(self, **kwargs): # noinspection PyUnresolvedReferences context = super().get_context_data(**kwargs) @@ -137,16 +104,6 @@ class CustomSwaggerView(SpectacularSwaggerView): class CustomRedocView(SpectacularRedocView): - """ - CustomRedocView provides a customized version of the SpectacularRedocView. - - This class extends the SpectacularRedocView to include additional - functionality, such as dynamically setting the `script_url` in the - context data. It is designed to be used where customized behavior - for rendering ReDoc UI is required, specifically adapting the script - URL for the current request environment. - """ - def get_context_data(self, **kwargs): # noinspection PyUnresolvedReferences context = super().get_context_data(**kwargs) @@ -156,24 +113,7 @@ class CustomRedocView(SpectacularRedocView): @extend_schema_view(**LANGUAGE_SCHEMA) class SupportedLanguagesView(APIView): - """ - Handles retrieving the list of supported languages. - - This class provides an endpoint to return information about available languages. - It is configured with relevant serializers, permission classes, and renderers - for flexibility in response formats and access permissions. The endpoint - supports retrieving the list of languages with their respective codes, names, - and flags. - - Attributes: - serializer_class (Serializer): Serializer used for formatting the response data. - permission_classes (list): Permissions applied to restrict the endpoint access. - renderer_classes (list): Renderers available for formatting response output. - - Methods: - get(self, request): Retrieves the list of supported languages. - - """ + __doc__ = _("Returns a list of supported languages and their corresponding information.") # type: ignore [assignment] serializer_class = LanguageSerializer permission_classes = [ @@ -186,7 +126,7 @@ class SupportedLanguagesView(APIView): YAMLRenderer, ] - def get(self, request): + def get(self, request: Request, *args, **kwargs) -> Response: return Response( data=self.serializer_class( [ @@ -205,30 +145,7 @@ class SupportedLanguagesView(APIView): @extend_schema_view(**PARAMETERS_SCHEMA) class WebsiteParametersView(APIView): - """ - Handles operations related to website parameters. - - This class is a Django Rest Framework view that allows clients to retrieve - the parameters of a website. It uses different renderers to present the data - in various formats. The view is publicly accessible. - - Attributes - ---------- - serializer_class - A placeholder for a DRF serializer, it is set to None since no serializer - is explicitly used in this view. - permission_classes - A list indicating the permissions required to access this view. In this case, - `AllowAny`, meaning the view is open to everyone. - renderer_classes - A list of renderers available for this view, supporting CamelCase JSON, - multipart forms, XML, and YAML formats. - - Methods - ------- - get(request) - Handles HTTP GET requests to fetch website parameters. - """ + __doc__ = _("Returns the parameters of the website as a JSON object.") # type: ignore [assignment] serializer_class = None permission_classes = [ @@ -241,30 +158,13 @@ class WebsiteParametersView(APIView): YAMLRenderer, ] - def get(self, request): + def get(self, request: Request, *args, **kwargs) -> Response: return Response(data=camelize(get_project_parameters()), status=status.HTTP_200_OK) @extend_schema_view(**CACHE_SCHEMA) class CacheOperatorView(APIView): - """ - View for managing cache operations. - - This class provides an API view for handling cache operations such as setting cache - data with a specified key and timeout. It leverages multiple renderer classes for - serializing outputs in various formats. - - Attributes: - serializer_class (type): Serializer to validate and deserialize input data. - permission_classes (list): List of permission classes to apply access - restrictions. - renderer_classes (list): List of renderer classes to serialize the output - in desired formats. - - Methods: - post(request, *args, **kwargs): Handles HTTP POST requests to set cache - data based on the provided key and timeout. - """ + __doc__ = _("Handles cache operations such as reading and setting cache data with a specified key and timeout.") # type: ignore [assignment] serializer_class = CacheOperatorSerializer permission_classes = [ @@ -277,7 +177,7 @@ class CacheOperatorView(APIView): YAMLRenderer, ] - def post(self, request, *args, **kwargs): + def post(self, request: Request, *args, **kwargs) -> Response: return Response( data=web_cache( request, @@ -291,22 +191,7 @@ class CacheOperatorView(APIView): @extend_schema_view(**CONTACT_US_SCHEMA) class ContactUsView(APIView): - """ - Handles contact us form submissions via a REST API. - - This view processes user submissions for a "Contact Us" form. It validates the received - data using a serializer, applies rate limiting for IP-based requests, and sends emails - asynchronously. The view is prepared to handle multiple response formats using configured - renderers. - - Attributes: - serializer_class: The serializer class used to validate incoming data. - renderer_classes: A list of renderers to support multiple response formats. - - Methods: - post: Handles POST requests to process form submissions. - - """ + __doc__ = _("Handles `contact us` form submissions.") # type: ignore [assignment] serializer_class = ContactUsSerializer renderer_classes = [ @@ -317,7 +202,7 @@ class ContactUsView(APIView): ] @method_decorator(ratelimit(key="ip", rate="2/h", method="POST", block=True)) - def post(self, request, *args, **kwargs): + def post(self, request: Request, *args, **kwargs) -> Response: serializer = self.serializer_class(data=request.data) serializer.is_valid(raise_exception=True) contact_us_email.delay(serializer.validated_data) @@ -327,20 +212,7 @@ class ContactUsView(APIView): @extend_schema_view(**REQUEST_CURSED_URL_SCHEMA) class RequestCursedURLView(APIView): - """ - Handles requests for processing and validating URLs from incoming POST requests. - - Particularly intended for validating and processing URLs provided by clients. It uses rate-limiting, caching, and - various response format renderers to optimize performance and ensure safe handling of external data. - - Attributes: - permission_classes (list): Specifies the permissions required to access this view. - renderer_classes (list): Configures the response format renderers available for this view. - - Methods: - post: Handles the POST request to validate the URL, fetches its data if valid, - and returns the processed response. - """ + __doc__ = _("Handles requests for processing and validating URLs from incoming POST requests.") # type: ignore [assignment] permission_classes = [ AllowAny, @@ -353,7 +225,7 @@ class RequestCursedURLView(APIView): ] @method_decorator(ratelimit(key="ip", rate="10/h")) - def post(self, request, *args, **kwargs): + def post(self, request: Request, *args, **kwargs) -> Response: url = request.data.get("url") if not is_url_safe(url): return Response( @@ -380,23 +252,7 @@ class RequestCursedURLView(APIView): @extend_schema_view(**SEARCH_SCHEMA) class GlobalSearchView(APIView): - """ - Class-based view for handling global search functionality. - - This class is designed to process search queries from HTTP GET requests. It is - capable of rendering results in multiple formats including CamelCase JSON, - MultiPart, XML, and YAML. The class uses a custom schema for API documentation - and processes search queries passed as parameters in the request. - - Attributes: - renderer_classes (list): List of renderer classes used to serialize responses - into various formats such as CamelCase JSON, MultiPart, XML, and YAML. - - Methods: - get: Handles HTTP GET requests by processing the search query and returning - formatted search results. - - """ + __doc__ = _("Handles global search queries.") # type: ignore [assignment] renderer_classes = [ CamelCaseJSONRenderer, @@ -405,31 +261,17 @@ class GlobalSearchView(APIView): YAMLRenderer, ] - def get(self, request, *args, **kwargs): + def get(self, request: Request, *args, **kwargs) -> Response: return Response(camelize({"results": process_query(query=request.GET.get("q", "").strip(), request=request)})) @extend_schema_view(**BUY_AS_BUSINESS_SCHEMA) class BuyAsBusinessView(APIView): - """ - View for buying as a business. - - This view handles the logic of creating orders and processing transactions when a - business makes a purchase. It ensures that the request data is properly validated - and processed, handles the creation of the order, and starts the transaction process. - The view also restricts the rate of requests based on the client's IP address - to prevent abuse. - - Attributes: - schema (class): Extended schema for API documentation. - - Methods: - post(request, *_args, **kwargs): - Handles the "POST" request to process a business purchase. - """ + __doc__ = _("Handles the logic of buying as a business without registration.") # type: ignore [assignment] + # noinspection PyUnusedLocal @method_decorator(ratelimit(key="ip", rate="10/h" if not settings.DEBUG else "888/h")) - def post(self, request, *_args, **kwargs): + def post(self, request: Request, *args, **kwargs) -> Response: serializer = BuyAsBusinessOrderSerializer(data=request.data) serializer.is_valid(raise_exception=True) order = Order.objects.create(status="MOMENTAL") @@ -459,26 +301,7 @@ class BuyAsBusinessView(APIView): ) -def download_digital_asset_view(request, *args, **kwargs): - """ - Handles the downloading of a digital asset associated with an order. Ensures that users - are permitted to download the asset only once. Validates the request, retrieves the file, - and serves it as a downloadable response. Returns appropriate error responses for different - failure scenarios. - - Args: - request: The HTTP request object containing information about the client request. - *args: Additional positional arguments. - **kwargs: Additional keyword arguments. - - Raises: - BadRequest: If the digital asset has already been downloaded. - DigitalAssetDownload.DoesNotExist: If the requested digital asset cannot be found. - - Returns: - A FileResponse containing the digital asset file if the request is valid. Returns - a JsonResponse with an error message if an error occurs during the process. - """ +def download_digital_asset_view(request: HttpRequest, *args, **kwargs) -> FileResponse | JsonResponse: try: logger.debug(f"download_digital_asset_view: {kwargs}") uuid = urlsafe_base64_decode(str(kwargs.get("order_product_uuid"))).decode("utf-8") @@ -488,6 +311,9 @@ def download_digital_asset_view(request, *args, **kwargs): if download.num_downloads >= 1: raise BadRequest(_("you can only download the digital asset once")) + if download.order_product.status != "FINISHED": + raise BadRequest(_("the order must be paid before downloading the digital asset")) + download.num_downloads += 1 download.save() @@ -522,24 +348,16 @@ def download_digital_asset_view(request, *args, **kwargs): ) -def favicon_view(request, *args, **kwargs): - """ - Handles requests for the favicon of a website. 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. +# noinspection PyTypeChecker +download_digital_asset_view.__doc__ = _( # type: ignore [assignment] + "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." +) - Args: - request: The HTTP request object. - *args: Additional positional arguments that are ignored in this function. - **kwargs: Additional keyword arguments that are ignored in this function. - Returns: - FileResponse: A file response containing the favicon image with the content-type - "image/x-icon". - - Raises: - Http404: Raised if the favicon file is not found. - """ +def favicon_view(request: HttpRequest, *args, **kwargs) -> FileResponse | Http404: try: favicon_path = os.path.join(settings.BASE_DIR, "static/favicon.png") return FileResponse(open(favicon_path, "rb"), content_type="image/x-icon") @@ -547,20 +365,22 @@ def favicon_view(request, *args, **kwargs): raise Http404(_("favicon not found")) from fnfe -def index(request, *args, **kwargs): - """ - Redirects the request to the admin index page. +# noinspection PyTypeChecker +favicon_view.__doc__ = _( # type: ignore [assignment] + "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." +) - 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. - Args: - request: The HttpRequest object representing the incoming request. - *args: Additional positional arguments, if any. - **kwargs: Additional keyword arguments, if any. - - Returns: - HttpResponseRedirect: An HTTP response that redirects to the admin index. - """ +def index(request: HttpRequest, *args, **kwargs) -> HttpResponseRedirect: return redirect("admin:index") + + +# noinspection PyTypeChecker +index.__doc__ = _( # type: ignore [assignment] + "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." +) diff --git a/core/viewsets.py b/core/viewsets.py index ae737b05..01f88f9c 100644 --- a/core/viewsets.py +++ b/core/viewsets.py @@ -18,6 +18,7 @@ from rest_framework.decorators import action from rest_framework.exceptions import PermissionDenied from rest_framework.permissions import AllowAny from rest_framework.renderers import MultiPartRenderer +from rest_framework.request import Request from rest_framework.response import Response from rest_framework.viewsets import ModelViewSet from rest_framework_xml.renderers import XMLRenderer @@ -123,26 +124,13 @@ logger = logging.getLogger("django") class EvibesViewSet(ModelViewSet): - """ - Defines a viewset for managing Evibes-related operations. - - The EvibesViewSet class inherits from ModelViewSet and provides functionality - for handling actions and operations on Evibes entities. It includes support - for dynamic serializer classes based on the current action, customizable - permissions, and rendering formats. - - Attributes: - action_serializer_classes: Dictionary mapping action names to their specific - serializer classes. - additional: Dictionary to hold additional data related to the view. - permission_classes: List of permission classes applicable to this viewset. - renderer_classes: List of renderer classes supported for response formatting. - - Methods: - get_serializer_class(self): - Returns the serializer class for the current action or the default - serializer class from the parent ModelViewSet. - """ + __doc__ = _( # type: ignore + "Defines a viewset for managing Evibes-related operations. " + "The EvibesViewSet class inherits from ModelViewSet and provides functionality " + "for handling actions and operations on Evibes entities. It includes support " + "for dynamic serializer classes based on the current action, customizable " + "permissions, and rendering formats." + ) action_serializer_classes: dict = {} additional: dict = {} @@ -154,28 +142,14 @@ class EvibesViewSet(ModelViewSet): @extend_schema_view(**ATTRIBUTE_GROUP_SCHEMA) -# noinspection PyUnusedLocal class AttributeGroupViewSet(EvibesViewSet): - """ - Represents a viewset for managing AttributeGroup objects. - - Handles operations related to AttributeGroup, including filtering, - serialization, and retrieval of data. This class is part of the - application's API layer and provides a standardized way to process - requests and responses for AttributeGroup data. - - Attributes: - queryset (QuerySet): QuerySet for retrieving all AttributeGroup objects. - filter_backends (list): List of filter backends used to process filters - in requests. - filterset_fields (list): List of fields on which filtering operations - can be performed. - serializer_class (Serializer): Default serializer class used for - processing AttributeGroup data during non-list view operations. - action_serializer_classes (dict): Mapping of view actions to their - specific serializer classes, allowing customization of serialization - behavior for certain actions. - """ + __doc__ = _( + "Represents a viewset for managing AttributeGroup objects. " + "Handles operations related to AttributeGroup, including filtering, " + "serialization, and retrieval of data. This class is part of the " + "application's API layer and provides a standardized way to process " + "requests and responses for AttributeGroup data." + ) queryset = AttributeGroup.objects.all() filter_backends = [DjangoFilterBackend] @@ -187,28 +161,14 @@ class AttributeGroupViewSet(EvibesViewSet): @extend_schema_view(**ATTRIBUTE_SCHEMA) -# noinspection PyUnusedLocal class AttributeViewSet(EvibesViewSet): - """ - Handles operations related to Attribute objects within the application. - - Provides a set of API endpoints to interact with Attribute data. This class - manages querying, filtering, and serialization of Attribute objects, allowing - dynamic control over the data returned, such as filtering by specific fields - or retrieving detailed versus simplified information depending on the request. - - Attributes: - queryset: The base QuerySet used to represent the set of Attribute - objects available to this viewset. - filter_backends: Defines the backends used for filtering request data, - enabling query flexibility. - filterset_fields: A list of model fields that can be filtered via the API. - serializer_class: Represents the serializer used by default for - serialization and deserialization of Attribute data. - action_serializer_classes: A mapping that defines serializers used for - specific actions, such as returning less detailed data for a `list` - action. - """ + __doc__ = _( + "Handles operations related to Attribute objects within the application. " + "Provides a set of API endpoints to interact with Attribute data. This class " + "manages querying, filtering, and serialization of Attribute objects, allowing " + "dynamic control over the data returned, such as filtering by specific fields " + "or retrieving detailed versus simplified information depending on the request." + ) queryset = Attribute.objects.all() filter_backends = [DjangoFilterBackend] @@ -220,24 +180,14 @@ class AttributeViewSet(EvibesViewSet): @extend_schema_view(**ATTRIBUTE_VALUE_SCHEMA) -# noinspection PyUnusedLocal class AttributeValueViewSet(EvibesViewSet): - """ - A viewset for managing AttributeValue objects. - - This viewset provides functionality for listing, retrieving, creating, updating, and deleting - AttributeValue objects. It integrates with Django REST Framework's viewset mechanisms and uses - appropriate serializers for different actions. Filtering capabilities are provided through the - DjangoFilterBackend. - - Attributes: - queryset (QuerySet): The base queryset for AttributeValue objects. - filter_backends (list): A list of filtering backends applied to the viewset. - filterset_fields (list): Fields of the model that can be used for filtering. - serializer_class (Serializer): The default serializer class for the viewset. - action_serializer_classes (dict): A dictionary mapping action names to their corresponding - serializer classes. - """ + __doc__ = _( + "A viewset for managing AttributeValue objects. " + "This viewset provides functionality for listing, retrieving, creating, updating, and deleting " + "AttributeValue objects. It integrates with Django REST Framework's viewset mechanisms and uses " + "appropriate serializers for different actions. Filtering capabilities are provided through the " + "DjangoFilterBackend." + ) queryset = AttributeValue.objects.all() filter_backends = [DjangoFilterBackend] @@ -249,35 +199,14 @@ class AttributeValueViewSet(EvibesViewSet): @extend_schema_view(**CATEGORY_SCHEMA) -# noinspection PyUnusedLocal class CategoryViewSet(EvibesViewSet): - """ - Manages views for Category-related operations. - - The CategoryViewSet class is responsible for handling operations related to - the Category model in the system. It supports retrieving, filtering, and - serializing category data. The viewset also enforces permissions to ensure - that only authorized users can access specific data. - - Attributes: - queryset: The base queryset used to retrieve category data, including - prefetching related objects such as parents, children, attributes, - and tags. - filter_backends: A list of backends for applying filters to the category - data. - filterset_class: The filter class used to define filtering behavior for - the category queryset. - serializer_class: The default serializer class used for category objects - when no specific action serializer is applied. - action_serializer_classes: A dictionary mapping specific viewset actions - (e.g., "list") to their corresponding serializer classes. - - Methods: - get_queryset(): - Retrieves the queryset for the viewset, applying permission checks - and filtering out inactive categories for users without sufficient - permissions. - """ + __doc__ = _( + "Manages views for Category-related operations. " + "The CategoryViewSet class is responsible for handling operations related to " + "the Category model in the system. It supports retrieving, filtering, and " + "serializing category data. The viewset also enforces permissions to ensure " + "that only authorized users can access specific data." + ) queryset = Category.objects.all().prefetch_related("parent", "children", "attributes", "tags") filter_backends = [DjangoFilterBackend] @@ -318,6 +247,7 @@ class CategoryViewSet(EvibesViewSet): return qs return qs.filter(is_active=True) + # noinspection PyUnusedLocal @action( detail=True, methods=["get"], @@ -326,7 +256,7 @@ class CategoryViewSet(EvibesViewSet): AllowAny, ], ) - def seo_meta(self, request, **kwargs): + def seo_meta(self, request: Request, *args, **kwargs) -> Response: category = self.get_object() title = f"{category.name} | {config.PROJECT_NAME}" @@ -380,28 +310,13 @@ class CategoryViewSet(EvibesViewSet): return Response(SeoSnapshotSerializer(payload).data) -# noinspection PyUnusedLocal class BrandViewSet(EvibesViewSet): - """ - Represents a viewset for managing Brand instances. - - This class provides functionality for querying, filtering, and - serializing Brand objects. It uses Django's ViewSet framework - to simplify the implementation of API endpoints for Brand objects. - - Attributes: - queryset: The base queryset containing all Brand instances. - filter_backends: A list of filtering backends to apply to the - queryset. The default is [DjangoFilterBackend]. - filterset_class: The filter class used to define the filtering - logic for this viewset. The default is BrandFilter. - serializer_class: The default serializer class used for the - detailed representation of Brand objects. The default is - BrandDetailSerializer. - action_serializer_classes: A dictionary mapping specific actions - to their corresponding serializer classes. The "list" action - uses the BrandSimpleSerializer class. - """ + __doc__ = _( + "Represents a viewset for managing Brand instances. " + "This class provides functionality for querying, filtering, and " + "serializing Brand objects. It uses Django's ViewSet framework " + "to simplify the implementation of API endpoints for Brand objects." + ) queryset = Brand.objects.all() filter_backends = [DjangoFilterBackend] @@ -448,6 +363,7 @@ class BrandViewSet(EvibesViewSet): return queryset + # noinspection PyUnusedLocal @action( detail=True, methods=["get"], @@ -456,7 +372,7 @@ class BrandViewSet(EvibesViewSet): AllowAny, ], ) - def seo_meta(self, request, **kwargs): + def seo_meta(self, request: Request, *args, **kwargs) -> Response: brand = self.get_object() title = f"{brand.name} | {config.PROJECT_NAME}" @@ -506,31 +422,15 @@ class BrandViewSet(EvibesViewSet): @extend_schema_view(**PRODUCT_SCHEMA) -# noinspection PyUnusedLocal class ProductViewSet(EvibesViewSet): - """ - Manages operations related to the `Product` model in the system. - - This class provides a viewset for managing products, including their filtering, serialization, - and operations on specific instances. It extends from `EvibesViewSet` to use common - functionality and integrates with the Django REST framework for RESTful API operations. - Includes methods for retrieving product details, applying permissions, and accessing - related feedback of a product. - - Attributes: - queryset: The base queryset to retrieve `Product` objects with prefetch optimization. - filter_backends: Specifies the filtering mechanism for the list views. - filterset_class: Defines the filter class to be used for filtering products. - serializer_class: The default serializer class for product details. - action_serializer_classes: Specific serializer mappings for action methods. - lookup_field: Field representing the object's lookup value in URLs. - lookup_url_kwarg: Field key used to extract the object's lookup value from URL. - - Methods: - get_queryset: Retrieves the queryset with user-specific filtering applied. - get_object: Fetches a single object based on its identifier, applying permissions. - feedbacks: Fetches feedback associated with a specific product. - """ + __doc__ = _( + "Manages operations related to the `Product` model in the system. " + "This class provides a viewset for managing products, including their filtering, serialization, " + "and operations on specific instances. It extends from `EvibesViewSet` to use common " + "functionality and integrates with the Django REST framework for RESTful API operations. " + "Includes methods for retrieving product details, applying permissions, and accessing " + "related feedback of a product." + ) queryset = Product.objects.prefetch_related("tags", "attributes", "stocks", "images").all() filter_backends = [DjangoFilterBackend] @@ -584,14 +484,16 @@ class ProductViewSet(EvibesViewSet): self.check_object_permissions(self.request, obj) return obj + # noinspection PyUnusedLocal @action(detail=True, methods=["get"], url_path="feedbacks") - def feedbacks(self, request, **kwargs): + def feedbacks(self, request: Request, *args, **kwargs) -> Response: product = self.get_object() qs = Feedback.objects.filter(order_product__product=product) if not request.user.has_perm("core.view_feedback"): qs = qs.filter(is_active=True) return Response(data=FeedbackSimpleSerializer(qs, many=True).data) + # noinspection PyUnusedLocal @action( detail=True, methods=["get"], @@ -600,7 +502,7 @@ class ProductViewSet(EvibesViewSet): AllowAny, ], ) - def seo_meta(self, request, **kwargs): + def seo_meta(self, request: Request, *args, **kwargs) -> Response: p = self.get_object() images = list(p.images.all()[:6]) rating = {"value": p.rating, "count": p.feedbacks_count} @@ -640,27 +542,15 @@ class ProductViewSet(EvibesViewSet): return Response(SeoSnapshotSerializer(payload).data) -# noinspection PyUnusedLocal class VendorViewSet(EvibesViewSet): - """ - Represents a viewset for managing Vendor objects. - - This viewset allows fetching, filtering, and serializing Vendor data. - It defines the queryset, filter configurations, and serializer classes - used to handle different actions. The purpose of this class is to - provide streamlined access to Vendor-related resources through the - Django REST framework. - - Attributes: - queryset: A QuerySet containing all Vendor objects. - filter_backends: A list containing configured filter backends. - filterset_fields: A list of fields that can be used for filtering - Vendor records. - serializer_class: The default serializer class used for this - viewset. - action_serializer_classes: A dictionary mapping specific actions - (e.g., "list") to custom serializer classes for those actions. - """ + __doc__ = _( + "Represents a viewset for managing Vendor objects. " + "This viewset allows fetching, filtering, and serializing Vendor data. " + "It defines the queryset, filter configurations, and serializer classes " + "used to handle different actions. The purpose of this class is to " + "provide streamlined access to Vendor-related resources through the " + "Django REST framework." + ) queryset = Vendor.objects.all() filter_backends = [DjangoFilterBackend] @@ -672,28 +562,15 @@ class VendorViewSet(EvibesViewSet): @extend_schema_view(**FEEDBACK_SCHEMA) -# noinspection PyUnusedLocal class FeedbackViewSet(EvibesViewSet): - """ - Representation of a view set handling Feedback objects. - - This class manages operations related to Feedback objects, including listing, - filtering, and retrieving details. The purpose of this view set is to provide - different serializers for different actions and implement permission-based - handling of accessible Feedback objects. It extends the base `EvibesViewSet` - and makes use of Django's filtering system for querying data. - - Attributes: - queryset: The base queryset for Feedback objects used in this view set. - filter_backends: List of filter backends to apply, specifically - `DjangoFilterBackend` for this view set. - filterset_class: Class specifying the filter set used for querying - Feedback objects. - serializer_class: Default serializer class used for this view set. - action_serializer_classes: A dictionary mapping action names to specific - serializer classes. For example, the "list" action uses - `FeedbackSimpleSerializer`. - """ + __doc__ = _( + "Representation of a view set handling Feedback objects. " + "This class manages operations related to Feedback objects, including listing, " + "filtering, and retrieving details. The purpose of this view set is to provide " + "different serializers for different actions and implement permission-based " + "handling of accessible Feedback objects. It extends the base `EvibesViewSet` " + "and makes use of Django's filtering system for querying data." + ) queryset = Feedback.objects.all() filter_backends = [DjangoFilterBackend] @@ -711,53 +588,16 @@ class FeedbackViewSet(EvibesViewSet): @extend_schema_view(**ORDER_SCHEMA) -# noinspection PyUnusedLocal class OrderViewSet(EvibesViewSet): - """ - ViewSet for managing orders and related operations. - - This class provides functionality to retrieve, modify, and manage order objects. - It includes various endpoints for handling order operations such as adding or - removing products, performing purchases for registered as well as unregistered - users, and retrieving the current authenticated user's pending orders. - - The ViewSet uses multiple serializers based on the specific action being - performed and enforces permissions accordingly while interacting with order data. - - Attributes: - lookup_field (str): Field name used for performing object lookup. - lookup_url_kwarg (str): URL keyword argument used for object lookup. Defaults - to `lookup_field`. - queryset (QuerySet): Default queryset for retrieving order objects, with - prefetched related order products. - filter_backends (list): List of backends applied for filtering the queryset. - filterset_class (type): Filtering class applied to the queryset for request-based - customizations. - serializer_class (type): Default serializer used if no specific serializer is - defined for an action. - action_serializer_classes (dict): Mapping of actions to their respective serializers. - Used to determine the serializer dynamically based on the requested action. - additional (dict): Additional settings for specific actions. - - Methods: - get_serializer_class: Returns the serializer class based on the specific - action being requested. - get_queryset: Adjusts the queryset based on the request user's permissions, - favoring anonymous or limited query access for unauthenticated users. - get_object: Retrieves a specific order object based on the lookup value, either - its UUID or a human-readable ID. - current: Retrieves the authenticated user's current pending order. - buy: Processes an order purchase for an authenticated user with optional parameters - such as balance and payment overrides, promocodes, and billing/shipping addresses. - buy_unregistered: Processes an order purchase for unauthenticated users with product, - customer details, and payment information. - add_order_product: Adds a product, with optional attributes, to an order specified by UUID. - remove_order_product: Removes a product, with optional attributes, from an order specified - by UUID. - bulk_add_order_products: Adds multiple products with optional attributes to an order. - bulk_remove_order_products: Removes multiple products with optional attributes from - an order. - """ + __doc__ = _( + "ViewSet for managing orders and related operations. " + "This class provides functionality to retrieve, modify, and manage order objects. " + "It includes various endpoints for handling order operations such as adding or " + "removing products, performing purchases for registered as well as unregistered " + "users, and retrieving the current authenticated user's pending orders. " + "The ViewSet uses multiple serializers based on the specific action being " + "performed and enforces permissions accordingly while interacting with order data." + ) lookup_field = "lookup_value" lookup_url_kwarg = "lookup_value" @@ -803,7 +643,7 @@ class OrderViewSet(EvibesViewSet): return obj @action(detail=False, methods=["get"], url_path="current") - def current(self, request): + def current(self, request: Request, *args, **kwargs) -> Response: if not request.user.is_authenticated: raise PermissionDenied(permission_denied_message) try: @@ -816,7 +656,7 @@ class OrderViewSet(EvibesViewSet): ) @action(detail=True, methods=["post"], url_path="buy") - def buy(self, request, **kwargs): + def buy(self, request: Request, *args, **kwargs) -> Response: serializer = BuyOrderSerializer(data=request.data) serializer.is_valid(raise_exception=True) lookup_val = kwargs.get(self.lookup_field) @@ -845,7 +685,7 @@ class OrderViewSet(EvibesViewSet): @action(detail=False, methods=["post"], url_path="buy_unregistered") @method_decorator(ratelimit(key="ip", rate="10/h" if not settings.DEBUG else "888/h")) - def buy_unregistered(self, request): + def buy_unregistered(self, request: Request, *args, **kwargs) -> Response: serializer = BuyUnregisteredOrderSerializer(data=request.data) serializer.is_valid(raise_exception=True) order = Order.objects.create(status="MOMENTAL") @@ -866,7 +706,7 @@ class OrderViewSet(EvibesViewSet): return Response(status=status.HTTP_400_BAD_REQUEST, data={"detail": str(e)}) @action(detail=True, methods=["post"], url_path="add_order_product") - def add_order_product(self, request, **kwargs): + def add_order_product(self, request: Request, *args, **kwargs) -> Response: serializer = AddOrderProductSerializer(data=request.data) serializer.is_valid(raise_exception=True) lookup_val = kwargs.get(self.lookup_field) @@ -884,7 +724,7 @@ class OrderViewSet(EvibesViewSet): return Response(status=status.HTTP_404_NOT_FOUND) @action(detail=True, methods=["post"], url_path="remove_order_product") - def remove_order_product(self, request, **kwargs): + def remove_order_product(self, request: Request, *args, **kwargs) -> Response: serializer = RemoveOrderProductSerializer(data=request.data) serializer.is_valid(raise_exception=True) lookup_val = kwargs.get(self.lookup_field) @@ -902,7 +742,7 @@ class OrderViewSet(EvibesViewSet): return Response(status=status.HTTP_404_NOT_FOUND) @action(detail=True, methods=["post"], url_path="bulk_add_order_products") - def bulk_add_order_products(self, request, **kwargs): + def bulk_add_order_products(self, request: Request, *args, **kwargs) -> Response: serializer = BulkAddOrderProductsSerializer(data=request.data) serializer.is_valid(raise_exception=True) lookup_val = kwargs.get(self.lookup_field) @@ -919,7 +759,7 @@ class OrderViewSet(EvibesViewSet): return Response(status=status.HTTP_404_NOT_FOUND) @action(detail=True, methods=["post"], url_path="bulk_remove_order_products") - def bulk_remove_order_products(self, request, **kwargs): + def bulk_remove_order_products(self, request: Request, *args, **kwargs) -> Response: serializer = BulkRemoveOrderProductsSerializer(data=request.data) serializer.is_valid(raise_exception=True) lookup_val = kwargs.get(self.lookup_field) @@ -937,35 +777,14 @@ class OrderViewSet(EvibesViewSet): @extend_schema_view(**ORDER_PRODUCT_SCHEMA) -# noinspection PyUnusedLocal class OrderProductViewSet(EvibesViewSet): - """ - Provides a viewset for managing OrderProduct entities. - - This viewset enables CRUD operations and custom actions specific to the - OrderProduct model. It includes filtering, permission checks, and - serializer switching based on the requested action. Additionally, it - provides a detailed action for handling feedback on OrderProduct - instances. - - Attributes: - queryset (QuerySet): The base queryset for OrderProduct objects. - filter_backends (list): Backends responsible for handling filtering - mechanisms. - filterset_fields (list[str]): Fields available for API filtering. - serializer_class (Serializer): Default serializer class for CRUD - operations. - action_serializer_classes (dict[str, Serializer]): Mapping of - specific actions to their corresponding serializer classes. - - Methods: - get_queryset: Overrides the default queryset to enforce user - permissions. - - Actions: - do_feedback: Custom action to add, remove, or manage feedback for - an OrderProduct instance. - """ + __doc__ = _( + "Provides a viewset for managing OrderProduct entities. " + "This viewset enables CRUD operations and custom actions specific to the " + "OrderProduct model. It includes filtering, permission checks, and " + "serializer switching based on the requested action. Additionally, it " + "provides a detailed action for handling feedback on OrderProduct instances" + ) queryset = OrderProduct.objects.all() filter_backends = [DjangoFilterBackend] @@ -987,7 +806,7 @@ class OrderProductViewSet(EvibesViewSet): return qs.filter(user=user) @action(detail=True, methods=["post"], url_path="do_feedback") - def do_feedback(self, request, **kwargs): + def do_feedback(self, request: Request, *args, **kwargs) -> Response: serializer = self.get_serializer(request.data) serializer.is_valid(raise_exception=True) try: @@ -1010,29 +829,8 @@ class OrderProductViewSet(EvibesViewSet): return Response(status=status.HTTP_404_NOT_FOUND) -# noinspection PyUnusedLocal class ProductImageViewSet(EvibesViewSet): - """ - Manages operations related to Product images in the application. - - This class-based view set provides endpoints to manage and access ProductImage - objects. It supports filtering, serialization, and customized serializers for - different actions to handle ProductImage data. - - Attributes: - queryset (QuerySet): A Django QuerySet consisting of all ProductImage - instances within the system. - filter_backends (list): A list of filter backends that determine the - filtering behavior on querysets. Set to [DjangoFilterBackend]. - filterset_fields (list): Fields that can be used for filtering data. - Includes "product", "priority", and "is_active". - serializer_class (Serializer): The default serializer class used for - serializing and deserializing ProductImage data. Set to - ProductImageDetailSerializer. - action_serializer_classes (dict): A mapping of action names to specific - serializer classes. For the "list" action, ProductImageSimpleSerializer - is used. - """ + __doc__ = _("Manages operations related to Product images in the application. ") queryset = ProductImage.objects.all() filter_backends = [DjangoFilterBackend] @@ -1043,27 +841,8 @@ class ProductImageViewSet(EvibesViewSet): } -# noinspection PyUnusedLocal class PromoCodeViewSet(EvibesViewSet): - """ - Manages the retrieval and handling of PromoCode instances through various - API actions. - - This class extends the functionality of the EvibesViewSet to provide a - customized view set for PromoCode objects. It includes filtering capabilities, - uses specific serializers for different actions, and limits data access - based on user permissions. The primary purpose is to enable API operations - related to PromoCodes while enforcing security and filtering. - - Attributes: - queryset: A queryset of all PromoCode objects in the database. - filter_backends: Backend classes responsible for filtering queryset data. - filterset_fields: Fields supported for filtering PromoCode data. - serializer_class: The default serializer class used for instances when no - specific action-based serializer is defined. - action_serializer_classes: A dictionary mapping specific actions (like - "list") to their corresponding serializer classes. - """ + __doc__ = _("Manages the retrieval and handling of PromoCode instances through various API actions.") queryset = PromoCode.objects.all() filter_backends = [DjangoFilterBackend] @@ -1083,16 +862,8 @@ class PromoCodeViewSet(EvibesViewSet): return qs.filter(user=user) -# noinspection PyUnusedLocal class PromotionViewSet(EvibesViewSet): - """ - Represents a view set for managing promotions. - - This class provides operations to handle retrieval, filtering, and serialization - of promotion objects. It leverages Django REST framework capabilities such as - queryset management, filter backends, and serializer customization for handling - different views or actions efficiently. - """ + __doc__ = _("Represents a view set for managing promotions. ") queryset = Promotion.objects.all() filter_backends = [DjangoFilterBackend] @@ -1103,28 +874,8 @@ class PromotionViewSet(EvibesViewSet): } -# noinspection PyUnusedLocal class StockViewSet(EvibesViewSet): - """ - Handles operations related to Stock data in the system. - - The StockViewSet class is a viewset that provides methods for retrieving, - filtering, and serializing Stock data. It uses Django's filter - backends to enable filtering based on specified fields and supports - custom serializers for different actions. - - Attributes: - queryset (QuerySet): A queryset of all Stock objects. - filter_backends (list): A list of filter backends to be applied. - filterset_fields (list of str): Fields on which the filtering - is permitted. These fields include "vendor", "product", "sku", - and "is_active". - serializer_class (Serializer): The primary serializer used - for Stock detail representation. - action_serializer_classes (dict): A dictionary mapping action names - to their respective serializers. For the "list" action, - StockSimpleSerializer is used. - """ + __doc__ = _("Handles operations related to Stock data in the system.") queryset = Stock.objects.all() filter_backends = [DjangoFilterBackend] @@ -1136,46 +887,16 @@ class StockViewSet(EvibesViewSet): @extend_schema_view(**WISHLIST_SCHEMA) -# noinspection PyUnusedLocal class WishlistViewSet(EvibesViewSet): - """ - ViewSet for managing Wishlist operations. - - The WishlistViewSet provides endpoints for interacting with a user's wish list, - allowing for the retrieval, modification, and customization of products within - the wish list. This ViewSet facilitates functionality such as adding, removing, - and bulk actions for wishlist products. Permission checks are integrated to - ensure that users can only manage their own wishlists unless explicit permissions - are granted. - - Attributes - ---------- - queryset : QuerySet - The base queryset for retrieving wishlist objects. - filter_backends : list - List of backend filters to apply to the queryset. - filterset_fields : list - Fields for which filtering is allowed in queries. - serializer_class : Serializer - The default serializer class used for wishlist objects. - action_serializer_classes : dict - A map of serializers used for specific actions. - - Methods - ------- - get_queryset() - Retrieves the queryset, filtered based on the user's permissions. - current(request) - Retrieves the currently authenticated user's wishlist. - add_wishlist_product(request, **kwargs) - Adds a product to a specific wishlist. - remove_wishlist_product(request, **kwargs) - Removes a product from a specific wishlist. - bulk_add_wishlist_products(request, **kwargs) - Adds multiple products to a specific wishlist. - bulk_remove_wishlist_products(request, **kwargs) - Removes multiple products from a specific wishlist. - """ + __doc__ = _( + "ViewSet for managing Wishlist operations. " + "The WishlistViewSet provides endpoints for interacting with a user's wish list, " + "allowing for the retrieval, modification, and customization of products within " + "the wish list. This ViewSet facilitates functionality such as adding, removing, " + "and bulk actions for wishlist products. Permission checks are integrated to " + "ensure that users can only manage their own wishlists unless explicit permissions " + "are granted." + ) queryset = Wishlist.objects.all() filter_backends = [DjangoFilterBackend] @@ -1194,8 +915,9 @@ class WishlistViewSet(EvibesViewSet): return qs.filter(user=user) + # noinspection PyUnusedLocal @action(detail=False, methods=["get"], url_path="current") - def current(self, request): + def current(self, request: Request, *args, **kwargs) -> Response: if not request.user.is_authenticated: raise PermissionDenied(permission_denied_message) wishlist = Wishlist.objects.get(user=request.user) @@ -1206,8 +928,9 @@ class WishlistViewSet(EvibesViewSet): data=WishlistDetailSerializer(wishlist).data, ) + # noinspection PyUnusedLocal @action(detail=True, methods=["post"], url_path="add_wishlist_product") - def add_wishlist_product(self, request, **kwargs): + def add_wishlist_product(self, request: Request, *args, **kwargs) -> Response: serializer = AddWishlistProductSerializer(data=request.data) serializer.is_valid(raise_exception=True) try: @@ -1223,8 +946,9 @@ class WishlistViewSet(EvibesViewSet): except Wishlist.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) + # noinspection PyUnusedLocal @action(detail=True, methods=["post"], url_path="remove_wishlist_product") - def remove_wishlist_product(self, request, **kwargs): + def remove_wishlist_product(self, request: Request, *args, **kwargs) -> Response: serializer = RemoveWishlistProductSerializer(data=request.data) serializer.is_valid(raise_exception=True) try: @@ -1240,8 +964,9 @@ class WishlistViewSet(EvibesViewSet): except Wishlist.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) + # noinspection PyUnusedLocal @action(detail=True, methods=["post"], url_path="bulk_add_wishlist_product") - def bulk_add_wishlist_products(self, request, **kwargs): + def bulk_add_wishlist_products(self, request: Request, *args, **kwargs) -> Response: serializer = BulkAddWishlistProductSerializer(data=request.data) serializer.is_valid(raise_exception=True) try: @@ -1257,8 +982,9 @@ class WishlistViewSet(EvibesViewSet): except Order.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) + # noinspection PyUnusedLocal @action(detail=True, methods=["post"], url_path="bulk_remove_wishlist_product") - def bulk_remove_wishlist_products(self, request, **kwargs): + def bulk_remove_wishlist_products(self, request: Request, *args, **kwargs) -> Response: serializer = BulkRemoveWishlistProductSerializer(data=request.data) serializer.is_valid(raise_exception=True) try: @@ -1276,23 +1002,13 @@ class WishlistViewSet(EvibesViewSet): @extend_schema_view(**ADDRESS_SCHEMA) -# noinspection PyUnusedLocal class AddressViewSet(EvibesViewSet): - """ - This class provides viewset functionality for managing `Address` objects. - - The AddressViewSet class enables CRUD operations, filtering, and custom actions - related to address entities. It includes specialized behaviors for different HTTP - methods, serializer overrides, and permission handling based on the request context. - - Attributes: - pagination_class: Specifies pagination class for the viewset, set to None. - filter_backends: List of backend classes for filtering querysets. - filterset_class: Specifies the filter class for filtering address objects. - queryset: Default queryset containing all Address objects. - serializer_class: Default serializer class for address objects. - additional: Dictionary of additional options for this viewset. - """ + __doc__ = _( + "This class provides viewset functionality for managing `Address` objects. " + "The AddressViewSet class enables CRUD operations, filtering, and custom actions " + "related to address entities. It includes specialized behaviors for different HTTP " + "methods, serializer overrides, and permission handling based on the request context." + ) pagination_class = None filter_backends = [DjangoFilterBackend] @@ -1317,14 +1033,14 @@ class AddressViewSet(EvibesViewSet): return Address.objects.none() - def retrieve(self, request, **kwargs): + def retrieve(self, request: Request, *args, **kwargs) -> Response: try: address = Address.objects.get(uuid=kwargs.get("pk")) return Response(status=status.HTTP_200_OK, data=self.get_serializer(address).data) except Address.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) - def create(self, request, **kwargs): + def create(self, request: Request, *args, **kwargs) -> Response: create_serializer = AddressCreateSerializer(data=request.data, context={"request": request}) create_serializer.is_valid(raise_exception=True) @@ -1337,8 +1053,9 @@ class AddressViewSet(EvibesViewSet): data=output_serializer.data, ) + # noinspection PyUnusedLocal @action(detail=False, methods=["get"], url_path="autocomplete") - def autocomplete(self, request): + def autocomplete(self, request: Request, *args, **kwargs) -> Response: serializer = AddressAutocompleteInputSerializer(data=request.query_params) serializer.is_valid(raise_exception=True) @@ -1359,28 +1076,14 @@ class AddressViewSet(EvibesViewSet): ) -# noinspection PyUnusedLocal class ProductTagViewSet(EvibesViewSet): - """ - Handles operations related to Product Tags within the application. - - This class provides functionality for retrieving, filtering, and serializing - Product Tag objects. It supports flexible filtering on specific attributes - using the specified filter backend and dynamically uses different serializers - based on the action being performed. - - Attributes: - queryset: The base queryset containing all ProductTag objects. - filter_backends: A list of backends used to filter the queryset. - filterset_fields: Fields available for filtering the queryset. Includes - 'tag_name' for filtering by the name of the tag, and 'is_active' for - filtering active/inactive tags. - serializer_class: The default serializer class is used when no specific - serializer is defined for an action. - action_serializer_classes: A dictionary mapping specific actions (e.g., - 'list') to custom serializers. Uses ProductTagSimpleSerializer - for the 'list' action. - """ + __doc__ = _( + "Handles operations related to Product Tags within the application. " + "This class provides functionality for retrieving, filtering, and serializing " + "Product Tag objects. It supports flexible filtering on specific attributes " + "using the specified filter backend and dynamically uses different serializers " + "based on the action being performed." + ) queryset = ProductTag.objects.all() filter_backends = [DjangoFilterBackend] diff --git a/core/widgets.py b/core/widgets.py index 4af7c3ea..6d673d8e 100644 --- a/core/widgets.py +++ b/core/widgets.py @@ -1,12 +1,14 @@ import json +from typing import Any from django import forms +from django.forms.renderers import DjangoTemplates class JSONTableWidget(forms.Widget): template_name = "json_table_widget.html" - def format_value(self, value): + def format_value(self, value: str | dict[str, Any]): if isinstance(value, dict): return value try: @@ -16,12 +18,14 @@ class JSONTableWidget(forms.Widget): value = {} return value - def render(self, name, value, attrs=None, renderer=None): + def render( + self, name: str, value: str | dict[str, Any], attrs: dict | None = None, renderer: DjangoTemplates | None = None + ): value = self.format_value(value) return super().render(name, value, attrs, renderer) # noinspection PyUnresolvedReferences - def value_from_datadict(self, data, files, name): + def value_from_datadict(self, data: dict[str, Any], files: list, name: str): json_data = {} try: diff --git a/docker-compose.yml b/docker-compose.yml index 159fdbc5..a91d8118 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -61,8 +61,6 @@ services: image: redis:7.4 restart: always command: redis-server --save "" --appendonly no --slave-read-only no --requirepass "$REDIS_PASSWORD" - ports: - - "6379:6379" volumes: - ./services_data/redis:/data env_file: diff --git a/evibes/settings/base.py b/evibes/settings/base.py index d95d84d2..1660156e 100644 --- a/evibes/settings/base.py +++ b/evibes/settings/base.py @@ -11,7 +11,7 @@ BASE_DIR = Path(__file__).resolve().parent.parent.parent SECRET_KEY = getenv("SECRET_KEY", "SUPER_SECRET_KEY") DEBUG = bool(int(getenv("DEBUG", "1"))) -ALLOWED_HOSTS: set = { +ALLOWED_HOSTS: set[str] = { "app", "worker", "beat", diff --git a/evibes/urls.py b/evibes/urls.py index 53d75b87..ab9747c7 100644 --- a/evibes/urls.py +++ b/evibes/urls.py @@ -1,5 +1,5 @@ -from django.urls import include, path +from django.urls import URLResolver, include, path -urlpatterns: list = [ +urlpatterns: list[URLResolver] = [ path(r"i18n/", include("django.conf.urls.i18n"), name="i18n"), ] diff --git a/evibes/utils/__init__.py b/evibes/utils/__init__.py index d72283bc..e0a56c0d 100644 --- a/evibes/utils/__init__.py +++ b/evibes/utils/__init__.py @@ -1,11 +1,12 @@ import os import uuid from datetime import datetime +from typing import Any from evibes.settings.base import LANGUAGE_CODE, LANGUAGES -def get_language_from_header(accept_language): +def get_language_from_header(accept_language: str | None = None) -> str: language_codes = {lang.split("-")[0]: lang for lang, _ in LANGUAGES} languages_dict = dict(LANGUAGES) @@ -29,7 +30,7 @@ def get_language_from_header(accept_language): return LANGUAGE_CODE.lower() -def evibes_summernote_upload_to_func(instance, filename: str) -> str: +def evibes_summernote_upload_to_func(instance: Any, filename: str) -> str: ext = filename.split(".")[-1] filename = f"{uuid.uuid4()}.{ext}" today = datetime.now().strftime("%Y-%m-%d") diff --git a/payments/gateways/__init__.py b/payments/gateways/__init__.py index 9159967f..4c935ff4 100644 --- a/payments/gateways/__init__.py +++ b/payments/gateways/__init__.py @@ -4,9 +4,9 @@ class UnknownGatewayError(Exception): class AbstractGateway: @staticmethod - def process_transaction(transaction): + def process_transaction(transaction) -> None: raise NotImplementedError @staticmethod - def process_callback(transaction): + def process_callback(transaction) -> None: raise NotImplementedError diff --git a/payments/graphene/object_types.py b/payments/graphene/object_types.py index c704dd80..13fd2748 100644 --- a/payments/graphene/object_types.py +++ b/payments/graphene/object_types.py @@ -1,4 +1,5 @@ import graphene +from django.db.models import QuerySet from graphene import relay from graphene.types.generic import GenericScalar from graphene_django import DjangoObjectType @@ -31,7 +32,7 @@ class BalanceType(DjangoObjectType): interfaces = (relay.Node,) filter_fields = ["is_active"] - def resolve_transactions(self: Balance, info) -> list: + def resolve_transactions(self: Balance, info) -> list | QuerySet: if info.context.user == self.user: # noinspection Mypy return self.transactions.all() or [] diff --git a/payments/locale/ar_AR/LC_MESSAGES/django.mo b/payments/locale/ar_AR/LC_MESSAGES/django.mo index b1c3341e399b927826065c3cdce298ef590c24b5..0b0f9caf11e0d8cf809146b67e535964c618de71 100644 GIT binary patch delta 1410 zcmZva$!ior6o*S4_ZasD7bpca32|Hy#0B&!2!aOhZBNH(m~@BkjzLj}XeNoliwE)I zB}R=2(L{qv^r#oXi+HJm;6LC&?_T^~bz&xBG1Xtyt5?6b)O_AFwxjxeL*ap9Y-8?Z z&M@~fA1&g;IJ8))bF2@;Cib_MD76uez~%4*Tnj(K74REufirM7Twciin&B??hv5cz z9&T5vsxGtWz;F}tQ$P6ZfWM#!HZ09AY=*1ZH^IyBC~SZa;SKl%ivR9qO6`X&&?oT= z@CSTLwkNSaUa8a`_#HM7UoBdt)K(0Qa2?zSPrzgF5KLer9EPXhYpCH*C>5?FtNZW> zl!QLPX809KrN5z6-pHZsTj4c$TK2?O(=49BFOXzax<;vk@H!-MR}~s=NQc%lC1H*g zIjAj6igC{Y+z=fZ@-*_a@?h{-C*u`F=pL65((11x|}oD;6IwROgy%du`23n-SY<#?7cU)3%0b z(2STdEmnKmykaxNneAcoPF#BJU2XgD959n+Jon30xNJs?+Kkx&+hbm7+ixaqf9}y^ zo{7o;a^qDFSoi)ffLIae!H-Z{^3&$I&E_>94^vTO$IKM-rJ1lbZHCPRzN7X3 zg}SG)RU()v;xJuy3j!eal(Y9J3{lIRqwO~%Qk!{8>3#J@nc=y8Z9WM*IB$GI7hg!d z{Uk>tBRXmB<&h_yqaBo+(l#dI!!(YCE0`9%pq>dc${oCG_73eADfdJJ<_)gYLDIa8 Ovn_1T)R|=~3x5DO)9B6s delta 539 zcmYk(IWI&}6ae6h!Hji`Eex?VmWJpo4TVyoQz=ZL5Q$16Oy&=WghV8&i9#VnF?14@ zLR1n_NX$R*AAI+j!cETm-g&vpIrrVky%Xir1{E%zW1qZ0`NyXL&H6|k# v_\n" "Language-Team: BRITISH ENGLISH \n" @@ -52,11 +52,11 @@ msgstr "تفاصيل المعالجة" #: payments/models.py:41 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"يجب أن يتناسب مبلغ المعاملة مع {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"يجب أن يتناسب مبلغ المعاملة مع " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" #: payments/models.py:63 msgid "balance" @@ -120,3 +120,16 @@ msgstr "تعذر العثور على مزود {provider}" #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | إيداع الرصيد" + +#: payments/viewsets.py:10 +msgid "" +"ViewSet for handling read-only operations on the Transaction model. This " +"class provides a read-only interface for interacting with transaction data. " +"It uses the TransactionSerializer for serializing and deserializing the " +"data. The class ensures that only authorized users, who meet specific " +"permissions, can access the transactions." +msgstr "" +"ViewSet لمعالجة عمليات القراءة فقط على نموذج المعاملة. توفر هذه الفئة واجهة " +"للقراءة فقط للتفاعل مع بيانات المعاملات. وتستخدم أداة TransactionSerializer " +"لتسلسل البيانات وإلغاء تسلسلها. تضمن الفئة أن المستخدمين المصرح لهم فقط، " +"الذين يستوفون أذونات محددة، يمكنهم الوصول إلى المعاملات." diff --git a/payments/locale/cs_CZ/LC_MESSAGES/django.mo b/payments/locale/cs_CZ/LC_MESSAGES/django.mo index 135e10444c21b1e49e37e776652eaa05b72bd84e..89fce33a034e0cd6a2248bd7d8e3e545939105c4 100644 GIT binary patch delta 1279 zcmZvZy=xRf7{eAfASfnS*-UmP?&R)v)}7f4IW^bX zq!I~1n}8w~sRA}a6z=vfunqbL2x=kLKJV^bJjCJVe)F;Oyzl$GUq|;Q8ec{WF9gN} z<~huL%xTP5hwz7SrALU{SkHqq*su2raT0tB_Jbe5<6sjU06&9s;66A7_80Q+X2J8= z&x51j9q_CW4Y7np6$ej2{KPl>O@co`792jDKNtgtu%7{!z^mXexCuT1UxWPpRG$!+ zz&X%E;`cxezDKs#aZZCmoB%Pr$EmP4EX(IL@5TeHEHb5(39k7GG9XWGlZ zxUbdff^xKMVhUvFS9JK0VkP~{CakQHiBv3|HlZaGk_!|q#xk_h<1?xnUsX!97-&mg zqav-PC^j|iD@(FVMTbts%hFR>m~6)ih_tF*K(0&Dmrj=GmZQW%nhHK zYGHm#SxLrs5IG0<*%FEJIp-tjUSUOaM3T5H~6GPMIkg+Y&YGA0U;E9ctrvl#wdQu%+{x|qu!u}jS8Nuw zHk{(CQ08_fZHLRAg0s>Ya_Lrc$Cr3x%WE!KQ52hc0MGub1I-5I7MDFuNHTM`+}gnR zRn3m9mFO-acf6ALOm=z4dwj(?rhCmDq~6{1g@Ya-y>@1GxuVnU^bK+=Qo2`GRPKaD zu~ifnn1rHqOIw#jrk0Dt029T{?OND+$+aMw#+9lx-xaCs6pNz=mGoJ%!q;(YLpvnX M{iw8iqwhlRAHLQ_ssI20 delta 539 zcmYk(!Ab&A6vpvWGv-WL>6BTPS%PE{1umkfO`A4CkI=#hS1m+vW8w?63c_VQK(rZ! zh{%^{6=bz>*E{t8h8A5o^P4ks@0@$jye@tQonheK8Y4rj5N|}DxE|xe@W#zb=;Iug zF^(rVi>K(}8E#<>*YO55uZKB&!2sVei$8d2)-lg9b9vCjWo)57*hMY4$0-c4iUUkw zfkjuii<hcW6~kDDS7o^c1iq8FTw*#+`6Y9sro z4^^;*7f22J#!Va{OD)N6bixe!SjIXY{pF9?Ab(O$ecNVM3HMN4S6df|NkWC`RP=k8 w9~A(b(dFOJuhC{SQiKYpl`zz;B%vod5s; diff --git a/payments/locale/cs_CZ/LC_MESSAGES/django.po b/payments/locale/cs_CZ/LC_MESSAGES/django.po index 3115ca37..f0f56b99 100644 --- a/payments/locale/cs_CZ/LC_MESSAGES/django.po +++ b/payments/locale/cs_CZ/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -52,11 +52,11 @@ msgstr "Podrobnosti o zpracování" #: payments/models.py:41 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"Částka transakce se musí vejít do rozmezí {config.PAYMENT_GATEWAY_MINIMUM}-" -"{config.PAYMENT_GATEWAY_MAXIMUM}." +"Částka transakce se musí vejít do rozmezí " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}." #: payments/models.py:63 msgid "balance" @@ -120,3 +120,17 @@ msgstr "Nepodařilo se najít poskytovatele {provider}" #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Zůstatek vkladu" + +#: payments/viewsets.py:10 +msgid "" +"ViewSet for handling read-only operations on the Transaction model. This " +"class provides a read-only interface for interacting with transaction data. " +"It uses the TransactionSerializer for serializing and deserializing the " +"data. The class ensures that only authorized users, who meet specific " +"permissions, can access the transactions." +msgstr "" +"ViewSet pro zpracování operací pouze pro čtení na modelu Transakce. Tato " +"třída poskytuje rozhraní pouze pro čtení pro interakci s transakčními daty. " +"Pro serializaci a deserializaci dat používá TransactionSerializer. Třída " +"zajišťuje, že k transakcím mohou přistupovat pouze oprávnění uživatelé, " +"kteří splňují určitá oprávnění." diff --git a/payments/locale/da_DK/LC_MESSAGES/django.mo b/payments/locale/da_DK/LC_MESSAGES/django.mo index 9351e7ec575a58c1802ff804a9933db33eedec6f..3efffc3def5ff5b5b88ea799b9efb5219f96c2bd 100644 GIT binary patch delta 1281 zcmZ9Ky=xRf7>7rV#%SV4G#dQC@e5-(4+RVDENny}V1oT*ckXW4&1{(2Gep$0v9lE$ zOTTIZTBJq~GP&cGu| z_0&9*1vVZ)e(F1qqwpsb!O`vY2NQ5N>nS)7FT+vz4Bm$?pqxLsL#cCc8YUEe8|LsG z)i&5aHBvV^1Bc143MTt_Q9;hC$FK>Xz%y_aN~d3-hTq@>9NAU7b^82OcFQou)WKl}lw;BQFbu`8xAB!Qec%ot-x0uiUCSR{xc zjY!DV$kob~Nl4)m(l9rqdR%J^+>7@jmP+iYp$_)B33oEPG;1r}D!uL)mlm08Yi~_@ zp>)NvE*GsgRaUy7OQ)-j)pOpsU=rEW3uS7Hrk?9$K_|V!grFCFc{fXK&}Kj-bCvZi zlh~Lhu0(-MOIg*?)qrGbD$~?AD%}l;{FiXn`pgvBJ?o=T=r2XcxL&HsJFq1m*K%{r zl31Q~q3fftspyCfO}FZl9?euz`q0ozol-AYJPC_7$y!;WF<~JKL2PK~#5iq|#L}!} z_*eW8Z<{MSw_Y9U{WZ193f)+N6(|b zg>_AR-8yG=E0N;j$3-k_}KeYcI`z|{^o zEi#zZcNS1{d&BCuQA^#7z!?`T-!0c?GJw-G+Y1x delta 539 zcmXxhJxjw-6vpwRNz=quZR15+(sXFaS7`l8sJjVh&^6!xzkB zg-K_)iW>ibi}-{!lK;SE`kP*Qup?ALO)TIQdhBm^ysYq{gA3S04gA45%+eXd2urwu zC%A*`VQ*N)E)L)~j$?+blz18UF~UJ?;Q_X>$o`fO(h|?0s;;tX0WGEqP^sj47*ED& s8~XDfU5%1aD-tY~B(1)xr4uWe3^7Vj#N?3rmt-a5b7$R+D}m?y0xi-e$^ZZW diff --git a/payments/locale/da_DK/LC_MESSAGES/django.po b/payments/locale/da_DK/LC_MESSAGES/django.po index bf72dd02..222289e5 100644 --- a/payments/locale/da_DK/LC_MESSAGES/django.po +++ b/payments/locale/da_DK/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -52,11 +52,11 @@ msgstr "Behandling af detaljer" #: payments/models.py:41 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"Transaktionsbeløbet skal passe ind i {config.PAYMENT_GATEWAY_MINIMUM}-" -"{config.PAYMENT_GATEWAY_MAXIMUM}." +"Transaktionsbeløbet skal passe ind i " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}." #: payments/models.py:63 msgid "balance" @@ -120,3 +120,18 @@ msgstr "Kunne ikke finde udbyder {provider}." #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Saldoindbetaling" + +#: payments/viewsets.py:10 +msgid "" +"ViewSet for handling read-only operations on the Transaction model. This " +"class provides a read-only interface for interacting with transaction data. " +"It uses the TransactionSerializer for serializing and deserializing the " +"data. The class ensures that only authorized users, who meet specific " +"permissions, can access the transactions." +msgstr "" +"ViewSet til håndtering af skrivebeskyttede operationer på " +"transaktionsmodellen. Denne klasse giver en skrivebeskyttet grænseflade til " +"interaktion med transaktionsdata. Den bruger TransactionSerializer til at " +"serialisere og deserialisere data. Klassen sikrer, at kun autoriserede " +"brugere, der opfylder specifikke tilladelser, kan få adgang til " +"transaktionerne." diff --git a/payments/locale/de_DE/LC_MESSAGES/django.mo b/payments/locale/de_DE/LC_MESSAGES/django.mo index a045deff9598601a5728febd4fd5c78c5fe79beb..1524c6aec70f446b603832097a2c5d2b8ecdd9c3 100644 GIT binary patch delta 1331 zcmZ9K&x;gC6vr#N>YA9C_$xmpwG5i;5z#|8yADo15u|Es@@Jo0E{sbSuU!mSV zbI_PC;CWb3_%~3+Jf+&NIqw}d=6(1W9w5KjWuXdwhuk&K;U)M7ya1QqG=`tK%tIBe zLv?EaQD9n_;m=S79Hq+7;R#3xa|P=CYmlG$mWK-d4!%u(^B0RB;oo`yJ+jp5F{JQL z6|cIX3EpF>0=-L4bBd{nv>o%ILUgDwO|C7|adHatE~G=IrLEn-y{<26sg8H1Fehew z4R^hady?&-j<#~49Qv?nqquUl4#WGl-je9DuS2qRu(=Yu5nV{G&@(%#OBt@&jmjrm zv_qGY-HP?LFC|&G5XFZqao`H+(sVnGK&G+JmCXwwOPAf6y^(E`2=c##J&E28{f@*g zP?~KukPB^T$-8i*A5X(=uqwLpB%~&Gfn7!s3SE<{Iuf(glrgQ?aaG%q;7Qt&!Vi35 zF=6CWQX5um;evHVA&AusuZmyd?b`10zROGPD^n+X(UxB9b)2nSzoF1=e7oJm)mzlM zdS`C05VIK|U^FxMUT1n|Fb=PKZrhtGL2TbkraJLKY$~cKzP~9fCVP1&i|rL{6@1Pq z%W#O}^BQhw6I>V9j(mPC4>n0yvpq`PmN=GBlAxrhg>EmHztcoJ+a@njWi_F+>ofaX zKR+$$)cQ0w66ONB%COfLmBbZ#gq4Aiw1Q6Px5)TPLX+t<@A94S q0{LG}_RtwtrUr6%Lx+h%1S4`q3&f_;$%^K!8W-bqExPW!kAKs%jv~d&zJjQn% z!z`OFa1FKo5p(#ACxq|e4)d+p;N`9{%DjUL{(v#gw->%_^56~Ev5zB|Bfj3Gh;w*| zN?yftyh6^fA6&r*DSRxT)^DJK?;>w%M>vij*u<{poNr}z\n" "Language-Team: BRITISH ENGLISH \n" @@ -52,11 +52,11 @@ msgstr "Details zur Verarbeitung" #: payments/models.py:41 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"Der Transaktionsbetrag muss zwischen {config.PAYMENT_GATEWAY_MINIMUM}-" -"{config.PAYMENT_GATEWAY_MAXIMUM} liegen" +"Der Transaktionsbetrag muss zwischen " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM} liegen" #: payments/models.py:63 msgid "balance" @@ -120,3 +120,18 @@ msgstr "Anbieter {provider} konnte nicht gefunden werden" #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Saldo Einzahlung" + +#: payments/viewsets.py:10 +msgid "" +"ViewSet for handling read-only operations on the Transaction model. This " +"class provides a read-only interface for interacting with transaction data. " +"It uses the TransactionSerializer for serializing and deserializing the " +"data. The class ensures that only authorized users, who meet specific " +"permissions, can access the transactions." +msgstr "" +"ViewSet für die Handhabung von Nur-Lese-Operationen auf dem " +"Transaktionsmodell. Diese Klasse bietet eine schreibgeschützte Schnittstelle" +" für die Interaktion mit Transaktionsdaten. Sie verwendet den " +"TransactionSerializer zur Serialisierung und Deserialisierung der Daten. Die" +" Klasse stellt sicher, dass nur autorisierte Benutzer, die bestimmte " +"Berechtigungen erfüllen, auf die Transaktionen zugreifen können." diff --git a/payments/locale/en_GB/LC_MESSAGES/django.mo b/payments/locale/en_GB/LC_MESSAGES/django.mo index dcc05060c952d517a3d63cb7a96df2d6a029e375..fff68a2ad971a7cf0b49c811a0544793609878e5 100644 GIT binary patch literal 3041 zcmeH}O>-MH7{>(^3MS>HP+)kOd3p$SO4c|DFCDk(;G|CKP8?^PO-fH0c~`atyDL}H zCZuiPQve4zc7`iAV7PRqAAxJ9U!WKG2K=?VZcQNxGX+j)BL5_<^ysfgkDkfh<43+^ zD6gTuiFyZh67}21@Pkr)oUs+OXTUQ0pFhFaOW=3lQSfK*dGI#)H24d68oUFZ1dkrc z=S_icp+5s22ixH5U>A(RJrIBF9)8{ce+8Yri6`^M>N9V6UJ;LZ%VO3XYr=cP@9Y?!H_(k%PSe;(8daG%IjjrqStf<+&W}<$`~} zrW8Bt!ctFZ8t^2HWYQ-sc<8Al+9fp$7LnEc1K4Os+5y=yiy^nXLQPAlfsu#yTNhgLNL~{jJBcodPA{eg93*moOa zT^{iy5F_F^LuI5L^$qI^1B0T^b!eu~b@h2CV6qICe!gpgjJ}Qy4MY?vZ0p>$)sxzccAjRkN4qLT7;Ot& z$Sz$?p*VM2PlyO^5b&6yKqVFdKq}Q_(&12POWc;|fHGMw7Hx@`%V-MDj#OVUr9(sm zY~p0urSKkNjfPx?Y{++GkyyiuZ!S(kVX@q>v3nbD6OUDzSc+4)x+g6mSQTBz-aXl` ztktiy8ms=+a@}uSu3y<|HCLOhjne4BHX8i%gouQ7?@UhylVvT7)4y zs9l6*IWnv6rRrR5_QQ9oD5Vu{td}K~h+Cy$e7W5r)P;@J_9mTMY_IzD zMgOCvjZOn2%}!;p-8zqDNk8R%;rWR78ZC61esldIHCC5b91mOerxm4Ev(aF<9zB`P#OwLj;;Mxc~zu_-=XCBORd8{Y2*GK{tBHC(nrYmh}ElM?y zyd|Y$Q=?>wl4s7m9RTkS-MI zxab?U@b}a4;-TqyWWC@%>3H-NrzxH^ySRTkZvLm~c*UjT_5ta5ZIq6YQCzAXPsiE& j&;O}lW9@${9gl5c*yTq^$5&jkew1{4`LJ~SaQOWWlbUx4 delta 545 zcmXxhJxjw-6vpwBChCp#HMJJBBD%D6DRk&Af`f&A1cxFxbr8g*N>&F4QN+=%MYkw) zQ2Y{I6clvVP2GzBC+dNdUy^&1`{d@ea2drfQE+ZlfiBVmdYL}lx>Si>>g zz-erv!!4}f4zA!SYTgYl;T=Z!gbVnNZL`>%Zx(Q49~ZHMdf^4?fi7k-!4^K?1g`SX z0aj7-ud#%;*e3ilDtKe`H~1bZ&=D&52|CudE+, 2025. -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -56,11 +56,11 @@ msgstr "Processing details" #: payments/models.py:41 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"Transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"Transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" #: payments/models.py:63 msgid "balance" @@ -124,3 +124,17 @@ msgstr "Couldn't find provider {provider}" #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Balance Deposit" + +#: payments/viewsets.py:10 +msgid "" +"ViewSet for handling read-only operations on the Transaction model. This " +"class provides a read-only interface for interacting with transaction data. " +"It uses the TransactionSerializer for serializing and deserializing the " +"data. The class ensures that only authorized users, who meet specific " +"permissions, can access the transactions." +msgstr "" +"ViewSet for handling read-only operations on the Transaction model. This " +"class provides a read-only interface for interacting with transaction data. " +"It uses the TransactionSerializer for serializing and deserializing the " +"data. The class ensures that only authorized users, who meet specific " +"permissions, can access the transactions." diff --git a/payments/locale/en_US/LC_MESSAGES/django.mo b/payments/locale/en_US/LC_MESSAGES/django.mo index 0631db1bdd279bbb0a29408f5d05f46b9c3bce9f..d3070bfae948a05c279e4f457513b4b02c855c16 100644 GIT binary patch literal 3029 zcmeH}&u<$=6vqczD46oAP(THw*F#jNWQ~)8sNANile(=@97m3mwkK<{JGKX{cifrT zgwTdRfD0!C2ac6E05=2&j{FC3t+@5Xg+GDs+g-P&qA5~=6QhhjGqbaAzVqJOr~G>4 z;AaBuHS{;oZ==tkfB6`G(5jCMv4ZhDSjPP0146t6egz%^e*~Wge*&KZe*sT|x54A! zp@aFpS@2EF=fNXj8$1SXfg^Aa#Gm*LKd*zogKY2c6Z!t5;4_$)!7cC|@G$r}coVz@ z^8Vvb3ULBF35L+!0a^d|5X<@xJe}*G16luhko8{%u~l3JS$_{?{hxrm?;DWye+RPu zpF!4t2W0)Clp^C`&tzW`bP*C6Zv0c8Ehu*mvPfV}?}$ojtpAv;^cFl+3e z7tvoue-<4k#4G5KkZA<6#`oaH_u{y6ytp0BAzlCx9)XZ%4X(>HvL0^FkOv2>2c z)@D1Ct#j(M$?5p^9$ zey!D5?e;F!yNxULYrR%;wb|Ne?FA3qP`{dOm_EXZ9hJMtrCA>J(-?^uA}zE>8p4B? zGc41QeIGOBToo>zKMhlBaj|_JRz#4qZl+vJ*lTPtvT{e<)!b>n-&pSUR_m?C9^IUT z{%-oM<>?hPqhJ#s2*O#T#%6P=u}-Hd)k?M0L7rM4wA?^P!BRSKLD$r%wAKzfYFqOQ z!3BH;HCm`Hyc<;KgHu(io~kXp_f{3Hv?84kvZ4}8Z!C;oYIg{IX=Am$NoSYatKIr? z_x#0;P6I2=PGz~>I)~SiK`I9-=px^1wA5*Ko9maUv3hBR`LNe&q>>QazQ+{!ydoehDZy#5$zOq3h2~C6?tI_E#?MrKM zYGoW;G8e@6@~OkDZoKN>qaqLg3aCxHvjDH53s9tuAG^IW;BK6u1U1akT}l zEp62h)ZkX(61ew$v|f1cbKbpozsKLb>o|iA^l%&3a37cP3^jL)MZCuV-*5p3cxV=y=a{)%XyPIsp6+zx_Nqn){EGw(dXediN`hl w=Rf*13Zt5(eR@tmC@q?y6(&LFXf|>5Cw0%JbfBV^v*E^SozN*q75_T^3m6tG6#xJL diff --git a/payments/locale/en_US/LC_MESSAGES/django.po b/payments/locale/en_US/LC_MESSAGES/django.po index 7b07978c..ad0de0d1 100644 --- a/payments/locale/en_US/LC_MESSAGES/django.po +++ b/payments/locale/en_US/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -52,11 +52,11 @@ msgstr "Processing details" #: payments/models.py:41 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"Transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"Transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" #: payments/models.py:63 msgid "balance" @@ -120,3 +120,17 @@ msgstr "Couldn't find provider {provider}" #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Balance Deposit" + +#: payments/viewsets.py:10 +msgid "" +"ViewSet for handling read-only operations on the Transaction model. This " +"class provides a read-only interface for interacting with transaction data. " +"It uses the TransactionSerializer for serializing and deserializing the " +"data. The class ensures that only authorized users, who meet specific " +"permissions, can access the transactions." +msgstr "" +"ViewSet for handling read-only operations on the Transaction model. This " +"class provides a read-only interface for interacting with transaction data. " +"It uses the TransactionSerializer for serializing and deserializing the " +"data. The class ensures that only authorized users, who meet specific " +"permissions, can access the transactions." diff --git a/payments/locale/es_ES/LC_MESSAGES/django.mo b/payments/locale/es_ES/LC_MESSAGES/django.mo index 04d7658d7d61d142c6d997920b53fe4d672a62dc..51f8981980a5d92017f25904867fb16cc1068afe 100644 GIT binary patch delta 1299 zcmZ9KyKdA#6o!Xna{&@A34w4ECj}x|g;j!}K%#^KDH0M1=_mFiYvi?!FGPs|SCo_p z3JMAY4-iB{nI}NBfr<`+cml+C?A@@+$m4Iu9{=Z`fBbvm+jRMTqVdwurs)^xd-Tin zH;1^<76y!2V!Q}vnLiseW)gmYBk(gk4tL=w{0f_J56-}mM!jwhUSz%qC*VDJ&Y04y zG3fB%DdaLgxt)i9pbCx+)gMg3qs(XF8oUn2;4An9zJt1cX4sf3un9ek--lc96K)rH zzHqoUV&M?=P02tVJ%_rZ*H9O}h4b(W9Aub+cwncsph;3`xDKj0 z>Cx!X>XB)is$ot*PRNuTYt_`Lrl1bB9jj3}?+*WCHE^5DE|>Kz=pxLODmzQJ5?bYmA+87?~#67%dIf- zDtj) zm3gPxCUL3~RtkDI*6o9GrIo63FX)2m9>*2NRJOU^orJb$-3xYiqLw_!1ERJ4)%)_U z1bgYCx78Om(|zfdEZMT_cZ2OmxoSQt_BTxRBEwO@fb2DT>&N7(YrLY9gyicxewa=W j>6>o)x+E!_-%a1=AFynKL#Y3rI@y+4cCvGOxHP~;Ss)KKz`dGn_5>zbzN;8C;AB`rc>^ESZ~zk tM!M@ix*C4ijbWbpfw9ii6_Mp#T~vW8jwZV6QGu>1nVfnRKPg8m-XFW5Ctv^o diff --git a/payments/locale/es_ES/LC_MESSAGES/django.po b/payments/locale/es_ES/LC_MESSAGES/django.po index aca2baa6..20022a8a 100644 --- a/payments/locale/es_ES/LC_MESSAGES/django.po +++ b/payments/locale/es_ES/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -52,11 +52,11 @@ msgstr "Detalles del proceso" #: payments/models.py:41 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"El importe de la transacción debe ajustarse a {config." -"PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" +"El importe de la transacción debe ajustarse a " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" #: payments/models.py:63 msgid "balance" @@ -95,8 +95,7 @@ msgid "" "if you have any questions, feel free to contact our support at\n" " %(contact_email)s." msgstr "" -"Si tiene alguna pregunta, no dude en ponerse en contacto con nuestro " -"servicio de asistencia en\n" +"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 @@ -121,3 +120,18 @@ msgstr "No se pudo encontrar el proveedor {provider}" #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Depósito de saldo" + +#: payments/viewsets.py:10 +msgid "" +"ViewSet for handling read-only operations on the Transaction model. This " +"class provides a read-only interface for interacting with transaction data. " +"It uses the TransactionSerializer for serializing and deserializing the " +"data. The class ensures that only authorized users, who meet specific " +"permissions, can access the transactions." +msgstr "" +"ViewSet para manejar operaciones de sólo lectura en el modelo Transaction. " +"Esta clase proporciona una interfaz de sólo lectura para interactuar con los" +" datos de la transacción. Utiliza TransactionSerializer para serializar y " +"deserializar los datos. La clase garantiza que sólo los usuarios " +"autorizados, que cumplan determinados permisos, puedan acceder a las " +"transacciones." diff --git a/payments/locale/fa_IR/LC_MESSAGES/django.po b/payments/locale/fa_IR/LC_MESSAGES/django.po index 5d026376..d8345a6f 100644 --- a/payments/locale/fa_IR/LC_MESSAGES/django.po +++ b/payments/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-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -117,3 +117,12 @@ msgstr "" #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "" + +#: payments/viewsets.py:10 +msgid "" +"ViewSet for handling read-only operations on the Transaction model. This " +"class provides a read-only interface for interacting with transaction data. " +"It uses the TransactionSerializer for serializing and deserializing the " +"data. The class ensures that only authorized users, who meet specific " +"permissions, can access the transactions." +msgstr "" diff --git a/payments/locale/fr_FR/LC_MESSAGES/django.mo b/payments/locale/fr_FR/LC_MESSAGES/django.mo index 925b9f39f4a69e2bdc1f8f32db53338ad3e439f2..49efa320fbb9fe206b3593ee7be9e8dbe3cc3661 100644 GIT binary patch delta 1332 zcmZ9KO=}ZD9EZm?w$;|R*7`0?6|t6DEr=jqgd!pcf{ne(ba&beY-ZD)*`$gZ@iVBs z)SI9=7rgYCqend!zknC-UVLVgv}uRTJ~Okkzu*5QpC(%8o4?0P9|hwa^AdB1d5yVw zhzH~LfDlhu&%_@D3b<8}K#!0>k~OAtA2A85j}xGx!;PC)!7x zmyZZ>25!P({KXcFkij+#0zcqg_zT{GqenX#+=o}#FTj&<1%`?>;0F8vLjtozc@@q> zB*b$V3|~NgqRwL-zK3J@i+?N`6a6gC#qtK4t zAn9U+#6oLB%fguKph$oYi6(6=2GuM2f@d*~cX_(YeONNOv8cUVNi$hdHcpIPm6=xY z&D16@Wm?mj@+P%TrdIljmgP)Yr=oBst7)v0Ia#h4C!=PfoRhUIt(#aosrpom^*UQo zkuGeCT~NTOVSGjUKFL^lH76f?nL9)d7%u9}sKmU|Ss~=Q+aRQDGnV-F9fglOa%EOg z5uUa#&kAAX$%qV9?kj1AW*jUtH!B;JR8}=LaWx&86%$E{P&LklGR(?IS*fB(lWcI< z4Zg(Nxvi0bd!=TtsI@fD5paTQT4UWUr?wnLo@k`gdBT&sfSR_y!MIO4wR3Vo zd*96>lrhh&p-5KCz2f#Ho4cAt0G)cTnoO#?j*39y)Y^87h;T{NUJk+NVS;<^O=27` z_cgq){)Mt5ozM{KCaG84ZWSlZ?omj&=X4-}RYlJ|8LZ`<{9O@O$5wfrXZ(Y5Ph(J| v=xe!=v2nH3X^WBWZwY;Bw?d=P;%bfP>){qnYPVuSQ~7#-igfA0(9+<4EqO^l delta 539 zcmXxhze@sf7{~Fa?y5V@erP{X`++)mv?vWhV-2-LOSL*^(4w?SP$7;%Q&6ss1#PF$ z5J>++lTfouW6;?9bJPRR_vM}6?>)~w_mqA}wLX*Xy%Edg3i(d1lec3mgg0&$ppPls z#3|gvSv*7!E4YDYn8Q2Nz88T`VAS<5`f%;iQCvv`SmUzzrnCA>j3)I~M^h#vLrg&$koc*7F@pf(09c`V}`9-$_5 ziXChtH7rf_0gkn!38v17f5mz@(zj!+xW; uC}#frN1sN`DCS8uvZxC}MfCz|W`bNG8DjL3`p*(ti16CkcEe-;#Q6mx@+Zjv diff --git a/payments/locale/fr_FR/LC_MESSAGES/django.po b/payments/locale/fr_FR/LC_MESSAGES/django.po index b91c13f4..b05bd9a5 100644 --- a/payments/locale/fr_FR/LC_MESSAGES/django.po +++ b/payments/locale/fr_FR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -52,11 +52,11 @@ msgstr "Détails du traitement" #: payments/models.py:41 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"Le montant de la transaction doit être compris entre {config." -"PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}." +"Le montant de la transaction doit être compris entre " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}." #: payments/models.py:63 msgid "balance" @@ -95,8 +95,7 @@ msgid "" "if you have any questions, feel free to contact our support at\n" " %(contact_email)s." msgstr "" -"Si vous avez des questions, n'hésitez pas à contacter notre service " -"d'assistance à l'adresse suivante\n" +"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 @@ -110,7 +109,8 @@ msgstr "Tous droits réservés" #: 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" +msgstr "" +"Il est nécessaire de disposer d'un fournisseur pour obtenir des tarifs" #: payments/utils/__init__.py:15 #, python-brace-format @@ -121,3 +121,18 @@ msgstr "Impossible de trouver le fournisseur {provider}" #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Dépôt de solde" + +#: payments/viewsets.py:10 +msgid "" +"ViewSet for handling read-only operations on the Transaction model. This " +"class provides a read-only interface for interacting with transaction data. " +"It uses the TransactionSerializer for serializing and deserializing the " +"data. The class ensures that only authorized users, who meet specific " +"permissions, can access the transactions." +msgstr "" +"ViewSet pour gérer les opérations en lecture seule sur le modèle de " +"transaction. Cette classe fournit une interface en lecture seule pour " +"interagir avec les données de la transaction. Elle utilise le " +"TransactionSerializer pour sérialiser et désérialiser les données. Cette " +"classe garantit que seuls les utilisateurs autorisés, qui disposent de " +"permissions spécifiques, peuvent accéder aux transactions." diff --git a/payments/locale/he_IL/LC_MESSAGES/django.mo b/payments/locale/he_IL/LC_MESSAGES/django.mo index df51fc6f393fa0ca5ef748bb3e82af42e3495eb9..2c4756da1b00f8173ac2ac25e926447cd6a51c13 100644 GIT binary patch delta 1386 zcmZ9KzfTlF6vszIKt=ok_}e(f7!mLyi49h^CMG6ANVGA_-r{X??Bebs(WqBz-o2rfeLKhvVrdDshGgx`eg za22(K*q`lIO2akSL4Ng}&1nq3tU;-+J@rb@!U62pAwTtmY#f@HZ3z zw^7*#UDyGi!)`bW<^CfK;AhxQe$`JI_uwEThWY^e;3`D8{Rm$>q(cXpB48g={0}qH zZl43#LD6=|)5z1xlgSVvG7d0#Aywd6?Vx-1UC3#ND3{Sy$M$u^_ojxtM304$&N)Fg z?+15vhWeuuk ziQ5;ZBzF~NQ8u$&7sbDX_dHIejK(-^Kfv|1Da(1DXjO?b%U{h@8v+)#MXZ?jL|ig& zHK|fFhomKTRm`b4E|?jObs48QlWtF25`B`Q#=Tupc(LJMpy5T(x0$G*QI}E#X=Pg^ z;j)A-qdDbJ7P$@fTD{yY5oU&xOC;PXdX~mWE2l+qjSvL*rz({aq;E^yrDkNNzg|We uV-W+lFNr6&FYuyi(mknP^kBeW_>LNAZpFNkf@M>G0sB#Ak?_XfrLeEga7Z;hBG=gD_+k-QpWAcA4D8itt1 zH5|hxW^fw=+`~E^Vi~Vd^PX@4UoeM#Ea5k{&0-5YGoKr0IEN8x!8_Co517UTTlk9O zSmC8}TtUt6VHKb8fZ{)}!S&Xt*%C%Li5=7dyY4zRd*hEz*vD1$C_9DgxPhCf?nJ1Q z+~7VwqBhPlEMp0^K@+EO2l?3%!!e$s3je|r{J|9aTPyrqppELf+B!q32z7u?xdNDP v)aXJR{SSQ_4(uY!$WpEd-O#2}q`Ejl7D$@tK98Q+ga#tH@EU${8SZ+&W+*5U diff --git a/payments/locale/he_IL/LC_MESSAGES/django.po b/payments/locale/he_IL/LC_MESSAGES/django.po index 603e8178..a876f195 100644 --- a/payments/locale/he_IL/LC_MESSAGES/django.po +++ b/payments/locale/he_IL/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -52,11 +52,11 @@ msgstr "פרטי העיבוד" #: payments/models.py:41 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"סכום העסקה חייב להתאים ל-{config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"סכום העסקה חייב להתאים " +"ל-{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" #: payments/models.py:63 msgid "balance" @@ -117,3 +117,16 @@ msgstr "לא ניתן למצוא את הספק {provider}" #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | הפקדת יתרה" + +#: payments/viewsets.py:10 +msgid "" +"ViewSet for handling read-only operations on the Transaction model. This " +"class provides a read-only interface for interacting with transaction data. " +"It uses the TransactionSerializer for serializing and deserializing the " +"data. The class ensures that only authorized users, who meet specific " +"permissions, can access the transactions." +msgstr "" +"ViewSet לטיפול בפעולות לקריאה בלבד במודל העסקה. מחלקה זו מספקת ממשק לקריאה " +"בלבד לצורך אינטראקציה עם נתוני העסקה. היא משתמשת ב-TransactionSerializer " +"לצורך סידור סדרתי ופירוק סדרתי של הנתונים. המחלקה מבטיחה שרק משתמשים מורשים," +" העומדים בהרשאות ספציפיות, יוכלו לגשת לעסקאות." diff --git a/payments/locale/hi_IN/LC_MESSAGES/django.po b/payments/locale/hi_IN/LC_MESSAGES/django.po index 11f0c171..5cae172e 100644 --- a/payments/locale/hi_IN/LC_MESSAGES/django.po +++ b/payments/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" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -117,3 +117,12 @@ msgstr "" #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "" + +#: payments/viewsets.py:10 +msgid "" +"ViewSet for handling read-only operations on the Transaction model. This " +"class provides a read-only interface for interacting with transaction data. " +"It uses the TransactionSerializer for serializing and deserializing the " +"data. The class ensures that only authorized users, who meet specific " +"permissions, can access the transactions." +msgstr "" diff --git a/payments/locale/hr_HR/LC_MESSAGES/django.po b/payments/locale/hr_HR/LC_MESSAGES/django.po index 5d026376..d8345a6f 100644 --- a/payments/locale/hr_HR/LC_MESSAGES/django.po +++ b/payments/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-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -117,3 +117,12 @@ msgstr "" #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "" + +#: payments/viewsets.py:10 +msgid "" +"ViewSet for handling read-only operations on the Transaction model. This " +"class provides a read-only interface for interacting with transaction data. " +"It uses the TransactionSerializer for serializing and deserializing the " +"data. The class ensures that only authorized users, who meet specific " +"permissions, can access the transactions." +msgstr "" diff --git a/payments/locale/id_ID/LC_MESSAGES/django.mo b/payments/locale/id_ID/LC_MESSAGES/django.mo index fb16bb25e6581dacf8e0b0493532f2d2f931b962..aeb96d80f3cba123622e9b5a4ad647f5c0d5090b 100644 GIT binary patch delta 1282 zcmZXSJ!=#}7{|xtOrplOXf#HJ$CqdlFNZ-vQV6!9Aex}{bGvi5!|lx;JG&ki)Jrdx z(Lzhb4-l}iw6WI0Cg=yS5lbQ9|C!yBQy+HbH#58Qf8KUy>f22J>r`b^!DcW{VQgc} zVZ7Rf33hozsoPjDgY(!w8CB{C_!b-o--8Fi58wp&8C(Rn!871^rTA_EJdOP_I0fDT zXO-%!Iu>mlJO=To@0d=4KR^+j++AFl2KQk<57xn};3W70d<4D*<@+;ZN?imO!2p5Z z17q+VqP>Fib9;(J9)OeZuQssQj~CBCJnAK;v)~(W0sII`ra!?;;4knHcww(nC%|jq z26z{g1U`Xt;1>{&+QD=foIv!rs%F6kcwYAKubyJ@9NYvYqbep5SOF2Z&kC=+i31Tk zjv+ydgJT#XEI|$oNqdvlNNc5KV$%hD0_c$HqpjXhJ>M4zKV-K&M#zx!EJ{*nhT<}HRq93wwKZzuIyx{76A+5fHqJ>IsuZv# z4g!s2#lxTAD|lPmniyHB^an-FZI-v7W!W~_nxdM{NTGYYROf)H!yy-SEGye`rbf3k zq9ubXxZKmB;g)!{8K>>M#lr%Hk2>;}A~UX2Kh)ySCtt?*ziP9YTdz9Q(4qPcLXWux zhnC91I);8I+JjP;C(^Y+)IRJsyUfVVI!E0yVieMPztlrT2tjv!ZK}n-t&wdW88Yhz gKbuZ7jRKZ0L++qu_@Id#rGx&bk-WBUj9nl74X`#Z(*OVf delta 539 zcmXxhzb^xE7{~Fa?r>K{9j#I#D(ctJL>EoE5HT2RVl$91iHW78{s5DtY|>TQ?P`!n z4E_a^1e;A_=_v93oO+VyUj1IbKc4S%ADN$^`X0D7BSy&y@`aotFJn9iugh#6eH_MR z?8OZn#4Yr27Z>pmr|}9kuZ5HNhylLhIDX-gS=Btp%;m)?X0d|W@CLP@j(r&79zJ0L zb1XW;0&0E}=kOl)DgF(Mj8}X9E^vZccZ>blK%evNfgd?uJmUg>qAE}FSi%e@aUI8S z8!zw}Im5nj7TXxdEY%EQ9(`QF16=Ej@9>&&hzZWOO=f9>9aPuV)-S8xJLej+OlKL-dhYZi1k{izWW#<<}%qQ0X diff --git a/payments/locale/id_ID/LC_MESSAGES/django.po b/payments/locale/id_ID/LC_MESSAGES/django.po index 0b1fb91a..c88bfd6c 100644 --- a/payments/locale/id_ID/LC_MESSAGES/django.po +++ b/payments/locale/id_ID/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -52,11 +52,11 @@ msgstr "Detail pemrosesan" #: payments/models.py:41 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"Jumlah transaksi harus sesuai dengan {config.PAYMENT_GATEWAY_MINIMUM}-" -"{config.PAYMENT_GATEWAY_MAXIMUM}" +"Jumlah transaksi harus sesuai dengan " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" #: payments/models.py:63 msgid "balance" @@ -86,8 +86,7 @@ msgid "" "we have successfully credited your account with %(amount)s. your current\n" " balance is %(balance)s." msgstr "" -"Kami telah berhasil mengkreditkan akun Anda dengan %(amount)s. Saldo Anda " -"saat ini\n" +"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 @@ -96,8 +95,7 @@ msgid "" "if you have any questions, feel free to contact our support at\n" " %(contact_email)s." msgstr "" -"Jika Anda memiliki pertanyaan, jangan ragu untuk menghubungi tim dukungan " -"kami di\n" +"Jika Anda memiliki pertanyaan, jangan ragu untuk menghubungi tim dukungan kami di\n" " %(contact_email)s." #: payments/templates/balance_deposit_email.html:100 @@ -122,3 +120,17 @@ msgstr "Tidak dapat menemukan penyedia {provider}" #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Setoran Saldo" + +#: payments/viewsets.py:10 +msgid "" +"ViewSet for handling read-only operations on the Transaction model. This " +"class provides a read-only interface for interacting with transaction data. " +"It uses the TransactionSerializer for serializing and deserializing the " +"data. The class ensures that only authorized users, who meet specific " +"permissions, can access the transactions." +msgstr "" +"ViewSet untuk menangani operasi hanya-baca pada model Transaksi. Kelas ini " +"menyediakan antarmuka hanya-baca untuk berinteraksi dengan data transaksi. " +"Kelas ini menggunakan TransactionSerializer untuk melakukan serialisasi dan " +"deserialisasi data. Kelas ini memastikan bahwa hanya pengguna yang " +"berwenang, yang memenuhi izin tertentu, yang dapat mengakses transaksi." diff --git a/payments/locale/it_IT/LC_MESSAGES/django.mo b/payments/locale/it_IT/LC_MESSAGES/django.mo index 700462155dbb6f90ae34b8cd06068e32d0531339..5210a1312d5962da50da6f0b014e29f4c5312643 100644 GIT binary patch delta 1299 zcmZvZy=xRf7>CE?Ok#{*(P;c46EWoS;b}mN`~en1Ks3>QvO9M-u(x~c>=`}OZN*+h zv=M~-0RbD!^nwaj!OG6YS}c6tUGF%9FFX6p%+CJa_x;WH$&2MNBg;F!mU8 zj5h~(5!Z&4T4TNftE`_6D|HfX!%_GF9)r7Z41R%&a1YMH(Mox40bXRi0w>{ZcuuKY zZ8B-G@dWayAH2@PpHKuR4wgSm!NaVpa1&mK6YwQ`4BtUHKRcq-JY0kUh2Mn_;d`pR z!T!}lN}Yukj+0;IOpdbg97;#8;4*v*m*7Vz!oT2UI6SV@aae_PpjM$2umPokPjC)? zh5Vv^LveS6>ZO4hUI|>1HTl(RCSAA+f)jnu^61hS`FNob>*-e@|ngFG_c>vozvaG~|u45+v` zvuWJ~wn$T~M1f3OE^F#+Kr%F$sp(sp?s!D@C0w_uGm-1sv=H)tmm*~1Jk;bJ*pi=1 zxeaDPQJ#%`CoP0cMn`mLI$1MG(F`SJ>X-FaGtn)JC%$b1S9gKNgqHJOY*^NTiM0s= zOS6)pUwnnHwVkn{)k@womH%|Z`pl(PN47Mxi;B~s(>{p|yIIyrjrN_WbTdlmBI0nV zTb!=xI~`O^*+XGs>^yFE;`yGnfir#4yr(MpOScft_wr5b4=pvA{Z6UfXFA@wIWjZ+2WmexO8@`> delta 539 zcmYk(ze>YU6vy#X6WherT2rg>A5yJYY@sMRRB`CiMeq?E6m$|d1^>_&aH$|J4({rd zItYUAAe{t7(80xb==T>KJaF>KP43M-IrlaE4q6|9du7BJIYoBK8S)~*h4A{!%IISr zmobG+9KtR1a2pqKAB%X2n%BW;e8vFZZ~}kvz^rASW9IVU2q*Cr^}%b@f?G^uggf|x z8JuO&8P-tq?{NViahKxXag}i+X*Q0>IDl=;;ti(Q-|o1n@*u(rexg2@q5KjSFo$cX z$~RFP?;(5G7tZ4k`j};Lh#{)*B|OB9zwrZ}Fn+=$``Zeu%D9f|y4pHQs#vq4>m=-jEhQO%!odNo`ozyJUM diff --git a/payments/locale/it_IT/LC_MESSAGES/django.po b/payments/locale/it_IT/LC_MESSAGES/django.po index eaa74a82..f5c02d0f 100644 --- a/payments/locale/it_IT/LC_MESSAGES/django.po +++ b/payments/locale/it_IT/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -52,11 +52,11 @@ msgstr "Dettagli di elaborazione" #: payments/models.py:41 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"L'importo della transazione deve rientrare in {config." -"PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" +"L'importo della transazione deve rientrare in " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" #: payments/models.py:63 msgid "balance" @@ -95,8 +95,7 @@ msgid "" "if you have any questions, feel free to contact our support at\n" " %(contact_email)s." msgstr "" -"In caso di domande, non esitate a contattare il nostro supporto " -"all'indirizzo\n" +"In caso di domande, non esitate a contattare il nostro supporto all'indirizzo\n" " %(contact_email)s." #: payments/templates/balance_deposit_email.html:100 @@ -121,3 +120,18 @@ msgstr "Impossibile trovare il fornitore {provider}" #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Deposito a saldo" + +#: payments/viewsets.py:10 +msgid "" +"ViewSet for handling read-only operations on the Transaction model. This " +"class provides a read-only interface for interacting with transaction data. " +"It uses the TransactionSerializer for serializing and deserializing the " +"data. The class ensures that only authorized users, who meet specific " +"permissions, can access the transactions." +msgstr "" +"ViewSet per gestire le operazioni di sola lettura sul modello delle " +"transazioni. Questa classe fornisce un'interfaccia di sola lettura per " +"interagire con i dati delle transazioni. Utilizza TransactionSerializer per " +"serializzare e deserializzare i dati. La classe garantisce che solo gli " +"utenti autorizzati, che soddisfano specifici permessi, possano accedere alle" +" transazioni." diff --git a/payments/locale/ja_JP/LC_MESSAGES/django.mo b/payments/locale/ja_JP/LC_MESSAGES/django.mo index 8a14d0d030d0e9cf3d430b913b4559f406312c6b..e3e1602acc7e31d4fc9ef0bc4ec5ae9c93eba16a 100644 GIT binary patch delta 1371 zcmZva-Afcv7{*Vz`B7G;S<(j_3#p_ev72rpx(kA!q`RQg?AQ*hGcq$KMYWz8C@jVD zqo@o)BsZfhj7lvR>N>g*x(Mm!Ra@|;zaVHYr$Et8Z3(C&K&@E zV_pxIgQvkALZrk+44ScU9mG#8;}6$8j$gz`Gq|;)$%C{Wbla4L@geeYQc2}`vc+{STXEBqDo@3-eba4Hh8fvJGgg38o8>2@pC=htzN(Waec9?k_T3RC>)~j7KP7A zzs!!lAf1`-zE8pJ`B%ZuzVt$G*WAYe3VIegUX#8_dXNH*lS{8c?E&dt%qbY7@EHXY zq{paT_u9o(DGH||l1+ce4{ZE+VQ;}7{7KI` delta 539 zcmYk(!7l?r6vy$$uG*!jR!fSAiVznGE+Uc8#L=Y(Hwg|dI3bae9$lO^#7T&gNRuA6 z(u+j=4V)zPANUU(e1Fp(O!DS4vpa9+?MyxYk*R#A{TrhV6Jx|DF+p5)(9wcUvsnx= zgA3S=8#sWQ7~nR};XY1cgj!d}aeT!zeqkPe@X)McfoJCP;1ox(jQZd$D&YZpF~(hd z!z30+I>&j``YO)g3+_>T6Bn7UC0frAYcN>l#XGK}%GRG1aRf`K!~>kh zGrY!oB*m84U4^e;h+C-jJE;64JjToR{1+qUSr#YQ-<}vuVGVWa+B`?}5IO-)%3Tk6 xZbPtsb^n^Kh97oqkY0skTT@p|im^_yix?s}M0Y(Z)cVxX;tOxtj~~Ox`vZ=yD475N diff --git a/payments/locale/ja_JP/LC_MESSAGES/django.po b/payments/locale/ja_JP/LC_MESSAGES/django.po index 01f14680..8b10e8c6 100644 --- a/payments/locale/ja_JP/LC_MESSAGES/django.po +++ b/payments/locale/ja_JP/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -52,11 +52,10 @@ msgstr "加工内容" #: payments/models.py:41 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"取引金額は{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}に" -"収まる必要があります。" +"取引金額は{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}に収まる必要があります。" #: payments/models.py:63 msgid "balance" @@ -120,3 +119,15 @@ msgstr "プロバイダーが見つかりませんでした {provider} 。" #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME}| 預金残高" + +#: payments/viewsets.py:10 +msgid "" +"ViewSet for handling read-only operations on the Transaction model. This " +"class provides a read-only interface for interacting with transaction data. " +"It uses the TransactionSerializer for serializing and deserializing the " +"data. The class ensures that only authorized users, who meet specific " +"permissions, can access the transactions." +msgstr "" +"Transactionモデルの読み取り専用操作を扱うためのViewSet。このクラスは、トランザクション・データを操作するための読み取り専用インタフェースを提供します。データのシリアライズとデシリアライズには" +" TransactionSerializer " +"を使用します。このクラスは、特定のパーミッションを満たす許可されたユーザのみがトランザクションにアクセスできることを保証します。" diff --git a/payments/locale/kk_KZ/LC_MESSAGES/django.po b/payments/locale/kk_KZ/LC_MESSAGES/django.po index 11f0c171..5cae172e 100644 --- a/payments/locale/kk_KZ/LC_MESSAGES/django.po +++ b/payments/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" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -117,3 +117,12 @@ msgstr "" #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "" + +#: payments/viewsets.py:10 +msgid "" +"ViewSet for handling read-only operations on the Transaction model. This " +"class provides a read-only interface for interacting with transaction data. " +"It uses the TransactionSerializer for serializing and deserializing the " +"data. The class ensures that only authorized users, who meet specific " +"permissions, can access the transactions." +msgstr "" diff --git a/payments/locale/ko_KR/LC_MESSAGES/django.mo b/payments/locale/ko_KR/LC_MESSAGES/django.mo index 66259bff971db3b3ebd52a89f53fcc2f3c7a4365..545ca714e6be415fc1c6a2b0fd7845325df9809d 100644 GIT binary patch delta 1351 zcmZva+e=hI9LFa$wX&OLN*DMEN@lhxMbKNXQBbJV^LX~?p4dG{&N(JUwOP9%UedtD zRn|qpGDBm_OB>}=J@wi{FVY|2nFB%3LEo8mbB%_b^O@goX1>46?Dxvwwb37yB?*R6 zi+KWb1G51$wF@7NmLkTkVciNg!hTrHSQR)AmVqC^gWzYd9Q+10fg4~QSXPodcN#ni zyA`YiuY<=Ji?U8EB5*ta@nar7$HAYV6s*{tyHE}8gWU*rf)~IFa00v!&VllLT`6Oy zz$Q>b;%#6CTtl|4@OSTF>$b%U{1YCwvB!=i9-0 zkb`mXDTr9C0$Iuesz7O<17*OATlQ7(HtaTOBR*TlVhH>q9pDX=)d1cCk+`Y~TWZJ- z9mcG|lt~~aJBo=M)pG!9NF6!k)5xclPbNoo4(t$!7h+L7s~YH@dKcMJIS%BYGT&Nm zBbX zLWVUI~`bQMNfQUQ_r3^zn>fn<=oJU~}m>UALUPr!EF zHh9>$r`t-%*)pXNH={v9+ya-poRjOoN>l0SrqgRHVeX3hW6p88e&1{CmOiWBIkVrol6LB#eBk?Zjy%qWS8C6RaJ!$f8ND~11*?T1qej~7vW zf&PCA`ygf#w7E8nMyUR*Er{8-2q4SOyH`-&fOH5YDAHrz{4knwe!KfJ>eERF~@Cu#x9&< z(h)AA$KT^DKH?6W|G+BwTAMV0`^ZnHblrFn@=Uts!6&@KC431lq#yKx1&-kf3pkCd zc!FEV5PhLH-e~3tyYUB0==U?Yi}TIAj%VaI&iTG734^eTuDZ)wCOQaLfJ%kyVSHE+ u)Z^}7^VM+R(E8|EN`rrCs8)$*SFu2Na}+ULk1H8YXY=D|CC+O}Ir;^Zu_p-t diff --git a/payments/locale/ko_KR/LC_MESSAGES/django.po b/payments/locale/ko_KR/LC_MESSAGES/django.po index deb67489..2fc24926 100644 --- a/payments/locale/ko_KR/LC_MESSAGES/django.po +++ b/payments/locale/ko_KR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -52,11 +52,11 @@ msgstr "처리 세부 정보" #: payments/models.py:41 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"거래 금액은 {config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" -"에 맞아야 합니다." +"거래 금액은 {config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}에 " +"맞아야 합니다." #: payments/models.py:63 msgid "balance" @@ -120,3 +120,15 @@ msgstr "공급자를 찾을 수 없습니다 {provider}." #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | 잔액 입금" + +#: payments/viewsets.py:10 +msgid "" +"ViewSet for handling read-only operations on the Transaction model. This " +"class provides a read-only interface for interacting with transaction data. " +"It uses the TransactionSerializer for serializing and deserializing the " +"data. The class ensures that only authorized users, who meet specific " +"permissions, can access the transactions." +msgstr "" +"트랜잭션 모델에서 읽기 전용 작업을 처리하기 위한 뷰셋입니다. 이 클래스는 트랜잭션 데이터와 상호 작용하기 위한 읽기 전용 인터페이스를 " +"제공합니다. 데이터를 직렬화 및 역직렬화하기 위해 TransactionSerializer를 사용합니다. 이 클래스는 특정 권한을 충족하는" +" 권한이 있는 사용자만 트랜잭션에 액세스할 수 있도록 합니다." diff --git a/payments/locale/nl_NL/LC_MESSAGES/django.mo b/payments/locale/nl_NL/LC_MESSAGES/django.mo index 6765b7c2592c1e3902c377eb70fff6d33ce0f52f..993521bbf90d799a3d36e94bee818d6b4b0f61cd 100644 GIT binary patch delta 1312 zcmZ9JzfTlF6vqcR1O){_6#Rih;twQn0b^rF4232pCPM5i=62uRt?cbwcK41z)T=41 z46(5?CRSD^HZ~gn0%KxDjJ=JGy`Pyoj>EZ|{p`%neBXQD_hsVqbnE9tVNWrpnHQP+ z%&W}TeLNV;{Yu^EeFe_5emv4D*E<-9%cVGq|Ls!5z zI17J3{^~CeSFy|9tta6VI15LJuXcIahI^1$YK*e3!5K*6zA8TX;R3ke=a?s%PVg+# z-E-|Y7!>V?YmIBIYndBUZK!cbhg6HU`hj~sOJ}JY&Jj1xv~l$LD3Yyp$#vPLx@wXz zj*^N_#e_>XiMO?_OKS4SCYiR0&a0v~Qj=sRaC^FDLy3!eqZ(y8XvHSWbUn4rD3nZ_ z9+fD`B`upkd>FrS3Pjq9@~X~zBtw&%qP~~wMuy0L0oNssOdRb<>V>k-(g~TQ6>8%4 zY`M#AxeeX|pPnRHBlW^2ry?pejl618G(#6M%@*}m)#{qyNmiF2Do26Fgj$qk&W1%D zm_(Z(5Q=pXy2%&#TKq8Ff4k5+Ftur&t0bkkjrW07PjmK`=a7L$~%`@>yD z>G-?GIlbxf7hQ@Z%r&=UlSLK`Y!twDW#2QGsn5!#`gH! zEurHqAU6N5*XQaEP- delta 538 zcmYk(yGjF56ougxXN)uPmW=ThFF_FvHj;F9ieTv@q|ibTtQ0|1(u<@JjjfPYY@%I2 zeFYH&LBR*Gwf0|Axna+jlR1|?`#ev)B#o~mycRJ|PLpqBnY_sGAfg_rf-#O@4f}8t zhj9xdtm887;v8P0=RM#Ib}_*ZEa4CCOASSV6!OOrPT>i9!yEL1TkOXUZsQXU;5>^? zaRoj94wvu|cPRc7YmC>k(j*>YFE()quQ12?YV*Sr?{NXY(-%^f^4*C77O;x0d;<@# zj+~)aoW*y{;V-)I3{`nt#62vdKja*bv4t_`D<4aXSVDK*Z5<=M*c;KQ^m>>tYD>dk q@IQPtF2>\n" "Language-Team: BRITISH ENGLISH \n" @@ -52,11 +52,11 @@ msgstr "Verwerkingsdetails" #: payments/models.py:41 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"Het transactiebedrag moet passen binnen {config.PAYMENT_GATEWAY_MINIMUM}-" -"{config.PAYMENT_GATEWAY_MAXIMUM}." +"Het transactiebedrag moet passen binnen " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}." #: payments/models.py:63 msgid "balance" @@ -120,3 +120,18 @@ msgstr "Kon provider {provider} niet vinden." #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Saldo storting" + +#: payments/viewsets.py:10 +msgid "" +"ViewSet for handling read-only operations on the Transaction model. This " +"class provides a read-only interface for interacting with transaction data. " +"It uses the TransactionSerializer for serializing and deserializing the " +"data. The class ensures that only authorized users, who meet specific " +"permissions, can access the transactions." +msgstr "" +"ViewSet voor het afhandelen van alleen-lezen operaties op het " +"transactiemodel. Deze klasse biedt een alleen-lezen interface voor " +"interactie met transactiegegevens. Het gebruikt de TransactionSerializer " +"voor het serialiseren en deserialiseren van de gegevens. De klasse zorgt " +"ervoor dat alleen geautoriseerde gebruikers, die aan specifieke permissies " +"voldoen, toegang hebben tot de transacties." diff --git a/payments/locale/no_NO/LC_MESSAGES/django.mo b/payments/locale/no_NO/LC_MESSAGES/django.mo index a7b49033997f1099ac4ddcfa5013f1af4f2ee1a7..c29e29f9b7457c8bb15d914ab32d1b69a7db1dcf 100644 GIT binary patch delta 1268 zcmZ9JJ!@1!6oyBQCVp!)Dt^F-L=%mRf{mSmjVK5j>=bA3o!uRGcW#)OBt+Ex6(WL- zVANi)u?%)%BNl?#SlWoKAU&^KSgffx*}Dkw=O+z&gzO!kT0~ zUB`nsvtFsI?9aj}&JQ;zwFkb0qwp=<30L44{0L9NFYqWF9jV`&hDSJ`h2!uVJgC$_ zHQDsJcmVmS?>r8{A5a9hZLB|-fLl3F!6rNhx53BoK70=4{iBtTXY$TxT#{)7~sle5hs33jvgv$nI)Q2SWalE(pZ z&~y$NjU<il$yLlSMqT!H_NWb zAuC2IA;sja)ri(zKc<8n9+st+7yMQS;_FX z_!0hXydGPBeq^x5)Rkpl(ta*-LC0=z3$|%vcPS-X+S=iGxAHVKx3avd*Oi-?{q0%b z(3ht>kml7DEnLspYb zQ`oAtfTG*~yv`RQWxZ|aE0lOgYK*QMki_Pu;R|fWW!_D8HJi=#;6$>0E`v?UwL2E8 abZccfNRw^DWF>uVa_&O1yuPq$JHy-4c|UYxJ?jykAeHgS=}7`HBLZiUUn z$hNvUrlyA1(KudwTj*c?&z=p?ff5kz65%(n^Cn*6 zF>;2zV}u_#g@0JVEJf6K6wQ8S7;l2TUI4WVfjNi~xtOC&=~r=kDSu4HoKHC$2-oHqj9XeNLF diff --git a/payments/locale/no_NO/LC_MESSAGES/django.po b/payments/locale/no_NO/LC_MESSAGES/django.po index 19d93e5a..748c4e16 100644 --- a/payments/locale/no_NO/LC_MESSAGES/django.po +++ b/payments/locale/no_NO/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -52,11 +52,11 @@ msgstr "Detaljer om behandlingen" #: payments/models.py:41 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"Transaksjonsbeløpet må passe inn i {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}." +"Transaksjonsbeløpet må passe inn i " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}." #: payments/models.py:63 msgid "balance" @@ -120,3 +120,17 @@ msgstr "Fant ikke leverandøren {provider}." #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Saldo innskudd" + +#: payments/viewsets.py:10 +msgid "" +"ViewSet for handling read-only operations on the Transaction model. This " +"class provides a read-only interface for interacting with transaction data. " +"It uses the TransactionSerializer for serializing and deserializing the " +"data. The class ensures that only authorized users, who meet specific " +"permissions, can access the transactions." +msgstr "" +"ViewSet for håndtering av skrivebeskyttede operasjoner på " +"transaksjonsmodellen. Denne klassen tilbyr et skrivebeskyttet grensesnitt " +"for interaksjon med transaksjonsdata. Den bruker TransactionSerializer til å" +" serialisere og deserialisere dataene. Klassen sikrer at bare autoriserte " +"brukere med bestemte rettigheter får tilgang til transaksjonene." diff --git a/payments/locale/pl_PL/LC_MESSAGES/django.mo b/payments/locale/pl_PL/LC_MESSAGES/django.mo index 52c5a609cd81ebd72cd36da257df0706edfef9d6..8132b54a57f5e8c4de8af4402af142d1e894901a 100644 GIT binary patch delta 1270 zcmZ9J%W4!s6o$)WaxunB5@X^GPLN=X<6s~NaV5A43PKWHTj{Q3Dl=0xbX7a_pbi8? zUAS-|BDxe@xC~@tRwnZV;zoi#KsJIe;D4&4OmgVzuj|tPIp?pJBfrL5KZgr%1Y#WH z0>&=JB*up$cpDxDED$-@s{b7n}h53i-J!;6==5 zz+vzncut6xSjI;U3r|2iVh^wL;BSxx2Yd1#M!{p4Pl3zeEI0_h1s{VSK|VjxE5v1R z8jMi*0{9TzM71}uK6W(MUjPS?Ul@Fxz(xjg0WZK=@D<1%e+9YIJ@69v2RsFi4TKKF z6!;qR+aUk{9h?S#fLw47UT47}5KH1J=)oI2M}F~ne_<0m&Ii!eBsd46@X!^uLU4j1 zj4=#8%YtVxP*W%p2!Wpu^WohE7Hmj5<8DF!envt!mM0#zFBWuW)6)h#wI2rL8)oiS)C0Z(LM^URPouhhU zAL&>*k{v4Ac$KWkNQE?E#tO*P(7sH*Lo$|LmT2Bn>L79`;i5{ktm>vpf{@#vvXC^b zn2@()iGR-JmhcsY@|1CD5`?8kN9a(dzHAd{#+)*7MQW5S)f7B&brtCq9T7~ZY3JC6 zB1O`Wj3R|*Im7?r3)n4f^mok_TK`OqE!kz)UQbtb?qsy4$!FDyCEkjoX692eGB+~a z*Q($YOqEnY$ ~t{O&5%3V}z$a`1ZOCP#DMdD4u_!#sid6C28%Z-`N89V@ yWo_pf*-E0?@2l1*O6!TlNrjyvyjaC<+RR)@@e9z4B;tZGZ9JS#cYQY0eVTi~0hSRvl zq81iW^Sii-&)A^&0q!!cO#bcL!Z_o5oWTw{&bLQ??C|0Rb<-iL@(ho4%wrNOsLBuU z8k@)&_Jg{)qY4#T#6{dg9azUxJQ|JPN8>L{aK6<8vkh#Zx~{fnNi9|f=v4H1m~Ye; tg>LXa^l4O#Vvb}h%V&niySD|5-v0BE0a*F3bg0?-wTeCs6\n" "Language-Team: BRITISH ENGLISH \n" @@ -52,11 +52,11 @@ msgstr "Szczegóły przetwarzania" #: payments/models.py:41 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"Kwota transakcji musi mieścić się w przedziale {config." -"PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}." +"Kwota transakcji musi mieścić się w przedziale " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}." #: payments/models.py:63 msgid "balance" @@ -95,8 +95,7 @@ msgid "" "if you have any questions, feel free to contact our support at\n" " %(contact_email)s." msgstr "" -"Jeśli masz jakiekolwiek pytania, skontaktuj się z naszym działem pomocy " -"technicznej pod adresem\n" +"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 @@ -121,3 +120,17 @@ msgstr "Nie można znaleźć dostawcy {provider}" #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Wpłata salda" + +#: payments/viewsets.py:10 +msgid "" +"ViewSet for handling read-only operations on the Transaction model. This " +"class provides a read-only interface for interacting with transaction data. " +"It uses the TransactionSerializer for serializing and deserializing the " +"data. The class ensures that only authorized users, who meet specific " +"permissions, can access the transactions." +msgstr "" +"ViewSet do obsługi operacji tylko do odczytu na modelu transakcji. Ta klasa " +"zapewnia interfejs tylko do odczytu do interakcji z danymi transakcji. Używa" +" TransactionSerializer do serializacji i deserializacji danych. Klasa " +"zapewnia, że tylko autoryzowani użytkownicy, którzy spełniają określone " +"uprawnienia, mogą uzyskać dostęp do transakcji." diff --git a/payments/locale/pt_BR/LC_MESSAGES/django.mo b/payments/locale/pt_BR/LC_MESSAGES/django.mo index f3abbe8b889ad211447984a3c28f4a8bfc5d9043..bddd8764a088baa08ec6825f566e1b144d2df3c2 100644 GIT binary patch delta 1299 zcmZ9Ky-yTD7>5Trz68He6u-hy7*D_p7#kZC3k!{ji4bFAHS7-DCU-mM&YqxAud(qD zFvP@$Xr!_t+E`v=WnyTFe}FdDRzC0S9iB{f=GmEh_kG{rZ|>*#&SdMycWQW19vo@c)R$KhRg zMyZxs=B3WTbI7B9v7Cj!p(Gp|C_b2gqwLFY8D52Ba05Pr@1ev`4=QyL&cKMq??Deg z)9t*Rj}$^5!cpq0bzY>Smykzou*|_tcm;lgqO|W|p=bn3{46{TuR{kPKxyDBEW_`R zNBv=uxB8j4G zi7&gf_C&je%}k!S)N7aOylVAQW>Rk=In#9)+ge30RTHnHR?T>?8<~5Y#MW!mlO;)W zo2{70hB9F%8K|_DN2&D*9Hgo1P^53NG3#F}38W%|asI*-9dlwqi})o+J6V zNVmjW6xy??Z)PE}$x(zt)6A@{EF*UI+rfor8!*VKl|jIJfI$#mrEg_-TG_9q(fu5NKf*KCqEiAt#{ZaPGC zauWH@RrF2oP0@X@FSXd%tQ-B$)NU@m4Cz|r3#ALESCdY8j~%g-bzg;=LA%ke_i}r@ z4!OF{q6J$~-*K9KNJ-*~z7ZO2d8=2EF8Urd?Vi@AZ?-qHgm6q3&!wBW5Mpwh#-`4{ rrsH)m$;u71KXL_zxQ4?CLd1Hi8vGA`oWjwHYQNHAj`!QQ2X+5n1{*pN delta 539 zcmXxhyGjE=6vpurca6L8nvIvJ5igA~2ni_yR$>ZEJ6j7atR!F|f=XUM5ClnKlLrVv zSOp7%522NyR)Pq=ga2OV diff --git a/payments/locale/pt_BR/LC_MESSAGES/django.po b/payments/locale/pt_BR/LC_MESSAGES/django.po index 5565b8ed..fd8709eb 100644 --- a/payments/locale/pt_BR/LC_MESSAGES/django.po +++ b/payments/locale/pt_BR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -52,11 +52,11 @@ msgstr "Detalhes do processamento" #: payments/models.py:41 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"O valor da transação deve se enquadrar em {config.PAYMENT_GATEWAY_MINIMUM}-" -"{config.PAYMENT_GATEWAY_MAXIMUM}" +"O valor da transação deve se enquadrar em " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" #: payments/models.py:63 msgid "balance" @@ -120,3 +120,17 @@ msgstr "Não foi possível encontrar o provedor {provider}" #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Depósito de saldo" + +#: payments/viewsets.py:10 +msgid "" +"ViewSet for handling read-only operations on the Transaction model. This " +"class provides a read-only interface for interacting with transaction data. " +"It uses the TransactionSerializer for serializing and deserializing the " +"data. The class ensures that only authorized users, who meet specific " +"permissions, can access the transactions." +msgstr "" +"ViewSet para lidar com operações somente leitura no modelo de transação. " +"Essa classe fornece uma interface somente de leitura para interagir com os " +"dados da transação. Ela usa o TransactionSerializer para serializar e " +"desserializar os dados. A classe garante que somente usuários autorizados, " +"que atendam a permissões específicas, possam acessar as transações." diff --git a/payments/locale/ro_RO/LC_MESSAGES/django.mo b/payments/locale/ro_RO/LC_MESSAGES/django.mo index 4e2f10a2e2143d8630589b894743283f5c4ab381..acb778e04415fffd2c9fc0d0411fde9bfc45e6c4 100644 GIT binary patch delta 1315 zcmZXS&r4N76vrnuf0Slfn)J&Fip=bh6-42pa1{taO8ev7dA@=B?!C;+&9d??+_sGn z+ZD7b0wJiDx^UlCigrO1{Rw@~-238Lhj;F0X6~Ky<9puMp>Lzbm!Ym_0yYXi0pEe2 zg}>N?2kcUZ5VKfMf#cY(bP918d=2)1pTI$I6YK>)gA?EmcpB{KD!)4qp2U6%90Kov z$Al=v0v1giJOS|&KkzsX{suW<|K9S#Ft{K4ac}{=3igA~!N=e$kiS3OEyOu+0#qpc zF8CCDk7{q=e5NlX7As&M@{2VrIMB;*AjCWH3icmC4)hD;PDl2Y9h?HW<7sdVoCP0& zF~|*kug-shd~X0%4}-%XH*f)u9K6PRk zX(y>Iib=e-by7N{2|JE}OiRW$q;Cruk*Aux?Pcx|i==8QY!630jNghtdNe&HmV$^ zm4syO4a-f-$j~8)CBva)gk6{>| z3J--)C@XHY+X;nJB4ZIP2+Vn7#4FYU6vy$Si8itRO<~e3A16R0+HPj26s0A&|VvHyFg5$Wx zqB?G)=0D&DcJY+r-!Y`WH~P0>9ew&u)cX6RADMOdQ)b{9^@49y<#`%aUPPTVMBU6G z*61Kd>dd6;k1 tmc(T0Kl(H(MlnO`q$)z8(@v8rW`xX>Tw+qJp4o&NBEE5|ZoKa=JHKyiChq_M diff --git a/payments/locale/ro_RO/LC_MESSAGES/django.po b/payments/locale/ro_RO/LC_MESSAGES/django.po index cb015e66..5e50f2f1 100644 --- a/payments/locale/ro_RO/LC_MESSAGES/django.po +++ b/payments/locale/ro_RO/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -52,11 +52,11 @@ msgstr "Detalii de prelucrare" #: payments/models.py:41 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"Valoarea tranzacției trebuie să se încadreze în {config." -"PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" +"Valoarea tranzacției trebuie să se încadreze în " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" #: payments/models.py:63 msgid "balance" @@ -120,3 +120,18 @@ msgstr "Nu am putut găsi furnizorul {provider}" #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Depozit sold" + +#: payments/viewsets.py:10 +msgid "" +"ViewSet for handling read-only operations on the Transaction model. This " +"class provides a read-only interface for interacting with transaction data. " +"It uses the TransactionSerializer for serializing and deserializing the " +"data. The class ensures that only authorized users, who meet specific " +"permissions, can access the transactions." +msgstr "" +"ViewSet pentru gestionarea operațiunilor de tip read-only asupra modelului " +"de tranzacție. Această clasă oferă o interfață de tip read-only pentru " +"interacțiunea cu datele tranzacției. Aceasta utilizează " +"TransactionSerializer pentru serializarea și deserializarea datelor. Clasa " +"asigură că numai utilizatorii autorizați, care îndeplinesc anumite " +"permisiuni, pot accesa tranzacțiile." diff --git a/payments/locale/ru_RU/LC_MESSAGES/django.mo b/payments/locale/ru_RU/LC_MESSAGES/django.mo index ac524bca56398c1ab7bb687c8d218519e8f4553b..c50cf7066b74462ef0f4443273735e4644defbbc 100644 GIT binary patch delta 1558 zcmaKqPiPcZ9LJw=>%XS{k1bX4SrMbeMZq5QAiWk!g(mbq&Q7`mo0%{(F;vtsiLHf- zp2Skxo(hT}Xp%J(H@i9X;_*F1=s`U7rcke<2S2~JyJ5A`$G-i{`_1qD{(OJ)df?yP z`O~eX>x%UWdl&l&dq4ZPRs6Az^eOcf&qv`P=L@Tq+6HgJwXgvj@KdF7b()7U4Cf&~^^Cur@CB5B{U5Y148RXL55m*%80?2P;5qmw z6#u{sCl z_&e0_ZzvtUgo|(|)rj9?D1QHR&U-#mY7gf!+z!8nKS5v4JvSGTRF)JX zODg`)`Zf$Ehl5Oy#)+8u*)k;IEq&lj5> ziz`8`tVgP0s{Op?rKuiI;xl0-NVV4!C5*Bl8TI_YrEw>TK&HtstLm&LWW~$8vi>sD z6DdL7NjMxNp;rsf28j!lc8(Iri}H#lZ;weXx5JI_WEj%E7irJ;1Dcf#E5(<1Tb^6jcf6E$MK$xL zVXtY^GWYC7bJyH6Ejw)+8t z8F;trDJNS&h6W{2NIM{*q`o@w>N)w|FN?Ui?=We%dXt8#(nXIJE^GqSE4?H4%mL5PZs elaGc=GElL}?7JGf7c$?wNZwbJ=e}68RC)uXURL7( delta 539 zcmYk(y(@)L7y$5ti+e9FE|>C=uYshL7*NV$v>3_2U{WRvvKmZE28%^Wwo4LalRtn( zF({*CR0hBE-aB~eIlpsG=e*~f=l$ybE$qJKQ-?vc%P#pOd*ptFMx-l47-EJk9Aho# z*vNUNxy)g%v5yCg>n_>NJLdVq4t{bygx!#?3L#};lbzgR{NNGeh7;DY$Q9nRp8Ym$ zbChxY1qXS>RhNH_8qd~P%TvaEj~w7LbIuPxItwP!t~mzB;B*E$n?po=GEZKGjQ0hLOAkM9R}O(Gur uKjN?P;3S&0&IpClFnM*8eyn1(jF(cx\n" "Language-Team: BRITISH ENGLISH \n" @@ -52,11 +52,11 @@ msgstr "Детали обработки" #: payments/models.py:41 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"Сумма транзакции должна вписываться в {config.PAYMENT_GATEWAY_MINIMUM}-" -"{config.PAYMENT_GATEWAY_MAXIMUM}" +"Сумма транзакции должна вписываться в " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" #: payments/models.py:63 msgid "balance" @@ -120,3 +120,17 @@ msgstr "Не удалось найти провайдера {provider}" #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Депозит баланса" + +#: payments/viewsets.py:10 +msgid "" +"ViewSet for handling read-only operations on the Transaction model. This " +"class provides a read-only interface for interacting with transaction data. " +"It uses the TransactionSerializer for serializing and deserializing the " +"data. The class ensures that only authorized users, who meet specific " +"permissions, can access the transactions." +msgstr "" +"ViewSet для обработки операций с моделью Transaction только для чтения. Этот" +" класс предоставляет интерфейс только для чтения для взаимодействия с " +"данными транзакции. Он использует TransactionSerializer для сериализации и " +"десериализации данных. Класс гарантирует, что доступ к транзакциям могут " +"получить только авторизованные пользователи с определенными правами." diff --git a/payments/locale/sv_SE/LC_MESSAGES/django.mo b/payments/locale/sv_SE/LC_MESSAGES/django.mo index 16d3c7b3faef5f357cb9e2587a86dcc56278423d..a17ec2909baa3720925ba420494f176d3a84831d 100644 GIT binary patch delta 1307 zcmZ9JKWh|07{f6)Cr zou%3cHWw@`18FSx8>od~@C(@Z0W5sp*&{g}cJ?hp2}#;OZ*;Bo91!42>xI0e1~pM!mn|6dpv;u^RN zMiBlOd9J~fO!3Xd<_z7GBe+@fw z1$*FAkRAC3a)N!3o@hr=kxA#MZS$^< zl_NP6MH{bdQ${MJ2|JE}Og-%r@1BiNd+Im@`7hy`vRY>PnX(~}8*Dj{G(}9v zJ9NaCt8nXBMM0i2u46-B=}{3XlpUYs7BOQ^X}A07JW38NADqc9#YO1h0~UZrFBZtiZpMvB$YeYU6vy#nliI}ATH~J-{~&hI>R=(8IJpQeK7vCXM9{Sz+R_*3q=<`yi;K8O zbQ63Bagc(7-TMyx{%#g8Iro#?+}wNa$!GOD>iFQB%x9p5tJpy;c!&Dn0gISo6F;zo zH9qQM12z8{xA6_nNd5_V3Gapk(&ksFSvt$?gcMNUzx_Zj0slp z7~9xHE*sLRVk1\n" "Language-Team: BRITISH ENGLISH \n" @@ -52,11 +52,11 @@ msgstr "Bearbetning av detaljer" #: payments/models.py:41 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"Transaktionsbeloppet måste rymmas inom {config.PAYMENT_GATEWAY_MINIMUM}-" -"{config.PAYMENT_GATEWAY_MAXIMUM}" +"Transaktionsbeloppet måste rymmas inom " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" #: payments/models.py:63 msgid "balance" @@ -120,3 +120,18 @@ msgstr "Kunde inte hitta leverantören {provider}" #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Saldo insättning" + +#: payments/viewsets.py:10 +msgid "" +"ViewSet for handling read-only operations on the Transaction model. This " +"class provides a read-only interface for interacting with transaction data. " +"It uses the TransactionSerializer for serializing and deserializing the " +"data. The class ensures that only authorized users, who meet specific " +"permissions, can access the transactions." +msgstr "" +"ViewSet för hantering av skrivskyddade operationer på Transaction-modellen. " +"Denna klass tillhandahåller ett skrivskyddat gränssnitt för interaktion med " +"transaktionsdata. Den använder TransactionSerializer för serialisering och " +"deserialisering av data. Klassen säkerställer att endast auktoriserade " +"användare, som uppfyller specifika behörigheter, kan komma åt " +"transaktionerna." diff --git a/payments/locale/th_TH/LC_MESSAGES/django.mo b/payments/locale/th_TH/LC_MESSAGES/django.mo index e2de71a335484b5a20bdac412dac2dc0220dc53c..026107bfaa8d7e3f088555d6fccd7ef08667ca33 100644 GIT binary patch delta 1715 zcmbV~J8Tq37{>=Vj7z=|ar7eHDB5+XQBlV;glb1R*9t=)Aj5U}AP znMbJn!hk@85KAPHAO>qzl$10`=^_-SNJm3SgT(KfyEA7(C^EXa-^@3&|L--=*8cKY z{&z=dTrt)%H!z;BNRe#!ff}d*Pir z|AD*MfAS&KfZsu>L}|HFr{HQR6_|i~pn;%EyC zN)dU>;h`W2y=r(YNSshw--?hIb=VY~LdNPE5?kgRx^3%qd)8dB=9D#mxa~P-8EdlCk4BHRZO98Y+~)VYEx5`zQ?fQcHMS$R_`w>! ze;`IP?JiH*;d~I1ow;_|kupUf>I>XyPO#~Dysz?- z#Z^~`5o_M| IvgOm3*JEheod5s; delta 539 zcmXxhze_?<6u|M5zU)1<@>dp_MJA*!QiI@N(o#dz>gG^GQ>%-GGzB3Jg19=>()M%< z`Ueb`robGcu_5RW=zDH@;oQ%=_q}(|x%WP#CToq4h}99=DzQPl5nDuaj*ez~L^9}L z6!&ofk8l~!(8em}@DjJNjrv_5llY7ge8+YC#w(GA*j^Efi5e!bj=EqM^@kn?(8Y6n z!62si=^FE>-#_6l4)B8F$9T{9(Dy$-L@oFi(`Zp$ko=P6p~6G~53q$R_=-jRoSGy{ ziE#xVv4gr`$q~85Q`DW0u#7*b>+JbO?(i6OJi;9c{6dHP;;@|)j3V=9(KzznoB$_f zu19xC@un?JouOC5hD{68liMWI2|cY4p{F=c#0U=2T#vq!MeS(rjkjpIc3{)@2aE10 AX#fBK diff --git a/payments/locale/th_TH/LC_MESSAGES/django.po b/payments/locale/th_TH/LC_MESSAGES/django.po index e97eec01..8cfc1143 100644 --- a/payments/locale/th_TH/LC_MESSAGES/django.po +++ b/payments/locale/th_TH/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -52,11 +52,11 @@ msgstr "รายละเอียดการประมวลผล" #: payments/models.py:41 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"จำนวนเงินต้องอยู่ในช่วง {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"จำนวนเงินต้องอยู่ในช่วง " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" #: payments/models.py:63 msgid "balance" @@ -118,3 +118,17 @@ msgstr "ไม่พบผู้ให้บริการ {provider}" #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | ยอดเงินฝากคงเหลือ" + +#: payments/viewsets.py:10 +msgid "" +"ViewSet for handling read-only operations on the Transaction model. This " +"class provides a read-only interface for interacting with transaction data. " +"It uses the TransactionSerializer for serializing and deserializing the " +"data. The class ensures that only authorized users, who meet specific " +"permissions, can access the transactions." +msgstr "" +"ViewSet สำหรับการจัดการการดำเนินการแบบอ่านอย่างเดียวบนโมเดล Transaction " +"คลาสนี้ให้อินเทอร์เฟซแบบอ่านอย่างเดียวสำหรับการโต้ตอบกับข้อมูลธุรกรรม โดยใช้" +" TransactionSerializer สำหรับการแปลงข้อมูลเป็นลำดับและถอดลำดับข้อมูล " +"คลาสนี้รับรองว่ามีเพียงผู้ใช้ที่ได้รับอนุญาตเท่านั้น ซึ่งตรงตามสิทธิ์เฉพาะ " +"สามารถเข้าถึงธุรกรรมได้" diff --git a/payments/locale/tr_TR/LC_MESSAGES/django.mo b/payments/locale/tr_TR/LC_MESSAGES/django.mo index f5f24f543e211bfe5d20c4f1cba71290a4daba69..f9ba5b1a89349eacbb4b7d6e8262e8eedb9e9e62 100644 GIT binary patch delta 1279 zcmZXRO>0v@6o$t({jOiB)#3-7B4RCRw4e)j;!Y3+Q@WqrJ4uGjom*yZT2gJZ5&wa> z5wa1o6GFj_?vnfg#a-!M+z2k+_?~;y8ugILGc$MQJ?B01Ip1As9p!Vc1!4)~D#jtk z4UD&^@Q1iFCd6aR*TEI6_s4};06X9m_z^q{_P}ZI3%Cj%g3I7kE<1M%yoU8UmW>8IM^6JEk7B@Vg_*z#0!ZQo;3}0FMStoDaV-%;=+)BVN7NXt{!H(V+#6F7oH*+^=!gJ#GnoiET%Ev87JCw@x>x}pO@6C&+Bx1m6Rv?PN- z!7OJuDL#j<#e?aw`?=PCJ<`lNZts`n>H%AkdwIk_d6J?-)e%nY_ zq|M=V;;xM(-bRtw36-T@r{Aqh7s=ytMy!=^X80QQhA|SQL9~PmS&>a?Fxd?xm6g%X yXwtjdre+~IX!pBDHqp#xTDqoVk$^uqSpCx;*mLNWDr*xdudO~YaqwU=KmHp_zCmpO delta 539 zcmXxhzb^xE7{~F4J9Srzp5js!%5ZY2NQ%K|F^a#yphKs|A{IZo8l;0nx`Q zin}<8d+6Z-##qNPUZdu9aRFa2z;`U-CpOHQ<~e3A11C6-r>G6vs0H^ph6x_xD~{tb zi_UNzHUAMKe8w8Z_i>Hqos3zCM>v9)sKQ&A;e5N}rouo6SFnfL@C)@N-\n" "Language-Team: BRITISH ENGLISH \n" @@ -52,11 +52,12 @@ msgstr "İşleme ayrıntıları" #: payments/models.py:41 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"İşlem tutarı {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM} içine sığmalıdır" +"İşlem tutarı " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM} içine " +"sığmalıdır" #: payments/models.py:63 msgid "balance" @@ -95,8 +96,7 @@ msgid "" "if you have any questions, feel free to contact our support at\n" " %(contact_email)s." msgstr "" -"Herhangi bir sorunuz varsa, destek ekibimizle iletişime geçmekten " -"çekinmeyin\n" +"Herhangi bir sorunuz varsa, destek ekibimizle iletişime geçmekten çekinmeyin\n" " %(contact_email)s." #: payments/templates/balance_deposit_email.html:100 @@ -121,3 +121,17 @@ msgstr "Sağlayıcı bulunamadı {provider}" #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Bakiye Yatırma" + +#: payments/viewsets.py:10 +msgid "" +"ViewSet for handling read-only operations on the Transaction model. This " +"class provides a read-only interface for interacting with transaction data. " +"It uses the TransactionSerializer for serializing and deserializing the " +"data. The class ensures that only authorized users, who meet specific " +"permissions, can access the transactions." +msgstr "" +"Transaction modeli üzerinde salt okunur işlemleri gerçekleştirmek için " +"ViewSet. Bu sınıf, işlem verileriyle etkileşim için salt okunur bir arayüz " +"sağlar. Verileri serileştirmek ve seriden çıkarmak için " +"TransactionSerializer kullanır. Sınıf, yalnızca belirli izinleri karşılayan " +"yetkili kullanıcıların işlemlere erişebilmesini sağlar." diff --git a/payments/locale/vi_VN/LC_MESSAGES/django.mo b/payments/locale/vi_VN/LC_MESSAGES/django.mo index a44ecb8397d9361d5e19237b20ecb6ac23247e67..30520c30c0602dd401779efe20df0b9332e1d2d5 100644 GIT binary patch delta 1366 zcmZ9JO^6gn6vr#>_>uUPXiUU>@H|M&GCL>dv>!S z$q;fdB01!sA*kT8nniJ0bv58L;-SM{bBITg^f?z#B8ZUR>zNI+DW>Yz?@iVF_`m17 zZ|&`gn#BmW9o1bZY95Yz{egOe?u+c32eY;@I5&CQa{m2 zsGWTQ--hP~yaRv4egL<_&#Cf=-h*230*5NLJg^Jc!TwWi@|&Zy@f-XE;xkX-7_1SE z!mF;-uS*Mjh5b5PlabTB#-`S49H3e>T`e7rj#dlMrH$%(nazYum$6n0^{Tm$yIMO2 ze09Ke_$>5i$NfyE;zR-)dCf4Imc+N-SR6IyByRhO&B8cJC5|Kue3?jWlv<}gX~mx3 zY{*0qrsBFyo2JrE;+fF%Q?Wx)!YK2TDeL?yO=W2WGR=lrAlXnz&t|qEA7|1@3G%;$ z<9-s_X85(ARDsfgsex?N^@O}bE`8h&H^G;y%JZYNlT?9iMn`mLJ6RAX#Pl>}lGbH5 zh^6JDN!s>ZI2AfUgjSfQDnnhIjl??V)2wFrulO4OHdeN5_@LHZ6V)s3QraIsm-!F! zRhchIv$!X&n0LIiv1Iz?f-*l{-T4W3Qd~pU;`I456r=F0s0sE%aCd>h|YeXmLm{*mCLvNw+mRFBSRUssXn*wI+!K<5r3 Vmc6C6)*biX4~xC>;ih{d{{ld-hW`Kn delta 539 zcmXxhyGz4R6vy#X6K!IB)YdB0s@TO=e4)_d=+d!&f}jpgItX^~K^+~$K@h>EPA+va zb}NVot}af3{s)eZg5TdIUO4&W+}!8ML;g40{L1)OMjIyz#5*xfoF{nDf*!LHhM2__ zOkxd(v5o<5;2iGY3|^wfJ>n#GF@qnN$8X#\n" "Language-Team: BRITISH ENGLISH \n" @@ -52,11 +52,11 @@ msgstr "Chi tiết xử lý" #: payments/models.py:41 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"Số tiền giao dịch phải nằm trong khoảng {config.PAYMENT_GATEWAY_MINIMUM}-" -"{config.PAYMENT_GATEWAY_MAXIMUM}" +"Số tiền giao dịch phải nằm trong khoảng " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" #: payments/models.py:63 msgid "balance" @@ -95,8 +95,8 @@ msgid "" "if you have any questions, feel free to contact our support at\n" " %(contact_email)s." 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." +"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 #, python-format @@ -120,3 +120,17 @@ msgstr "Không thể tìm thấy nhà cung cấp {provider}" #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Số dư tiền gửi" + +#: payments/viewsets.py:10 +msgid "" +"ViewSet for handling read-only operations on the Transaction model. This " +"class provides a read-only interface for interacting with transaction data. " +"It uses the TransactionSerializer for serializing and deserializing the " +"data. The class ensures that only authorized users, who meet specific " +"permissions, can access the transactions." +msgstr "" +"ViewSet dùng để xử lý các thao tác chỉ đọc trên mô hình giao dịch. Lớp này " +"cung cấp một giao diện chỉ đọc để tương tác với dữ liệu giao dịch. Nó sử " +"dụng TransactionSerializer để serialize và deserialize dữ liệu. Lớp này đảm " +"bảo rằng chỉ những người dùng được ủy quyền, đáp ứng các quyền hạn cụ thể, " +"mới có thể truy cập vào các giao dịch." diff --git a/payments/locale/zh_Hans/LC_MESSAGES/django.mo b/payments/locale/zh_Hans/LC_MESSAGES/django.mo index c657e98839b0d2c69f685b0f22cfabfa355b5bc1..dc7a9448c6bca40569f0285a08ae5bd91db595cd 100644 GIT binary patch delta 1171 zcmZ9JT}TvB6vuD2sg-?bY0(EYwPz!=yuCrHnV0T7lW?PDCL`Bwg zKd?;lBU;juh_#SPS8R!1dahULrMa^k_RwQJ1pV*qW?P3n`@84Px&L$Sxj(8`>+H`p zzEJ|(4c`Y}fgglVuEQVfXc-|Fuxooo?FGMsQm|@6;Xp088F2&H0UiUZz%lS9I1S4D z`f@@JfsG(Xb^#jY~UkUj`~DkA%(tq8-)A>k0T}<3mu;Tp+PQza!OZ0 znIA5G?*)4hKLTZ5{U$0JEF$2CV!~-$^8n&=pnL`N zXR@#~`82X=`DD^$W74+6@j}GLvwDW8@FhuZqNYJ{6SUgq6TOFBf1v6PW5hXFiX`nlj<6^0-UxROf#7x_h?A> z^I$V=52z+p>>x8u+HL69R6jQXvND!v(o^tQ4<3u9;!O6J{1}gd4K370?Z6`ejMO zY@(5XPD30sF}t~e_{M=0L<&v97I&UYO%z(2H zFXoTFaARpFGwozX{+^1@h{R)@66ro?Ig3Ii4`XX3gF;=`Q^;p0@~L5wNr>o}7``t? zhD9Q_7OpjrOQoIc6nb+f2XoJ#h-5T3xG2)&?o{8`2T3&G#-muHq8okV4#x6*%lUNn R>liwew}TFuKU4my>^CcWP)+~< delta 539 zcmYk(y-UMD7{~F)G}g4f)V8*YFNiuQf(Q;>Itm@Tb+sT!Cl?1rRMM%FE`qrF2S}F~ zC&9%{T%?nrf`d@R-O=yw%-}pC6~Le@=rc|EBF^iOp>!?kDMn@2WW`EGh4w7 z7I6cIu!cFTV}M(@iY;8gbJVySoWnaT;0sRUH}0B+7NpF49_-@`9-&@%iJEYQ!x-T< z-s1=^GU*uCQRA<18DrdG@vo@&ZKnU;(?l-YqtX0BSBGXDZYn%DL#_0|b(nqN6m=gp z!Q*$-pTjn;AzjwR62?jWh#LQ#)bH4${!HpRt39A@V4CmS6E{oPL+!e@wM=G7?EpLF zj)!jdL9j73|3XK@54*_IW=Jhcp~Z}o+QmU~f@Blj@u<&6)ezB1s_I9#LG1kkI{GT2 diff --git a/payments/locale/zh_Hans/LC_MESSAGES/django.po b/payments/locale/zh_Hans/LC_MESSAGES/django.po index d04f569f..e3447569 100644 --- a/payments/locale/zh_Hans/LC_MESSAGES/django.po +++ b/payments/locale/zh_Hans/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -52,11 +52,11 @@ msgstr "处理细节" #: payments/models.py:41 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"交易金额必须符合 {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM} 的规定。" +"交易金额必须符合 {config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM} " +"的规定。" #: payments/models.py:63 msgid "balance" @@ -120,3 +120,14 @@ msgstr "找不到提供商 {provider}" #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME}| 余额存款" + +#: payments/viewsets.py:10 +msgid "" +"ViewSet for handling read-only operations on the Transaction model. This " +"class provides a read-only interface for interacting with transaction data. " +"It uses the TransactionSerializer for serializing and deserializing the " +"data. The class ensures that only authorized users, who meet specific " +"permissions, can access the transactions." +msgstr "" +"ViewSet 用于处理对事务模型的只读操作。该类提供了与事务数据交互的只读接口。它使用 TransactionSerializer " +"对数据进行序列化和反序列化。该类确保只有符合特定权限的授权用户才能访问事务。" diff --git a/payments/utils/__init__.py b/payments/utils/__init__.py index f8fc9e86..82d3e243 100644 --- a/payments/utils/__init__.py +++ b/payments/utils/__init__.py @@ -3,7 +3,7 @@ from django.utils.translation import gettext_lazy as _ from payments.utils.cbr import get_rates as get_rates_cbr -def get_rates(provider: str): +def get_rates(provider: str) -> dict[str, float]: if not provider: raise ValueError(_("a provider to get rates from is required")) diff --git a/payments/utils/cbr.py b/payments/utils/cbr.py index 8d1c9aa5..7911ca4d 100644 --- a/payments/utils/cbr.py +++ b/payments/utils/cbr.py @@ -3,7 +3,7 @@ from django.core.cache import cache from sentry_sdk import capture_exception -def get_rates(): +def get_rates() -> dict[str, float]: try: rates = cache.get("cbr_rates", None) diff --git a/payments/views.py b/payments/views.py index ef83ba09..13904c47 100644 --- a/payments/views.py +++ b/payments/views.py @@ -3,6 +3,7 @@ import traceback from drf_spectacular.utils import extend_schema, extend_schema_view from rest_framework import status +from rest_framework.request import Request from rest_framework.response import Response from rest_framework.views import APIView @@ -32,7 +33,7 @@ class DepositView(APIView): user authentication, and creates a transaction. """ - def post(self, request, *args, **kwargs): + def post(self, request: Request, *args, **kwargs) -> Response: logger.debug(request.__dict__) serializer = DepositSerializer(data=request.data) serializer.is_valid(raise_exception=True) @@ -67,7 +68,7 @@ class CallbackAPIView(APIView): a server error response if an unknown gateway or other issues occur. """ - def post(self, request, *args, **kwargs): + def post(self, request: Request, *args, **kwargs) -> Response: logger.debug(f"{request.__dict__}\n") try: gateway = kwargs.get("gateway", "") diff --git a/payments/viewsets.py b/payments/viewsets.py index 3342cecc..957c7c49 100644 --- a/payments/viewsets.py +++ b/payments/viewsets.py @@ -1,25 +1,18 @@ +from django.utils.translation import gettext_lazy as _ from rest_framework.viewsets import ReadOnlyModelViewSet from core.permissions import EvibesPermission, IsOwner from payments.serializers import TransactionSerializer -class TransactionViewSet(ReadOnlyModelViewSet): - """ - ViewSet for handling read-only operations on the Transaction model. - - This class provides a read-only interface for interacting with transaction - data. It uses the TransactionSerializer for serializing and deserializing - the data. The class ensures that only authorized users, who meet specific - permissions, can access the transactions. - - Attributes: - serializer_class: Specifies the serializer class to be used for - serializing transaction data. - permission_classes: A tuple specifying the permissions required to access - the data. Includes custom permissions to restrict access based - on ownership and other criteria. - """ +class TransactionViewSet(ReadOnlyModelViewSet): # type: ignore + __doc__ = _( + "ViewSet for handling read-only operations on the Transaction model. " + "This class provides a read-only interface for interacting with transaction data. " + "It uses the TransactionSerializer for serializing and deserializing " + "the data. The class ensures that only authorized users, who meet specific " + "permissions, can access the transactions." + ) serializer_class = TransactionSerializer permission_classes = (EvibesPermission, IsOwner) diff --git a/pyproject.toml b/pyproject.toml index 700ba759..9f9cf002 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -103,8 +103,9 @@ testing = ["pytest", "pytest-django", "coverage"] linting = ["black", "isort", "flake8", "bandit"] [tool.mypy] -disable_error_code = ["no-redef", "import-untyped"] -exclude = ["*/migrations/*", "storefront/*"] +strict = true +disable_error_code = ["import-untyped", "no-redef"] +exclude = ["storefront/*"] plugins = ["mypy_django_plugin.main", "mypy_drf_plugin.main"] [tool.django-stubs] diff --git a/vibes_auth/locale/ar_AR/LC_MESSAGES/django.mo b/vibes_auth/locale/ar_AR/LC_MESSAGES/django.mo index f929589ebf9dd44a44394f68a4e9ec464b1d7c2e..13b44d22415e9822f2be459b91f16d0b10b127c1 100644 GIT binary patch delta 5079 zcmZ{lYmgMx700g%@=!n#Tvk}TKvam!7$fmTjEaeXih{g+pmBDlm+de+GtTsY#Fz<> zb(f7MT2o2Id`T!omgTXmE047*riy5+N>x%x^h39%)G}q6RKCQ-vMNcLHa z-u>Ns`}RHO{Li^}{&UZ8NBy12qkd#~a*00dK{= zd5DfS`dPBzmk^)KAK+;CE|lR9lJVc641EIi-KS6yx8VH~@Orow9)Y|v6S3L}XF~1! z6jWe8h2yYqUPxXXf;TgMMK9og;V3v3ceT+3I1RSI%i*=K6+Q&#!d}QHW(X=3uR$sI zSNK)zJ6u*W=-Lp=x0VB+ce0kR|32ycWIhIOTRMB`$bsJ^`~+%) z*;J5@V-YISZSZY)0LsA~*TjpmN=`fC7c-vzCtL^*l^d5PI&?{jW!|-$zqk z^+-mXcTs7~>2W!1(|{*OTShydCI=_e^dOYMclRjrTa$hYYT7-jd&f7eggO=H(UhY5lQ~^B>7!Jn�txDO{fPS3yf#LA#fB3r){bTKyr{ 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 diff --git a/vibes_auth/locale/ar_AR/LC_MESSAGES/django.po b/vibes_auth/locale/ar_AR/LC_MESSAGES/django.po index e7268af0..93fae3b7 100644 --- a/vibes_auth/locale/ar_AR/LC_MESSAGES/django.po +++ b/vibes_auth/locale/ar_AR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -70,7 +70,7 @@ msgstr "التحقق من الرمز المميز" msgid "Verify a token (refresh or access)." msgstr "التحقق من الرمز المميز (التحديث أو الوصول)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:115 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 msgid "the token is valid" msgstr "الرمز المميز صالح" @@ -93,8 +93,8 @@ msgstr "حذف مستخدم" #: vibes_auth/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 msgid "handle avatar upload for a user" @@ -106,7 +106,7 @@ msgstr "تأكيد إعادة تعيين كلمة مرور المستخدم" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:115 +#: vibes_auth/viewsets.py:82 msgid "passwords do not match" msgstr "كلمات المرور غير متطابقة" @@ -149,8 +149,8 @@ msgstr "رقم هاتف مشوه: {phone_number}!" msgid "Invalid attribute format: {attribute_pair}" msgstr "تنسيق السمة غير صالح: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 -#: vibes_auth/viewsets.py:177 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:125 +#: vibes_auth/viewsets.py:144 msgid "activation link is invalid!" msgstr "رابط التفعيل غير صالح!" @@ -162,14 +162,14 @@ msgstr "تم تفعيل الحساب بالفعل..." msgid "something went wrong: {e!s}" msgstr "حدث خطأ ما: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:93 msgid "token is invalid!" msgstr "الرمز غير صالح!" #: vibes_auth/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)، بترتيب زمني عكسي." @@ -345,22 +345,17 @@ msgstr "مرحباً %(user_first_name)s," #: vibes_auth/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 -msgid "" -"reset\n" -" password" -msgstr "" -"تفعيل\n" -" الحساب" +msgid "reset password" +msgstr "إعادة تعيين كلمة المرور" -#: vibes_auth/templates/user_reset_password_email.html:98 +#: vibes_auth/templates/user_reset_password_email.html:97 #: vibes_auth/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" @@ -369,7 +364,7 @@ msgstr "" "إذا كان الزر أعلاه لا يعمل، يرجى نسخ ولصق عنوان URL التالي\n" " في متصفح الويب الخاص بك:" -#: vibes_auth/templates/user_reset_password_email.html:101 +#: vibes_auth/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." @@ -377,12 +372,12 @@ msgstr "" "إذا لم تقم بإرسال هذا الطلب، يرجى تجاهل هذا\n" " البريد الإلكتروني" -#: vibes_auth/templates/user_reset_password_email.html:103 +#: vibes_auth/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:109 +#: vibes_auth/templates/user_reset_password_email.html:108 #: vibes_auth/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "جميع الحقوق محفوظة" @@ -432,14 +427,57 @@ msgstr "" "تنسيق رقم الهاتف غير صالح. يجب إدخال الرقم بالصيغة: \"+999999999\". يُسمح " "بإدخال 15 رقماً كحد أقصى." -#: vibes_auth/views.py:117 +#: vibes_auth/views.py:29 +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 " +"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 (الوصول والتحديث) باستخدام بيانات " +"الاعتماد المقدمة. وهو مبني على طريقة عرض الرمز المميز الأساسي ويضمن تحديد " +"المعدل المناسب للحماية من هجمات القوة الغاشمة." + +#: vibes_auth/views.py:47 +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." +msgstr "" +"يعالج تحديث الرموز المميزة لأغراض المصادقة. يتم استخدام هذه الفئة لتوفير " +"وظيفة لعمليات تحديث الرموز كجزء من نظام المصادقة. وهي تضمن أن العملاء يمكنهم" +" طلب رمز محدث ضمن حدود المعدل المحدد. تعتمد طريقة العرض على أداة التسلسل " +"المرتبطة بها للتحقق من صحة مدخلات تحديث الرمز المميز وإنتاج مخرجات مناسبة." + +#: vibes_auth/views.py:66 +msgid "" +"Represents a view for verifying JSON Web Tokens (JWT) using specific " +"serialization and validation logic. " +msgstr "" +"يمثل طريقة عرض للتحقق من رموز JSON Web Tokens (JWT) باستخدام تسلسل محدد " +"ومنطق التحقق من الصحة." + +#: vibes_auth/views.py:79 msgid "the token is invalid" msgstr "الرمز المميز غير صالح" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:43 +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." +msgstr "" +"تنفيذ مجموعة عرض المستخدم.\n" +"يوفر مجموعة من الإجراءات التي تدير البيانات المتعلقة بالمستخدم مثل الإنشاء والاسترجاع والتحديثات والحذف والإجراءات المخصصة بما في ذلك إعادة تعيين كلمة المرور وتحميل الصورة الرمزية وتفعيل الحساب ودمج العناصر التي تم عرضها مؤخرًا. تعمل هذه الفئة على توسيع mixins و GenericViewSet لمعالجة واجهة برمجة التطبيقات القوية." + +#: vibes_auth/viewsets.py:97 msgid "password reset successfully" msgstr "تمت إعادة تعيين كلمة المرور بنجاح!" -#: vibes_auth/viewsets.py:163 +#: vibes_auth/viewsets.py:130 msgid "account already activated!" msgstr "لقد قمت بتفعيل الحساب بالفعل..." diff --git a/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.mo b/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.mo index 0ac889ccca58e74bed50e66e5ca128a857d694ca..ac4613950cd67b638fe53d84dca3d5ed36a89041 100644 GIT binary patch delta 4738 zcmaKud#oH)9mfZ0;kH_;P-qL39v(sqw-=CF-tv^v%A?TI(gMot?74TRyF0VYW81wc z4u6P>p^4fUtt9G=U|Ma1v8EA{LU8X!6Jvrw6XXvJBnC7gF{Tn@0{Z!$nZ50;#*=&Y zGiP?@_xzr-_sQGd-dwzS`kZfhjDUGAbM?ud_Y}PA6h0W85zlL!w z!iDfgh)wTqcm~`G@#(eUWpF244xfemdDDC-=GWk<@C~Sd->$d-qn}`X4LlvLhqvJ0 zdxQ%a`hNAm%aEA7-@&=?Pf(8kT&@2G<>-B=_dbBicp1?@4zGb*;9Iyy6{#YQ+Gm za({t0zz?7jx{jMl;AU9pg|%GpowpUL6|IV2h5G(kcosYi75Q(WGWjF?7<>mVf=8iB zK99w|p<4SMTVNOKHZQGW{nzu*0bH`Yv~zXA#Z}yR z07^tpLG}7scq9Bd5WhUZ-H0BM~T@Z1YZE`V3CJ`>9B z9dHkP6g~itLf$L9^+D;XoeOn;GgQxOkScoN+%J3ZamNHxe zRgrB_8I8jj?t}{XU5Ib*pOB(?=U-O7zZRavdN{Ulfjr#!JfGy_#$D>a#(d_3Ot!fj z%1+`@P#VhOYGzFfM!>wAsd6hLRYhZrDfMe8F!lfVffU@hj!$ys%qji5o2R(Xvh>R4 zdZu)tZ72bKmbspZaGla`gR0&}=0nV@nCi27dk6D#OeuYYIhU#PA{>r6)x~nSp}O7#4f8(c{mh%08ta(FBkr<1 zPSsNh<0hsASUH|X& zqk7AxCb8p*O&eh}Vd8O<#Z4QfW;{-epJxplWntiFVH}xGo^;~WrekJPBTP-u^3&9C zk*BuKYo?RL-LP)Wcpe3M!Ec3G&lz$yhki`lv58;kiPZS1>G(+|$9{C8!?c%XwmoLn zWrmP)f;3sf&+r@)77_4DVjs(Gni+p+-o-)+W=EKjld0SBFydz7XV$dBc9^*Y3TwKd z-N9QJOAYCfE8(PZ5b|W*q&5l3VA3Yat;=Oy7G|dsMxC5MD5SEl=K&@KZANdomWLCjB3zWH`uFHHD7nEsL%~$(QX!VYUP3){X6V!15t>3a~ z7{Lnvzk*vyNb*n#qHco3)+HprMeXS(qN(L!tDx`HJ?^+1jUp+nmbFlB!@jGgbmCYO z%M9cqvjL$^_+f+$YKe+V71fC>^MfYU|KDZq+9Cm2-E3MZ8d2gG_+SJq%$>&4p5RMf>D!qq|9^_skf}Q)u>ZSkf&MPo^cRH zK`XDjwxIGIaZ)#h#Fz1O7as|BTCrbe83b`2QBy+Wn;CPGH3iXFCESy_x>m+^L&XbM$#W6o!lk}(B zL1=VB_4l{)6TNM7RtL}J+b#91^-R+pS)pmijaFznG2W->nu%x3SJrbgW89rwao3Of zN9ca5(AhpbQ$|P?!%U;#H@%E72S(?HzEmD5|u%$jlXYCGJ()D$)84{5e5jd@k zY2|SaTvOE^JaNjI$)QeEmsv7UVJ7=i&6Z!EerD)_g4Aa*3DWpCPnCUP=ksgjU zm~+$BQo7<%3eu#&m5%X8yU|>Mukx&n^KO{h?Wl-b{ChGZo%X2N?l)s2$ycIQLq=)B z^zQz_%n6kJ+RSqO^7{dsx9uaCDi8kQ$=qd=pt~G1S%i$LEpr9V8a8eDGS{F-?n!sD zatoX2m)CSWW$J0V=dH6Z*c!Ju3T*R)^C^iZ2UFo-uQGP$XO9<7I6c+r^6-?SS(@iC d9Xs^yqMJwdJiP3-g~ztE3-8ePmc4WGe*imi%LM=c delta 2160 zcmZA1e@Inl9LMo*daQfXyVS0k-hNzdW@@cgnx&@Q?3cAITdC!2BIQPot;jHl>;@rQ z!N@p7M8WJ=jXkyT+nLTGqqPzfh;Xu59MeYfMGFMXiZO^&uoQD~9qRf{EX7{T!EZ4Of5dVe z#t6;`nx$hMj=^S3)vY?{jO9cZj>i31f`@Q2p2HXLXH-u2a1=g5CH9YRF@MhBxB)Zq zZH(bg)Hq-Jzu&|V$A4goruvu;A4?*g6bzwmG#2&8T-1y!up1k&39q7NQj%u&E>@xj zK7ssXr;*(3ynp^O)^L2oKOf;@hx=Or9Su~BEwN6qj%)KUzfDmRky zRADY^0!^q1Y(QPV3009U)Kcv8{RHE>;2fQCcomiTU1V%~h$L$c*@ZC!i*YKxgsX8r z?m;DT7PSYipl);rd(dIwn{hvCoL^80{hdzzm3fFPl*kI-7SxU2!)!c)4t|ch(J9mb zmynO$@{j*SRWOMk3owGJNDP^aEyMS*5!sh^JCpjWw1b>b$mQ|>VI|oxC@(6Grxw~GlQtT^Z=ERzUD&&b-n>v(zvzJ(Tn6Q)Kct4 zmGmU)`TYq?F`pf!C2B%lw;Rd9j-&QaA8OzyzCi|M^(+gu>57n{tQz(7tj8QZ|J`(S z;bBzfpQ6_2D`Z>PB~;07;cOg6B{+=@un1dFGye#+)}Nsg>&HEK2itKo_1Ad)sLBoC za_(nS77rV1vlm=0u-9Zu#iV5WN|qD$xtKhMnX$cK`bRI35}zqHICXsLNBiX@qE(+ zRb{mowf-?W%ZV}~iBM^i3C&EciO`1BX4FeZGuK8^ixTAOy}rSU2%fZOt%lwzqM2wR z%88l8f9*}J|6-0*4z018N?z;ro^Gu5^k4Ch=lSa8r1mn=_M@%y zPZpw\n" "Language-Team: BRITISH ENGLISH \n" @@ -70,7 +70,7 @@ msgstr "Ověření tokenu" 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:115 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 msgid "the token is valid" msgstr "Token je platný" @@ -104,7 +104,7 @@ msgstr "Potvrzení obnovení hesla uživatele" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:115 +#: vibes_auth/viewsets.py:82 msgid "passwords do not match" msgstr "Hesla se neshodují" @@ -147,8 +147,8 @@ msgstr "Chybně zadané telefonní číslo: {phone_number}!" msgid "Invalid attribute format: {attribute_pair}" msgstr "Nesprávný formát atributu: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 -#: vibes_auth/viewsets.py:177 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:125 +#: vibes_auth/viewsets.py:144 msgid "activation link is invalid!" msgstr "Aktivační odkaz je neplatný!" @@ -160,14 +160,14 @@ msgstr "Účet byl již aktivován..." msgid "something went wrong: {e!s}" msgstr "Něco se pokazilo: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:93 msgid "token is invalid!" msgstr "Token je neplatný!" #: vibes_auth/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í." @@ -344,32 +344,26 @@ msgstr "Ahoj %(user_first_name)s," #: vibes_auth/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 -msgid "" -"reset\n" -" password" -msgstr "" -"Aktivace\n" -" účet" +msgid "reset password" +msgstr "obnovení hesla" -#: vibes_auth/templates/user_reset_password_email.html:98 +#: vibes_auth/templates/user_reset_password_email.html:97 #: vibes_auth/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:101 +#: vibes_auth/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." @@ -377,12 +371,12 @@ msgstr "" "pokud jste tuto žádost neposlali, ignorujte ji.\n" " e-mail." -#: vibes_auth/templates/user_reset_password_email.html:103 +#: vibes_auth/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:109 +#: vibes_auth/templates/user_reset_password_email.html:108 #: vibes_auth/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "Všechna práva vyhrazena" @@ -432,14 +426,59 @@ 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:117 +#: vibes_auth/views.py:29 +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 " +"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 " +"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:47 +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." +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í. " +"Zajišťuje, aby klienti mohli požádat o obnovení tokenu v rámci definovaných " +"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:66 +msgid "" +"Represents a view for verifying JSON Web Tokens (JWT) using specific " +"serialization and validation logic. " +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:79 msgid "the token is invalid" msgstr "Token je neplatný" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:43 +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." +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." + +#: vibes_auth/viewsets.py:97 msgid "password reset successfully" msgstr "Heslo bylo úspěšně resetováno!" -#: vibes_auth/viewsets.py:163 +#: vibes_auth/viewsets.py:130 msgid "account already activated!" msgstr "Účet jste již aktivovali..." diff --git a/vibes_auth/locale/da_DK/LC_MESSAGES/django.mo b/vibes_auth/locale/da_DK/LC_MESSAGES/django.mo index e0578a68846264e1381078d2d5d1029445417756..094e963c2bc6495c8d16008884fc53e47defce14 100644 GIT binary patch delta 4724 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 Vk\n" "Language-Team: BRITISH ENGLISH \n" @@ -70,7 +70,7 @@ msgstr "Bekræft et token" 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:115 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 msgid "the token is valid" msgstr "Tokenet er gyldigt" @@ -106,7 +106,7 @@ msgstr "Bekræft nulstilling af en brugers adgangskode" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:115 +#: vibes_auth/viewsets.py:82 msgid "passwords do not match" msgstr "Adgangskoderne stemmer ikke overens" @@ -149,8 +149,8 @@ msgstr "Misdannet telefonnummer: {phone_number}!" msgid "Invalid attribute format: {attribute_pair}" msgstr "Ugyldigt attributformat: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 -#: vibes_auth/viewsets.py:177 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:125 +#: vibes_auth/viewsets.py:144 msgid "activation link is invalid!" msgstr "Aktiveringslinket er ugyldigt!" @@ -162,14 +162,14 @@ msgstr "Kontoen er allerede aktiveret..." msgid "something went wrong: {e!s}" msgstr "Noget gik galt: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:93 msgid "token is invalid!" msgstr "Token er ugyldig!" #: vibes_auth/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." @@ -347,44 +347,38 @@ msgstr "Hej %(user_first_name)s," #: vibes_auth/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 -msgid "" -"reset\n" -" password" -msgstr "" -"Aktiver\n" -" Konto" +msgid "reset password" +msgstr "Nulstil adgangskode" -#: vibes_auth/templates/user_reset_password_email.html:98 +#: vibes_auth/templates/user_reset_password_email.html:97 #: vibes_auth/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:101 +#: vibes_auth/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:103 +#: vibes_auth/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:109 +#: vibes_auth/templates/user_reset_password_email.html:108 #: vibes_auth/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "Alle rettigheder forbeholdes" @@ -434,14 +428,60 @@ msgstr "" "Ugyldigt telefonnummerformat. Nummeret skal indtastes i formatet: " "\"+999999999\". Op til 15 cifre er tilladt." -#: vibes_auth/views.py:117 +#: vibes_auth/views.py:29 +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 " +"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 "" +"Repræsenterer en visning til at få et par adgangs- og opdateringstokens og " +"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." + +#: vibes_auth/views.py:47 +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." +msgstr "" +"Håndterer opfriskning af tokens til autentificeringsformål. Denne klasse " +"bruges til at levere funktionalitet til token-opdatering som en del af et " +"autentificeringssystem. Den sikrer, at klienter kan anmode om et opdateret " +"token inden for definerede hastighedsgrænser. Visningen er afhængig af den " +"tilknyttede serializer til at validere tokenopdateringsinput og producere " +"passende output." + +#: vibes_auth/views.py:66 +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." + +#: vibes_auth/views.py:79 msgid "the token is invalid" msgstr "Tokenet er ugyldigt" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:43 +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." +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." + +#: vibes_auth/viewsets.py:97 msgid "password reset successfully" msgstr "Adgangskoden er blevet nulstillet med succes!" -#: vibes_auth/viewsets.py:163 +#: vibes_auth/viewsets.py:130 msgid "account already activated!" msgstr "Du har allerede aktiveret kontoen..." diff --git a/vibes_auth/locale/de_DE/LC_MESSAGES/django.mo b/vibes_auth/locale/de_DE/LC_MESSAGES/django.mo index 18bf00a42b5f83393f0b27de25ae18e9641ed1eb..518351609e7edf008ba39365a7b75950504c47e4 100644 GIT binary patch delta 4936 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 diff --git a/vibes_auth/locale/de_DE/LC_MESSAGES/django.po b/vibes_auth/locale/de_DE/LC_MESSAGES/django.po index 9c270d3b..5cbf2395 100644 --- a/vibes_auth/locale/de_DE/LC_MESSAGES/django.po +++ b/vibes_auth/locale/de_DE/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -71,7 +71,7 @@ msgstr "Überprüfen eines Tokens" 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:115 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 msgid "the token is valid" msgstr "Das Token ist gültig" @@ -107,7 +107,7 @@ msgstr "Bestätigen Sie das Zurücksetzen des Passworts eines Benutzers" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:115 +#: vibes_auth/viewsets.py:82 msgid "passwords do not match" msgstr "Passwörter stimmen nicht überein" @@ -127,8 +127,8 @@ msgstr "" #: vibes_auth/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 msgid "password too weak" @@ -153,8 +153,8 @@ msgstr "Missgebildete Telefonnummer: {phone_number}!" msgid "Invalid attribute format: {attribute_pair}" msgstr "Ungültiges Attributformat: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 -#: vibes_auth/viewsets.py:177 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:125 +#: vibes_auth/viewsets.py:144 msgid "activation link is invalid!" msgstr "Der Aktivierungslink ist ungültig!" @@ -166,14 +166,14 @@ msgstr "Das Konto wurde bereits aktiviert..." msgid "something went wrong: {e!s}" msgstr "Etwas ist schief gelaufen: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:93 msgid "token is invalid!" msgstr "Token ist ungültig!" #: vibes_auth/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." @@ -353,45 +353,39 @@ msgstr "Hallo %(user_first_name)s," #: vibes_auth/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 -msgid "" -"reset\n" -" password" -msgstr "" -"Aktivieren Sie\n" -" Konto" +msgid "reset password" +msgstr "Passwort zurücksetzen" -#: vibes_auth/templates/user_reset_password_email.html:98 +#: vibes_auth/templates/user_reset_password_email.html:97 #: vibes_auth/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:101 +#: vibes_auth/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:103 +#: vibes_auth/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:109 +#: vibes_auth/templates/user_reset_password_email.html:108 #: vibes_auth/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "Alle Rechte vorbehalten" @@ -441,14 +435,62 @@ msgstr "" "Ungültiges Telefonnummernformat. Die Nummer muss in dem Format eingegeben " "werden: \"+999999999\". Bis zu 15 Ziffern sind erlaubt." -#: vibes_auth/views.py:117 +#: vibes_auth/views.py:29 +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 " +"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." + +#: vibes_auth/views.py:47 +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." +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 " +"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." + +#: vibes_auth/views.py:66 +msgid "" +"Represents a view for verifying JSON Web Tokens (JWT) using specific " +"serialization and validation logic. " +msgstr "" +"Stellt eine Ansicht zur Überprüfung von JSON-Web-Token (JWT) unter " +"Verwendung einer spezifischen Serialisierungs- und Validierungslogik dar." + +#: vibes_auth/views.py:79 msgid "the token is invalid" msgstr "Das Token ist ungültig" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:43 +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." +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." + +#: vibes_auth/viewsets.py:97 msgid "password reset successfully" msgstr "Das Passwort wurde erfolgreich zurückgesetzt!" -#: vibes_auth/viewsets.py:163 +#: vibes_auth/viewsets.py:130 msgid "account already activated!" msgstr "Sie haben das Konto bereits aktiviert..." diff --git a/vibes_auth/locale/en_GB/LC_MESSAGES/django.mo b/vibes_auth/locale/en_GB/LC_MESSAGES/django.mo index cac3176aa278ad48b0e4fa363f635b3e5c1e404e..14b6b38985c69237caadde8d3d846d32908fc1c7 100644 GIT binary patch literal 10537 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 delta 2140 zcmZA1duWwq9Ki9X?QCB1*lwnt=`qtYZD(6rv$dO3D@{}L(wr@IgoaeCivy!ooFF9H zAE6zL>W>i0LIR-<7>QIWLPd>2grYJRbRlR9)QXta_xt)5(!=?k&-1?Loagd;e(yQ3 z?uA9U(-n!mf!0GzBdUr+$l-)i-e_aThER*+a27UV3OAzP@54sijZ^UiPQvf73D09S z){hIJ4430o*o{{@)dO@Yxv>++;{axHFV4WDI1z`?HT{NT@DFrhf5+DH<8rP$u>!Z_ zV(dr9ITC;V4JNrB#uB$WN{3e{VmT$4L?^05f0#md+=5SGCwAdUbSK#fA@pJ^I`9GH zqwp@Wws1VY{~300{dIi5nlC4qKV;}QP%Tcu7OcVbScm;M7vDs8_&ItM-=mo;B|UAJ zLO0NbZeTO|{cUJQcA`h|Ta_HQ0b_u^FF6 z7jhV_fkAYlpK%u^IQVWHK*#w3UC>`;@sNOR#&Iu3LJ87m~2 zZ4TC;)xR1&q9>5GgxArdID%&G3|d3y&<)Hd-|nml-SI*+BWsXX*vgwnm%}MO|NH5X zz3@J|@>A$ehS2ICL92EYO?f$gd!Bh4Hshn{Lf%655I#V@8ot8&@jTv*JrtJXyoWAm z5ZjnP4AF6=>GUP%p%X1Zcif9s|1NZ*0d$~O(ccx&0Z$-F2w$Q*Jd0*zD(7eo&A)R>E->5>9MeM0k8oba^vF zX4N*^^S4TGCl(Mz#EnETK~kb-v03r+hz5deMrns|4Kb6jfNegSJaPZE4tjSI-NYuM ziMXElw{7wKZ{^AYG}SgUa7)y?R9K$f%J}-`SdYiHj<|uaemnw?=^`7^&#Af0iVhLeeMyw!w za(v3Hr<>w_boTV4BC){M68Yg&HlIyr3a!bDrTL0U)APHNiSduz+t>Hl!#lQx9r^xD gN8y>O;*$JGs;*F%UNt7aFTEiDc&4RrEVI4%A2dR|I{*Lx diff --git a/vibes_auth/locale/en_GB/LC_MESSAGES/django.po b/vibes_auth/locale/en_GB/LC_MESSAGES/django.po index 54005f83..60176e47 100644 --- a/vibes_auth/locale/en_GB/LC_MESSAGES/django.po +++ b/vibes_auth/locale/en_GB/LC_MESSAGES/django.po @@ -2,12 +2,12 @@ # Copyright (C) 2025 Egor "fureunoir" 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" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -74,7 +74,7 @@ msgstr "Verify a token" 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:115 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 msgid "the token is valid" msgstr "The token is valid" @@ -108,7 +108,7 @@ msgstr "Confirm a user's password reset" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:115 +#: vibes_auth/viewsets.py:82 msgid "passwords do not match" msgstr "Passwords do not match" @@ -151,8 +151,8 @@ msgstr "Malformed phone number: {phone_number}!" msgid "Invalid attribute format: {attribute_pair}" msgstr "Invalid attribute format: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 -#: vibes_auth/viewsets.py:177 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:125 +#: vibes_auth/viewsets.py:144 msgid "activation link is invalid!" msgstr "Activation link is invalid!" @@ -164,14 +164,14 @@ msgstr "Account has been already activated..." msgid "something went wrong: {e!s}" msgstr "Something went wrong: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:93 msgid "token is invalid!" msgstr "Token is invalid!" #: vibes_auth/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." @@ -348,22 +348,17 @@ msgstr "Hello %(user_first_name)s," #: vibes_auth/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 -msgid "" -"reset\n" -" password" -msgstr "" -"Activate\n" -" account" +msgid "reset password" +msgstr "reset password" -#: vibes_auth/templates/user_reset_password_email.html:98 +#: vibes_auth/templates/user_reset_password_email.html:97 #: vibes_auth/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" @@ -372,7 +367,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:101 +#: vibes_auth/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." @@ -380,12 +375,12 @@ msgstr "" "if you did not send this request, please ignore this\n" " email." -#: vibes_auth/templates/user_reset_password_email.html:103 +#: vibes_auth/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:109 +#: vibes_auth/templates/user_reset_password_email.html:108 #: vibes_auth/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "All rights reserved" @@ -435,14 +430,58 @@ msgstr "" "Invalid phone number format. The number must be entered in the format: " "\"+999999999\". Up to 15 digits allowed." -#: vibes_auth/views.py:117 +#: vibes_auth/views.py:29 +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 " +"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 " +"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:47 +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." +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." + +#: vibes_auth/views.py:66 +msgid "" +"Represents a view for verifying JSON Web Tokens (JWT) using specific " +"serialization and validation logic. " +msgstr "" +"Represents a view for verifying JSON Web Tokens (JWT) using specific " +"serialization and validation logic." + +#: vibes_auth/views.py:79 msgid "the token is invalid" msgstr "The token is invalid" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:43 +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." +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." + +#: vibes_auth/viewsets.py:97 msgid "password reset successfully" msgstr "Password has been reset successfully!" -#: vibes_auth/viewsets.py:163 +#: vibes_auth/viewsets.py:130 msgid "account already activated!" msgstr "You have already activated the account..." diff --git a/vibes_auth/locale/en_US/LC_MESSAGES/django.mo b/vibes_auth/locale/en_US/LC_MESSAGES/django.mo index bbb00af73f22187a436bb3b08167803ee22a52db..5d301c5ff6b9903a443e11cba8401b7cb6797ddc 100644 GIT binary patch literal 10526 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 delta 2156 zcmZA1e`wTY9Ki9%+c~}E*}ToNt*y3st8P=Xt(MzrPBYW8{53bHCZ;78{>Y65gSen# zWMINE$O0)U(tiTE(2^*IMKDkTQ7FsEl9tdfBcq7w{XV~i^l+bhJ>T!$JwHCr=X?8> z56#VV>gbXII4x6z8d(iLqVKeT*Yw#nSieF+2{)&}2 zBN0L=F2XCZ7q4)tN9mMtV*pEV7dGH9UWX$%8NWi;^b=0N-_V8q9hu?BQ@HNJ6mG^& z97M-?FZ%p*Omh7Lj(4kn(%}_iEN46>(TU2?A6B3{ZpA0D3%l_Ix|4=UA#BAqbl?NX zN8vECws17Me+)agJ{{e!8(4>ae-oOK0rV)Ii+lsKeqn^pRd@nj`FUjQa1mK-h_kwKoPrsw$C1K01eY*T&? zZ^8s6?gUNPjH}U|??zr>KW|q5`)DREqSc=w%_Jq%p$llr(s4)aXb~<&CtQOyIE1eJ z0D7kHpw<5YnxT&)FQA#IB3k`sbrZv;$d7*oz*;K{RtG(Hi;=-BCUHb_0#*j+@YoEI?kNhc}O|AE){JzeI=Z zg*>|QQFJG#(CYsNt=gZ_lo#{2=b6vOIrs>=kXMjBgtw8ehU2&e&*N%bNntt8Tj+w0 zVmtGPQ*>NuS@k8;=tM2(jvqp+e-NE0iw=}Sf43hU@CcHGa17ny7@CpEoTD{Vj*np- zT6`~H*3`a8$Lb$JeiO!!;xC*(6j~SWONsl5RfHL6CGIBL2*G9Z>6Sol7k4NCKT;5i4VJ-ATH!W|VlJTg3c@VuQlta)%w-62d=>|F`wrXdq?~3kc79HnD=R>OJpTVjZ!Dm`B(a5{n6+ z9G^1l>9(j}ID7hqBC)`h5xGwjjk((D>G`(gU&Xo9)T-Q`WV~d@hQ7Whw(r~&cILLH yJMvGL{~phMmdK2&$=6gbnULt**uQ09L;u4ixmT-ebNiAdxozpz{NeQGqJIEblfF3s diff --git a/vibes_auth/locale/en_US/LC_MESSAGES/django.po b/vibes_auth/locale/en_US/LC_MESSAGES/django.po index e9af7ede..cc17c255 100644 --- a/vibes_auth/locale/en_US/LC_MESSAGES/django.po +++ b/vibes_auth/locale/en_US/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -70,7 +70,7 @@ msgstr "Verify a token" 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:115 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 msgid "the token is valid" msgstr "The token is valid" @@ -104,7 +104,7 @@ msgstr "Confirm a user's password reset" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:115 +#: vibes_auth/viewsets.py:82 msgid "passwords do not match" msgstr "Passwords do not match" @@ -147,8 +147,8 @@ msgstr "Malformed phone number: {phone_number}!" msgid "Invalid attribute format: {attribute_pair}" msgstr "Invalid attribute format: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 -#: vibes_auth/viewsets.py:177 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:125 +#: vibes_auth/viewsets.py:144 msgid "activation link is invalid!" msgstr "Activation link is invalid!" @@ -160,14 +160,14 @@ msgstr "Account has been already activated..." msgid "something went wrong: {e!s}" msgstr "Something went wrong: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:93 msgid "token is invalid!" msgstr "Token is invalid!" #: vibes_auth/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." @@ -344,22 +344,17 @@ msgstr "Hello %(user_first_name)s," #: vibes_auth/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 -msgid "" -"reset\n" -" password" -msgstr "" -"Activate\n" -" account" +msgid "reset password" +msgstr "reset password" -#: vibes_auth/templates/user_reset_password_email.html:98 +#: vibes_auth/templates/user_reset_password_email.html:97 #: vibes_auth/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" @@ -368,7 +363,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:101 +#: vibes_auth/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." @@ -376,12 +371,12 @@ msgstr "" "if you did not send this request, please ignore this\n" " email." -#: vibes_auth/templates/user_reset_password_email.html:103 +#: vibes_auth/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:109 +#: vibes_auth/templates/user_reset_password_email.html:108 #: vibes_auth/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "All rights reserved" @@ -431,14 +426,58 @@ msgstr "" "Invalid phone number format. The number must be entered in the format: " "\"+999999999\". Up to 15 digits allowed." -#: vibes_auth/views.py:117 +#: vibes_auth/views.py:29 +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 " +"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 " +"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:47 +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." +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." + +#: vibes_auth/views.py:66 +msgid "" +"Represents a view for verifying JSON Web Tokens (JWT) using specific " +"serialization and validation logic. " +msgstr "" +"Represents a view for verifying JSON Web Tokens (JWT) using specific " +"serialization and validation logic." + +#: vibes_auth/views.py:79 msgid "the token is invalid" msgstr "The token is invalid" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:43 +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." +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." + +#: vibes_auth/viewsets.py:97 msgid "password reset successfully" msgstr "Password has been reset successfully!" -#: vibes_auth/viewsets.py:163 +#: vibes_auth/viewsets.py:130 msgid "account already activated!" msgstr "You have already activated the account..." diff --git a/vibes_auth/locale/es_ES/LC_MESSAGES/django.mo b/vibes_auth/locale/es_ES/LC_MESSAGES/django.mo index c79b54cad1bbfcd5ec10e16fbecfab218f7d6451..10d01cfcfcfc1a51bfed53b99a0a2a1251c25497 100644 GIT binary patch delta 4831 zcmZ{mdyE}b9mfxJOSdhhij}t1wg)RvWV=`?rBINzmcD4AwxzX5k-2lv?oNB}%#0TKj-XnaIdjjyPfK>U2q%-wcdI@xnS zXI|(0e&63?_CIT1*8vjx5n?uP7X+VE<45H5s|LH^87`H{^p!71=HD1(1na|VmPm-7|yVz>#eW`DDX zi5B`+{lIaEP3A>78NLa%@$c*Nzd>#EZ>aa)hVpnm);|DOz+Lbtlmn|^sTbBW;hxzI6^d5PLs0i0gO|XgP?kRj<;gGMh47DX7W@~Ka&0Vk`eirt^BT(gZ z6dr=lLMgM2?t>Vn0k44%L3w%%o(H?fE+%qJ$2|-L@W*DwU&l1YCmE7Whw?yDYcU;) z@AZs^PB=ow7RH4Pc_ia>$Y@Ed1JUU36Ax0yA2;%gX!M+Fe}C};|6650xnfo_)O?iv zN}yXAn;4Q*aw-`W_w9^NF;xGOe+^?D<2J^f3@JF7p(MV8aXtfqd=)I${?{?O$4(|n zMjiM1-zw(QnWMVdU0+*KQ&8-?hZ0!FLdI4^IW&L)?P?XuQ6=a!ZQe>{l zYqpan!%@@Ofg%p|LePrx5x{28gjra?E2-OGxGc9pcX@9MF4zN6j!(Af2BMgYX^=bHirP``9Vne0j@$v> zVzJEP9=>8umV^;cHf`q82oLUaseBt|+SCdYU5VmOfguPf@0&%)5*=n8-sRz>$aTNp zY>fQ^HpufdY82cWo!2|J+~zts<$Vb%b0qtq%X0-IK$4&q?YOXg&pUjdni6m>11CnYj1X#@)28KFKf=xl;|qpH%SO%Rkj`Z_Q9rUCW`q zE%Hb!sQvImdXY1@iVo^unyKQc3^t@cbjTLAOS)^H+k!Toke23TLJ`|6QWFc_&7k#c zje!_J4+H<)-A}Q&E^exGj zc@c@e1djA}|L9Y*t~=HE0wn4h<+n^41dSR(InK3L{Xz1((!>%wa_06U-g}Aw1?5qZ z6+s#$b;K)=>4g59WVzodeLM8JO-vH?AgrYAjBlGrr?XbB1H|oR~T@rOmHPsVG^s2V&erjubX)r!*s>#OOucd+=ae@cNR8N=qfQ(a`j4hQ zomd)uyv_d{@wjV#{{`BgcQW5)?o(a#S>K>XD9dE@AG5F6(C4=a(!r{A_!g}uU$s9P zb5{);7IXnJi82TXUDoZ1d=2>ajIN$HXZwWaM|Y;n)LC7(=Mj5GbN0oEc6^fD-lT5R kRi_Emt^3DL&U(6c^w;xS)A@?zL8HajAsxGE!OEWh1K@(0#sB~S delta 2134 zcmZA1Z%kEn9LMo5m!opgtALoq6+sNSUW7y_3Piw6L`+iRKg1BVEkcXCsIj@rhLq5Q zbay^5pE(o%JaCOot;qv(J!y;S)U}r4YAdU)KU;q+$A<6E@z|Wd@x8C#IrnnT@B97! z&biTYcSCe4#W`$@PGSj>8gCZGd9(RoBqW%H(T~fq7}K#C_4^1G<3W59zraO!8%ywS z3}U|DED39H0k+~?-RgBF3pvq`i8zXRco;MB63)l(P;2@F=ipt`!e%_f{BttL4VZ$j zVHFObu5;1*{w4-E{tag-)oCXDnUCen!T{<<3sL`=j>@BcA%-EaqLvkc-3IEqi< zBx>b zRK^3So}R=#_&IiBAtx!C9m4&19BHeq)Xp+l%83i8 zQhkjo=?t#NHPpKp-^P`A8nyecBWtmLQKe4iZRB7h>iy7$>_6*9wIqV7*s$k0%+~XN zhlyH{$cI)ILfU49sGe0L_po*>#CK5(JdHhg3#qQvki|0WLLCobFCN8R=x2kd1$$8~ zcn@p2zkS3+CH@ihkJ?$!LKzBrIQCzi4(BX%(0B)r)biM+G7Z)dD1 hwQ77Q^*<+887v;(ojH*ZyP8=PTON92d@NMp+y?;jv*`c; diff --git a/vibes_auth/locale/es_ES/LC_MESSAGES/django.po b/vibes_auth/locale/es_ES/LC_MESSAGES/django.po index 9c85432a..d13bf67e 100644 --- a/vibes_auth/locale/es_ES/LC_MESSAGES/django.po +++ b/vibes_auth/locale/es_ES/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -70,7 +70,7 @@ msgstr "Verificar un token" 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:115 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 msgid "the token is valid" msgstr "El token es válido" @@ -106,7 +106,7 @@ msgstr "Confirmar el restablecimiento de la contraseña de un usuario" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:115 +#: vibes_auth/viewsets.py:82 msgid "passwords do not match" msgstr "Las contraseñas no coinciden" @@ -150,8 +150,8 @@ msgstr "Número de teléfono malformado: ¡{phone_number}!" msgid "Invalid attribute format: {attribute_pair}" msgstr "Formato de atributo no válido: ¡{attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 -#: vibes_auth/viewsets.py:177 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:125 +#: vibes_auth/viewsets.py:144 msgid "activation link is invalid!" msgstr "El enlace de activación no es válido." @@ -163,14 +163,14 @@ msgstr "La cuenta ya ha sido activada..." msgid "something went wrong: {e!s}" msgstr "Algo salió mal: {e!s}." -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:93 msgid "token is invalid!" msgstr "¡La ficha no es válida!" #: vibes_auth/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." @@ -294,7 +294,8 @@ msgstr "`attributes` debe ser un diccionario" #: vibes_auth/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 #, python-brace-format @@ -347,22 +348,17 @@ msgstr "Hola %(user_first_name)s," #: vibes_auth/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 -msgid "" -"reset\n" -" password" -msgstr "" -"Activar\n" -" cuenta" +msgid "reset password" +msgstr "restablecer contraseña" -#: vibes_auth/templates/user_reset_password_email.html:98 +#: vibes_auth/templates/user_reset_password_email.html:97 #: vibes_auth/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" @@ -371,7 +367,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:101 +#: vibes_auth/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." @@ -379,12 +375,12 @@ msgstr "" "si usted no envió esta solicitud, ignore este\n" " correo electrónico." -#: vibes_auth/templates/user_reset_password_email.html:103 +#: vibes_auth/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:109 +#: vibes_auth/templates/user_reset_password_email.html:108 #: vibes_auth/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "Todos los derechos reservados" @@ -434,14 +430,60 @@ 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:117 +#: vibes_auth/views.py:29 +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 " +"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 " +"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:47 +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." +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." + +#: vibes_auth/views.py:66 +msgid "" +"Represents a view for verifying JSON Web Tokens (JWT) using specific " +"serialization and validation logic. " +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:79 msgid "the token is invalid" msgstr "El token no es válido" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:43 +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." +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." + +#: vibes_auth/viewsets.py:97 msgid "password reset successfully" msgstr "La contraseña se ha restablecido correctamente." -#: vibes_auth/viewsets.py:163 +#: vibes_auth/viewsets.py:130 msgid "account already activated!" msgstr "Ya ha activado la cuenta..." diff --git a/vibes_auth/locale/fa_IR/LC_MESSAGES/django.po b/vibes_auth/locale/fa_IR/LC_MESSAGES/django.po index c67aa034..ea19ea43 100644 --- a/vibes_auth/locale/fa_IR/LC_MESSAGES/django.po +++ b/vibes_auth/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-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -73,7 +73,7 @@ msgstr "" msgid "Verify a token (refresh or access)." msgstr "" -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:115 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 msgid "the token is valid" msgstr "" @@ -107,7 +107,7 @@ msgstr "" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:115 +#: vibes_auth/viewsets.py:82 msgid "passwords do not match" msgstr "" @@ -150,8 +150,8 @@ msgstr "" msgid "Invalid attribute format: {attribute_pair}" msgstr "" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 -#: vibes_auth/viewsets.py:177 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:125 +#: vibes_auth/viewsets.py:144 msgid "activation link is invalid!" msgstr "" @@ -163,7 +163,7 @@ msgstr "" msgid "something went wrong: {e!s}" msgstr "" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:93 msgid "token is invalid!" msgstr "" @@ -351,30 +351,28 @@ msgid "" msgstr "" #: vibes_auth/templates/user_reset_password_email.html:95 -msgid "" -"reset\n" -" password" +msgid "reset password" msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:98 +#: vibes_auth/templates/user_reset_password_email.html:97 #: vibes_auth/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:101 +#: vibes_auth/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:103 +#: vibes_auth/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:109 +#: vibes_auth/templates/user_reset_password_email.html:108 #: vibes_auth/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "" @@ -418,14 +416,47 @@ msgid "" "\"+999999999\". up to 15 digits allowed." msgstr "" -#: vibes_auth/views.py:117 +#: vibes_auth/views.py:29 +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 " +"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 "" + +#: vibes_auth/views.py:47 +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." +msgstr "" + +#: vibes_auth/views.py:66 +msgid "" +"Represents a view for verifying JSON Web Tokens (JWT) using specific " +"serialization and validation logic. " +msgstr "" + +#: vibes_auth/views.py:79 msgid "the token is invalid" msgstr "" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:43 +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." +msgstr "" + +#: vibes_auth/viewsets.py:97 msgid "password reset successfully" msgstr "" -#: vibes_auth/viewsets.py:163 +#: vibes_auth/viewsets.py:130 msgid "account already activated!" msgstr "" diff --git a/vibes_auth/locale/fr_FR/LC_MESSAGES/django.mo b/vibes_auth/locale/fr_FR/LC_MESSAGES/django.mo index 2e4708354b04c2fe8636fae6f64cbd78b285f108..729c358330a0023044cad11ca3f119324f3e37b1 100644 GIT binary patch delta 4966 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 delta 2156 zcmZA1du)w&9LMpm_Eb+>hqjKf*3k>KI<2DZ)~QQ-+RH6#v6McmqrD8K&dV z1hZtEfW5E*lk}*?OnUQ1D<OM!k|6j!b*AFpHOMT6RKZ_xqI1Hd3)Eo81G}MYqaShgCJzhkuB(I0rQXGZ4@qXlA z_79Sqo%G)SAIrGD;=P~FhkZQXa+v5wVeE&cI2da&AKNe&_n}sJ9<>#>P?hUWc}8Oz zY611A1vH{QKMz%rR@7E(@ca`Uec%L>Pw*lt^Lxm>?KzUH`N%GaDHz7VSb#M+64#;< zIfCkev#1B%#b40J#y8+b)O~KF5_*+P{gruuER@JZ&zYzP{e*q-SM=dQ)Pw#;-QYCx zXV<*zN2m(M@Xs7fM^z+(ti`Hu9Zp61(ypgcf0gzQZ>Z$S+&zRP*wl@^#t~c}CT)2i zb>k2%t}Upk{k;Ahy6^705PN8P^`mB4a`34hkci<)H%PQhKMFFru3 zWkJfIJvtdmlcl4K=P*$-Z9*1f|6(^J@%N*SnHqC4F_lm$RgLk)C_)cb(mEX)Rj zQPVXLGl>#n81ZiWp#A@fD|Ip_B|21rN^d?IrxV|J*I#<-$4Nttr(RH>sKh$^ACB+2 z(AG}#-qd!f^pgl}=>+Y+j*Eu6c1(0;_ATl-eLQCIMjkPg&<~9IK|f5jgpO|4hB+GPWl8BTXw8wa#CW=q}G3=+A6wUb<}Md~@3i2DrZssqRP& HpYpv0QW?G} diff --git a/vibes_auth/locale/fr_FR/LC_MESSAGES/django.po b/vibes_auth/locale/fr_FR/LC_MESSAGES/django.po index fb7bcc66..04fbb208 100644 --- a/vibes_auth/locale/fr_FR/LC_MESSAGES/django.po +++ b/vibes_auth/locale/fr_FR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -72,7 +72,7 @@ msgstr "Vérifier un jeton" 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:115 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 msgid "the token is valid" msgstr "Le jeton est valide" @@ -108,7 +108,7 @@ msgstr "Confirmer la réinitialisation du mot de passe d'un utilisateur" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:115 +#: vibes_auth/viewsets.py:82 msgid "passwords do not match" msgstr "Les mots de passe ne correspondent pas" @@ -153,8 +153,8 @@ msgstr "Numéro de téléphone malformé : {phone_number} !" msgid "Invalid attribute format: {attribute_pair}" msgstr "Format d'attribut non valide : {attribute_pair} !" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 -#: vibes_auth/viewsets.py:177 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:125 +#: vibes_auth/viewsets.py:144 msgid "activation link is invalid!" msgstr "Le lien d'activation n'est pas valide !" @@ -166,17 +166,17 @@ msgstr "Le compte a déjà été activé..." msgid "something went wrong: {e!s}" msgstr "Quelque chose a mal tourné : {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:93 msgid "token is invalid!" msgstr "Le jeton n'est pas valide !" #: vibes_auth/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 "" -"Les produits que cet utilisateur a consultés le plus récemment (max 48), par " -"ordre chronologique inverse." +"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:180 msgid "groups" @@ -328,7 +328,8 @@ msgstr "Jeton non valide" #: vibes_auth/serializers.py:257 msgid "no user uuid claim present in token" -msgstr "Aucune revendication d'uuid d'utilisateur n'est présente dans le jeton" +msgstr "" +"Aucune revendication d'uuid d'utilisateur n'est présente dans le jeton" #: vibes_auth/serializers.py:259 msgid "user does not exist" @@ -355,8 +356,7 @@ msgstr "Bonjour %(user_first_name)s," #: vibes_auth/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 "" "Nous avons reçu une demande de réinitialisation de votre mot de passe. " @@ -364,24 +364,19 @@ msgstr "" "dessous :" #: vibes_auth/templates/user_reset_password_email.html:95 -msgid "" -"reset\n" -" password" -msgstr "" -"Activer\n" -" compte" +msgid "reset password" +msgstr "réinitialiser le mot de passe" -#: vibes_auth/templates/user_reset_password_email.html:98 +#: vibes_auth/templates/user_reset_password_email.html:97 #: vibes_auth/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 "" -"Si le bouton ci-dessus ne fonctionne pas, veuillez copier et coller l'URL " -"suivante\n" +"Si le bouton ci-dessus ne fonctionne pas, veuillez copier et coller l'URL suivante\n" " suivante dans votre navigateur web :" -#: vibes_auth/templates/user_reset_password_email.html:101 +#: vibes_auth/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." @@ -389,12 +384,12 @@ msgstr "" "si vous n'avez pas envoyé cette demande, veuillez ignorer cet e-mail.\n" " courriel." -#: vibes_auth/templates/user_reset_password_email.html:103 +#: vibes_auth/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:109 +#: vibes_auth/templates/user_reset_password_email.html:108 #: vibes_auth/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "Tous droits réservés" @@ -410,8 +405,8 @@ msgid "" "thank you for signing up for %(project_name)s. please activate your account\n" " by clicking the button below:" msgstr "" -"Merci de vous être inscrit à %(project_name)s. Veuillez activer votre compte " -"en cliquant sur le bouton ci-dessous :" +"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 msgid "" @@ -444,14 +439,62 @@ 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:117 +#: vibes_auth/views.py:29 +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 " +"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 "" +"Représente une vue permettant d'obtenir une paire de jetons d'accès et de " +"rafraîchissement ainsi que les données de l'utilisateur. Cette vue gère le " +"processus d'authentification par jeton dans lequel les clients peuvent " +"obtenir une paire de jetons JWT (accès et rafraîchissement) à l'aide des " +"informations d'identification fournies. Elle est construite au-dessus d'une " +"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:47 +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." +msgstr "" +"Gère le rafraîchissement des jetons à des fins d'authentification. Cette " +"classe est utilisée pour fournir une fonctionnalité pour les opérations de " +"rafraîchissement des jetons dans le cadre d'un système d'authentification. " +"Elle garantit que les clients peuvent demander un jeton rafraîchi dans des " +"limites de taux définies. La vue s'appuie sur le sérialiseur associé pour " +"valider les entrées de rafraîchissement de jeton et produire les sorties " +"appropriées." + +#: vibes_auth/views.py:66 +msgid "" +"Represents a view for verifying JSON Web Tokens (JWT) using specific " +"serialization and validation logic. " +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:79 msgid "the token is invalid" msgstr "Le jeton n'est pas valide" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:43 +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." +msgstr "" +"Mise en œuvre de l'ensemble des vues de l'utilisateur.\n" +"Fournit un ensemble d'actions qui gèrent les données liées à l'utilisateur, telles que la création, la récupération, les mises à jour, la suppression et les actions personnalisées, notamment la réinitialisation du mot de passe, le téléchargement de l'avatar, l'activation du compte et la fusion des éléments récemment consultés. Cette classe étend les mixins et GenericViewSet pour une gestion robuste de l'API." + +#: vibes_auth/viewsets.py:97 msgid "password reset successfully" msgstr "Le mot de passe a été réinitialisé avec succès !" -#: vibes_auth/viewsets.py:163 +#: vibes_auth/viewsets.py:130 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/vibes_auth/locale/he_IL/LC_MESSAGES/django.mo index 62f089d2da9d683ba4d10f116fbbf0169d26a69d..84f1bddd36562401d0d641d641251808463ea0ab 100644 GIT binary patch delta 4929 zcmai#dyG_99mfwX2#ejKb<3j^IDOegm$g_*c~}alP_R4%%EK1%?#$iYOJ`@MbMNpF z>BK*1i?N1bcYtN-vaAG_F)^kjRR7Q#W8*(Iv8nO4)Szi%)WoDsG?;w{tj4!9J`-d4B(hHwTPfw#k-!H12hn78Q6Wa4AD(qJ2$ z0w00cH0$6e;10-{rU!l+?t^pSS;&9$bAIIWn{Xn$4CU~^qlX(M9fWLz}_z&s$eW-)3LcR9^RK&CJ{vccgx4}!0C37pM_Q2UtcE1f3 z*h$#L`Q}`@@B{cL5aD z4t@X?&=MvUz;am83#;j{W_Cc8BA4<7sP(gOD!c^c`Rh=TybW)Ge}paYZ%`?3Vz3x4 zfMnm~Axq{Ulm@C$=X|e){2!w83nsn-*P#r$W(3NiA47TmD=0^r@j{#fbQ{Y7_2h>4x3+PY-bxYm+|irjOvmii{NRfjJ*Yq!mDs2JbbUy zK*e09qf}jmiu?r%BSYVXD#7@X{wdULn1Z)jp959vRwz*|h4bJxxD_6POW|)J z$uQIJCkVI%&er`uKu4)Q33c$Fpd$Dy#95aoy?8JAvTzl|2h#=hg?kZV+ti`ndjqOO zSD;G!KD2N=0(cPK2cLpF;O(4mF3~|3=9kdIzd&W8nL2zEw!$*3Lklg1RS8zWU2q$` z3%&y7$lLG{sE>mM%b)_=1*Ngw5TDFpSRqLBG99vSEbIM{f$(b2q~uhMj;p2zk5*CX$wT1BOYFQ<8crh4j;*ALS= zG~mh5*3oXE>3gC2>)~88-}RCRSET(06r`RdG?L6WCplkp?vp4=<*KhlqZ^=9E}(sp zww9(0O{9IECS`A?JxNn-m6esWRkSbBo}f*lO`zRM+d#XCMuJ`G7V7+mXpKjT{X#nU zT1q}v?z2l-&5m?V~!7a&g)u9(T~zp zZ;vKH-AvO>Xrf8EpQWkZQn?<9wec)VJCCJY-&lanw8ga5>D*^r{U7u4*_S+5**`}ruycu`Qu+hVy?EQEg8Znty?q0QvHFtl{ap`Yb7 zTPzj!1X0mE^{ej{BF!Foa?V8Bq zQW+<0)a^x_9N-on@Jh*lrtF82^%~}#FN9$C1`#pYtlt^rnJjscZ*xIU5V-&4a1eS(_>OSqaI@k$b9%XgbP4u0q|(d!guJwDKgen&d*UHR`UM zQi%_Xm_(o>B0qy`U0#q!1|20Omn^ChQRHQwCi^!|^B%ua3Oe`8(Av!#*4u42iRPU}zD(s|WuAuV}rqiLyYQu7-TX%&-I#X@v044c&&}Pd;DKl(C>N#K6s?8}S zQx2m-&*%X`K9ehFU0G21-a;vBD-vJC?me7Q!cMN>Wf^8Ng>s&p;u}un9@0^C%ON9>nv@15Q z8C7Qc#Rn(dGqLy3l%J{H$BzTg_$PGRJ1eBSaSJLltbyrV%6piWs<;XyCo(>x1osoFpdXM_Benjh4Jnm;Zu3d0G))=@0zbvlV`; zxOQP|%p@Rjflf89v-za#9c7Sus936+t1;V~H3G znCa)=v3Mk_S>>$8m{SI@*00nZVU|>!r+b3M|C1G^P8QE4x#S(4Uw4&yslE4yEsN(2 zrW=mhu}-RVimKjQy>n{C5=}qO;5}9OP!1}Z(tsEm{wlHygghqTwEjaxgh3^gpSl~l z*!o;OBnBt9Q5DHm$>7Yg_{`WcIO(;ic&sWX=h-w`!2#L9TPIEzL=u8NqpdfLW3H;H zyq*Mh3f2FpguK8HmaR#-kNYf?~p zORvl6fB7HrBkZx$gGaxW5wD@kt&juhd4t=z?HmOvb;FJ=838$DL-f$93%yMTLrj^s@$yuz#7f{Rqhq~{WZbUzu`j|X| zc93X1LVp;al*xv~^c7R6PWacjpewF>1Q=~w&tVxvz_4fA6YFfowpTxof zVXMHD3hLxO7ooc!$FU^cQ)}r&-vd&v6ey|_y(2ScZ@=LecEovGmA5(}{c8}{=3V#4 o01qU+^u{TAKE~B~{9S0j_+HC_rru{~@9NFYYPtB%?03fh8(eQu8UO$Q delta 2134 zcmZY9S!_&E9LMp~_No>`jj1xDI<2jpF19Yz*4j$#OBdA|yHsL{h9Z$mM8uY0RC(|s z5zC7(i7g^TL?W>yp6scFHX`)Jl19S!cU>ZJ(*OOOdpq~sbN>Hx@431wW%g^Y)nsU4 zq95UlGsebl@f>Ig3C4sl5eHyC`mq}I`v%O%!`K(^VKTnKBK(2@%uO^V38!NZtii5& z)LJ^dxUdDg;C{@;CQQRS*d1F?b85%V_zg9&pROTp?#X!tdT|Yw;&#+HH{JigL=Wem zu#=YhgARWtmg#gt59&d^P&fKfD=x+zSb?)8T_ zf%6yc^#DJ%c)l4#M+1eh4;JHKT!1;a9W(JPYK2cwrFe_VTs-L+i+OpO| z2Q3O;gZokAyhBZ>BZ>TL<{oCDiIlt6q8_v!Q}85OcnS5OE2se;Ab;kSd;S@f!C3w| z2m`2$lp<>}Ww;kBk$q`id&$32+sXx{Jc-d$u?SbhP-`sY{5sRl!gkc}{A}@bEJaOd z1@^~A)LuD`v+xpX{GX_WWRhl0xCE8i`8J&(ov?dhCsuQQ2($4$YIAzITQ{VlRuV!D zJlb_RYGMaanY)b2>?XI?L9|PjJvUQB;a=x!%XwoIgRfg-PRP{%@P1bjZFLg&J@Mhg@8PmDq%1 z@FObanS6ChupE{01E^GAKt1?7Y5{S~T5m}b>b`soVkK&CG-5x!|EK6EbvIBqwxDYC z2~}G?B?vwoi3O8(MiX9sEM@V zIPA_vx@IP7W$Tc!%~n+Hn{f!<#(~&|8R+4l(hWoHm3q{Kw_+0>M7D*=AU(D=Suq`@ zd^IwLIfgOFg#We*daAo>sIue}#l%!X<ldWmO7hQU$=kTLQdGX&MU3!Dwp=w3_@Sp z>8ih8KQ+CNs=JzYG+)X8T9_*;naVYV&_)|hEFj_ueeEc(sUsE>6A864qMV?z&Ue7V zLbva1I{MCL(MFj^M4lz)L{mH&og?1l)W~6vm9TMHLqp?+O)DcKeWlUez78w0G*A?6 UN!ykfSs3(1YO=!7$63#;Uq}76jsO4v diff --git a/vibes_auth/locale/he_IL/LC_MESSAGES/django.po b/vibes_auth/locale/he_IL/LC_MESSAGES/django.po index 2018f821..0da0f27a 100644 --- a/vibes_auth/locale/he_IL/LC_MESSAGES/django.po +++ b/vibes_auth/locale/he_IL/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -70,7 +70,7 @@ msgstr "אמת אסימון" msgid "Verify a token (refresh or access)." msgstr "אמת אסימון (רענן או גש)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:115 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 msgid "the token is valid" msgstr "האסימון תקף" @@ -104,7 +104,7 @@ msgstr "אשר את איפוס הסיסמה של המשתמש" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:115 +#: vibes_auth/viewsets.py:82 msgid "passwords do not match" msgstr "הסיסמאות אינן תואמות" @@ -147,8 +147,8 @@ msgstr "מספר טלפון שגוי: {phone_number}!" msgid "Invalid attribute format: {attribute_pair}" msgstr "פורמט תכונה לא חוקי: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 -#: vibes_auth/viewsets.py:177 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:125 +#: vibes_auth/viewsets.py:144 msgid "activation link is invalid!" msgstr "קישור ההפעלה אינו תקף!" @@ -160,14 +160,14 @@ msgstr "החשבון כבר הופעל..." msgid "something went wrong: {e!s}" msgstr "משהו השתבש: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:93 msgid "token is invalid!" msgstr "האסימון אינו חוקי!" #: vibes_auth/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:180 @@ -342,20 +342,17 @@ msgstr "שלום %(user_first_name)s," #: vibes_auth/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 -msgid "" -"reset\n" -" password" -msgstr "הפעל חשבון" +msgid "reset password" +msgstr "איפוס סיסמה" -#: vibes_auth/templates/user_reset_password_email.html:98 +#: vibes_auth/templates/user_reset_password_email.html:97 #: vibes_auth/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" @@ -364,18 +361,18 @@ msgstr "" "אם הכפתור שלמעלה אינו פועל, אנא העתק והדבק את כתובת ה-URL הבאה בדפדפן " "האינטרנט שלך:" -#: vibes_auth/templates/user_reset_password_email.html:101 +#: vibes_auth/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:103 +#: vibes_auth/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:109 +#: vibes_auth/templates/user_reset_password_email.html:108 #: vibes_auth/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "כל הזכויות שמורות" @@ -423,14 +420,58 @@ msgstr "" "פורמט מספר טלפון לא חוקי. יש להזין את המספר בפורמט: \"+999999999\". מותר " "להזין עד 15 ספרות." -#: vibes_auth/views.py:117 +#: vibes_auth/views.py:29 +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 " +"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 " +"(גישה ורענון) באמצעות אישורים שסופקו. היא בנויה על גבי תצוגת אסימון בסיסית " +"ומבטיחה הגבלת קצב נאותה כדי להגן מפני התקפות כוח ברוט." + +#: vibes_auth/views.py:47 +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." +msgstr "" +"מטפל ברענון אסימונים למטרות אימות. מחלקה זו משמשת לספק פונקציונליות עבור " +"פעולות רענון אסימונים כחלק ממערכת אימות. היא מבטיחה שלקוחות יוכלו לבקש " +"אסימון רענן בתוך מגבלות קצב מוגדרות. התצוגה מסתמכת על הסריאלייזר המשויך כדי " +"לאמת קלטות רענון אסימונים ולייצר פלט מתאים." + +#: vibes_auth/views.py:66 +msgid "" +"Represents a view for verifying JSON Web Tokens (JWT) using specific " +"serialization and validation logic. " +msgstr "" +"מייצג תצוגה לאימות אסימוני JSON Web Tokens (JWT) באמצעות לוגיקת סידוריות " +"ואימות ספציפית." + +#: vibes_auth/views.py:79 msgid "the token is invalid" msgstr "האסימון אינו חוקי" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:43 +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." +msgstr "" +"יישום הגדרת תצוגת משתמש. מספק סט פעולות לניהול נתונים הקשורים למשתמש, כגון " +"יצירה, אחזור, עדכונים, מחיקה ופעולות מותאמות אישית, כולל איפוס סיסמה, העלאת " +"אווטאר, הפעלת חשבון ומיזוג פריטים שנצפו לאחרונה. מחלקה זו מרחיבה את mixins " +"ו-GenericViewSet לטיפול חזק ב-API." + +#: vibes_auth/viewsets.py:97 msgid "password reset successfully" msgstr "הסיסמה אופסה בהצלחה!" -#: vibes_auth/viewsets.py:163 +#: vibes_auth/viewsets.py:130 msgid "account already activated!" msgstr "כבר הפעלת את החשבון..." diff --git a/vibes_auth/locale/hi_IN/LC_MESSAGES/django.po b/vibes_auth/locale/hi_IN/LC_MESSAGES/django.po index f846b764..53a0ee2c 100644 --- a/vibes_auth/locale/hi_IN/LC_MESSAGES/django.po +++ b/vibes_auth/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" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -73,7 +73,7 @@ msgstr "" msgid "Verify a token (refresh or access)." msgstr "" -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:115 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 msgid "the token is valid" msgstr "" @@ -107,7 +107,7 @@ msgstr "" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:115 +#: vibes_auth/viewsets.py:82 msgid "passwords do not match" msgstr "" @@ -150,8 +150,8 @@ msgstr "" msgid "Invalid attribute format: {attribute_pair}" msgstr "" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 -#: vibes_auth/viewsets.py:177 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:125 +#: vibes_auth/viewsets.py:144 msgid "activation link is invalid!" msgstr "" @@ -163,7 +163,7 @@ msgstr "" msgid "something went wrong: {e!s}" msgstr "" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:93 msgid "token is invalid!" msgstr "" @@ -351,30 +351,28 @@ msgid "" msgstr "" #: vibes_auth/templates/user_reset_password_email.html:95 -msgid "" -"reset\n" -" password" +msgid "reset password" msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:98 +#: vibes_auth/templates/user_reset_password_email.html:97 #: vibes_auth/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:101 +#: vibes_auth/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:103 +#: vibes_auth/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:109 +#: vibes_auth/templates/user_reset_password_email.html:108 #: vibes_auth/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "" @@ -418,14 +416,47 @@ msgid "" "\"+999999999\". up to 15 digits allowed." msgstr "" -#: vibes_auth/views.py:117 +#: vibes_auth/views.py:29 +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 " +"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 "" + +#: vibes_auth/views.py:47 +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." +msgstr "" + +#: vibes_auth/views.py:66 +msgid "" +"Represents a view for verifying JSON Web Tokens (JWT) using specific " +"serialization and validation logic. " +msgstr "" + +#: vibes_auth/views.py:79 msgid "the token is invalid" msgstr "" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:43 +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." +msgstr "" + +#: vibes_auth/viewsets.py:97 msgid "password reset successfully" msgstr "" -#: vibes_auth/viewsets.py:163 +#: vibes_auth/viewsets.py:130 msgid "account already activated!" msgstr "" diff --git a/vibes_auth/locale/hr_HR/LC_MESSAGES/django.po b/vibes_auth/locale/hr_HR/LC_MESSAGES/django.po index c67aa034..ea19ea43 100644 --- a/vibes_auth/locale/hr_HR/LC_MESSAGES/django.po +++ b/vibes_auth/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-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -73,7 +73,7 @@ msgstr "" msgid "Verify a token (refresh or access)." msgstr "" -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:115 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 msgid "the token is valid" msgstr "" @@ -107,7 +107,7 @@ msgstr "" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:115 +#: vibes_auth/viewsets.py:82 msgid "passwords do not match" msgstr "" @@ -150,8 +150,8 @@ msgstr "" msgid "Invalid attribute format: {attribute_pair}" msgstr "" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 -#: vibes_auth/viewsets.py:177 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:125 +#: vibes_auth/viewsets.py:144 msgid "activation link is invalid!" msgstr "" @@ -163,7 +163,7 @@ msgstr "" msgid "something went wrong: {e!s}" msgstr "" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:93 msgid "token is invalid!" msgstr "" @@ -351,30 +351,28 @@ msgid "" msgstr "" #: vibes_auth/templates/user_reset_password_email.html:95 -msgid "" -"reset\n" -" password" +msgid "reset password" msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:98 +#: vibes_auth/templates/user_reset_password_email.html:97 #: vibes_auth/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:101 +#: vibes_auth/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:103 +#: vibes_auth/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:109 +#: vibes_auth/templates/user_reset_password_email.html:108 #: vibes_auth/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "" @@ -418,14 +416,47 @@ msgid "" "\"+999999999\". up to 15 digits allowed." msgstr "" -#: vibes_auth/views.py:117 +#: vibes_auth/views.py:29 +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 " +"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 "" + +#: vibes_auth/views.py:47 +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." +msgstr "" + +#: vibes_auth/views.py:66 +msgid "" +"Represents a view for verifying JSON Web Tokens (JWT) using specific " +"serialization and validation logic. " +msgstr "" + +#: vibes_auth/views.py:79 msgid "the token is invalid" msgstr "" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:43 +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." +msgstr "" + +#: vibes_auth/viewsets.py:97 msgid "password reset successfully" msgstr "" -#: vibes_auth/viewsets.py:163 +#: vibes_auth/viewsets.py:130 msgid "account already activated!" msgstr "" diff --git a/vibes_auth/locale/id_ID/LC_MESSAGES/django.mo b/vibes_auth/locale/id_ID/LC_MESSAGES/django.mo index 2fcc5e817e13edef319c2a7c461c59e130fb86d6..9d9ac1a4f6041b31aa8755490112c28f74d077bd 100644 GIT binary patch delta 4682 zcmaKudyHIF9mfy0wc8h!x~0^1+bbw-Wjj1tTiR0k@X-g97W%T>T4RJiFd@N5VxlGlqXgpTd+wdtZ2?dA z%;%i@IOq5Hp5NWG+b^37H?CW6XBuzlS$4Uo_8{kHAe(>m7n?VFDM!vv48&4P0+b*Zh&e5-xn`YC0T- z^WkR5nr09DFgya;)3o4C@FZLgpMdxta zz_pO*n+S5toPyH8x1siVYLNKf&)`Kad>-yW84S%?D1&|pW%=)*44H=&;&P~sZiS2B zQK(3zP#cXyz5g)O^N$ttpF&0OJp4F(^;+VukW6P4Svnhj3oeET-uwV6v_FCh`6W06 z{|hUq{yJ8B1bz*-R&#wWZau_&BRs+UMUFtsd;>47V*d29Tr+=wGUUxJgIgKQM@bUV zHYm%F!ga6>b&Q^bGVr&>{fkgJd>zWbzeA~hVPMP}I0SV{?u8QXDX8ZkfJ)gT@Os!i zQw*Mm^6a&O=A$T?`7(GLJPgT#ISpmtV^EPh2erX-P!W3pDis%?47&)G^S9tP;6ipi z3Lk|8v1|U#pvHyyNLINTgWBLhs142(^B=;U%zq9gzIUKDn)|W5Zd?PUo$DcgW<5V! z;8A!BJOdTs3s4UI6)w{GUxE_0abXSAh8a{SzY68?*P#shE|dnIhAZGDs2sip(UTeE z=5%-ylq0u58M+;6<9%>FY`}f+aVY(nH;M=5u&P3JBh>NO3R8F#>U6vWweT=;m8W;Y z9dJLCf!{0mV<<8H8fu+?zyUZ11?ss$D92X7t}NfoKs*3tX#)}+^G&E1pMn%K^E3D` zJYUTBa|UtVRG~IJ4duYI@G97AhZ&H5-@eE%e)x8`@~<|V{yDm=QqyM2nXFgikoeG* z{Ve}j?O`k>D-!Zbtwh&pQp0JVRzE3z zchk|U*T<)zPRxG#7w9^6DB5hNf0lk1{UBWtoI%&|-An%feVG0w`a13ZNqVmxV({r= z^5ud`jmoah^O543j%KeZ>Vsx7BWWNHWK0sUV3ee|t#wO#b?F+a@9sXj7G>09V3 zqn3^~%``fv&3}}1c5kCA-x8ymG}CK$7K5Dy@9Euu^XMDs60O?JKL0yyRBgH>h}}r+ zl6n}`g7!#|wi_-=f{}I{*etEPC=Dw%4ck%B$>L5saY-pSP!E%!(zHnuFvt>D<+Y#_ zw@1UO3r4c2q8Ds4Ovn8~e$C!KLA&E(+tm|EV3VL@<5U~l=*kU~@g#MvQm`uxFe$^x zAg$Y!okPsR0$z#TiOeNwV0+7ZTW}#53sZaws%|8VxER~i1Ve8t7`ZIoeED_rhM7Gf%JlxJw-7lG4 zkzXLNX&Q&+j9U{+1{Qbka~+)WzS!Ixg}vs|RLQV}CX9V(DiuepwM~(%UYc}?_{S@f z0P}2-8t+-lMz-cd=46~-fiTyVbuFK^yM$?V*(!Zkqol-tKrG16h)>lw$>#C@K?aYAX$*|K4F9b=^1|8P`I)_wT(YIPA*7fn5A6@vrAZ(s7k= zB&_rWksk&bSBOGqquH*7l~Q01l8fB>gn)&uPSdsU+`m(ry)Qo@WRlg=pexn;qf!Vv zPnl2XYJ}-^sI&%2R;lZ(5JnjO!$gd)&d!zN)VxQi%KqW20g7IR9YR1hFg}mFTs%_d9FUX{Zt8^Vtv%)w*z#BQ4u_A%Dtxnj~ z+N8pARY%WOrLoBp=HiA8)4uPmT)VjEOW1pD9${Hjs}shi3~w*+#Vp^RuRvzQ(!{fa zH-aFHJwy5t_8#i(1mhDKp6AOpSONc4zx~I@kG<5%ZB3b);+N7VTU@iXpp@$wzAxMU42PaYfAw@{*@0_q;6BlMqdBs!Cjg&y@cXaxHbSG}z7f zy!GoG*Hzj2{`Rvud(V{f#?n}hAhDfKUDd0{>v}THUJUHvW!qauI$~QL%2qkkaTwk% zCDd%ItRpb&Z`hbJprPd3$1QGB<29*cTNA#A7s z;*xD-#S-2STjo)oQvuA=RAx((-3#7*~ mXf$xKbnefC|Cu>a9$Gl@i$wzyrJ*%5h_Gv(+dK5~wEqF()lsVe delta 2140 zcmY+_=}S~m7{~FWjyaZNqiL3A+M<@WX{M%@X^Ul>Et;AZk|Y!@Xc&kx(L%I=bSvo( zXfb+G32j6m6@gGh3lfzr5JfN4pqkfAvH;%AJ($-%~WaS;y13LK)Y zHc=VI7Y#TV4`K=)$2jc3P<)NbsSktjD=M*m$7FsS#&rpXV=d-mBdVPn&i&`;;kpL{ zHPoL}_!xiE2}BR7qhY8YMx#cYjm=nsYw!_jBq<@rY{48&!9&50JRivP%}4(>B+@t)Bx6?22h21z6LcT z4XC9!;CKpsdZ2^KaD0Ty`~%Xq`GO>CTx1u4VVI1GI0aYWOx%S^68hm~{*}3hER;x*V(20D^3+K8QHG}@#Ou!h_ zjN~I@F@?AvOObtPy2F`&P3=3r(3E>=Jr*-@gCA>+lexY|+7tC0YEOi*#nn+NreYCl zk2E1onO4lebEvoEH7bE$&V3KlttE>0QBeX(s9jx*)3FRw@Gxp~UPb-j7HUa4aV&N@ z{y-%j%XG;c%))X^!=p&w<_;>sXQ-L+^-xgX+bTBMIZH_7&k9DZmr4^@P7xFP~ zc9upo4wXPD>OJ3z>hJ<;CNHB#d=r(>W7HDA!z2u4T}J5r&!EEWndPXFZ$yn`Gb+<& zRL6%f6HlYoyc>(r%Y5s8H8MEUg!Exf;10Zm6__-7pxxc5fgZy``ZsMDv=J<3_eHw&M$soh6m#jLz~WZ8~PIX;yM*|_zE?G z&@uc7`TgHgLQSJxMwAliL^iR2$RQ>WvkA4QGKbLNr3C&hYF`^zg(Q9U+AZW_2H{U= z_wzr<-o;=awOUW@0UbKbx_#(?i6_X_-oRkLqMDgMC6CH-LepPKX!)iRf66+o|2(cZ zsO-(88?1tvs|qETC?}Taf|50WeK@JQl1L-83|bnk>%V0+7h1wH=Syuo?XAUxPTEEE zZ*MZN|5?mZg|d|J+O_}xtmjhaf|hGOq4m~gTt(=7&>Nt0p^8{b6c8$fL=mC?8@##p zM$d5S_G>}iKA|}9%nHJK8a$~z$}={|3XhDnT0AcI_Uiijo!jbatmzT??Rz4=yR49y eDedP+e+#m_ajAa!R`0|}>sn$?`;er&0lxvMez*Vt diff --git a/vibes_auth/locale/id_ID/LC_MESSAGES/django.po b/vibes_auth/locale/id_ID/LC_MESSAGES/django.po index b61970b6..11634aec 100644 --- a/vibes_auth/locale/id_ID/LC_MESSAGES/django.po +++ b/vibes_auth/locale/id_ID/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -70,7 +70,7 @@ msgstr "Verifikasi token" msgid "Verify a token (refresh or access)." msgstr "Verifikasi token (penyegaran atau akses)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:115 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 msgid "the token is valid" msgstr "Token tersebut valid" @@ -106,7 +106,7 @@ msgstr "Mengonfirmasi pengaturan ulang kata sandi pengguna" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:115 +#: vibes_auth/viewsets.py:82 msgid "passwords do not match" msgstr "Kata sandi tidak cocok" @@ -150,8 +150,8 @@ msgstr "Nomor telepon rusak: {phone_number}!" msgid "Invalid attribute format: {attribute_pair}" msgstr "Format atribut tidak valid: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 -#: vibes_auth/viewsets.py:177 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:125 +#: vibes_auth/viewsets.py:144 msgid "activation link is invalid!" msgstr "Tautan aktivasi tidak valid!" @@ -163,14 +163,14 @@ msgstr "Akun sudah diaktifkan..." msgid "something went wrong: {e!s}" msgstr "Ada yang tidak beres: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:93 msgid "token is invalid!" msgstr "Token tidak valid!" #: vibes_auth/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 "" "Produk yang terakhir dilihat pengguna ini (maksimal 48), dalam urutan " "kronologis terbalik." @@ -348,32 +348,26 @@ msgstr "Halo %(user_first_name)s," #: vibes_auth/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 "" -"Kami telah menerima permintaan untuk mengatur ulang kata sandi Anda. Silakan " -"atur ulang kata sandi Anda dengan mengeklik tombol di bawah ini:" +"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 -msgid "" -"reset\n" -" password" -msgstr "" -"Aktifkan\n" -" akun" +msgid "reset password" +msgstr "setel ulang kata sandi" -#: vibes_auth/templates/user_reset_password_email.html:98 +#: vibes_auth/templates/user_reset_password_email.html:97 #: vibes_auth/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 "" -"Jika tombol di atas tidak berfungsi, silakan salin dan tempelkan URL " -"berikut\n" +"Jika tombol di atas tidak berfungsi, silakan salin dan tempelkan URL berikut\n" " ke dalam peramban web Anda:" -#: vibes_auth/templates/user_reset_password_email.html:101 +#: vibes_auth/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." @@ -381,12 +375,12 @@ msgstr "" "jika Anda tidak mengirimkan permintaan ini, harap abaikan\n" " email." -#: vibes_auth/templates/user_reset_password_email.html:103 +#: vibes_auth/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:109 +#: vibes_auth/templates/user_reset_password_email.html:108 #: vibes_auth/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "Semua hak cipta dilindungi undang-undang" @@ -436,14 +430,60 @@ msgstr "" "Format nomor telepon tidak valid. Nomor harus dimasukkan dalam format: " "\"+999999999\". Maksimal 15 digit." -#: vibes_auth/views.py:117 +#: vibes_auth/views.py:29 +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 " +"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 "" +"Merupakan tampilan untuk mendapatkan sepasang token akses dan refresh dan " +"data pengguna. Tampilan ini mengelola proses penanganan otentikasi berbasis " +"token di mana klien bisa mendapatkan sepasang token JWT (akses dan " +"penyegaran) menggunakan kredensial yang disediakan. Ini dibangun di atas " +"tampilan token dasar dan memastikan pembatasan laju yang tepat untuk " +"melindungi dari serangan brute force." + +#: vibes_auth/views.py:47 +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." +msgstr "" +"Menangani penyegaran token untuk tujuan otentikasi. Kelas ini digunakan " +"untuk menyediakan fungsionalitas untuk operasi penyegaran token sebagai " +"bagian dari sistem otentikasi. Kelas ini memastikan bahwa klien dapat " +"meminta penyegaran token dalam batas kecepatan yang ditentukan. Tampilan " +"bergantung pada serializer terkait untuk memvalidasi input penyegaran token " +"dan menghasilkan output yang sesuai." + +#: vibes_auth/views.py:66 +msgid "" +"Represents a view for verifying JSON Web Tokens (JWT) using specific " +"serialization and validation logic. " +msgstr "" +"Merupakan tampilan untuk memverifikasi JSON Web Token (JWT) menggunakan " +"serialisasi dan logika validasi tertentu." + +#: vibes_auth/views.py:79 msgid "the token is invalid" msgstr "Token tidak valid" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:43 +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." +msgstr "" +"Implementasi set tampilan pengguna.\n" +"Menyediakan serangkaian tindakan yang mengelola data terkait pengguna seperti pembuatan, pengambilan, pembaruan, penghapusan, dan tindakan khusus termasuk pengaturan ulang kata sandi, unggahan avatar, aktivasi akun, dan penggabungan item yang baru dilihat. Kelas ini memperluas mixin dan GenericViewSet untuk penanganan API yang kuat." + +#: vibes_auth/viewsets.py:97 msgid "password reset successfully" msgstr "Kata sandi telah berhasil diatur ulang!" -#: vibes_auth/viewsets.py:163 +#: vibes_auth/viewsets.py:130 msgid "account already activated!" msgstr "Anda telah mengaktifkan akun..." diff --git a/vibes_auth/locale/it_IT/LC_MESSAGES/django.mo b/vibes_auth/locale/it_IT/LC_MESSAGES/django.mo index 1bdffbe5da06bc386e8826bc4f99d1e494316f54..1bbaf2544a52c8c780739e84978b8bd11b3da661 100644 GIT binary patch delta 4756 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 ZsAKeod0nG_?^!?k*n+OpE9Nbk_+LNYYPkRa delta 2163 zcmZA2Sxi({9LMp$FyLSrMFdgMGUA2}Jw4a5i{CDts0iSc|;{C=|#Cg5l+z;vud-QSJ{xDSWpMNGwqSctDN11Bb! zCE+|Agmw6Z9@Ro+2p2kW0QO)G9>7dIhXe5uYD_P&KfXl`?1N{B9}lKogUR?EhOryf z&l&Igdl;bo9OE?AcU1VZ7={yv0n~$rpnjN+nsEtk#u{9KH&8RlNi^GlrKpaNAzxW9 zGB!K!UB7}eXy5g&XK=HR=i68+>L`T6ums29Qq09}%*Lar8D2vz#c!z0#gm>gOh-*% z1!@ATQTI2aGSZ1!il01>U_>{ZqcRk4pho@->D%5QgEb$cOToby!f`kW7h^GQMGfQ> zY7bmRJ?Kx|jy@K?4tr4jJVp)Z-z4&{kp~!s22$l&k9trmrs2=%!{ew2oj`SP8TqsO zUi$?qgE4$L7Bf&82_ti{3fzIqk$q_olF7eP`v(`4@+5j6iG|qIkG00hv`;c@`4odV zoGq>;D8VVX2DMlABVE~Xti%hbfdojeW}c7AbR{3!8x0XEO4)kv!Zw^wdpGKbw^1Yi zfLhamq(hrE6}2~lo(oZ#=|*K>4_4z*EW)=)7naADx~~G2naCEx$0)L_R?N-XJ5{I|)}r>*T3m>&sN;JEd2YlmP|*)Bp)zp? zwYgqlDUN0*$p+-l4)T$Yy{H$^U$_AMG&F%4&wA8Mn@~&Ah00hDs{dXbq4WQQiq<@q z4{eH3s8oeeKMdoSxD1t%cGQ|5##+3EWY_YzDGMtxh~MLnxC__edsM&8Y!vmo31{(q z+e1Y&zmB@$Z!E*uU|)yjsF^jPX4Ha=*|s2k+CfxiP9bBlo2bqD3iZ1&qxv>q4(_F0 zjvBxKZ8kNLUB8Je~@;}I(3AnFXZ5X9q>!z6(6DmQ1vAZV%Yy!cF`&4F7t0wA* zdZLifL_d}_TL0O!1`%3A6{U2RTkBhfmDIJtREqj=UrwqnA+#5?Y)Yxl_~&IA4K0oK ziOP6FFDxB#or-xp-#sqi9+&B=P;^vuD*j&@xR66kB<2uWuCIutgw{HaVD)S@v5J^U zs8kSDgkD;lVE4#R^Xl%KkGlJ!(FR*gIJXmWqiKPx{!Vi0NM~Qb=l`Lxy}he#W3!W= z5{_<5`N!vkGV-F;nWy~;;f{{=osApU4RC(V4C?0irnc6OHgno?)0~}I0cTS7)aa({ H@xK26oOZrA diff --git a/vibes_auth/locale/it_IT/LC_MESSAGES/django.po b/vibes_auth/locale/it_IT/LC_MESSAGES/django.po index 029b7e53..8edf226c 100644 --- a/vibes_auth/locale/it_IT/LC_MESSAGES/django.po +++ b/vibes_auth/locale/it_IT/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -71,7 +71,7 @@ msgstr "Verifica di un token" 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:115 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 msgid "the token is valid" msgstr "Il token è valido" @@ -107,7 +107,7 @@ msgstr "Confermare la reimpostazione della password di un utente" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:115 +#: vibes_auth/viewsets.py:82 msgid "passwords do not match" msgstr "Le password non corrispondono" @@ -150,8 +150,8 @@ msgstr "Numero di telefono malformato: {phone_number}!" msgid "Invalid attribute format: {attribute_pair}" msgstr "Formato attributo non valido: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 -#: vibes_auth/viewsets.py:177 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:125 +#: vibes_auth/viewsets.py:144 msgid "activation link is invalid!" msgstr "Il link di attivazione non è valido!" @@ -163,14 +163,14 @@ msgstr "L'account è già stato attivato..." msgid "something went wrong: {e!s}" msgstr "Qualcosa è andato storto: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:93 msgid "token is invalid!" msgstr "Il gettone non è valido!" #: vibes_auth/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 "" "I prodotti che questo utente ha visualizzato più di recente (max 48), in " "ordine cronologico inverso." @@ -351,22 +351,17 @@ msgstr "Hello %(user_first_name)s," #: vibes_auth/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 "" "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 -msgid "" -"reset\n" -" password" -msgstr "" -"Attivare\n" -" conto" +msgid "reset password" +msgstr "reimpostare la password" -#: vibes_auth/templates/user_reset_password_email.html:98 +#: vibes_auth/templates/user_reset_password_email.html:97 #: vibes_auth/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" @@ -375,7 +370,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:101 +#: vibes_auth/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." @@ -383,12 +378,12 @@ msgstr "" "se non avete inviato questa richiesta, vi preghiamo di ignorare questa\n" " e-mail." -#: vibes_auth/templates/user_reset_password_email.html:103 +#: vibes_auth/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:109 +#: vibes_auth/templates/user_reset_password_email.html:108 #: vibes_auth/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "Tutti i diritti riservati" @@ -438,14 +433,61 @@ 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:117 +#: vibes_auth/views.py:29 +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 " +"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 "" +"Rappresenta una vista per ottenere una coppia di token di accesso e di " +"aggiornamento e i dati dell'utente. Questa vista gestisce il processo di " +"gestione dell'autenticazione basata su token, in cui i client possono " +"ottenere una coppia di token JWT (accesso e aggiornamento) utilizzando le " +"credenziali fornite. È costruita sopra una vista token di base e garantisce " +"un'adeguata limitazione della velocità per proteggere dagli attacchi brute " +"force." + +#: vibes_auth/views.py:47 +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." +msgstr "" +"Gestisce l'aggiornamento dei token per l'autenticazione. Questa classe è " +"utilizzata per fornire funzionalità per le operazioni di aggiornamento dei " +"token come parte di un sistema di autenticazione. Garantisce che i client " +"possano richiedere un token aggiornato entro limiti di velocità definiti. La" +" vista si affida al serializzatore associato per convalidare gli input di " +"aggiornamento dei token e produrre output appropriati." + +#: vibes_auth/views.py:66 +msgid "" +"Represents a view for verifying JSON Web Tokens (JWT) using specific " +"serialization and validation logic. " +msgstr "" +"Rappresenta una vista per la verifica dei JSON Web Token (JWT), utilizzando " +"una specifica logica di serializzazione e validazione." + +#: vibes_auth/views.py:79 msgid "the token is invalid" msgstr "Il token non è valido" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:43 +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." +msgstr "" +"Implementazione del set di viste utente.\n" +"Fornisce un insieme di azioni che gestiscono i dati relativi all'utente, come la creazione, il recupero, gli aggiornamenti, la cancellazione e le azioni personalizzate, tra cui la reimpostazione della password, il caricamento dell'avatar, l'attivazione dell'account e l'unione degli elementi visti di recente. Questa classe estende i mixin e GenericViewSet per una gestione robusta delle API." + +#: vibes_auth/viewsets.py:97 msgid "password reset successfully" msgstr "La password è stata reimpostata con successo!" -#: vibes_auth/viewsets.py:163 +#: vibes_auth/viewsets.py:130 msgid "account already activated!" msgstr "Avete già attivato l'account..." diff --git a/vibes_auth/locale/ja_JP/LC_MESSAGES/django.mo b/vibes_auth/locale/ja_JP/LC_MESSAGES/django.mo index 458deab5c268b6a963afafce6f4af0e51c0deac7..359786123e3cdcb61ca13953f56f33ac785ded32 100644 GIT binary patch delta 5022 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 xG56psYgFGK9m(C=*22l(+76zpXWU1_ruNI zOWm6R=eQwlB(jN&Bx770ox(p-YN|0IOvCrE6ti$W>iH;^;$fVG7jXjK!ZIAhAQq+> zla38I7MpRDKJ_V?@l@=>cd!$~cpRr-FOI?6s6IVLAO45x*b8fjm&Z|V!~kx^YTScr z=NJ3?b@WqygvlD}Fd6<#BHc+wKk7r{Q7>kpMqGh=u@RfFA2pKjXk)fxC92^w$WP{H zq;KYet-p*_l>f5zK^}JazR4$}hC=u*R^T*TgAv?=)A2NFgjY~YaR)VXDNN5?%t8&I z2{nLL)bs7A8QFzeii6fJboD?lnTgns>iOSD+hz#qta0dF29CoJPQ#hF3d`|pR7cLE z_CO!%Ll1BtIxKuMcB0z3i|Wwxbmm_@_tOh?WQnx}^`Q>T#1rV?kEjp*glgaqr& z<$qB#n8=U$7(~rTH8K`ckNa^QvM1AL13%fP9QbGg^#VqAHh+UaYef9oS0wb1cSwTc5(P z^rGLIh4U#FShwI*%3WB9mv9jdqGq^~by3H@v>roN$GAU`QBQhMAGl<_ihA)jzK=N^ zfj_YZ&tZ_()WGj}2nSH-erxtfJ9|;TccM zZ>WX_toKlB_Y}2@b8<)4d^c{Pd;!&Ph(>F<%fXOA8UGMq^GlS4bU!^KCD+n!{mY|H# z-g=cj(f+HYq@9{+Yc<6+Hm}+Em{@AdbF5k>rPYLvDaYH}JG$N8Olv7WbvTGujiefwV|G)1T*y1tv_69rin^pKXdpzu2*}Jyw!Y9sefd gnG@R=ERQeCJuoWPmKTUkpIRQf7XCK=RpgQL5}&rcX#fBK diff --git a/vibes_auth/locale/ja_JP/LC_MESSAGES/django.po b/vibes_auth/locale/ja_JP/LC_MESSAGES/django.po index 9a9b7318..d569778c 100644 --- a/vibes_auth/locale/ja_JP/LC_MESSAGES/django.po +++ b/vibes_auth/locale/ja_JP/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -70,7 +70,7 @@ msgstr "トークンの検証" msgid "Verify a token (refresh or access)." msgstr "トークンを確認する(リフレッシュまたはアクセス)。" -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:115 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 msgid "the token is valid" msgstr "トークンは有効です" @@ -104,7 +104,7 @@ msgstr "ユーザーのパスワード・リセットを確認する" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:115 +#: vibes_auth/viewsets.py:82 msgid "passwords do not match" msgstr "パスワードが一致しない" @@ -114,9 +114,7 @@ msgstr "ユーザーアカウントの有効化" #: vibes_auth/docs/drf/viewsets.py:67 msgid "activation link is invalid or account already activated" -msgstr "" -"アクティベーションリンクが無効であるか、アカウントがすでにアクティベーション" -"されています。" +msgstr "アクティベーションリンクが無効であるか、アカウントがすでにアクティベーションされています。" #: vibes_auth/docs/drf/viewsets.py:72 msgid "merge client-stored recently viewed products" @@ -149,8 +147,8 @@ msgstr "電話番号が不正です:{phone_number}!" msgid "Invalid attribute format: {attribute_pair}" msgstr "無効な属性形式です:{attribute_pair}です!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 -#: vibes_auth/viewsets.py:177 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:125 +#: vibes_auth/viewsets.py:144 msgid "activation link is invalid!" msgstr "アクティベーションリンクが無効です!" @@ -162,14 +160,14 @@ msgstr "アカウントはすでに有効になっています..." msgid "something went wrong: {e!s}" msgstr "何かが間違っていた:{e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:93 msgid "token is invalid!" msgstr "トークンが無効です!" #: vibes_auth/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:180 @@ -344,32 +342,24 @@ msgstr "こんにちは %(user_first_name)s," #: vibes_auth/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 -msgid "" -"reset\n" -" password" -msgstr "" -"アクティベート\n" -" アカウント" +msgid "reset password" +msgstr "パスワードのリセット" -#: vibes_auth/templates/user_reset_password_email.html:98 +#: vibes_auth/templates/user_reset_password_email.html:97 #: vibes_auth/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:101 +#: vibes_auth/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." @@ -377,12 +367,12 @@ msgstr "" "このリクエストを送信していない場合は、このメールを無視してください。\n" " 電子メールをお送りください。" -#: vibes_auth/templates/user_reset_password_email.html:103 +#: vibes_auth/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:109 +#: vibes_auth/templates/user_reset_password_email.html:108 #: vibes_auth/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "無断複写・転載を禁じます。" @@ -397,9 +387,7 @@ msgstr "アカウントの有効化" 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 msgid "" @@ -428,18 +416,53 @@ msgstr "{config.PROJECT_NAME} | パスワードのリセット" 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:117 +#: vibes_auth/views.py:29 +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 " +"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 " +"トークンのペア(アクセスとリフレッシュ)を取得できる、トークン・ベースの認証を処理するプロセスを管理します。ベースのトークンビューの上に構築され、ブルートフォース攻撃から保護するために適切なレート制限を保証します。" + +#: vibes_auth/views.py:47 +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." +msgstr "" +"認証目的のトークンのリフレッシュを処理します。このクラスは、認証システムの一部としてトークンのリフレッシュ操作の機能を提供するために使用されます。このクラスは、クライアントがリフレッシュされたトークンを定義されたレート制限内で要求できるようにします。ビューは、トークン更新の入力を検証して適切な出力を行うために、" +" 関連するシリアライザに依存します。" + +#: vibes_auth/views.py:66 +msgid "" +"Represents a view for verifying JSON Web Tokens (JWT) using specific " +"serialization and validation logic. " +msgstr "特定のシリアライズと検証ロジックを使用して JSON ウェブトークン (JWT) を検証するビューを表します。" + +#: vibes_auth/views.py:79 msgid "the token is invalid" msgstr "トークンが無効" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:43 +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." +msgstr "" +"ユーザービューセットの実装。\n" +"作成、取得、更新、削除、およびパスワードリセット、アバターアップロード、アカウントの有効化、最近見たアイテムのマージなどのカスタムアクションなど、ユーザ関連のデータを管理するアクションのセットを提供します。このクラスは、堅牢なAPIハンドリングのためにミキシンとGenericViewSetを拡張します。" + +#: vibes_auth/viewsets.py:97 msgid "password reset successfully" msgstr "パスワードのリセットに成功しました!" -#: vibes_auth/viewsets.py:163 +#: vibes_auth/viewsets.py:130 msgid "account already activated!" msgstr "あなたはすでにアカウントを有効にしています..." diff --git a/vibes_auth/locale/kk_KZ/LC_MESSAGES/django.po b/vibes_auth/locale/kk_KZ/LC_MESSAGES/django.po index f846b764..53a0ee2c 100644 --- a/vibes_auth/locale/kk_KZ/LC_MESSAGES/django.po +++ b/vibes_auth/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" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -73,7 +73,7 @@ msgstr "" msgid "Verify a token (refresh or access)." msgstr "" -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:115 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 msgid "the token is valid" msgstr "" @@ -107,7 +107,7 @@ msgstr "" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:115 +#: vibes_auth/viewsets.py:82 msgid "passwords do not match" msgstr "" @@ -150,8 +150,8 @@ msgstr "" msgid "Invalid attribute format: {attribute_pair}" msgstr "" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 -#: vibes_auth/viewsets.py:177 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:125 +#: vibes_auth/viewsets.py:144 msgid "activation link is invalid!" msgstr "" @@ -163,7 +163,7 @@ msgstr "" msgid "something went wrong: {e!s}" msgstr "" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:93 msgid "token is invalid!" msgstr "" @@ -351,30 +351,28 @@ msgid "" msgstr "" #: vibes_auth/templates/user_reset_password_email.html:95 -msgid "" -"reset\n" -" password" +msgid "reset password" msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:98 +#: vibes_auth/templates/user_reset_password_email.html:97 #: vibes_auth/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:101 +#: vibes_auth/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:103 +#: vibes_auth/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:109 +#: vibes_auth/templates/user_reset_password_email.html:108 #: vibes_auth/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "" @@ -418,14 +416,47 @@ msgid "" "\"+999999999\". up to 15 digits allowed." msgstr "" -#: vibes_auth/views.py:117 +#: vibes_auth/views.py:29 +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 " +"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 "" + +#: vibes_auth/views.py:47 +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." +msgstr "" + +#: vibes_auth/views.py:66 +msgid "" +"Represents a view for verifying JSON Web Tokens (JWT) using specific " +"serialization and validation logic. " +msgstr "" + +#: vibes_auth/views.py:79 msgid "the token is invalid" msgstr "" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:43 +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." +msgstr "" + +#: vibes_auth/viewsets.py:97 msgid "password reset successfully" msgstr "" -#: vibes_auth/viewsets.py:163 +#: vibes_auth/viewsets.py:130 msgid "account already activated!" msgstr "" diff --git a/vibes_auth/locale/ko_KR/LC_MESSAGES/django.mo b/vibes_auth/locale/ko_KR/LC_MESSAGES/django.mo index 9e1f77d3da3f37d3a209cbc75137c1b79ae94449..9a2f72eae52dbfddd8a19fba53bdc3452e306c05 100644 GIT binary patch delta 4841 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 delta 2156 zcmZA1Uu+ar6vy#HnWekZh5iF{E3{C+{-cOnXf4oE3Y79sE0#i`q6jfD5wV*<(ga5Z zBk%%bX`q2OLI@9#G)tfoqXEJL62PPniV8*uA`L|nMH5i;`I463-I3L(P257{(VZ95yS#2o_=m#&9L-`UF#zeg&S&oT?=i~peGF--f70P&X-p@CQPhocP=Ab}R$Pr+u^C&i7qybo46}D|CTieg z$WL|}nVX$==PzR|$KSd0d0gyqf15-{1C`*@SdEi$IhJ7u7U5CU3co^?;wCC{!${98 zjG-3Lf?7Zu>iYGljBG}gVyE*6`nupOozd8fnt2~Gw*8Jw);wmHi&P8!J40fT1-KZO#LJjaG z^0Djg_!m?L)A(@`=AklDhpfdK@Dp5t>`S|mP5zbIJDgC;GZ}p>R^ppOs5Qnp{*-A~ zV?U}SMQm}|j1~A17T{^rF8>Bs;ayaw>PfH8x1%z<4OODOJ{_gxfID#Bnehn zz=rqf)X>onJ5d9jz9Z+!H%d3MuLt$R?r`VJ03COX)f>1kswBUTW~KsB*|m`P}y8bT#hn?q=WCwbcgE3e{SObmDnJlcbzM{lE$c78PtT2=)h0++eGv_Y%=c ztRX6isl>nSHPwF}N4%(l)aeJ+Q0Z5jMd&$Rq61ph0KtAy_Z8v=LS^6;5wSk~kv(=&LQPJ-Ge_P9mQep}*pU_6q)3Th<<_!^4&)NuW z&bfqI1F?wE#?)r^h#9UQylChLugDy1B9hl4WvMaI3F*n~QDc*PqF#8@8;Qi0ciYz| ziif7iZbccCs05A92BPi7Uzl08Ljsj}j7?;jk& B#svTX diff --git a/vibes_auth/locale/ko_KR/LC_MESSAGES/django.po b/vibes_auth/locale/ko_KR/LC_MESSAGES/django.po index 134f98e5..5feef920 100644 --- a/vibes_auth/locale/ko_KR/LC_MESSAGES/django.po +++ b/vibes_auth/locale/ko_KR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -70,7 +70,7 @@ msgstr "토큰 확인" msgid "Verify a token (refresh or access)." msgstr "토큰을 확인합니다(새로 고침 또는 액세스)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:115 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 msgid "the token is valid" msgstr "토큰이 유효합니다." @@ -104,7 +104,7 @@ msgstr "사용자의 비밀번호 재설정 확인" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:115 +#: vibes_auth/viewsets.py:82 msgid "passwords do not match" msgstr "비밀번호가 일치하지 않습니다." @@ -147,8 +147,8 @@ msgstr "잘못된 전화 번호입니다: {phone_number}!" msgid "Invalid attribute format: {attribute_pair}" msgstr "잘못된 속성 형식입니다: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 -#: vibes_auth/viewsets.py:177 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:125 +#: vibes_auth/viewsets.py:144 msgid "activation link is invalid!" msgstr "활성화 링크가 유효하지 않습니다!" @@ -160,14 +160,14 @@ msgstr "계정이 이미 활성화되었습니다..." msgid "something went wrong: {e!s}" msgstr "문제가 발생했습니다: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:93 msgid "token is invalid!" msgstr "토큰이 유효하지 않습니다!" #: vibes_auth/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:180 @@ -342,22 +342,15 @@ msgstr "안녕하세요 %(user_first_name)s," #: vibes_auth/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 -msgid "" -"reset\n" -" password" -msgstr "" -"활성화\n" -" 계정" +msgid "reset password" +msgstr "비밀번호 재설정" -#: vibes_auth/templates/user_reset_password_email.html:98 +#: vibes_auth/templates/user_reset_password_email.html:97 #: vibes_auth/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" @@ -366,7 +359,7 @@ msgstr "" "위의 버튼이 작동하지 않는 경우 다음 URL을 복사하여 브라우저에 붙여넣으세요.\n" " 를 웹 브라우저에 복사하여 붙여넣으세요:" -#: vibes_auth/templates/user_reset_password_email.html:101 +#: vibes_auth/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." @@ -374,12 +367,12 @@ msgstr "" "이 요청을 보내지 않으셨다면 이\n" " 이메일을 무시하세요." -#: vibes_auth/templates/user_reset_password_email.html:103 +#: vibes_auth/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:109 +#: vibes_auth/templates/user_reset_password_email.html:108 #: vibes_auth/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "모든 권리 보유" @@ -394,9 +387,7 @@ msgstr "계정 활성화" 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 msgid "" @@ -426,17 +417,55 @@ 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:117 +#: vibes_auth/views.py:29 +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 " +"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 토큰(액세스 및 새로 고침)을 얻을 수 있는 토큰 기반 인증을 처리하는 프로세스를 관리합니다. 기본 토큰 보기 위에 " +"구축되며 무차별 암호 대입 공격으로부터 보호하기 위해 적절한 속도 제한을 보장합니다." + +#: vibes_auth/views.py:47 +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." +msgstr "" +"인증 목적으로 토큰을 새로 고치는 작업을 처리합니다. 이 클래스는 인증 시스템의 일부로 토큰 새로 고침 작업을 위한 기능을 제공하는 데 " +"사용됩니다. 클라이언트가 정의된 속도 제한 내에서 토큰 새로 고침을 요청할 수 있도록 합니다. 이 보기는 연결된 직렬화기에 의존하여 토큰" +" 새로 고침 입력의 유효성을 검사하고 적절한 출력을 생성합니다." + +#: vibes_auth/views.py:66 +msgid "" +"Represents a view for verifying JSON Web Tokens (JWT) using specific " +"serialization and validation logic. " +msgstr "특정 직렬화 및 유효성 검사 로직을 사용하여 JSON 웹 토큰(JWT)을 확인하기 위한 보기를 나타냅니다." + +#: vibes_auth/views.py:79 msgid "the token is invalid" msgstr "토큰이 유효하지 않습니다." -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:43 +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." +msgstr "" +"사용자 보기 세트 구현.\n" +"생성, 검색, 업데이트, 삭제, 비밀번호 재설정, 아바타 업로드, 계정 활성화, 최근에 본 항목 병합 등의 사용자 관련 데이터와 사용자 지정 작업을 관리하는 일련의 작업을 제공합니다. 이 클래스는 강력한 API 처리를 위해 믹스인 및 GenericViewSet을 확장합니다." + +#: vibes_auth/viewsets.py:97 msgid "password reset successfully" msgstr "비밀번호가 성공적으로 재설정되었습니다!" -#: vibes_auth/viewsets.py:163 +#: vibes_auth/viewsets.py:130 msgid "account already activated!" msgstr "이미 계정을 활성화하셨습니다..." diff --git a/vibes_auth/locale/nl_NL/LC_MESSAGES/django.mo b/vibes_auth/locale/nl_NL/LC_MESSAGES/django.mo index 944b60d4e3e2a790c782071db9117592d83b151c..7ec828df4575f89cb8c503b194f1b7da771ac3f7 100644 GIT binary patch delta 4778 zcma)-dyExV9mfv>WuZ`NMIOS!fz|?bS^J=c7HWZFc@zpQ6r_SWckbDHhrM^^c4qFq zENOGC39&VrNH#Urm{hcBP!cte;440&k|r9BO-Hk+}-1O}HFN@28;x z`vRPeee-Pj;G6I+_CL@A_-{A^4&bg7&4Y{KAiN&l28ZA=xCVX-@`R0r@}0;yG?S1ozSzEX`RchrSQx`LCcHnTHqR3MfN2!A0;W zRHkw$Lt{|ie+KIPFO~cAP#L@g-wR(}NdA?Q8EBEGbKoc85=g_FGf=7h8dS<(fP?T2 z7}E8N(RKztLRc!ra>Du%`+MQz?C0`w#{NmTj{R&J<~q0m>U13Ku~^Sy4DxHf&L2ha zOSlof3iaYrTbz!KP|dgt%E5zBDLn>tzYDj+Pe3{R98{_P0#);WK?OX0r7<_d-t2O* z8Iom_Kq)*0mHMaQ9q=WnE?=~&cz!dK!aY!q9Dq`M6zcd@pdvmF_1))T2VQ_9@CG`R z1JX06S@gK^WhhTqkso#YjZmjx3sh-#LpgK=D$>uv8So55k$D!%@o&L3@Oj9ud4oUi zhbt(!O1BScel+1?S$>Lz6rYER=&w*+{W?@Bre9w)(IU8v{aR?@Jx~T~kSdwSpdvp5 z)pTEla{PNxP4_dX9{B?tg;%depCW%m3-}bornv~|FY^*?!q;FORtQTa`Z-j0zXFfy zIh4Ws*A~x1cq{uc$fxETa5nr6r18xwPmv`dy2{zMn1$18PTPB-iT;O=vt0! zKq}gBg~(n+PH0{z8@h&(oBXQifvx4b5A}mCHMAUm$akLZa9vTr*GgsBgltCcL=@cz zk==+gGz+;KQ9~U-K8)OgsBGJidyspP2ay3}CZb;0hr9z(AAA(KP4&MO>0gIfY%ez- zE2)}YiI7!uq`aru(7)7#{cA?KP($u7*9W0R?nfR#wjjE8A-!XMS&UO1JJs(lM4cZX zG^?48a5{Yx9fcYkI@@YGT{_?W>jULtXUY5e51@|s?Z}Su9>?SjkmfQR#8VAsV_EK+!**A0ajA`yHm?Uc zmLuH413pRJ!)=%4Ht4JOz7T@#MmaIrsvC)7Zl*!*Y$Iw$xeuV{Y$tMEzCu}M36EHD zCriSJH>);tX+#7kU8>kREUVHmIg}`FwQ+<*D*9?WL`92Li*I>3Y3F)AY<9(7ferFJ zjVf&(jV~Qo(tE(Q2+GG26z(YPHJ9fqMnGz!)Tbs49l4g7vRM5x=@$7sk=e!2eTvyelK2Lh2X^)ud@E?WobC?&Ljb`53J{DYO>3P;C9WE2mWAts)i?$VBc!T&o39 zOdC{EC6_F!5_ukkqh$ZTr@7;LX*4n>MY|8|yU!kW6??E~{x!tc4jHHqARGdyR1aYCph+H%`d*ZZSVHg-`mU(j_l zrtd?Q)n@ImuCqcSy{aMlfKGCFFl5^;b!Ik1t2dmE)sXL$u$|>e^Rj^`4jb*NFAH7X zP136Esrho=?qDNDPa_GcY{M{V$K({(cyd``>Ow+kjQRNJnTW%g*``ZtXq_|^+=<-9 zRR!g2Gde+Kyhl4+%%KVoaqbQf{>UPlJxwb3X}9j*b-6Q#FWfS4?X2-r^EVB&N>{(~ zo%u6+hg{lmDKD2Js*_BaQLdVhfheZehV6ED(%DhXC}$OI&bgvHqEVWzIcY|@2$jxO zA~mV?TI;xnEt%6T=1g%~h@+ulQFUq6xrTq@cw^%6aei!RZtXTWt^5VOkad2JCX_U_6?TEQt4mV|vL#WY* zk>T-gFBn##a)+Oy7WQC|Pn0rI`$Mo|?WH%Vm45U*EyOV0Cv@wSmP({&Y zamaRYi%d?cop+Tvv95HhtQ`^cd`N4`FeU`y;P9d3WX7CvMZt^zw2|{8HQ;~egdwVK zoLGLv&j=fyvyH=B^jYTkx1!OdiuYSh-OzV&V)GP3)*q^VCy`5?an4{fp!!2}L~$60 zbeOs>^*5lJKWh6&K!bbyvv%Qye=hj@ YtnpQYjcIat+4#p-4qiAnIDf`}002~WFaQ7m delta 2134 zcmZA2eP~r>9Ki9%dEHBSbI!YLn{#XCmU}Um(|NDuTAIscFQ$8GO-Cgql`9%8lJW$S zp+PNfLjKWz#t0#ZL7@aG;Xh?j3=FBvf-D28KkOC3zTdNBNDuqn&vWiQ_nhDJ{C?-| zSl{8*(W$c3zQ7nF<`J3cAw)Q{kQYXAaR`lAf(x(>E3qFve+1ib3@h*$mgBeBj=y6S zwv>cWitBI|4&asE>QN?hcw-c=z`fXn`>+O&;#K$^n$vGsgny!mT}*7`%dd#A9Q2Eo=!$drJoaE8PNFMmni;}&T!~)z zZRDfyK9XDbD0%-=?BMvT})7qNUiA_!dTZZj&vex30?RS_9A^5PL;9$Ztah};g*+j^=fR#ho(_$v;>Dp zy9LkSb(o>W?fxvbVK3S%FQW+_#1;4qbJ$k(d(Vcw`b9e}C;`7Ppv)CrD7cF99CQHx@XVJ&2 z16^?!`o*Vl6vyykEaEP%Xc%qc2u<`NQudJMOLl)Xy7dicLd($|7(q%Jg`G^i&@SY= z;dQhm@1R@#CEkD+(9$&1SxwlDY=*{(qx~**(NvL@(j_IbtoblCWf}2zS773*m0rTbB<@ z?9CmNH;R9wZ|A@j7Z6Jc{s+aihWMw}vMeDM6DF7?9JK_w#;b&Q)vol?=wNa;F+dCw z?S#E_X>5t>&ygK#%^XxCtd3_>jddUM^~v#yM1Pzd_Yyvamc^Q8h|9+&4(PkkpS)=~ zE%hCQzqIQjUVLmE*7)Xl7Q&tAQ}O>X#2a>h3vnC4LlIhujfCCrBWw?BChjM0B^+Hu zH{t&cdxl3ZEKla~4-NCU+kIp<5c!iO%@cFebw&BI^6LCpI#vAS10y5PJn_`l{L)P4 g#IDTWsr>w^mWh&@qT>9sHOum)4UbRkZ)i^a3%x6}hX4Qo diff --git a/vibes_auth/locale/nl_NL/LC_MESSAGES/django.po b/vibes_auth/locale/nl_NL/LC_MESSAGES/django.po index b290f902..abe949d8 100644 --- a/vibes_auth/locale/nl_NL/LC_MESSAGES/django.po +++ b/vibes_auth/locale/nl_NL/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -70,7 +70,7 @@ msgstr "Een token verifiëren" 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:115 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 msgid "the token is valid" msgstr "The token is valid" @@ -106,7 +106,7 @@ msgstr "Bevestig het resetten van het wachtwoord van een gebruiker" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:115 +#: vibes_auth/viewsets.py:82 msgid "passwords do not match" msgstr "Wachtwoorden komen niet overeen" @@ -151,8 +151,8 @@ msgstr "Misvormd telefoonnummer: {phone_number}!" msgid "Invalid attribute format: {attribute_pair}" msgstr "Ongeldig attribuutformaat: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 -#: vibes_auth/viewsets.py:177 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:125 +#: vibes_auth/viewsets.py:144 msgid "activation link is invalid!" msgstr "Activeringslink is ongeldig!" @@ -164,14 +164,14 @@ msgstr "Account is al geactiveerd..." msgid "something went wrong: {e!s}" msgstr "Er ging iets mis: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:93 msgid "token is invalid!" msgstr "Token is invalid!" #: vibes_auth/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." @@ -348,22 +348,17 @@ msgstr "Hallo %(user_first_name)s," #: vibes_auth/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 -msgid "" -"reset\n" -" password" -msgstr "" -"Activeer\n" -" account" +msgid "reset password" +msgstr "wachtwoord opnieuw instellen" -#: vibes_auth/templates/user_reset_password_email.html:98 +#: vibes_auth/templates/user_reset_password_email.html:97 #: vibes_auth/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" @@ -372,7 +367,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:101 +#: vibes_auth/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." @@ -380,12 +375,12 @@ msgstr "" "als u dit verzoek niet hebt verzonden, negeer dan alstublieft deze\n" " e-mail." -#: vibes_auth/templates/user_reset_password_email.html:103 +#: vibes_auth/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:109 +#: vibes_auth/templates/user_reset_password_email.html:108 #: vibes_auth/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "Alle rechten voorbehouden" @@ -401,8 +396,8 @@ 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 msgid "" @@ -435,14 +430,60 @@ msgstr "" "Ongeldig formaat telefoonnummer. Het nummer moet worden ingevoerd in de " "indeling: \"+999999999\". Maximaal 15 cijfers toegestaan." -#: vibes_auth/views.py:117 +#: vibes_auth/views.py:29 +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 " +"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 "" +"Vertegenwoordigt een weergave voor het verkrijgen van een paar toegangs- en " +"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." + +#: vibes_auth/views.py:47 +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." +msgstr "" +"Ververst tokens voor authenticatiedoeleinden. Deze klasse wordt gebruikt om " +"functionaliteit te bieden voor het verversen van tokens als onderdeel van " +"een authenticatiesysteem. Het zorgt ervoor dat clients een vernieuwd token " +"kunnen aanvragen binnen gedefinieerde snelheidslimieten. De view vertrouwt " +"op de bijbehorende serializer om inputs voor het verversen van tokens te " +"valideren en de juiste output te produceren." + +#: vibes_auth/views.py:66 +msgid "" +"Represents a view for verifying JSON Web Tokens (JWT) using specific " +"serialization and validation logic. " +msgstr "" +"Vertegenwoordigt een weergave voor het verifiëren van JSON Web Tokens (JWT) " +"met behulp van specifieke serialisatie- en validatielogica." + +#: vibes_auth/views.py:79 msgid "the token is invalid" msgstr "Het token is ongeldig" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:43 +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." +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." + +#: vibes_auth/viewsets.py:97 msgid "password reset successfully" msgstr "Wachtwoord is succesvol gereset!" -#: vibes_auth/viewsets.py:163 +#: vibes_auth/viewsets.py:130 msgid "account already activated!" msgstr "Je hebt de account al geactiveerd..." diff --git a/vibes_auth/locale/no_NO/LC_MESSAGES/django.mo b/vibes_auth/locale/no_NO/LC_MESSAGES/django.mo index 4c542c232ffe3f9d826114925af2c5681a21138b..43ec4ea325b497fb797f2f9072b7887d181bb100 100644 GIT binary patch delta 4728 zcmZvedyG_99mj9wu?xCg53)H`?1&Rk~Z&T#LY zSytQJzZz{t6GLi@kJu`hMonxaX=;om5sA@+R6~Q!R%)|M!>w4xo(!{Jq35o<%iK3^t}2Fo_7?!pZ&#oo>yf* zXTIl!?2o+N^R}{o72d&q$&lyW3^ziZcL1(~30wxBhl}A);XR(0d9Sm$g$wVzkqJw1 z7~T&#)7uRf!h;Z*UJKp{kHHo2B;?Qg89&nb0vv!Bp%ngI!66QP7yAux0o)0fGZ{ zhJ6*zL%#Q&;>HVb6Z@BS173l%;UMbjpdq*vE{E@f>tP8Vh9mH4$SdAys8F1P^4y#7 zgYYtxLHBV{25g3zUf9Nhd)`5)P&5mE4(k3%coTdPO7rtjmiz|31O6E)&7 z;W~)-y$Ev4djcv4z62%bdyDY@lPrGDg^$7AWCly`c_@W`0;Tz{pcENG3vmUMpu6A_ zcnHcof91A3G?(ED_P1yJ-o;`Ilx7K( z1;^ng_$-vbH=wHH3PiRyY;pxxLb-A^RFdw3>){x@9exoiR4+iq{AH->I0sk5>^zGy ziz`qr8|5v9U^9Fe?uXL+x#IdOP|5fQr~}`EI`BWme%8D5{d}l%7eH0V7Wf%>2-e~2 z5RYfx7E<*H7xqAD`s0GXfC|BDP)YX&+z9^)RUISm$z#3-$}{&sCD(SSkX7JX_<1Nr z&OmwiZ_vO25@1+C8ey@43mc$ZcoZtDABXbDQw6^c72_X3jP));^2qxyBr4uQ5=4rw zh2*QZ3Cf`TP#z87DtHX;gWrOSk?;MBgk*~%(Qrzg)|PJdiErg%f1W;;5jH4pNGfc zB`8Z9xC7(830Q*PfbzsI;SI1q##l%Z4H<$RZtTj7BzOBqxg;etBuv>UuV_#$`dD}s zZ5RP_H&bDfr)0H;l$PZh7)^hlIS9QQ_wkDj^c?xW7;=$@TqLWMY-&FDGuJU6V(w&; zxXvpNK$YfR=Es>zHhFU^^TSM6J#dgYhe@`3k22rJl(#;~Trc@|GyCHJiwBF%rwS^` zDH3 z<0fr4Y?PSsc5M7^TDMUe27Vg0Bh%@|opxfAve{P;6B9K3BrzBQ|`ShZ%n z8wGm7Z-(ilJII~cmt)!;8~d4_NQ|GDjvuEI>_^uMOeT}mw#sHlYEY?*k|wSDDUw6f zLIYlj?a{7HQseiJce-GLnFv#CGF3YsMqG^j)S7143R7o5W=$`&6THP?iNQQTaRT`C(JY@j5=Ku!I84Q+6_3O!>Yr(JlyW4x?lEoMD76Nr)eBk zy4*T(%iyx?G26i?XN#Y!Be&OVnkpDRt_fr3njoaO{gd8HnubTj8fAS+Bvqbufd4_f6A>wB}pg} zqH2QJR+UJ86WDV9~4}+-LwoYQRkRklIU?nd|&)wnZtU~B_SX-+!($eEDhOiathHBOz;6zs9oMpYSQ zO)ES`WSmCZY(!B72dKNfm_NRRWRKew^fX)c?3l{T^69mMcMP0(a(Lrlr%?6VKN_Bs zZ9jV|s-`3+HPLZ4$1=z7^;5CvS;{n3Z&XXT(mH#pSvC*aD6*!ZmPKnIOB$+-uxZYo z5-RkmZq!JQnoQ|owx6?!pSF3|>4L#7Z&lzk4a8r_ulXE|hh6zr)mvyEa@$bEf!#E}Uq12D zqSDp=<${8MUanYQkiH&PcGBaem)=cAb#~uy1<7fVi*$jB^G=qBtT>Ug{c0izV{%~Chv!!jd4DiIi8;;HK4{(E&$scWgV;8sPQf)T30!i-M7Y*KdZ?%yA%U0nNLE4-=N zn~E{cjk|om;=E0&Q1V8}L%5pms849gxc^_Yn3ixhE}4W*={~af+qyXDzl6Nr^6#Ub z3Zn)+Q)xstRD5~{bRSPF==gK_Zy~OhPOM(KI4hY(J4)L=;gUm%jw0!|=>AFb>?vK~ zooKR2G_hJ`k$)Og&ojGIH`TvUaldnN&b5tmM&BHjQwG%-5mG+=`$ew~oOtur{X^4L Mwx{o2{-;_012ime>;M1& delta 2134 zcmZA2duWwq9Ki8s+tF?1$?a@j+SIM3n{L`g*Or^NGqriGOwZAlQ^Z9vx({Ypae}B! z5{#37gd%A~m;Yp>6#XM5QIHAipRz3!rIJejnPEls{l0q#(u2Q!p7-6m=kohK@9U+^ z!H(Q;DsdptwiDBc%Ayc*IAJ_LXeA{fG-4^0oSFjlWKo|CJY$JbM&UFS;_z0$P zH#*Lz@$Y}YB-g*=IJf#Y9sY$vmNO2M=tLFhA6B6|Zo?NagPU;>-AU7g5FW>Nbl?w= zUxgFM+QMh?{jYH;*JtDV)jXVF{xFM<12y7QY{Pooh;wl_&c^r99iBl;aURXwc+#^7 ztI!Q>MmNxnKHr08q#rHCYq9TQ&IeA?nT&(z$}b^fhpWh9LxR;+VmUTqJ>G^Ja3Q{k zF60yR44g(M`Wauw1cmRyz34a>(FOfkM*dxSl2y2nHL+XKiJrhI_!cJc7&_5$bbzmr ze_<%TzKmwDkYCQiYBVEhWG|r;U&SnPF2it&{F~aJxM9l67=1dn;?4qUjV|P4mOT$I zps7!B#624=cqeAjiT9ujJc8ExBXqnG^z>JdW;ZkwUBIFo9aFUuJ%l^31s}s(@Ex=i zr_h=XqNo3RyaUgprKn(3_7FPI6lZWP_M!_v9^b!!R3%(P$IF$nYzHhuZ%mD^YtVrk z(9@sA=kRHK6n{fgnx){q_%OQAGqJ}A%o&PES1nFMcd{7o#`S0hUqKJ;8)!xj#~wpV`8k@|%Q)HhznssQwVaKv zbQMyrunFB!FPhS4aSrZ7YkmSZ;V;NoVF`t{)?NIFp2vQ!_u)27%ottJPUM`1eq6@< zVGkV-&6n{5L+Auo(3RG)I!m(x&A?iue4!`yd33>VB5MgBq8a-FE$vk_!~fvxII(tg zqlYl(Yw|uFKQyP2XTo1tfcD2)hR*%Oy+oF1CfbO5h<3t~Eg>Awwv2F0&%pJ~5?dbI zOzWSfvx>NjC?u>o{|7~>gy>W2EV@rIq0j<5S zre|$6^GAmaMqdj%wDp8F`+wWcjV8i(dL_Y25uKHd=o#^AS4VUc4-p-Nt&>>)Z9@Gd=kQmFa<(Dz7E- a#nnv%-^>^+&ZleU=a1HB29ga!MgIX_JGJEi diff --git a/vibes_auth/locale/no_NO/LC_MESSAGES/django.po b/vibes_auth/locale/no_NO/LC_MESSAGES/django.po index bc536e04..0276e543 100644 --- a/vibes_auth/locale/no_NO/LC_MESSAGES/django.po +++ b/vibes_auth/locale/no_NO/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -70,7 +70,7 @@ msgstr "Bekreft et token" 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:115 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 msgid "the token is valid" msgstr "Tokenet er gyldig" @@ -106,7 +106,7 @@ msgstr "Bekreft tilbakestilling av en brukers passord" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:115 +#: vibes_auth/viewsets.py:82 msgid "passwords do not match" msgstr "Passordene stemmer ikke overens" @@ -149,8 +149,8 @@ msgstr "Feilaktig telefonnummer: {phone_number}!" msgid "Invalid attribute format: {attribute_pair}" msgstr "Ugyldig attributtformat: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 -#: vibes_auth/viewsets.py:177 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:125 +#: vibes_auth/viewsets.py:144 msgid "activation link is invalid!" msgstr "Aktiveringslenken er ugyldig!" @@ -162,14 +162,14 @@ msgstr "Kontoen er allerede aktivert..." msgid "something went wrong: {e!s}" msgstr "Noe gikk galt: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:93 msgid "token is invalid!" msgstr "Tokenet er ugyldig!" #: vibes_auth/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." @@ -347,22 +347,17 @@ msgstr "Hallo %(user_first_name)s," #: vibes_auth/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 -msgid "" -"reset\n" -" password" -msgstr "" -"Aktiver\n" -" konto" +msgid "reset password" +msgstr "tilbakestille passord" -#: vibes_auth/templates/user_reset_password_email.html:98 +#: vibes_auth/templates/user_reset_password_email.html:97 #: vibes_auth/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" @@ -371,7 +366,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:101 +#: vibes_auth/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." @@ -379,12 +374,12 @@ msgstr "" "hvis du ikke har sendt denne forespørselen, vennligst ignorer denne\n" " e-post." -#: vibes_auth/templates/user_reset_password_email.html:103 +#: vibes_auth/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:109 +#: vibes_auth/templates/user_reset_password_email.html:108 #: vibes_auth/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "Alle rettigheter forbeholdt" @@ -434,14 +429,60 @@ msgstr "" "Ugyldig telefonnummerformat. Nummeret må legges inn i formatet: " "\"+999999999\". Opptil 15 sifre er tillatt." -#: vibes_auth/views.py:117 +#: vibes_auth/views.py:29 +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 " +"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." + +#: vibes_auth/views.py:47 +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." +msgstr "" +"Håndterer oppdatering av tokens for autentiseringsformål. Denne klassen " +"brukes til å tilby funksjonalitet for tokenoppdatering som en del av et " +"autentiseringssystem. Den sørger for at klienter kan be om et oppdatert " +"token innenfor definerte hastighetsgrenser. Visningen er avhengig av den " +"tilknyttede serialisatoren for å validere tokenoppdateringsinnganger og " +"produsere passende utganger." + +#: vibes_auth/views.py:66 +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." + +#: vibes_auth/views.py:79 msgid "the token is invalid" msgstr "Tokenet er ugyldig" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:43 +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." +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." + +#: vibes_auth/viewsets.py:97 msgid "password reset successfully" msgstr "Passordet har blitt tilbakestilt!" -#: vibes_auth/viewsets.py:163 +#: vibes_auth/viewsets.py:130 msgid "account already activated!" msgstr "Du har allerede aktivert kontoen..." diff --git a/vibes_auth/locale/pl_PL/LC_MESSAGES/django.mo b/vibes_auth/locale/pl_PL/LC_MESSAGES/django.mo index abcd4c0840d72cc93650e91af4bc44d240f8b102..1f11975b3ef1e2ae426f22417a089ce51f6cc74d 100644 GIT binary patch delta 4833 zcmZveYph&V6~_Z1sHh-`QEGT3^%1x?d?HFPQTb3Gi5iU`Fd=G4K!5*z&P*S0a`*i9 zd9A(Hf33aF-F@|Uwhs?1U-0#SBV>G-vHF-G_&mJ+SbjLV6G6~CDhTd|XLJ7A;vk4P zU$`U)V$NsZ69nrx{|!8y^AnZ^!H3`)D0{cU)i8%A!6)Dc;S2DhAQ%R}V{$SV-gg`W zHsCUNImBjg1N;EI4YFp?f#<+o@KpFX(pGE^kLhwp`dgDc=0 zP?9g^j>*v&I>r;yurf{aQ*}Man8@CU_JtGuX)dq$!ab< z0<~RUh068oa03iX<>^MKNKz<;?uW|ZH=v~a7L>!!!)xFR@HDuX)%>o4dj4{#V!j&6 z;o)W`a^QX_X`X?S_E&H%d=pN>HCR*Rvyf~A4?-Dy1WLj0)qJYvPoUm=7HW6=6{@cs zMP=RvzX++NVen5T85jNw6A&Ct_$I`5@IQDiJdMOk z>Mc-8+*hB!1W)1oKTwVxe}-yj7zFE?Y~sQWsOo;A=1-xd`z2ILUV#Sw37!d$=7%x} z&W2KC9n|~Vp^7kq$H84t%I<*|!pESB{kL#A>j&qrsv=wu<>7Xyoc7=>+zS)ssQ89Apzc~w>GKrH(E;Rhw+k4yPQEYz#k_ZN@#zm-IaY7OHu z#^ns{koAmB3>DiV#-|wC5jQjLU|hgZJ*;C~!?=!d3uA(@kRio3Gmd5;Q1DsCgLoqzf zY)rfXV~Zk-r%G<^J$d4!;Z3efP(Bu0xg*(UTu~?)7HQ(lOB03;t+h;@tWlbD3H`G( zbAx-fPK}SOV-q{$C3AAlTR`TfvM%#QIz*;(r>xR`zd)oCe8hKJ#t+Y^Vqr6K~GI218RRmh1 za3QYE*f^mKrZS0(ipoS$*sz8A?=JIBH_YPcz6@=;dGn2Co0~FQtKwfpe4`-pt_$Po zI2;#5wHf4GT@>0I?Q|v%Crxk*xv0F)5iIU>+pa_8{+-DsTdEyGCb3qSp{m|*mAbI2 zl=+07OJVvtR9a15hE44ig!HBw)B%;`@StJJt|~KcQ0i@`ZPoCV5|(+9cE$_DN!TtU zpBAdTmu8U}s`v_?-pLvncG{_pI1R(JOwbh9xHC4GxsXuWeIFk+6SFyU({b4hRu5|m zZdc)wNI^N%iFc71@6oj`VN->-vhQvt{OJ=Y_AH&kPjl6ljpNFk+;_pm>5KO6UbbeU zTf6$*=a(%UZl22LA1G(aSvFQQ|8OsM^ZRWQ*ERFvzMhFv6S}r$C3mwyzi{m&<{37| zb+jvMq$Nh?_xJViz;;~^3p}8%)e2|TwUTuH;V?E)+g7bAoQ<{MaJ(XBR3}=824Xvw z9g|MwLse4zj%*VRf85$m*zH-pdTS^{p zq4&5d)E-yWULWDKI}1Ms{h^V+VO&y%Ih!vWRGICP%wBAxaNy=YH)%HM(?)w4OqG%3 z?c<7E)Qfy@(};I_B&Sx;J0O|r!bYKSGT1aT5*N!<{P2*{8P!4>HZ#1CfBGU6wq-l9 zDf$S1NL#Jj>EWqkFZEp3pGJG_ma!0dO!HLnG^-w4HC7fF_QwKH+Erz{S>Hxm@wigG zG3v{Id@;<2blg$HS!)K!V|!&4z2EkS7QvFy&a0m@mJJ>^d@gBy2Pn~_Lo zhVq3cdg$AsnbU{;_HlGU8Whb!S;+fL^}g+?Lvt1T{T{}xX{CHtFr0_B?VnK{6-liB z!v=1qt+wK~Fdqedf{=%8!F#?BUY4bUod0du7QR9Ev2;XxR{zUW{_ROf3|pq!F*NGQ Zeg9bTqlvvQue@XVJ00J5<|zk``9Fipycqxh delta 2134 zcmZA2Z)lZO9KiA8b~iWm<~C=`U3F`QZ&k9qZy;P zg-9vB7~OoObRtV2x zJ9^{ykgvjrNN!;wI)4GzaQt<2KEcH?o*(Mzc%vlVfo<4;-I&4=Y{XOO2){(9;ybi* z#gyj(tVRdWiw1IvC6;3n8*mA3 z#a4U;P2^*A4Saz<=o%iv7!#ktBj|m;M-%$HjQX2-oGeUaW8_ZsLHn@^-^Li8K_B!1 zdV}-GU$_(<|AJPqfG_JYfmS4qj3sQq*KixMF2m&t>ThX(;DjYF3D2s`ep$T-LBR_yvZWPzzIdrOSpaW~-B612{=>4+&bS%-6kMaMN9q`X7BNym|!bmt0l-azat>rLpYUFZ4I4A38%@C zw-BzSskYnsU&oOP#KmM|n!j~%G_dqw{es(L@5xa;TL\n" "Language-Team: BRITISH ENGLISH \n" @@ -52,7 +52,8 @@ msgstr "Uzyskanie pary tokenów" #: vibes_auth/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 msgid "refresh a token pair" @@ -70,7 +71,7 @@ msgstr "Weryfikacja tokena" 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:115 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 msgid "the token is valid" msgstr "Token jest ważny" @@ -106,7 +107,7 @@ msgstr "Potwierdzenie zresetowania hasła użytkownika" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:115 +#: vibes_auth/viewsets.py:82 msgid "passwords do not match" msgstr "Hasła nie są zgodne" @@ -151,8 +152,8 @@ msgstr "Zniekształcony numer telefonu: {phone_number}!" msgid "Invalid attribute format: {attribute_pair}" msgstr "Nieprawidłowy format atrybutu: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 -#: vibes_auth/viewsets.py:177 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:125 +#: vibes_auth/viewsets.py:144 msgid "activation link is invalid!" msgstr "Link aktywacyjny jest nieprawidłowy!" @@ -164,14 +165,14 @@ msgstr "Konto zostało już aktywowane..." msgid "something went wrong: {e!s}" msgstr "Coś poszło nie tak: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:93 msgid "token is invalid!" msgstr "Token jest nieprawidłowy!" #: vibes_auth/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." @@ -348,22 +349,17 @@ msgstr "Witaj %(user_first_name)s," #: vibes_auth/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 -msgid "" -"reset\n" -" password" -msgstr "" -"Aktywować\n" -" konto" +msgid "reset password" +msgstr "resetowanie hasła" -#: vibes_auth/templates/user_reset_password_email.html:98 +#: vibes_auth/templates/user_reset_password_email.html:97 #: vibes_auth/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" @@ -372,7 +368,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:101 +#: vibes_auth/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." @@ -380,12 +376,12 @@ msgstr "" "jeśli nie wysłałeś tej prośby, zignoruj tę wiadomość.\n" " email." -#: vibes_auth/templates/user_reset_password_email.html:103 +#: vibes_auth/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:109 +#: vibes_auth/templates/user_reset_password_email.html:108 #: vibes_auth/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "Wszelkie prawa zastrzeżone" @@ -432,17 +428,63 @@ 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:117 +#: vibes_auth/views.py:29 +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 " +"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 " +"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:47 +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." +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 " +"systemu uwierzytelniania. Zapewnia, że klienci mogą zażądać odświeżenia " +"tokena w ramach określonych limitów szybkości. Widok opiera się na " +"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:66 +msgid "" +"Represents a view for verifying JSON Web Tokens (JWT) using specific " +"serialization and validation logic. " +msgstr "" +"Reprezentuje widok do weryfikacji tokenów sieciowych JSON (JWT) przy użyciu " +"określonej logiki serializacji i walidacji." + +#: vibes_auth/views.py:79 msgid "the token is invalid" msgstr "Token jest nieprawidłowy" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:43 +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." +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." + +#: vibes_auth/viewsets.py:97 msgid "password reset successfully" msgstr "Hasło zostało pomyślnie zresetowane!" -#: vibes_auth/viewsets.py:163 +#: vibes_auth/viewsets.py:130 msgid "account already activated!" msgstr "Konto zostało już aktywowane..." diff --git a/vibes_auth/locale/pt_BR/LC_MESSAGES/django.mo b/vibes_auth/locale/pt_BR/LC_MESSAGES/django.mo index 74240dfb4ea2679e9534a92a10b0f98aa9bd2989..280de48dc6b1f328413375106f5fcf95e0ccb3e1 100644 GIT binary patch delta 4839 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 delta 2134 zcmZA1Z)jCz9Ki8s+f_H+)$Kaj-Wbt~iW(&Sg%J`7MYJFyTNsogv?3@mqxyc2XCOV?-~Bx2+;gAvJip&_ z&e`0tb@{1O;%K1lAg&^+NVHsY7Em)0%==EdRf=6&Ep2S7?1GeHH zScBQJ5Gt?-7vK=i^Hw|QEab#qoQsDsgGaFzCvZNVLFe=v&cO@l#Qu$K;?I>F_hSkl z!*1Mfdzugkq*M3zO)L7NUQwMpxX1Phmgia1vcfraXklu^k=w zb>ydT0-0O*BtHK+c5(b&e7=T@6Wl-4({Z3COk*21U>~l+{kRfeLs$4ET8bah%*`e} z9axPnAcrnsJ9_;vnvuO|DGtTHig_=XptBe!(V3q|#twfXlMM-GSA~_>gblbFd+}C0 zh)(2vbPs%i-sl`YiwO!pgon{_enKboR|WZZ=1FGZL^j86LvOSjm*9(-z_-yGy^9WT z3i*WZNcaJ=UNZ=|c}xz0QtAEO?0vpkCK+EKg~ z-$7^o4O-Km(GvZF?v0DF4W!A`_96EQBe)q4U^9M(TpBK+6G<@($ICa+vDR5MRqgQ) z-I(Ec6I#zz1)mS_^$ zZs8nm@cF+)$C`E5UcMlQW?&aO;7jOkoj?aZg?z%9*rK}2duTbjvQBKphtX6YLvMH- zNALuik-FvN-y1a3F*O5dCJtZ`dXt&fPv;(D3o$^n5N*UAL_6VA)Jgc**={4;picbC z#!U5M(cEIlir@DPK)ch3KUNp^jj#(W3<6I>JoOv@SYZ zi6LSeVOGrSOncD!ujgn1!IKd+su68G4>|~Ic$Wt>H=@m#lkHyOM#8d~V(WWlyN?4i z>Jwu#%Wld$3HMqL_m3VIh-$Ug4$X~ajsD+ua3Vuwi4BAs(@oh&xchyCec@~;9w2Tf zY#RyR2kwtFksxl4`_Y?^e)OEWlY5E6w`Hrwmn2urDWn!HD;!BCN=F|W8{7B9p5elp is_yY;sxBr9*_!6@!P@@P!bi2ug*O_vjL%zny5v7YezYY3 diff --git a/vibes_auth/locale/pt_BR/LC_MESSAGES/django.po b/vibes_auth/locale/pt_BR/LC_MESSAGES/django.po index 85303be7..ba391915 100644 --- a/vibes_auth/locale/pt_BR/LC_MESSAGES/django.po +++ b/vibes_auth/locale/pt_BR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -70,7 +70,7 @@ msgstr "Verificar um token" 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:115 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 msgid "the token is valid" msgstr "O token é válido" @@ -105,7 +105,7 @@ msgstr "Confirmar a redefinição de senha de um usuário" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:115 +#: vibes_auth/viewsets.py:82 msgid "passwords do not match" msgstr "As senhas não correspondem" @@ -148,8 +148,8 @@ msgstr "Número de telefone malformado: {phone_number}!" msgid "Invalid attribute format: {attribute_pair}" msgstr "Formato de atributo inválido: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 -#: vibes_auth/viewsets.py:177 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:125 +#: vibes_auth/viewsets.py:144 msgid "activation link is invalid!" msgstr "O link de ativação é inválido!" @@ -161,17 +161,17 @@ msgstr "A conta já foi ativada..." msgid "something went wrong: {e!s}" msgstr "Algo deu errado: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:93 msgid "token is invalid!" msgstr "O token é inválido!" #: vibes_auth/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:180 msgid "groups" @@ -346,22 +346,17 @@ msgstr "Olá %(user_first_name)s," #: vibes_auth/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 -msgid "" -"reset\n" -" password" -msgstr "" -"Ativar\n" -" conta" +msgid "reset password" +msgstr "redefinir senha" -#: vibes_auth/templates/user_reset_password_email.html:98 +#: vibes_auth/templates/user_reset_password_email.html:97 #: vibes_auth/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" @@ -370,7 +365,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:101 +#: vibes_auth/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." @@ -378,12 +373,12 @@ msgstr "" "Se você não enviou essa solicitação, ignore este\n" " e-mail." -#: vibes_auth/templates/user_reset_password_email.html:103 +#: vibes_auth/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:109 +#: vibes_auth/templates/user_reset_password_email.html:108 #: vibes_auth/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "Todos os direitos reservados" @@ -433,14 +428,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:117 +#: vibes_auth/views.py:29 +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 " +"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 " +"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:47 +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." +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 " +"exibição depende do serializador associado para validar as entradas de " +"atualização de token e produzir saídas apropriadas." + +#: vibes_auth/views.py:66 +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." + +#: vibes_auth/views.py:79 msgid "the token is invalid" msgstr "O token é inválido" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:43 +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." +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." + +#: vibes_auth/viewsets.py:97 msgid "password reset successfully" msgstr "A senha foi redefinida com sucesso!" -#: vibes_auth/viewsets.py:163 +#: vibes_auth/viewsets.py:130 msgid "account already activated!" msgstr "Você já ativou a conta..." diff --git a/vibes_auth/locale/ro_RO/LC_MESSAGES/django.mo b/vibes_auth/locale/ro_RO/LC_MESSAGES/django.mo index 36c5bd7e6beb4f0352b7d80af1345e66a4cb42b1..05b1ea795786478199cc6a8293b1fb80c9fb448f 100644 GIT binary patch delta 4964 zcma);dyExV9mh{wC<~NADMGP4PQ?nf%T-z|6xveykcXu_mV(q$Iy?95?!dh>xARyY zvEH<#R*n3j=pV`-RcTCvrZJ_Gny5{LMl>OnpoumH6O(EhQ)8lOj1l$oJu|b*t~GJ8 z=YGz-e&_f2p5N^82j6(KdvWH3uNsb!F^{qQDq}tmAG(?!j!us;LsuB{B>XVvZ%#I* z$@#=7#zdU&oodW|oc|Io;(X3DW8M!}L)qH_m%|Lsg)hSQ!Joht#&pfEncT>Q8P_sk zFPskVhS)Tl;Pr49WKGkCx55K(A$$SyXU^~=pD(~k@J%R(e_wGLMz7<1C7cO2!nLe# zb~BNo=c@-^gZO05!-?>BPz%3Ro&N=Dp?9I)y95>Se7t`Ou7o?`Dab8zEvvTS0w}v* zgbM8Ia5C$gZ&x?I2iI`^W8HxNf)ij5?#j?KcmtddKLqc9y>K^N0>1!x#hipH#p_U+ zdmG*bFF^&gii-;1Uf9(O>zHuQ?1CyqtK#RN?!N$M!&6Y6pM#3zH}D$xM>q@q4Jzf6 zIk^)qhh*QxkXz;{C=GlGYMt-QBLB}a`6(A3g_}?YQ}ZH}LqCG@{1;G;Ov4LtA=E<4 z;2iiERHkyMg$_c!e+26JZ&c?mLuK%Fcr&~>oBS&!6R;vrr@-gnT!`S!H=$B{0xIPf z;C%QG7^3qe1iLv7nHl;6$GP4-iER>v1^UFjmaX& zpV`3=!J7S0kspElnV<8cNd5#B!6m2~&c3Mr*Z>LE9EQ)s z<8TPx|3NS6uK6w#rTm9bo<2ZfRElkI3Jjn`*Mf@d08}PUK`nR|s&AZwa_}NlDgF-S zz|GWcIot!~$XDP!@D+dFHRi8OHge(m#bpW~hgWkx2qmT%YJq1UWi&@2NiZ)%WMF;; zRg!n09KIUCsD#%+Il36Kgt-&0f=|G0@EDxI`sUA?z<)zMIOCSGrYqoQINt`_@I2Il zYbdPLy%Wmuy-<;VAF70JKt=ush)>4eS~|8K>is@Qwaq@*B}?WA6B#%O@xh#fE8x3u zDr}HX8D0gShFhT`y8!k6TTt&!MJVco%i$HUK6WzEf;t{&$SEBUvA&;7;rEjarA>#j z@ll4hiVme+4)yDVBV=r1T*Hv~lnosX#xg%E9a>w>YalUys0<{No>Q*xFRJD`R7*v* znxQQy(MdoLGBz?)`$>%Z8S@!^j88GNos{1D7$0YRg7FBWhcS^MQEz5k$sl27591E4 z|1m~=>|pXhb@D_-rCw#A8fI5@ZDmD4rK=C^2ptOh%X$%Q-olZDD;_JUY zh?^~!+0+fBE*pyCL7NQNJlW^s%nl@}4T^lo#d#D4d6dMqQ>2|Fb6LY~ABr*?wt_6P zOp44kdChjxWH@R%J5a=-UIbR(Km|_6CGw9-sRz> z$aTMAHpJe54e~sV`U`Fyy|HI*cbn@Fl#eAS-BH>HU7o8L0jY^npPDdqTG5?&Lk`_!zA`DXo^dP;7PGl~XD) zTEsE}Es?tr*9L(0DX*6(9hBo$Xe%S7G{dRjP{w2g$ z2a$DL7!5?>h#<<%Am=JkXm7NV!6^*P+U4vmzYQULld*R4+O}Ne&NsZPAf3vtFd$a@tnCUMXRbMv9$Q5;Qpt!=#AGDXwv6#9-<|LTMfJ@u8WB&6(M@ zO9!z!rYX1sxr>_$%Gq{wfXaA}*14EX74Bf)^%4HS9K@a`{rG9uZrL!R%*M&vdlpSP z`t0=8J)O$c<3E@_vAd3ajx#Pebmp*}E3`cWGGh0-JPBgg!rtkZVw;6Yr)Wvj5*@WW zb2yEnhFu%FAj^4KtqWk!*&>f*MwdH0o)#1*8Ng59$Ic#OMK!V@r(;wP_y)$EB92;) ztW%8BFSU_k);V*SOd`F@T?)04Q6dj9av!(vZfHQJhpCS8b zEQ9NG-BFioQ%OGwK}J-)h@DnImP3(3u2kR?tDa=#fwEj@iNfeopjPR{QrBKV7ZOOf zR>EgCNJ63-=YNtYON93@;MzS(pXxi+NIWmQsW_?T9mElrxI#BF(tL(#UNH(%};eT}N(WE4!dM4R*17|(Ol$5=iGXgI=IN~!KMp`vp(YI$w!aq}q zP&u{%${(kiDVymQm}6I}se8ed&4GVVSbvOsyz=-z#0^RuJUeQv*MWhiWa6#MHm8-3pVW*XTt1Xg}3Y88^4y5k<;KO3U< z9|d(P*&Fv+SX6h}I&-X4eI_sz=u^=+dgP`#C;vI?e9xB`^vx(^B6PLcq!papwqWao F{{Tp=GZq4-G*g z2%e;t5FsKwNGyqX5LAdQ9xM-tC8_W4x2?!=FVlooEc89@Gi-#bnfq3vnZsV+B4ytt7jh*$Nzv8u%3QmR&^VW;eY1cW^Y< zkG=arKJ4T9mO)1Yg|I6YVkVYhKdi$nJc(N2eN-u4pfVRjdPZO}Y5^6f1uQ^)z6O<% zT2v`^dmhJ#K5(5*7kq%4`8#B6`+`i?e9SHpJ7Neku|Lkl0^E$6$YsOmJ!1KdXb?5TJC0hPfh-ps%t zDkDY6T5KZj#5u^mwB`izuhhQbhEg8S=qZ?wi(64^R0%FIZSC^csFelT;_l~g5ZC3H zhP#kIJH?9@cFnv06E)Ek(yR&QqDoW}p`*<;9W|q6I1t?@*iS6XxL$ z&s@?(*A}B5P=^c9!5sXADorYH>iq&h5SQXQ zMx(sej7sTy)I@7pjZ(cGb*dcHo;r+L*lAQI-XhP7*mpYmVQ4|duz2#Tl!veYD^RK5 zhnmPO9EGpF>kNK{O1UmZWv~IYvPPtOb`&-KIqZQqu@}C?B%S|Q3dy1@6*c2ws2Yw# z&9o9TaXA*^epJox;4IXrdO#WKb2Z3XY!7b26Sx91m_1c62ib0R21|LqU8SRy$EE$Q zVLEE%h1dtzq9%3-HNZ*iiPuoO{5k6TvE0nUo|uoNsMK#o?Tx*-1&^Z^)`v7iG(Z6z zeX$xf^Ig~qnb+S|PHzS=jhI8IB+AAFVmP7ik0Lal+89D*^b`L!O;o=rYQ0teB043+ z5F(1uuI7J`d%VE?snv!YKbYls9*!l{CK5U&`oE#guA@HG z>$|&_zI$$UWM&f1qqu%eNr7ImPD1Atry=0;uU-@muV1yM#>q=8YTB0g&F54GbDGYj TzVSQhX?f1Utg@z-tQo#vk%PFf diff --git a/vibes_auth/locale/ro_RO/LC_MESSAGES/django.po b/vibes_auth/locale/ro_RO/LC_MESSAGES/django.po index c43a8b69..580678b5 100644 --- a/vibes_auth/locale/ro_RO/LC_MESSAGES/django.po +++ b/vibes_auth/locale/ro_RO/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -71,7 +71,7 @@ msgstr "Verificarea unui jeton" 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:115 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 msgid "the token is valid" msgstr "Jetonul este valid" @@ -107,7 +107,7 @@ msgstr "Confirmați resetarea parolei unui utilizator" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:115 +#: vibes_auth/viewsets.py:82 msgid "passwords do not match" msgstr "Parolele nu se potrivesc" @@ -151,8 +151,8 @@ msgstr "Număr de telefon malformat: {phone_number}!" msgid "Invalid attribute format: {attribute_pair}" msgstr "Format de atribut invalid: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 -#: vibes_auth/viewsets.py:177 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:125 +#: vibes_auth/viewsets.py:144 msgid "activation link is invalid!" msgstr "Linkul de activare este invalid!" @@ -164,14 +164,14 @@ msgstr "Contul a fost deja activat..." msgid "something went wrong: {e!s}" msgstr "Ceva nu a mers bine: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:93 msgid "token is invalid!" msgstr "Token-ul nu este valabil!" #: vibes_auth/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ă." @@ -350,32 +350,26 @@ msgstr "Bună ziua %(user_first_name)s," #: vibes_auth/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 -msgid "" -"reset\n" -" password" -msgstr "" -"Activați\n" -" cont" +msgid "reset password" +msgstr "resetați parola" -#: vibes_auth/templates/user_reset_password_email.html:98 +#: vibes_auth/templates/user_reset_password_email.html:97 #: vibes_auth/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:101 +#: vibes_auth/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." @@ -383,12 +377,12 @@ 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:103 +#: vibes_auth/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:109 +#: vibes_auth/templates/user_reset_password_email.html:108 #: vibes_auth/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "Toate drepturile rezervate" @@ -438,14 +432,62 @@ 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:117 +#: vibes_auth/views.py:29 +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 " +"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 "" +"Reprezintă o vizualizare pentru obținerea unei perechi de jetoane de acces " +"și de actualizare și a datelor utilizatorului. Această vizualizare " +"gestionează procesul de gestionare a autentificării bazate pe jetoane, în " +"care clienții pot obține o pereche de jetoane JWT (acces și reîmprospătare) " +"utilizând acreditările furnizate. Aceasta este construită pe o vizualizare " +"de bază a jetoanelor și asigură limitarea corespunzătoare a ratei pentru a " +"proteja împotriva atacurilor prin forță brută." + +#: vibes_auth/views.py:47 +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." +msgstr "" +"Gestionează actualizarea jetoanelor în scopul autentificării. Această clasă " +"este utilizată pentru a oferi funcționalitate pentru operațiunile de " +"reîmprospătare a jetoanelor ca parte a unui sistem de autentificare. Se " +"asigură că clienții pot solicita un jeton actualizat în limitele de viteză " +"definite. Vizualizarea se bazează pe serializatorul asociat pentru a valida " +"intrările de reîmprospătare a jetoanelor și pentru a produce ieșirile " +"corespunzătoare." + +#: vibes_auth/views.py:66 +msgid "" +"Represents a view for verifying JSON Web Tokens (JWT) using specific " +"serialization and validation logic. " +msgstr "" +"Reprezintă o vizualizare pentru verificarea JSON Web Tokens (JWT) utilizând " +"o serializare specifică și o logică de validare." + +#: vibes_auth/views.py:79 msgid "the token is invalid" msgstr "Jetonul nu este valabil" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:43 +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." +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." + +#: vibes_auth/viewsets.py:97 msgid "password reset successfully" msgstr "Parola a fost resetată cu succes!" -#: vibes_auth/viewsets.py:163 +#: vibes_auth/viewsets.py:130 msgid "account already activated!" msgstr "Ați activat deja contul..." diff --git a/vibes_auth/locale/ru_RU/LC_MESSAGES/django.mo b/vibes_auth/locale/ru_RU/LC_MESSAGES/django.mo index 4d3253d2a9ff3ca41e1aecfb1b4c49959ca9b99e..4a6e0a62287b469da76bd978108c0b2191f927df 100644 GIT binary patch delta 5818 zcma);dvG099mfx)r4QPoQ2LNZ4_2TpX%MM^AXpw!S}D}Fv=*s$bMK~ExViUocW+Bo z*ruVBN1@|n_{TqZj3A&R6OyJ))1;k2Q3rKqcTg0@!N=erGYA3aW-T5$;LbcZ$5<|uIe;nI!-d?Zn%{Bo70Uc zGM_TTn1K16ry6q|^WVTl%;(KA=2P%0D0v&LMDOl*G7%~>pbVm1S| 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 diff --git a/vibes_auth/locale/ru_RU/LC_MESSAGES/django.po b/vibes_auth/locale/ru_RU/LC_MESSAGES/django.po index f1890c1d..039a9368 100644 --- a/vibes_auth/locale/ru_RU/LC_MESSAGES/django.po +++ b/vibes_auth/locale/ru_RU/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -70,7 +70,7 @@ msgstr "Проверка токена" msgid "Verify a token (refresh or access)." msgstr "Проверка токена (обновление или доступ)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:115 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 msgid "the token is valid" msgstr "Токен действителен" @@ -106,7 +106,7 @@ msgstr "Подтверждение сброса пароля пользоват #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:115 +#: vibes_auth/viewsets.py:82 msgid "passwords do not match" msgstr "Пароли не совпадают" @@ -120,7 +120,8 @@ msgstr "Ссылка на активацию недействительна ил #: vibes_auth/docs/drf/viewsets.py:72 msgid "merge client-stored recently viewed products" -msgstr "Объедините недавно просмотренные продукты, хранящиеся в памяти клиента" +msgstr "" +"Объедините недавно просмотренные продукты, хранящиеся в памяти клиента" #: vibes_auth/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." @@ -151,8 +152,8 @@ msgstr "Некорректный номер телефона: {phone_number}!" msgid "Invalid attribute format: {attribute_pair}" msgstr "Недопустимый формат атрибута: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 -#: vibes_auth/viewsets.py:177 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:125 +#: vibes_auth/viewsets.py:144 msgid "activation link is invalid!" msgstr "Ссылка на активацию недействительна!" @@ -164,17 +165,17 @@ msgstr "Аккаунт уже активирован..." msgid "something went wrong: {e!s}" msgstr "Что-то пошло не так: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:93 msgid "token is invalid!" msgstr "Токен недействителен!" #: vibes_auth/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:180 msgid "groups" @@ -348,44 +349,38 @@ msgstr "Привет %(user_first_name)s," #: vibes_auth/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 -msgid "" -"reset\n" -" password" -msgstr "" -"Активировать\n" -" аккаунт" +msgid "reset password" +msgstr "сброс пароля" -#: vibes_auth/templates/user_reset_password_email.html:98 +#: vibes_auth/templates/user_reset_password_email.html:97 #: vibes_auth/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:101 +#: vibes_auth/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:103 +#: vibes_auth/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:109 +#: vibes_auth/templates/user_reset_password_email.html:108 #: vibes_auth/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "Все права защищены" @@ -435,14 +430,60 @@ msgstr "" "Неверный формат телефонного номера. Номер должен быть введен в формате: " "\"+999999999\". Допускается до 15 цифр." -#: vibes_auth/views.py:117 +#: vibes_auth/views.py:29 +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 " +"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-" +"токенов (доступ и обновление), используя предоставленные учетные данные. Оно" +" построено поверх базового представления токенов и обеспечивает надлежащее " +"ограничение скорости для защиты от атак грубой силы." + +#: vibes_auth/views.py:47 +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." +msgstr "" +"Обрабатывает обновление токенов для целей аутентификации. Этот класс " +"используется для обеспечения функциональности операций обновления токенов в " +"рамках системы аутентификации. Он гарантирует, что клиенты могут запросить " +"обновленный токен в рамках установленных ограничений скорости. Представление" +" полагается на ассоциированный сериализатор для проверки входных данных " +"обновления маркера и создания соответствующих выходных данных." + +#: vibes_auth/views.py:66 +msgid "" +"Represents a view for verifying JSON Web Tokens (JWT) using specific " +"serialization and validation logic. " +msgstr "" +"Представляет собой представление для проверки JSON Web Tokens (JWT) с " +"использованием специальной логики сериализации и валидации." + +#: vibes_auth/views.py:79 msgid "the token is invalid" msgstr "Токен недействителен" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:43 +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." +msgstr "" +"Реализация набора пользовательских представлений.\n" +"Предоставляет набор действий, которые управляют пользовательскими данными, такими как создание, получение, обновление, удаление, а также пользовательскими действиями, включая сброс пароля, загрузку аватара, активацию учетной записи и объединение недавно просмотренных элементов. Этот класс расширяет миксины и GenericViewSet для надежной работы с API." + +#: vibes_auth/viewsets.py:97 msgid "password reset successfully" msgstr "Пароль был успешно сброшен!" -#: vibes_auth/viewsets.py:163 +#: vibes_auth/viewsets.py:130 msgid "account already activated!" msgstr "Вы уже активировали учетную запись..." diff --git a/vibes_auth/locale/sv_SE/LC_MESSAGES/django.mo b/vibes_auth/locale/sv_SE/LC_MESSAGES/django.mo index 23d7afacfced561fd0b053898df2979c0a619b6c..ca17463c3ea37b7f94ba4f12843b0184107e3502 100644 GIT binary patch delta 4733 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -70,7 +70,7 @@ msgstr "Verifiera en token" 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:115 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 msgid "the token is valid" msgstr "Token är giltig" @@ -106,7 +106,7 @@ msgstr "Bekräfta återställning av en användares lösenord" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:115 +#: vibes_auth/viewsets.py:82 msgid "passwords do not match" msgstr "Lösenorden stämmer inte överens" @@ -150,8 +150,8 @@ msgstr "Missbildat telefonnummer: {phone_number}!" msgid "Invalid attribute format: {attribute_pair}" msgstr "Ogiltigt attributformat: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 -#: vibes_auth/viewsets.py:177 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:125 +#: vibes_auth/viewsets.py:144 msgid "activation link is invalid!" msgstr "Aktiveringslänken är ogiltig!" @@ -163,14 +163,14 @@ msgstr "Kontot har redan aktiverats..." msgid "something went wrong: {e!s}" msgstr "Något gick fel: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:93 msgid "token is invalid!" msgstr "Token är ogiltig!" #: vibes_auth/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." @@ -347,22 +347,17 @@ msgstr "Hej %(user_first_name)s," #: vibes_auth/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 -msgid "" -"reset\n" -" password" -msgstr "" -"Aktivera\n" -" konto" +msgid "reset password" +msgstr "återställa lösenord" -#: vibes_auth/templates/user_reset_password_email.html:98 +#: vibes_auth/templates/user_reset_password_email.html:97 #: vibes_auth/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" @@ -371,7 +366,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:101 +#: vibes_auth/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." @@ -379,12 +374,12 @@ msgstr "" "om du inte har skickat denna begäran, vänligen ignorera detta\n" " e-post." -#: vibes_auth/templates/user_reset_password_email.html:103 +#: vibes_auth/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:109 +#: vibes_auth/templates/user_reset_password_email.html:108 #: vibes_auth/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "Alla rättigheter förbehålls" @@ -400,8 +395,8 @@ 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 msgid "" @@ -434,14 +429,60 @@ msgstr "" "Ogiltigt format på telefonnumret. Numret måste anges i formatet: " "\"+999999999\". Upp till 15 siffror är tillåtna." -#: vibes_auth/views.py:117 +#: vibes_auth/views.py:29 +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 " +"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 " +"säkerställer korrekt hastighetsbegränsning för att skydda mot brute force-" +"attacker." + +#: vibes_auth/views.py:47 +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." +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 " +"tokenuppdatering och producera lämpliga utmatningar." + +#: vibes_auth/views.py:66 +msgid "" +"Represents a view for verifying JSON Web Tokens (JWT) using specific " +"serialization and validation logic. " +msgstr "" +"Representerar en vy för verifiering av JSON Web Tokens (JWT) med hjälp av " +"specifik serialiserings- och valideringslogik." + +#: vibes_auth/views.py:79 msgid "the token is invalid" msgstr "Token är ogiltig" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:43 +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." +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." + +#: vibes_auth/viewsets.py:97 msgid "password reset successfully" msgstr "Lösenordet har återställts framgångsrikt!" -#: vibes_auth/viewsets.py:163 +#: vibes_auth/viewsets.py:130 msgid "account already activated!" msgstr "Du har redan aktiverat kontot..." diff --git a/vibes_auth/locale/th_TH/LC_MESSAGES/django.mo b/vibes_auth/locale/th_TH/LC_MESSAGES/django.mo index 7ccf67d8c6980c1bd8563495f3b6cee50550bf79..ca69505a83bcfb5b4a93ad234a7ee07661a4e715 100644 GIT binary patch delta 5771 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 delta 2135 zcmY+_TTE0(9LMni4>x5Mmh}P%SgR=DjRGQwRIG}kQc+QhBD5to-Vp+}V6#mdW7Wi% zY<;k5A`fbfhQzFw*!G1O6Jz2f;h~y(Nlm;&Tl7Uqs!jd=W+z4`{P#0+_UxRQ|I8d- ze;@TvWALuu+ixfh#7H7Az?dK=#_~alk2fY46YxVU#57!qy1x|*aUZ7QB^-+Puoz!p zI!;V5CJE=`5Uj&NdenLpVOEhK^PDgco z0{P0EN5*C@y6ac*W7>bZ>*?I=@q9CuiaN^05m<`ZxD+Q~2ad<%s2ScsEyaCQ=3+@t z8K$8oumUxKder?*sEo9umSUIlCz6Y7qf8^)?f*K zhZ@MQs6B8E^`OVN13ebL4tJyad4L+wze(g@Blj^14W!Ds8ug&fI2;e4ho?~wI*01u z3i4;}xb`zt2BZ0MET*F}Qi06HRN_utj_gZw*H8YH+DBYa%9H3l1B>y?DApRAXkTF1 z^_a=lUWeOJd*C5X#B$Q7wcY4Eg=c90jkVatER?B!)cyI4lAoG}AeC`c+E6JwjGcG^ zXJQfgR3_SyY??0TY19CEoT=>4IkdMr&*Lw&|HDQ+M(28P9A}oUO%bZUU^Nx3@fvqw zgR>Jg(>*u?U*Ih)AU)rpFVmP0a3^|X>I6=q-JKPg={?i~Q%6Ot#17hRsF^=U1`sr{ z^r9Pw;Z&TBtFaRg;Z6Jk+eSxbcoVnK&g2M;!M*qshLKe?^SCHip_XK`vm2{v_u(d- z!3HVQ`9DdefD4aN0~yIi(2`W4+AYo_*hu@DYft8;1GMY04Eu2z7P6u8aTh+t-|#XX z&xvHHne|k^U3ie^o9k3`oHpb|I{F#c(*6ULk#b%Fno%3-hd-ibcFy?{OK4B!OYMPX zY|;0q-{sJ`CRBzgQEX_`fWMwh{`G^iRBG@QX5k_hlKX5OY|$=WOjHxgi9({3m`hA2 zn4~EuNTMw>`D9%7nAr>NBNY=}os|gMcl10i6cN#cmSO;*W2mBC9!F?%F>w1&N3&HK zMX){W>l+Liwwp_J6=msDqK?p>DkhlY+pPpjR#6s7e=G2i? zSweh7aLjG01Nd&ye$cUA=`Ly+ct@E9#2{im&$q8yu>UM{)KnG`Nw)U>M*~f^h1~~Q zI*zy9Y)dhgh#@#2_GPsSXAvruL>0jyvFG1I?Jd0v?3+&xCV1i5y%4&UFd;nLH##ol zADR)`=kwy5KW}Z_wxy*hR1l~L{}6cPg&H%O!ui?B{!q=hNugQOE{3O+ER25x6i~-Y diff --git a/vibes_auth/locale/th_TH/LC_MESSAGES/django.po b/vibes_auth/locale/th_TH/LC_MESSAGES/django.po index 40c7e568..b9219c5b 100644 --- a/vibes_auth/locale/th_TH/LC_MESSAGES/django.po +++ b/vibes_auth/locale/th_TH/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-04 01:50+0300\n" +"POT-Creation-Date: 2025-10-06 15:52+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -70,7 +70,7 @@ msgstr "ตรวจสอบโทเค็น" msgid "Verify a token (refresh or access)." msgstr "ตรวจสอบโทเค็น (รีเฟรชหรือเข้าถึง)" -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:115 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 msgid "the token is valid" msgstr "โทเค็นนี้ใช้ได้" @@ -104,7 +104,7 @@ msgstr "ยืนยันการรีเซ็ตรหัสผ่านข #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:115 +#: vibes_auth/viewsets.py:82 msgid "passwords do not match" msgstr "รหัสผ่านไม่ตรงกัน" @@ -147,8 +147,8 @@ msgstr "หมายเลขโทรศัพท์ไม่ถูกต้อ msgid "Invalid attribute format: {attribute_pair}" msgstr "รูปแบบแอตทริบิวต์ไม่ถูกต้อง: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 -#: vibes_auth/viewsets.py:177 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:125 +#: vibes_auth/viewsets.py:144 msgid "activation link is invalid!" msgstr "ลิงก์การเปิดใช้งานไม่ถูกต้อง!" @@ -160,15 +160,16 @@ msgstr "บัญชีได้รับการเปิดใช้งาน msgid "something went wrong: {e!s}" msgstr "เกิดข้อผิดพลาด: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:93 msgid "token is invalid!" msgstr "โทเคนไม่ถูกต้อง!" #: vibes_auth/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:180 msgid "groups" @@ -342,37 +343,37 @@ msgstr "สวัสดีครับ/ค่ะ %(user_first_name)s," #: vibes_auth/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 -msgid "" -"reset\n" -" password" -msgstr "เปิดใช้งานบัญชี" +msgid "reset password" +msgstr "รีเซ็ตรหัสผ่าน" -#: vibes_auth/templates/user_reset_password_email.html:98 +#: vibes_auth/templates/user_reset_password_email.html:97 #: vibes_auth/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:101 +#: vibes_auth/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:103 +#: vibes_auth/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:109 +#: vibes_auth/templates/user_reset_password_email.html:108 #: vibes_auth/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "สงวนลิขสิทธิ์" @@ -388,7 +389,8 @@ 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 msgid "" @@ -416,17 +418,67 @@ 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:117 +#: vibes_auth/views.py:29 +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 " +"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" + +#: vibes_auth/views.py:47 +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." +msgstr "" +"จัดการการรีเฟรชโทเค็นเพื่อวัตถุประสงค์ในการยืนยันตัวตน " +"คลาสนี้ใช้เพื่อให้บริการฟังก์ชันสำหรับการรีเฟรชโทเค็นเป็นส่วนหนึ่งของระบบยืนยันตัวตน" +" " +"มันทำให้แน่ใจว่าลูกค้าสามารถขอโทเค็นที่รีเฟรชแล้วได้ภายในขีดจำกัดอัตราที่กำหนดไว้" +" " +"หน้าจอนี้พึ่งพาตัวจัดลำดับที่เกี่ยวข้องเพื่อตรวจสอบความถูกต้องของข้อมูลการรีเฟรชโทเค็นและสร้างผลลัพธ์ที่เหมาะสม" + +#: vibes_auth/views.py:66 +msgid "" +"Represents a view for verifying JSON Web Tokens (JWT) using specific " +"serialization and validation logic. " +msgstr "" +"แสดงมุมมองสำหรับการตรวจสอบโทเค็นเว็บ JSON (JWT) " +"โดยใช้การแปลงลำดับและการตรวจสอบความถูกต้องตามตรรกะเฉพาะ" + +#: vibes_auth/views.py:79 msgid "the token is invalid" msgstr "โทเค็นไม่ถูกต้อง" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:43 +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." +msgstr "" +"การใช้งานชุดมุมมองผู้ใช้ " +"ให้ชุดของการดำเนินการที่จัดการข้อมูลที่เกี่ยวข้องกับผู้ใช้ เช่น การสร้าง " +"การดึงข้อมูล การอัปเดต การลบ และการดำเนินการที่กำหนดเอง " +"รวมถึงการรีเซ็ตรหัสผ่าน การอัปโหลดอวาตาร์ การเปิดใช้งานบัญชี " +"และการรวมรายการที่ดูล่าสุด คลาสนี้ขยายส่วนผสมและ GenericViewSet " +"เพื่อการจัดการ API ที่มีความแข็งแกร่ง" + +#: vibes_auth/viewsets.py:97 msgid "password reset successfully" msgstr "รหัสผ่านได้รับการรีเซ็ตเรียบร้อยแล้ว!" -#: vibes_auth/viewsets.py:163 +#: vibes_auth/viewsets.py:130 msgid "account already activated!" msgstr "คุณได้เปิดใช้งานบัญชีเรียบร้อยแล้ว..." diff --git a/vibes_auth/locale/tr_TR/LC_MESSAGES/django.mo b/vibes_auth/locale/tr_TR/LC_MESSAGES/django.mo index d5f4380e6d2e07e21fa37287d0d2bedafd34cc93..8d967b725673d59efc7b52ddfcd42552b0660e55 100644 GIT binary patch delta 4811 zcmaKuYm8K98OL8Nlx16r0z#1juOj8*u(on36lsCdQkHVDY@yVmo;maG?(3X6Gn~u9 ztTrd9Y0zq83|^9caJ?YZnkHS*jhFR0vr#`7ORA0Xp(Zxoz8F6=Hqo^Dd){+qmTenP zc;QnH(Yx&`5^e8nvOQ}yKWi)E=&X3s-Z!biPvWfIFb9cMNWZF$%22*d=64dwTzF^o!S7!(LInVt5GNkeHlsuPs5e44Ks1{Qt@CG^^?q&!#=nZ z%2WhUcDRqhQ}Bz${T>t~B3jB1OQ^k2)~mx=uyY*eMAnr<5+QMS+$a5)qZfM+ldR;B zY;M6M8#yG}+pw}+aQN6k?0QUEBW;jFg1*(A;U!v)`QK#q>_iRw_p@VeHhy+ z{Mq^F%@c5$)_9x2WTpvFFc-H+|Uk8*oH&8KB$v=)r7GgtVh~QlVKAk*7p)y4|OAr8ui%3eR^Qn#@Y|O zIM$q`v8nKxZbbDFTQPbt4So5*3vAMK3%NBressNIA}^CSV(rDc;YEo!_QKaYjGJ*{ zYJGZtq6sM_NSzFO37#!s5doh>=2U9pM0=g(T`Z)aPuql?bj1wXkeiX07#-M}O{@@7THCbDEOY9h&Pgwu+wFf$b!Hc|qikdl2R^;x39S%YtR zxt=ESyie^9-2&Q6lE{`*9-Uj>vn;#cG)T(j;^pB;*@sM$NHaW2Vf!DIuWe%-Voe+LJ|*!AS&9AOhts`1=OByBARk)gN(jY_j<$Ss3nqo)w~vxTc__* zQ#vu-#5@CWkr6*`7lUug(ze;g8Gp4`?Pw1UgXio6wKBdfvJ(X`=+n=NIoHSlGPHO ziR#^`6vED1<{G*YVLBa3TXmfJ!!j!r(k)d&2Pnx9K}n|#QD$61>Vc85DmkV2X`Iw+ zT?aPwgS6t>g33?Vql(T%d_@ojvU4CfBGMurl znP`YrXKV`QOk%={BxQ8Xo}n`?qJ1W0sQhEh-BHpXT#DGEdYL%&?j!rV%Iv$esb}@v zbB`_9(bFhG{rdM8%*hVeT41ZXQg4q%Y2ej7jrr~IX5i^EV;m)>buqw0sGBCVfeC8{ z9a?Rt#<<<5_oO;*kB9B?!ICaBS=Bcz7+cwK_=erii&_^w-q-cOi@d7Nx;~2KYbIa0 zCO)-oUF0k0Y9uy+L>hbTF^RLPTa)Y~Mpx4y@bDkB#|fwXtT^)tR6B5w#}6)?}?zOjy1SDGb@D zl80cgDs5Gd7@anU(onZ9w#TbUdwhEyNox}6)l9XMa6lwg8(23VfteahEIqbO!-mw9 zoT9#S-&?#TqdbG`;}NghnylW9ph&@|hQV}=Xe@6X;WG(^NL7~i{?|Tp^lHdJ+9f}B9BoccQ&QhQ{?X7(BR z;P|S6WCKGfZ5+|~Lhi1f{aI&=b<1=o)#`k&onE8qu!~`@6q$&i8!J z-Q7C6(7PG%^&4$1@iq~RGxKn40{>`9NoIMNjMK3Q)362gd>D(c58uLzn2Nt)3I2uY zn4fHxg0(mf+i;AA+DK;tH@4v$*n=VL$4nf;H*o|tr#~?fM^O{|$C<~M$8+6?0bGaG z*oAt}S@-#M^mF|PIJ_b ze|E!N|AES2EFWfLIw~X8$XaYM{)kOTUE0k6`B!T1a6>6i;q4h%f}h8**Z2f`V9ks$3 z(hx05)QZwjwUOnl$EjR*p}uzj7vT^VV6O@Fb5Nu)f6niTC7KPoo4SCi!p=zKT=i@nS!ly`5Yzebb(RLuWtQU9UFciRQBLR-y-#ElYE^{Zt&G0jG*Q)u z8indbf1_)-C?;YFtvrsWTCX!V3@;{R\n" "Language-Team: BRITISH ENGLISH \n" @@ -70,7 +70,7 @@ msgstr "Bir belirteci doğrulayın" 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:115 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 msgid "the token is valid" msgstr "Belirteç geçerlidir" @@ -105,7 +105,7 @@ msgstr "Bir kullanıcının parola sıfırlamasını onaylama" #: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:115 +#: vibes_auth/viewsets.py:82 msgid "passwords do not match" msgstr "Parolalar eşleşmiyor" @@ -148,8 +148,8 @@ msgstr "Hatalı biçimlendirilmiş telefon numarası: {phone_number}!" msgid "Invalid attribute format: {attribute_pair}" msgstr "Geçersiz öznitelik biçimi: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:158 -#: vibes_auth/viewsets.py:177 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:125 +#: vibes_auth/viewsets.py:144 msgid "activation link is invalid!" msgstr "Aktivasyon bağlantısı geçersiz!" @@ -161,14 +161,14 @@ msgstr "Hesap zaten etkinleştirildi..." msgid "something went wrong: {e!s}" msgstr "Bir şeyler ters gitti: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:93 msgid "token is invalid!" msgstr "Jeton geçersiz!" #: vibes_auth/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." @@ -345,22 +345,17 @@ msgstr "Merhaba %(user_first_name)s," #: vibes_auth/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 -msgid "" -"reset\n" -" password" -msgstr "" -"Etkinleştir\n" -" hesap" +msgid "reset password" +msgstr "şifre sıfırlama" -#: vibes_auth/templates/user_reset_password_email.html:98 +#: vibes_auth/templates/user_reset_password_email.html:97 #: vibes_auth/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" @@ -369,7 +364,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:101 +#: vibes_auth/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." @@ -377,12 +372,12 @@ 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:103 +#: vibes_auth/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:109 +#: vibes_auth/templates/user_reset_password_email.html:108 #: vibes_auth/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "Tüm hakları saklıdır" @@ -432,14 +427,60 @@ msgstr "" "Geçersiz telefon numarası biçimi. Numara şu formatta girilmelidir: " "\"+999999999\". En fazla 15 haneye izin verilir." -#: vibes_auth/views.py:117 +#: vibes_auth/views.py:29 +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 " +"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 "" +"Bir çift erişim ve yenileme belirteci ile kullanıcı verilerini almak için " +"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." + +#: vibes_auth/views.py:47 +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." +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 " +"yenileme girdilerini doğrulamak ve uygun çıktıları üretmek için ilişkili " +"serileştiriciye dayanır." + +#: vibes_auth/views.py:66 +msgid "" +"Represents a view for verifying JSON Web Tokens (JWT) using specific " +"serialization and validation logic. " +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:79 msgid "the token is invalid" msgstr "Belirteç geçersiz" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:43 +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." +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." + +#: vibes_auth/viewsets.py:97 msgid "password reset successfully" msgstr "Şifre başarıyla sıfırlandı!" -#: vibes_auth/viewsets.py:163 +#: vibes_auth/viewsets.py:130 msgid "account already activated!" msgstr "Hesabı zaten etkinleştirdiniz..." diff --git a/vibes_auth/locale/vi_VN/LC_MESSAGES/django.mo b/vibes_auth/locale/vi_VN/LC_MESSAGES/django.mo index c4a84d6e80bcf249124b8b46b2313766cd31c23a..5b1ad7edfcfcdd678b2dbefa359c57267b861551 100644 GIT binary patch delta 5022 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -70,7 +70,7 @@ msgstr "Xác minh token" 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:115 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 msgid "the token is valid" msgstr "Token này hợp lệ" @@ -104,7 +104,7 @@ 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:311 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:115 +#: vibes_auth/viewsets.py:82 msgid "passwords do not match" msgstr "Mật khẩu không khớp." @@ -124,8 +124,8 @@ msgstr "" #: vibes_auth/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 msgid "password too weak" @@ -150,8 +150,8 @@ msgstr "Số điện thoại không hợp lệ: {phone_number}!" 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:267 vibes_auth/viewsets.py:158 -#: vibes_auth/viewsets.py:177 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:125 +#: vibes_auth/viewsets.py:144 msgid "activation link is invalid!" msgstr "Liên kết kích hoạt không hợp lệ!" @@ -163,14 +163,14 @@ msgstr "Tài khoản đã được kích hoạt..." msgid "something went wrong: {e!s}" msgstr "Có sự cố xảy ra: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:126 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:93 msgid "token is invalid!" msgstr "Token không hợp lệ!" #: vibes_auth/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." @@ -347,20 +347,17 @@ msgstr "Xin chào %(user_first_name)s," #: vibes_auth/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 -msgid "" -"reset\n" -" password" -msgstr "Kích hoạt tài khoản" +msgid "reset password" +msgstr "Đặt lại mật khẩu" -#: vibes_auth/templates/user_reset_password_email.html:98 +#: vibes_auth/templates/user_reset_password_email.html:97 #: vibes_auth/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" @@ -369,18 +366,18 @@ 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:101 +#: vibes_auth/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:103 +#: vibes_auth/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:109 +#: vibes_auth/templates/user_reset_password_email.html:108 #: vibes_auth/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "Tất cả các quyền được bảo lưu." @@ -396,8 +393,8 @@ 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 msgid "" @@ -425,17 +422,66 @@ 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:117 +#: vibes_auth/views.py:29 +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 " +"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 " +"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:47 +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." +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." + +#: vibes_auth/views.py:66 +msgid "" +"Represents a view for verifying JSON Web Tokens (JWT) using specific " +"serialization and validation logic. " +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:79 msgid "the token is invalid" msgstr "Token không hợp lệ" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:43 +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." +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à " +"GenericViewSet để xử lý API một cách mạnh mẽ." + +#: vibes_auth/viewsets.py:97 msgid "password reset successfully" msgstr "Mật khẩu đã được đặt lại thành công!" -#: vibes_auth/viewsets.py:163 +#: vibes_auth/viewsets.py:130 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/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.mo index 9325093e670e14a69779dcb3b48709a8f8c757a3..0414134376bc40f6b01c55f21b284158bf82b5d7 100644 GIT binary patch delta 4411 zcmZvddvH`&8NhFOHDG~0kcS9dZM9HC+FIl(ZE34KER;6|O7&*OaoZDUQk??TqZ*yF1g0<2bc-#PRptdlLeBCg1+f zIrp6Je6Mrz*SVi9NqqS5po0o6fP5L5Hc(Nj;mbq#p+)l)rQ|+E*$AItd}FAh1Q`z= zrYHvEAAUhmUSND3KFWB^a7FnNoC8JQYB&v=a2#xbUxdGaGZZDE{E5zZCLSDtzU$9oUd%4 zBZ?aR1w9a(l;6X_@FOS(+y3}(P!9SO%D&rBJf48{Z^D^y4ZH;Tq>SLyQaBNc-Wn*5 z9fdI4 z-iG4PY$nBl=V3xN%%{UQWi6CcgnU*(`Q8ji!%I*s{~Z)h{tO?04jcvl0VU)^8O(yy zAkkOCkWb2+P-cAa1`1&Y<7;pQ=5h_w3izl9RHKS0@U`|}_B{M`ROguFb? z_t8*7|15lf^Od-C;C3jAYoU7!;8Mn2a3LH)$;!G{ed=%y;}{eJl2G<{LrL8qp%^@v zaEM`Jp{$z(W!;l7Aqy7x6YHUjEhxFGghSv-CxwO|2KD+H@$-gvtUSCBdKhk(Pm8TFfLK;OY|16Y38PEdAVnmFRNQu$X3J|$X z(&ReMb9;Aw2&CI)^E(Au=b!IRil@>fG(^q~t<=R_WE%1vWD!FBxc^{YgmT5?p07uq zL3kFF7m)8F-$Pa*dB|Wy-j`R90Z2X~w_v*X|1G4qt)}ymKlp*q(NLaUsp7T%+)SSW zc~X1ZAipySO6^EniKxgjWI6IYB28*4vBB+nS4E0L^7kAf&!~owYGoiId6sMW8uCp< z3hW_7n%wW+_N?Do;8W_Qw+*K=3z_dvJn80tfff#ibW@G#MKRqhF~Y@aq)4?QZ|GrD zEsDfcEpCOr=t(O6`Y5!BV9csL*% zw2)zKbrrcfd(TlLQ9Y(5WQD0}rW(~^mK>~w?>*4mYFc_}fx6IAF)5Cbs#T&{oNQng z7O*9zZ;b1vrE0zEU0ZNL-E3I+qz3gOBg|w>vvf6Nlp2=nKtfkH8Tw{+q0Cfq4_`6I zj06l;231p!8F=s`Jtn?wq8k(qce`SQqj3x&km7wX9zaEuUX;Boj>IkbUZ5-ty9!jz zvSLPIoKJP*^Ts8X>rtF?ebGE~B<#hyWl1tLLSw|-&;$ZHv6f@}Wc8*=rig#+aZ|-S z%}bxnxyZZRBtZPWBOfj#;ASk)s7{t??kO0y)Vm>M5^a{6 zkg9jDieK1X%G`ubr7+z(l(ed5JWwKcg+RKh@~HzVNymbGH6E49H1jF-kS^CM->sBD z+_WO4eFqrfKqww`(?XSRj>Lj$LW<8~^(M}Up(hm4f(!$JNIXnTF^w;M3S)WzS3+A| z|EL**%W0~mdaM|&cRdRF7E2EY#VK7aHMWo$*P{7)m`fE{&AnTJ`$c0Y_E@A4JJoqh z7xqwAfV@&e5Ho zLQi?7ZVy{BwfoZD_4cmD?2ayU+R4NYdQMX^-E+)Np2$>PcFwih4K3L-JMH9AROHGU zoxPR0Bm3;COLj$hw)Jx6;`aXLie+ai?E3C>_p$7IhcM2mzhalSvDfabwW|)>HHYjY zEtzAdJWu-Dl$4)-jm7S=r>m2n&BAq&!ZEEp6&+ff! z*B-)2yR{>m?8zNY+HckLw}|E5K((#ut{yqV4JV82%6B-azj3NOC!Wq*SF7$Z_14vDH~Ks5 zRHt)pHvzXBJ2MUEz4d-PJ9ek9?Bdu2@$oX$7oYxFVFf zOmTqXMb5L;sqP@9cXIMpjhB#ISt{GT-|OFbG&094v&jppJQ|59YX1-_UTi%hbM+N= z@+X-?QcT0V3iV==?yMk5PHLxDcNppA&x^aK!YdRnNfO@E6jnVExmmU?bF$27KOvp^ z_5@dho?Uf3ccj@%Z?^I*zN9;<`?T9N<(b{*?bZtC__kc-9;YkG7UGw_dfaYqw|CTv zuAZ_?dn((0n$nP}*;hqmGYw_gp8c7|Q%=Kf+{`s~IQ8uHuNzgSF86OcThx1QyLVCX xHBP_RxE~Yo2KK?HSb(1}8FSpm#9{^Z!UpW2 zSFNDZn+xkP8k;c-TX7(^V^4gJ%IO0};uln6zpR=3IF5EL#^W+9!;PqZF5CN$&_nwj zhHI!lsPJdPNGBXUs2BA{{V)kN;v(FFwOEJuQ6tHUF=izeqdGo`+%gxC+{|@*{WgxL z{m@=d=3y7_H|bQ=Q6~1oBFw-V%*Ks46i=W=cn7rcpMs zV&NOG8P(4#R6^flnSW*OAqyo^X9Y