diff --git a/blog/admin.py b/blog/admin.py index b6dd7447..b207d677 100644 --- a/blog/admin.py +++ b/blog/admin.py @@ -34,7 +34,7 @@ class PostAdmin(SummernoteModelAdminMixin, FieldsetsMixin, ActivationActionsMixi @register(PostTag) -class PostTagAdmin(ModelAdmin): # type: ignore [misc, type-arg] +class PostTagAdmin(ModelAdmin): # type: ignore [type-arg] list_display = ("tag_name", "name") search_fields = ("tag_name", "name") ordering = ("tag_name",) diff --git a/blog/apps.py b/blog/apps.py index eac2df44..2783a0aa 100644 --- a/blog/apps.py +++ b/blog/apps.py @@ -11,6 +11,6 @@ class BlogConfig(AppConfig): hide = False # noinspection PyUnresolvedReferences - def ready(self): + def ready(self) -> None: import blog.elasticsearch.documents import blog.signals # noqa: F401 diff --git a/blog/elasticsearch/documents.py b/blog/elasticsearch/documents.py index 69eef8fd..f266efaf 100644 --- a/blog/elasticsearch/documents.py +++ b/blog/elasticsearch/documents.py @@ -6,7 +6,7 @@ from core.elasticsearch import COMMON_ANALYSIS, ActiveOnlyMixin, add_multilang_f from core.elasticsearch.documents import BaseDocument -class PostDocument(ActiveOnlyMixin, BaseDocument): +class PostDocument(ActiveOnlyMixin, BaseDocument): # type: ignore [misc] title = fields.TextField( attr="title", analyzer="standard", @@ -30,7 +30,7 @@ class PostDocument(ActiveOnlyMixin, BaseDocument): model = Post fields = ["uuid"] - def prepare_title(self, instance): + def prepare_title(self, instance: Post) -> str: return getattr(instance, "title", "") or "" diff --git a/blog/filters.py b/blog/filters.py index 42986097..115e9d99 100644 --- a/blog/filters.py +++ b/blog/filters.py @@ -4,7 +4,7 @@ from blog.models import Post from core.filters import CaseInsensitiveListFilter -class PostFilter(FilterSet): +class PostFilter(FilterSet): # type: ignore [misc] uuid = UUIDFilter(field_name="uuid", lookup_expr="exact") slug = CharFilter(field_name="slug", lookup_expr="exact") author = UUIDFilter(field_name="author__uuid", lookup_expr="exact") diff --git a/blog/locale/ar_AR/LC_MESSAGES/django.po b/blog/locale/ar_AR/LC_MESSAGES/django.po index acb45ba2..41e46c2d 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 13:56+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 a8218ed7..82fa5c79 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 13:56+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 b053a23d..9492b49d 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 13:56+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 84004c8a..b122ca4d 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 13:56+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 3c9cd166..997d8bc3 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 13:56+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 2320c862..59f83586 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 13:56+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 b12fa7a2..ebf4ed82 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 13:56+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 9595224e..b07e4947 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 13:56+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 e511ca0b..aa158eb3 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 13:56+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 0f1124c3..49536497 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 13:56+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 61146baa..b54c5675 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 13:56+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 9595224e..b07e4947 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 13:56+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 a66228a0..3aa1e8f0 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 13:56+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/it_IT/LC_MESSAGES/django.po b/blog/locale/it_IT/LC_MESSAGES/django.po index 2064f355..ce39f1ea 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 13:56+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 b9fcf782..f43410d1 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 13:56+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 61146baa..b54c5675 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 13:56+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 27923e77..443272dc 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 13:56+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/nl_NL/LC_MESSAGES/django.po b/blog/locale/nl_NL/LC_MESSAGES/django.po index 6d3e7c42..49b11745 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 13:56+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 5093d4a0..19503bc6 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 13:56+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 e79f7db1..694d39e8 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 13:56+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 4aa2f1a9..5574452f 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 13:56+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 b9245af0..2eb8a89a 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 13:56+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 3122d380..32b37e7b 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 13:56+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 5598ba37..1001ec86 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 13:56+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 a5679629..ecba8bab 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 13:56+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/tr_TR/LC_MESSAGES/django.po b/blog/locale/tr_TR/LC_MESSAGES/django.po index 5356d8a0..da8f12de 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 13:56+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/vi_VN/LC_MESSAGES/django.po b/blog/locale/vi_VN/LC_MESSAGES/django.po index 3f4be0db..9c8fa66c 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 13:56+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 3c93b593..cfe975a8 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 13:56+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/viewsets.py b/blog/viewsets.py index deb26f23..48ff8c87 100644 --- a/blog/viewsets.py +++ b/blog/viewsets.py @@ -7,7 +7,7 @@ from blog.serializers import PostSerializer from core.permissions import EvibesPermission -class PostViewSet(ReadOnlyModelViewSet): +class PostViewSet(ReadOnlyModelViewSet): # type: ignore [type-arg] """ Encapsulates operations for managing and retrieving Post entities in a read-only model view set. diff --git a/blog/widgets.py b/blog/widgets.py index f312b9a7..ae5d640b 100644 --- a/blog/widgets.py +++ b/blog/widgets.py @@ -1,4 +1,7 @@ +from typing import Any + from django import forms +from django.forms.renderers import BaseRenderer from django.utils.safestring import mark_safe @@ -7,7 +10,10 @@ class MarkdownEditorWidget(forms.Textarea): css = {"all": ("https://cdnjs.cloudflare.com/ajax/libs/easymde/2.14.0/easymde.min.css",)} js = ("https://cdnjs.cloudflare.com/ajax/libs/easymde/2.14.0/easymde.min.js",) - def render(self, name, value, attrs=None, renderer=None): + def render(self, name: str, value: str, attrs: dict[Any, Any] | None = None, renderer: BaseRenderer | None = None): + if not attrs: + attrs = {} + attrs["class"] = "markdown-editor" textarea_html = super().render(name, value, attrs, renderer) textarea_id = attrs.get("id", f"id_{name}") init_js = f""" diff --git a/core/abstract.py b/core/abstract.py index b32aa480..a3c11847 100644 --- a/core/abstract.py +++ b/core/abstract.py @@ -20,16 +20,16 @@ class NiceModel(Model): verbose_name=_("is active"), help_text=_("if set to false, this object can't be seen by users without needed permission"), ) - created = CreationDateTimeField(_("created"), help_text=_("when the object first appeared on the database")) - modified = ModificationDateTimeField(_("modified"), help_text=_("when the object was last modified")) + created = CreationDateTimeField(_("created"), help_text=_("when the object first appeared on the database")) # type: ignore [no-untyped-call] + modified = ModificationDateTimeField(_("modified"), help_text=_("when the object was last modified")) # type: ignore [no-untyped-call] - def save( + def save( # type: ignore [override] self, *, force_insert: bool = False, force_update: bool = False, using: str | None = None, - update_fields: Collection | None = None, + update_fields: Collection[str] | None = None, update_modified: bool = True, ) -> None: self.update_modified = update_modified diff --git a/core/admin.py b/core/admin.py index 63710aa7..82ad95ae 100644 --- a/core/admin.py +++ b/core/admin.py @@ -1,19 +1,22 @@ from contextlib import suppress -from typing import ClassVar, Type +from typing import Any, ClassVar, Type from constance.admin import Config from constance.admin import ConstanceAdmin as BaseConstanceAdmin -from django.apps import apps +from django.apps import AppConfig, apps +from django.conf import settings from django.contrib.admin import ModelAdmin, TabularInline, action, register, site from django.contrib.gis.admin import GISModelAdmin from django.contrib.messages import constants as messages from django.db.models import Model +from django.db.models.query import QuerySet +from django.http import HttpRequest from django.utils.translation import gettext_lazy as _ from modeltranslation.translator import NotRegistered, translator from modeltranslation.utils import get_translation_fields from mptt.admin import DraggableMPTTAdmin -from core.forms import OrderForm, OrderProductForm, VendorForm +from core.forms import CRMForm, OrderForm, OrderProductForm, VendorForm from core.models import ( Address, Attribute, @@ -22,8 +25,10 @@ from core.models import ( Brand, Category, CategoryTag, + CustomerRelationshipManagementProvider, Feedback, Order, + OrderCrmLink, OrderProduct, Product, ProductImage, @@ -33,18 +38,16 @@ from core.models import ( Stock, Vendor, Wishlist, - CustomerRelationshipManagementProvider, - OrderCrmLink, ) -from evibes.settings import CONSTANCE_CONFIG class FieldsetsMixin: - general_fields: list = [] - relation_fields: list = [] + general_fields: list[str] | None = [] + relation_fields: list[str] | None = [] + additional_fields: list[str] | None = [] model: ClassVar[Type[Model]] - def get_fieldsets(self, request, obj=None): + def get_fieldsets(self, request: HttpRequest, obj: Any = None) -> list[tuple[str, dict[str, list[str]]]]: if request: pass @@ -53,20 +56,24 @@ class FieldsetsMixin: fieldsets = [] - def add_translations_fieldset(fss): + def add_translations_fieldset( + fss: list[tuple[str, dict[str, list[str]]]], + ) -> list[tuple[str, dict[str, list[str]]]]: with suppress(NotRegistered): transoptions = translator.get_options_for_model(self.model) translation_fields = [] for orig in transoptions.local_fields: translation_fields += get_translation_fields(orig) if translation_fields: - fss = list(fss) + [(_("translations"), {"fields": translation_fields})] + fss = list(fss) + [(_("translations"), {"fields": translation_fields})] # type: ignore [list-item] return fss if self.general_fields: fieldsets.append((_("general"), {"fields": self.general_fields})) if self.relation_fields: fieldsets.append((_("relations"), {"fields": self.relation_fields})) + if self.additional_fields: + fieldsets.append((_("additional info"), {"fields": self.additional_fields})) opts = self.model._meta meta_fields = [] @@ -92,8 +99,8 @@ class FieldsetsMixin: ts.append(name) if ts: fieldsets.append((_("timestamps"), {"fields": ts, "classes": ["collapse"]})) - fieldsets = add_translations_fieldset(fieldsets) - return fieldsets + fieldsets = add_translations_fieldset(fieldsets) # type: ignore [arg-type, assignment] + return fieldsets # type: ignore [return-value] # noinspection PyUnresolvedReferences @@ -107,29 +114,29 @@ class ActivationActionsMixin: ] @action(description=_("activate selected %(verbose_name_plural)s").lower(), permissions=["change"]) - def activate_selected(self, request, queryset): + def activate_selected(self, request: HttpRequest, queryset: QuerySet[Any]) -> None: try: queryset.update(is_active=True) - self.message_user( + self.message_user( # type: ignore [attr-defined] request=request, message=_("selected items have been activated.").lower(), level=messages.SUCCESS ) except Exception as e: - self.message_user(request=request, message=str(e), level=messages.ERROR) + self.message_user(request=request, message=str(e), level=messages.ERROR) # type: ignore [attr-defined] @action(description=_("deactivate selected %(verbose_name_plural)s").lower(), permissions=["change"]) - def deactivate_selected(self, request, queryset): + def deactivate_selected(self, request: HttpRequest, queryset: QuerySet[Any]) -> None: try: queryset.update(is_active=False) - self.message_user( + self.message_user( # type: ignore [attr-defined] request=request, message=_("selected items have been deactivated.").lower(), level=messages.SUCCESS ) except Exception as e: - self.message_user(request=request, message=str(e), level=messages.ERROR) + self.message_user(request=request, message=str(e), level=messages.ERROR) # type: ignore [attr-defined] -class AttributeValueInline(TabularInline): +class AttributeValueInline(TabularInline): # type: ignore [type-arg] model = AttributeValue extra = 0 autocomplete_fields = ["attribute"] @@ -139,7 +146,7 @@ class AttributeValueInline(TabularInline): icon = "fa-solid fa-list-ul" -class ProductImageInline(TabularInline): +class ProductImageInline(TabularInline): # type: ignore [type-arg] model = ProductImage extra = 0 is_navtab = True @@ -148,7 +155,7 @@ class ProductImageInline(TabularInline): icon = "fa-regular fa-images" -class StockInline(TabularInline): +class StockInline(TabularInline): # type: ignore [type-arg] model = Stock extra = 0 is_navtab = True @@ -157,7 +164,7 @@ class StockInline(TabularInline): icon = "fa-solid fa-boxes-stacked" -class OrderProductInline(TabularInline): +class OrderProductInline(TabularInline): # type: ignore [type-arg] model = OrderProduct extra = 0 readonly_fields = ("product", "quantity", "buy_price") @@ -171,7 +178,7 @@ class OrderProductInline(TabularInline): return super().get_queryset(request).select_related("product").only("product__name") -class CategoryChildrenInline(TabularInline): +class CategoryChildrenInline(TabularInline): # type: ignore [type-arg] model = Category fk_name = "parent" extra = 0 @@ -183,76 +190,194 @@ class CategoryChildrenInline(TabularInline): @register(AttributeGroup) -class AttributeGroupAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc] +class AttributeGroupAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] # noinspection PyClassVar model = AttributeGroup # type: ignore [misc] - list_display = ("name", "modified") - search_fields = ("uuid", "name") - readonly_fields = ("uuid", "modified", "created") - - general_fields = ["is_active", "name", "parent"] - relation_fields = [] + list_display = ( + "name", + "modified", + ) + search_fields = ( + "uuid", + "name", + ) + readonly_fields = ( + "uuid", + "modified", + "created", + ) + general_fields = [ + "is_active", + "name", + "parent", + ] @register(Attribute) -class AttributeAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc] +class AttributeAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] # noinspection PyClassVar model = Attribute # type: ignore [misc] - list_display = ("name", "group", "value_type", "modified") - list_filter = ("value_type", "group", "is_active") - search_fields = ("uuid", "name", "group__name") - readonly_fields = ("uuid", "modified", "created") - autocomplete_fields = ["categories", "group"] - - general_fields = ["is_active", "name", "value_type", "is_filterable"] - relation_fields = ["group", "categories"] + list_display = ( + "name", + "group", + "value_type", + "modified", + ) + list_filter = ( + "value_type", + "group", + "is_active", + ) + search_fields = ( + "uuid", + "name", + "group__name", + ) + readonly_fields = ( + "uuid", + "modified", + "created", + ) + autocomplete_fields = [ + "categories", + "group", + ] + general_fields = [ + "is_active", + "name", + "value_type", + "is_filterable", + ] + relation_fields = [ + "group", + "categories", + ] @register(AttributeValue) -class AttributeValueAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc] +class AttributeValueAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] # noinspection PyClassVar model = AttributeValue # type: ignore [misc] - list_display = ("attribute", "value", "modified") - list_filter = ("attribute__group", "is_active") - search_fields = ("uuid", "value", "attribute__name") - readonly_fields = ("uuid", "modified", "created") - autocomplete_fields = ["attribute"] - - general_fields = ["is_active", "value"] - relation_fields = ["attribute", "product"] + list_display = ( + "attribute", + "value", + "modified", + ) + list_filter = ( + "attribute__group", + "is_active", + ) + search_fields = ( + "uuid", + "value", + "attribute__name", + ) + readonly_fields = ( + "uuid", + "modified", + "created", + ) + autocomplete_fields = [ + "attribute", + ] + general_fields = [ + "is_active", + "value", + ] + relation_fields = [ + "attribute", + "product", + ] @register(Category) class CategoryAdmin(FieldsetsMixin, ActivationActionsMixin, DraggableMPTTAdmin): # noinspection PyClassVar model = Category - list_display = ("indented_title", "parent", "is_active", "modified") + list_display = ( + "indented_title", + "parent", + "is_active", + "modified", + ) # noinspection PyUnresolvedReferences - list_filter = ("is_active", "level", "created", "modified") - search_fields = ("uuid", "name") - inlines = [CategoryChildrenInline] - autocomplete_fields = ["parent", "tags"] - readonly_fields = ("slug", "uuid", "modified", "created") + list_filter = ( + "is_active", + "level", + "created", + "modified", + ) + search_fields = ( + "uuid", + "name", + ) + inlines = [ + CategoryChildrenInline, + ] + autocomplete_fields = [ + "parent", + "tags", + ] + readonly_fields = ( + "slug", + "uuid", + "modified", + "created", + ) - general_fields = ["is_active", "name", "description", "image", "markup_percent", "priority"] - relation_fields = ["parent", "tags"] + general_fields = [ + "is_active", + "name", + "description", + "image", + "markup_percent", + "priority", + ] + relation_fields = [ + "parent", + "tags", + ] @register(Brand) -class BrandAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc] +class BrandAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] # noinspection PyClassVar model = Brand # type: ignore [misc] - list_display = ("name",) - list_filter = ("categories", "is_active") - search_fields = ("uuid", "name", "categories__name") - readonly_fields = ("uuid", "slug", "modified", "created") - - general_fields = ["is_active", "name", "description", "priority"] - relation_fields = ["small_logo", "big_logo", "categories"] + list_display = ( + "name", + "priority", + "is_active", + ) + list_filter = ( + "categories", + "is_active", + ) + search_fields = ( + "uuid", + "name", + "categories__name", + ) + readonly_fields = ( + "uuid", + "slug", + "modified", + "created", + ) + general_fields = [ + "is_active", + "name", + "description", + "priority", + ] + relation_fields = [ + "small_logo", + "big_logo", + "categories", + ] @register(Product) -class ProductAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc] +class ProductAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] # noinspection PyClassVar model = Product # type: ignore [misc] list_display = ( @@ -284,67 +409,153 @@ class ProductAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: "slug", "sku", ) - readonly_fields = ("slug", "uuid", "modified", "created") - autocomplete_fields = ("category", "brand", "tags") - inlines = [AttributeValueInline, ProductImageInline, StockInline] + readonly_fields = ( + "slug", + "uuid", + "modified", + "created", + ) + autocomplete_fields = ( + "category", + "brand", + "tags", + ) + inlines = [ + AttributeValueInline, + ProductImageInline, + StockInline, + ] - general_fields = ["is_active", "name", "partnumber", "is_digital"] - relation_fields = ["category", "brand", "tags"] + general_fields = [ + "is_active", + "name", + "partnumber", + "is_digital", + ] + relation_fields = [ + "category", + "brand", + "tags", + ] @register(ProductTag) -class ProductTagAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc] +class ProductTagAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] # noinspection PyClassVar model = ProductTag # type: ignore [misc] list_display = ("tag_name",) search_fields = ("tag_name",) - readonly_fields = ("uuid", "modified", "created") - - general_fields = ["is_active", "tag_name", "name"] - relation_fields = [] + readonly_fields = ( + "uuid", + "modified", + "created", + ) + general_fields = [ + "is_active", + "tag_name", + "name", + ] @register(CategoryTag) -class CategoryTagAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc] +class CategoryTagAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] # noinspection PyClassVar model = CategoryTag # type: ignore [misc] - list_display = ("tag_name",) - search_fields = ("tag_name",) - readonly_fields = ("uuid", "modified", "created") - - general_fields = ["is_active", "tag_name", "name"] - relation_fields = [] + list_display = ( + "name", + "tag_name", + "is_active", + ) + search_fields = ( + "name", + "tag_name", + "is_active", + ) + readonly_fields = ( + "uuid", + "modified", + "created", + ) + general_fields = [ + "is_active", + "tag_name", + "name", + ] @register(Vendor) -class VendorAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc] +class VendorAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] # noinspection PyClassVar model = Vendor # type: ignore [misc] - list_display = ("name", "markup_percent", "modified") - list_filter = ("markup_percent", "is_active") - search_fields = ("name",) - readonly_fields = ("uuid", "modified", "created") + list_display = ( + "name", + "markup_percent", + "modified", + ) + list_filter = ( + "markup_percent", + "is_active", + ) + search_fields = ( + "name", + "uuid", + ) + readonly_fields = ( + "uuid", + "modified", + "created", + ) form = VendorForm - - general_fields = ["is_active", "name", "markup_percent", "authentication", "b2b_auth_token"] - relation_fields = ["users"] + general_fields = [ + "is_active", + "name", + "markup_percent", + "authentication", + ] + relation_fields = [ + "users", + ] + additional_fields = [ + "additional_fields", + "b2b_auth_token", + ] @register(Feedback) -class FeedbackAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc] +class FeedbackAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] # noinspection PyClassVar model = Feedback # type: ignore [misc] - list_display = ("order_product", "rating", "comment", "modified") - list_filter = ("rating", "is_active") - search_fields = ("order_product__product__name", "comment") - readonly_fields = ("uuid", "modified", "created") - - general_fields = ["is_active", "rating", "comment"] - relation_fields = ["order_product"] + list_display = ( + "order_product", + "rating", + "comment", + "modified", + ) + list_filter = ( + "rating", + "is_active", + ) + search_fields = ( + "order_product__product__name", + "comment", + ) + readonly_fields = ( + "uuid", + "modified", + "created", + ) + general_fields = [ + "is_active", + "rating", + "comment", + ] + relation_fields = [ + "order_product", + ] @register(Order) -class OrderAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc] +class OrderAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] # noinspection PyClassVar model = Order # type: ignore [misc] list_display = ( @@ -355,8 +566,18 @@ class OrderAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: i "buy_time", "modified", ) - list_filter = ("status", "buy_time", "modified", "created") - search_fields = ("user__email", "status", "uuid", "human_readable_id") + list_filter = ( + "status", + "buy_time", + "modified", + "created", + ) + search_fields = ( + "user__email", + "status", + "uuid", + "human_readable_id", + ) readonly_fields = ( "total_price", "total_quantity", @@ -365,29 +586,65 @@ class OrderAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: i "modified", "created", ) - inlines = [OrderProductInline] + inlines = [ + OrderProductInline, + ] form = OrderForm - - general_fields = ["is_active", "user", "status", "notifications", "attributes", "buy_time"] - relation_fields = ["promo_code", "billing_address", "shipping_address"] + general_fields = [ + "is_active", + "user", + "status", + "notifications", + "attributes", + "buy_time", + ] + relation_fields = [ + "promo_code", + "billing_address", + "shipping_address", + ] @register(OrderProduct) -class OrderProductAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc] +class OrderProductAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] # noinspection PyClassVar model = OrderProduct # type: ignore [misc] - list_display = ("order", "product", "quantity", "buy_price", "status", "modified") - list_filter = ("status",) - search_fields = ("order__user__email", "product__name") - readonly_fields = ("uuid", "modified", "created") + list_display = ( + "order", + "product", + "quantity", + "buy_price", + "status", + "modified", + ) + list_filter = ( + "status", + "modified", + ) + search_fields = ( + "order__user__email", + "product__name", + ) + readonly_fields = ( + "uuid", + "modified", + "created", + ) form = OrderProductForm - - general_fields = ["is_active", "quantity", "buy_price", "status"] - relation_fields = ["order", "product"] + general_fields = [ + "is_active", + "quantity", + "buy_price", + "status", + ] + relation_fields = [ + "order", + "product", + ] @register(PromoCode) -class PromoCodeAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc] +class PromoCodeAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] # noinspection PyClassVar model = PromoCode # type: ignore [misc] list_display = ( @@ -398,11 +655,24 @@ class PromoCodeAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # typ "end_time", "used_on", ) - list_filter = ("discount_percent", "discount_amount", "start_time", "end_time") - search_fields = ("code",) - readonly_fields = ("used_on", "uuid", "modified", "created") + list_filter = ( + "discount_percent", + "discount_amount", + "start_time", + "end_time", + ) + search_fields = ( + "code", + "uuid", + "user__email", + ) + readonly_fields = ( + "used_on", + "uuid", + "modified", + "created", + ) autocomplete_fields = ("user",) - general_fields = [ "is_active", "code", @@ -412,32 +682,68 @@ class PromoCodeAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # typ "end_time", "used_on", ] - relation_fields = ["user"] + relation_fields = [ + "user", + ] @register(Promotion) -class PromotionAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc] +class PromotionAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] # noinspection PyClassVar model = Promotion # type: ignore [misc] - list_display = ("name", "discount_percent", "modified") + list_display = ( + "name", + "discount_percent", + "modified", + ) search_fields = ("name",) - readonly_fields = ("uuid", "modified", "created") + readonly_fields = ( + "uuid", + "modified", + "created", + ) autocomplete_fields = ("products",) - - general_fields = ["is_active", "name", "discount_percent", "description"] - relation_fields = ["products"] + general_fields = [ + "is_active", + "name", + "discount_percent", + "description", + ] + relation_fields = [ + "products", + ] @register(Stock) -class StockAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc] +class StockAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] # noinspection PyClassVar model = Stock # type: ignore [misc] - list_display = ("product", "vendor", "sku", "quantity", "price", "modified") - list_filter = ("vendor", "quantity") - search_fields = ("product__name", "vendor__name", "sku") - readonly_fields = ("uuid", "modified", "created") - autocomplete_fields = ("product", "vendor") - + list_display = ( + "product", + "vendor", + "sku", + "quantity", + "price", + "modified", + ) + list_filter = ( + "vendor", + "quantity", + ) + search_fields = ( + "product__name", + "vendor__name", + "sku", + ) + readonly_fields = ( + "uuid", + "modified", + "created", + ) + autocomplete_fields = ( + "product", + "vendor", + ) general_fields = [ "is_active", "sku", @@ -446,48 +752,100 @@ class StockAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: i "purchase_price", "digital_asset", ] - relation_fields = ["product", "vendor"] + relation_fields = [ + "product", + "vendor", + ] @register(Wishlist) -class WishlistAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc] +class WishlistAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] # noinspection PyClassVar model = Wishlist # type: ignore [misc] - list_display = ("user", "modified") - search_fields = ("user__email",) - readonly_fields = ("uuid", "modified", "created") - - general_fields = ["is_active", "user"] - relation_fields = ["products"] + list_display = ( + "user", + "modified", + ) + search_fields = ( + "user__email", + "uuid", + ) + readonly_fields = ( + "uuid", + "modified", + "created", + ) + general_fields = [ + "is_active", + "user", + ] + relation_fields = [ + "products", + ] @register(ProductImage) -class ProductImageAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc] +class ProductImageAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] # noinspection PyClassVar model = ProductImage # type: ignore [misc] - list_display = ("alt", "product", "priority", "modified") - list_filter = ("priority",) - search_fields = ("alt", "product__name") - readonly_fields = ("uuid", "modified", "created") + list_display = ( + "alt", + "product", + "priority", + "modified", + ) + list_filter = ( + "priority", + "modified", + "created", + ) + search_fields = ( + "alt", + "product__name", + ) + readonly_fields = ( + "uuid", + "modified", + "created", + ) autocomplete_fields = ("product",) - general_fields = [ "is_active", "alt", "priority", "image", ] - relation_fields = ["product"] + relation_fields = [ + "product", + ] @register(Address) -class AddressAdmin(FieldsetsMixin, GISModelAdmin): +class AddressAdmin(FieldsetsMixin, GISModelAdmin): # type: ignore [misc] # noinspection PyClassVar model = Address # type: ignore [misc] - list_display = ("street", "city", "region", "country", "user") - list_filter = ("country", "region") - search_fields = ("street", "city", "postal_code", "user__email") - readonly_fields = ("uuid", "modified", "created") + list_display = ( + "street", + "city", + "region", + "country", + "user", + ) + list_filter = ( + "country", + "region", + ) + search_fields = ( + "street", + "city", + "postal_code", + "user__email", + ) + readonly_fields = ( + "uuid", + "modified", + "created", + ) gis_widget_kwargs = { "attrs": { "default_lon": 37.61556, @@ -495,7 +853,6 @@ class AddressAdmin(FieldsetsMixin, GISModelAdmin): "default_zoom": 6, } } - general_fields = [ "is_active", "address_line", @@ -514,13 +871,23 @@ class AddressAdmin(FieldsetsMixin, GISModelAdmin): @register(CustomerRelationshipManagementProvider) -class CustomerRelationshipManagementProviderAdmin(FieldsetsMixin, ModelAdmin): +class CustomerRelationshipManagementProviderAdmin(FieldsetsMixin, ModelAdmin): # type: ignore [misc, type-arg] # noinspection PyClassVar model = CustomerRelationshipManagementProvider # type: ignore [misc] - list_display = ("name", "default") - search_fields = ("name",) - readonly_fields = ("uuid", "modified", "created") - + list_display = ( + "name", + "default", + ) + search_fields = ( + "name", + "uuid", + ) + readonly_fields = ( + "uuid", + "modified", + "created", + ) + form = CRMForm general_fields = [ "is_active", "name", @@ -530,22 +897,29 @@ class CustomerRelationshipManagementProviderAdmin(FieldsetsMixin, ModelAdmin): "attributes", "authentication", ] - relation_fields = [] @register(OrderCrmLink) -class OrderCrmLinkAdmin(FieldsetsMixin, ModelAdmin): +class OrderCrmLinkAdmin(FieldsetsMixin, ModelAdmin): # type: ignore [misc, type-arg] # noinspection PyClassVar model = OrderCrmLink # type: ignore [misc] - list_display = ("crm_lead_id",) - search_fields = ("crm_lead_id",) + list_display = ( + "crm_lead_id", + "order", + ) + search_fields = ( + "crm_lead_id", + "order__human_readable_id", + "order__uuid", + "order__user__uuid", + "order__user__email", + ) readonly_fields = ( "uuid", "modified", "created", "crm_lead_id", ) - general_fields = [ "is_active", "crm_lead_id", @@ -568,22 +942,22 @@ class ConstanceConfig: swapped = False is_composite_pk = False - def get_change_permission(self): + def get_change_permission(self) -> str: return f"change_{self.model_name}" @property - def app_config(self): + def app_config(self) -> AppConfig: return apps.get_app_config(self.app_label) @property - def label(self): + def label(self) -> str: return f"{self.app_label}.{self.object_name}" @property - def label_lower(self): + def label_lower(self) -> str: return f"{self.app_label}.{self.model_name}" - def get_ordered_objects(self): + def get_ordered_objects(self) -> bool: return False _meta = Meta() @@ -593,6 +967,6 @@ class ConstanceConfig: site.unregister([Config]) # noinspection PyTypeChecker site.register([ConstanceConfig], BaseConstanceAdmin) # type: ignore [list-item] -site.site_title = CONSTANCE_CONFIG["PROJECT_NAME"][0] # type: ignore [assignment] +site.site_title = settings.CONSTANCE_CONFIG["PROJECT_NAME"][0] # type: ignore [assignment] site.site_header = "eVibes" -site.index_title = CONSTANCE_CONFIG["PROJECT_NAME"][0] # type: ignore [assignment] +site.index_title = settings.CONSTANCE_CONFIG["PROJECT_NAME"][0] # type: ignore [assignment] diff --git a/core/apps.py b/core/apps.py index 3cd3db0a..749486f9 100644 --- a/core/apps.py +++ b/core/apps.py @@ -11,6 +11,6 @@ class CoreConfig(AppConfig): hide = False # noinspection PyUnresolvedReferences - def ready(self): + def ready(self) -> None: import core.elasticsearch.documents import core.signals # noqa: F401 diff --git a/core/elasticsearch/__init__.py b/core/elasticsearch/__init__.py index eff8e46c..e695c99a 100644 --- a/core/elasticsearch/__init__.py +++ b/core/elasticsearch/__init__.py @@ -113,7 +113,7 @@ def process_query( request: Request | None = None, indexes: tuple[str, ...] = ("categories", "brands", "products"), use_transliteration: bool = True, -) -> dict[str, list[dict]] | None: +) -> dict[str, list[dict[str, Any]]] | None: if not query: raise ValueError(_("no search term provided.")) @@ -235,7 +235,7 @@ def process_query( ): hit_cache.append(h) if getattr(h, "uuid", None): - uuids_by_index.setdefault(h.meta.index, []).append(str(h.uuid)) + uuids_by_index.setdefault(h.meta.index, []).append({"uuid": str(h.uuid)}) products_by_uuid = {} brands_by_uuid = {} @@ -329,9 +329,9 @@ def _lang_analyzer(lang_code: str) -> str: class ActiveOnlyMixin: def get_queryset(self) -> QuerySet[Any]: - return super().get_queryset().filter(is_active=True) + return super().get_queryset().filter(is_active=True) # type: ignore [no-any-return, misc] - def should_index_object(self, obj) -> bool: + def should_index_object(self, obj) -> bool: # type: ignore [no-untyped-def] return getattr(obj, "is_active", False) @@ -436,7 +436,7 @@ COMMON_ANALYSIS = { } -def add_multilang_fields(cls) -> None: +def add_multilang_fields(cls: Any) -> None: for code, _lang in settings.LANGUAGES: lc = code.replace("-", "_").lower() name_field = f"name_{lc}" @@ -480,10 +480,11 @@ def add_multilang_fields(cls) -> None: setattr(cls, f"prepare_{desc_field}", make_prepare(desc_field)) -def populate_index(): +def populate_index() -> None: for doc in registry.get_documents(set(registry.get_models())): qs = doc().get_indexing_queryset() doc().update(qs, parallel=True, refresh=True) + return None def process_system_query( @@ -493,7 +494,7 @@ def process_system_query( size_per_index: int = 25, language_code: str | None = None, use_transliteration: bool = True, -) -> dict[str, list[dict]]: +) -> dict[str, list[dict[str, Any]]]: if not query: raise ValueError(_("no search term provided.")) @@ -526,7 +527,7 @@ def process_system_query( **({"fuzziness": fuzzy} if fuzzy else {}), ) - results: dict[str, list[dict]] = {idx: [] for idx in indexes} + results: dict[str, list[dict[str, Any]]] = {idx: [] for idx in indexes} for idx in indexes: s = Search(index=[idx]).query(mm).extra(size=size_per_index, track_total_hits=False) diff --git a/core/elasticsearch/documents.py b/core/elasticsearch/documents.py index 4e1bb8e9..a7904383 100644 --- a/core/elasticsearch/documents.py +++ b/core/elasticsearch/documents.py @@ -1,3 +1,6 @@ +from typing import Any + +from django.db.models import Model, QuerySet from django_elasticsearch_dsl import Document, fields from django_elasticsearch_dsl.registries import registry from health_check.db.models import TestModel @@ -6,7 +9,7 @@ from core.elasticsearch import COMMON_ANALYSIS, ActiveOnlyMixin, add_multilang_f from core.models import Brand, Category, Product -class BaseDocument(Document): +class BaseDocument(Document): # type: ignore [misc] name = fields.TextField( attr="name", analyzer="standard", @@ -39,10 +42,10 @@ class BaseDocument(Document): "index": {"max_ngram_diff": 20}, } - def prepare_name(self, instance): + def prepare_name(self, instance: Model) -> str: return getattr(instance, "name", "") or "" - def prepare_description(self, instance): + def prepare_description(self, instance: Model) -> str: return getattr(instance, "description", "") or "" @@ -103,7 +106,7 @@ class ProductDocument(ActiveOnlyMixin, BaseDocument): }, ) - def get_queryset(self): + def get_queryset(self) -> QuerySet[Product]: return ( super() .get_queryset() @@ -156,7 +159,7 @@ add_multilang_fields(BrandDocument) registry.register_document(BrandDocument) -class TestModelDocument(Document): +class TestModelDocument(Document): # type: ignore [misc] class Index: name = "testmodels" @@ -164,7 +167,7 @@ class TestModelDocument(Document): model = TestModel fields = ["title"] ignore_signals = True - related_models: list = [] + related_models: list[Any] = [] auto_refresh = False diff --git a/core/filters.py b/core/filters.py index 5fd261fa..713cc480 100644 --- a/core/filters.py +++ b/core/filters.py @@ -1,6 +1,7 @@ import json import logging import uuid +from typing import Any from django.core.exceptions import BadRequest from django.db.models import ( @@ -19,6 +20,7 @@ from django.db.models import ( When, ) from django.db.models.functions import Coalesce +from django.http import HttpRequest from django.utils.http import urlsafe_base64_decode from django.utils.translation import gettext_lazy as _ from django_filters import ( @@ -31,6 +33,8 @@ from django_filters import ( OrderingFilter, UUIDFilter, ) +from graphene import Context +from rest_framework.request import Request from core.elasticsearch import process_query from core.models import Address, Brand, Category, Feedback, Order, Product, Stock, Wishlist @@ -38,8 +42,8 @@ from core.models import Address, Brand, Category, Feedback, Order, Product, Stoc logger = logging.getLogger("django") -class CaseInsensitiveListFilter(BaseInFilter, CharFilter): - def filter(self, qs, value): +class CaseInsensitiveListFilter(BaseInFilter, CharFilter): # type: ignore [misc] + def filter(self, qs: QuerySet[Any], value: Any) -> QuerySet[Any]: if not value: return qs @@ -61,7 +65,7 @@ class CaseInsensitiveListFilter(BaseInFilter, CharFilter): # noinspection PyUnusedLocal -class ProductFilter(FilterSet): +class ProductFilter(FilterSet): # type: ignore [misc] search = CharFilter(field_name="name", method="search_products", label=_("Search")) uuid = UUIDFilter(field_name="uuid", lookup_expr="exact", label=_("UUID")) name = CharFilter(lookup_expr="icontains", label=_("Name")) @@ -121,7 +125,15 @@ class ProductFilter(FilterSet): "order_by", ] - def __init__(self, data=None, queryset=None, *, request=None, prefix=None): + # noinspection PyTypeHints + def __init__( + self, + data: dict[Any, Any] | None = None, + queryset: QuerySet[Product] | None = None, + *, + request: HttpRequest | Request | Context = None, + prefix: str | None = None, + ) -> None: super().__init__(data=data, queryset=queryset, request=request, prefix=prefix) ordering_param = self.data.get("order_by", "") if ordering_param: @@ -133,7 +145,7 @@ class ProductFilter(FilterSet): .annotate(avg_rating=Avg("rating")) .values("avg_rating") ) - self.queryset = self.queryset.annotate( + self.queryset: QuerySet[Product] = self.queryset.annotate( rating=Coalesce( Subquery(feedback_qs, output_field=FloatField()), Value(0, output_field=FloatField()), @@ -148,7 +160,7 @@ class ProductFilter(FilterSet): ) ) - def search_products(self, queryset: QuerySet[Product], name, value): + def search_products(self, queryset: QuerySet[Product], name: str, value: str) -> QuerySet[Product]: if not value: return queryset @@ -156,17 +168,17 @@ class ProductFilter(FilterSet): return queryset.filter(uuid__in=uuids) - def filter_include_flag(self, queryset, name, value): + def filter_include_flag(self, queryset: QuerySet[Product], name: str, value: str) -> QuerySet[Product]: if not self.data.get("category_uuid"): raise BadRequest(_("there must be a category_uuid to use include_subcategories flag")) return queryset - def filter_include_personal_ordered(self, queryset, name, value): + def filter_include_personal_ordered(self, queryset: QuerySet[Product], name: str, value: str) -> QuerySet[Product]: if self.data.get("include_personal_ordered", False): queryset = queryset.filter(stocks__isnull=False, stocks__quantity__gt=0, stocks__price__gt=0) return queryset - def filter_attributes(self, queryset, name, value): + def filter_attributes(self, queryset: QuerySet[Product], name: str, value: str) -> QuerySet[Product]: if not value: return queryset @@ -228,7 +240,7 @@ class ProductFilter(FilterSet): return queryset - def filter_category(self, queryset, name, value): + def filter_category(self, queryset: QuerySet[Product], name: str, value: str) -> QuerySet[Product]: if not value: return queryset @@ -247,7 +259,7 @@ class ProductFilter(FilterSet): return queryset.filter(category__uuid=value) @staticmethod - def _infer_type(value): + def _infer_type(value: str) -> Any: try: parsed_value = json.loads(value) if isinstance(parsed_value, list | dict): @@ -271,7 +283,7 @@ class ProductFilter(FilterSet): return value @property - def qs(self): + def qs(self) -> QuerySet[Product]: qs = super().qs ordering_param = self.data.get("order_by", "") @@ -320,7 +332,8 @@ class ProductFilter(FilterSet): return qs.distinct() -class OrderFilter(FilterSet): +# noinspection PyUnusedLocal +class OrderFilter(FilterSet): # type: ignore [misc] search = CharFilter( method="filter_search", label=_("Search (ID, product name or part number)"), @@ -367,7 +380,7 @@ class OrderFilter(FilterSet): "max_buy_time", ] - def filter_search(self, queryset, _name, value): + def filter_search(self, queryset: QuerySet[Order], name: str, value: str): return queryset.filter( Q(human_readable_id__icontains=value) | Q(order_products__product__name__icontains=value) @@ -375,7 +388,7 @@ class OrderFilter(FilterSet): ).distinct() -class WishlistFilter(FilterSet): +class WishlistFilter(FilterSet): # type: ignore [misc] uuid = UUIDFilter(field_name="uuid", lookup_expr="exact") user_email = CharFilter(field_name="user__email", lookup_expr="iexact", label=_("User email")) user = UUIDFilter(field_name="user__uuid", lookup_expr="exact", label=_("User UUID")) @@ -395,7 +408,7 @@ class WishlistFilter(FilterSet): # noinspection PyUnusedLocal -class CategoryFilter(FilterSet): +class CategoryFilter(FilterSet): # type: ignore [misc] search = CharFilter(field_name="name", method="search_categories", label=_("Search")) uuid = UUIDFilter(field_name="uuid", lookup_expr="exact") name = CharFilter(lookup_expr="icontains", label=_("Name")) @@ -424,7 +437,7 @@ class CategoryFilter(FilterSet): "whole", ] - def search_categories(self, queryset: QuerySet[Product], name, value): + def search_categories(self, queryset: QuerySet[Category], name: str, value: str) -> QuerySet[Category]: if not value: return queryset @@ -432,7 +445,7 @@ class CategoryFilter(FilterSet): return queryset.filter(uuid__in=uuids) - def filter_order_by(self, queryset, _name, value): + def filter_order_by(self, queryset: QuerySet[Category], name: str, value: str) -> QuerySet[Category]: if not value: return queryset @@ -456,7 +469,7 @@ class CategoryFilter(FilterSet): qs = queryset.order_by(order_expression).prefetch_related(None) - def create_ordered_tree_prefetch(max_depth=10): + def create_ordered_tree_prefetch(max_depth=10) -> Prefetch | None: if field == "?": def build_random_prefetch(depth): @@ -494,7 +507,7 @@ class CategoryFilter(FilterSet): return qs - def filter_whole_categories(self, queryset, _name, value): + def filter_whole_categories(self, queryset: QuerySet[Category], name: str, value: str) -> QuerySet[Category]: has_own_products = Exists(Product.objects.filter(category=OuterRef("pk"))) has_desc_products = Exists( Product.objects.filter( @@ -509,7 +522,7 @@ class CategoryFilter(FilterSet): return annotated.filter(has_products=True).distinct() return annotated.filter(has_products=False).distinct() - def filter_parent_uuid(self, queryset, _name, value): + def filter_parent_uuid(self, queryset: QuerySet[Category], name: str, value: str): if value in ("", "null", "None"): return queryset.filter(parent=None) @@ -522,7 +535,7 @@ class CategoryFilter(FilterSet): # noinspection PyUnusedLocal -class BrandFilter(FilterSet): +class BrandFilter(FilterSet): # type: ignore [misc] search = CharFilter(field_name="name", method="search_brands", label=_("Search")) uuid = UUIDFilter(field_name="uuid", lookup_expr="exact") name = CharFilter(lookup_expr="icontains", label=_("Name")) @@ -543,7 +556,7 @@ class BrandFilter(FilterSet): model = Brand fields = ["uuid", "name", "slug", "priority"] - def search_brands(self, queryset: QuerySet[Product], name, value): + def search_brands(self, queryset: QuerySet[Brand], name: str, value: str) -> QuerySet[Brand]: if not value: return queryset @@ -552,7 +565,7 @@ class BrandFilter(FilterSet): return queryset.filter(uuid__in=uuids) -class FeedbackFilter(FilterSet): +class FeedbackFilter(FilterSet): # type: ignore [misc] uuid = UUIDFilter(field_name="uuid", lookup_expr="exact", label=_("UUID")) product_uuid = UUIDFilter( field_name="order_product__product__uuid", @@ -581,7 +594,7 @@ class FeedbackFilter(FilterSet): fields = ["uuid", "product_uuid", "user_uuid", "order_by"] -class AddressFilter(FilterSet): +class AddressFilter(FilterSet): # type: ignore [misc] uuid = UUIDFilter(field_name="uuid", lookup_expr="exact", label=_("UUID")) user_uuid = UUIDFilter(field_name="user__uuid", lookup_expr="exact", label=_("User UUID")) user_email = CharFilter(field_name="user__email", lookup_expr="iexact", label=_("User email")) diff --git a/core/forms.py b/core/forms.py index 97f7b94f..fc7a2b18 100644 --- a/core/forms.py +++ b/core/forms.py @@ -22,6 +22,16 @@ class VendorForm(forms.ModelForm): } +class CRMForm(forms.ModelForm): + class Meta: + model = Product + fields = "__all__" + widgets = { + "authentication": JSONTableWidget(), + "attributes": JSONTableWidget(), + } + + class OrderProductForm(forms.ModelForm): class Meta: model = OrderProduct diff --git a/core/graphene/__init__.py b/core/graphene/__init__.py index 1fe565b9..382eefd7 100644 --- a/core/graphene/__init__.py +++ b/core/graphene/__init__.py @@ -1,10 +1,12 @@ +from typing import Any + from graphene import Mutation class BaseMutation(Mutation): # type: ignore [misc] - def __init__(self, *args, **kwargs) -> None: + def __init__(self, *args: list[Any], **kwargs: dict[Any, Any]) -> None: super().__init__(*args, **kwargs) @staticmethod - def mutate(**kwargs) -> None: + def mutate(**kwargs: Any) -> None: pass diff --git a/core/graphene/mutations.py b/core/graphene/mutations.py index 2abe75cf..77945258 100644 --- a/core/graphene/mutations.py +++ b/core/graphene/mutations.py @@ -1,4 +1,5 @@ import logging +from typing import Any import requests from django.core.cache import cache @@ -31,6 +32,7 @@ from payments.graphene.object_types import TransactionType logger = logging.getLogger("django") +# noinspection PyUnusedLocal class CacheOperator(BaseMutation): class Meta: description = _("cache I/O") @@ -46,10 +48,11 @@ class CacheOperator(BaseMutation): data = GenericScalar(description=_("cached data")) @staticmethod - def mutate(_parent, info, key, data=None, timeout=None): + def mutate(parent, info, key, data=None, timeout=None) -> dict[Any, Any]: # type: ignore [override] return camelize(web_cache(info.context, key, data, timeout)) +# noinspection PyUnusedLocal class RequestCursedURL(BaseMutation): class Meta: description = _("request a CORSed URL") @@ -60,7 +63,7 @@ class RequestCursedURL(BaseMutation): data = GenericScalar(description=_("camelized JSON data from the requested URL")) @staticmethod - def mutate(_parent, info, url): + def mutate(parent, info, url) -> dict[str, Any]: # type: ignore [override] if not is_url_safe(url): raise BadRequest(_("only URLs starting with http(s):// are allowed")) try: @@ -75,6 +78,7 @@ class RequestCursedURL(BaseMutation): return {"data": {"error": str(e)}} +# noinspection PyUnusedLocal,PyTypeChecker class AddOrderProduct(BaseMutation): class Meta: description = _("add a product to the order") @@ -87,7 +91,7 @@ class AddOrderProduct(BaseMutation): order = Field(OrderType) @staticmethod - def mutate(_parent, info, product_uuid, order_uuid, attributes=None): + def mutate(parent, info, product_uuid, order_uuid, attributes=None): # type: ignore [override] user = info.context.user try: order = Order.objects.get(uuid=order_uuid) @@ -101,6 +105,7 @@ class AddOrderProduct(BaseMutation): raise Http404(_(f"order {order_uuid} not found")) from dne +# noinspection PyUnusedLocal class RemoveOrderProduct(BaseMutation): class Meta: description = _("remove a product from the order") @@ -113,7 +118,7 @@ class RemoveOrderProduct(BaseMutation): order = Field(OrderType) @staticmethod - def mutate(_parent, info, product_uuid, order_uuid, attributes=None): + def mutate(parent, info, product_uuid, order_uuid, attributes=None) -> AddOrderProduct | None: # type: ignore [override] user = info.context.user try: order = Order.objects.get(uuid=order_uuid) @@ -127,6 +132,7 @@ class RemoveOrderProduct(BaseMutation): raise Http404(_(f"order {order_uuid} not found")) from dne +# noinspection PyUnusedLocal,PyTypeChecker class RemoveAllOrderProducts(BaseMutation): class Meta: description = _("remove all products from the order") @@ -137,7 +143,7 @@ class RemoveAllOrderProducts(BaseMutation): order = Field(OrderType) @staticmethod - def mutate(_parent, info, order_uuid): + def mutate(parent, info, order_uuid): # type: ignore [override] user = info.context.user order = Order.objects.get(uuid=order_uuid) if not (user.has_perm("core.delete_orderproduct") or user == order.user): @@ -148,6 +154,7 @@ class RemoveAllOrderProducts(BaseMutation): return RemoveAllOrderProducts(order=order) +# noinspection PyUnusedLocal,PyTypeChecker class RemoveOrderProductsOfAKind(BaseMutation): class Meta: description = _("remove a product from the order") @@ -159,7 +166,7 @@ class RemoveOrderProductsOfAKind(BaseMutation): order = Field(OrderType) @staticmethod - def mutate(_parent, info, product_uuid, order_uuid): + def mutate(parent, info, product_uuid, order_uuid): # type: ignore [override] user = info.context.user order = Order.objects.get(uuid=order_uuid) if not (user.has_perm("core.delete_orderproduct") or user == order.user): @@ -170,6 +177,7 @@ class RemoveOrderProductsOfAKind(BaseMutation): return RemoveOrderProductsOfAKind(order=order) +# noinspection PyUnusedLocal,PyTypeChecker class BuyOrder(BaseMutation): class Meta: description = _("buy an order") @@ -189,7 +197,7 @@ class BuyOrder(BaseMutation): @staticmethod def mutate( - _parent, + parent, info, order_uuid=None, order_hr_id=None, @@ -199,7 +207,7 @@ class BuyOrder(BaseMutation): shipping_address=None, billing_address=None, chosen_products=None, - ): + ): # type: ignore [override] if not any([order_uuid, order_hr_id]) or all([order_uuid, order_hr_id]): raise BadRequest(_("please provide either order_uuid or order_hr_id - mutually exclusive")) user = info.context.user @@ -232,6 +240,7 @@ class BuyOrder(BaseMutation): raise Http404(_(f"order {order_uuid} not found")) from dne +# noinspection PyUnusedLocal,PyTypeChecker class BulkOrderAction(BaseMutation): class Meta: description = _("perform an action on a list of products in the order") @@ -246,13 +255,13 @@ class BulkOrderAction(BaseMutation): @staticmethod def mutate( - _parent, + parent, info, action, products, order_uuid=None, order_hr_id=None, - ): + ): # type: ignore [override] if not any([order_uuid, order_hr_id]) or all([order_uuid, order_hr_id]): raise BadRequest(_("please provide either order_uuid or order_hr_id - mutually exclusive")) user = info.context.user @@ -279,6 +288,7 @@ class BulkOrderAction(BaseMutation): raise Http404(_(f"order {order_uuid} not found")) from dne +# noinspection PyUnusedLocal,PyTypeChecker class BulkWishlistAction(BaseMutation): class Meta: description = _("perform an action on a list of products in the wishlist") @@ -292,12 +302,12 @@ class BulkWishlistAction(BaseMutation): @staticmethod def mutate( - _parent, + parent, info, action, products, wishlist_uuid=None, - ): + ): # type: ignore [override] if not wishlist_uuid: raise BadRequest(_("please provide wishlist_uuid value")) user = info.context.user @@ -319,6 +329,7 @@ class BulkWishlistAction(BaseMutation): raise Http404(_(f"wishlist {wishlist_uuid} not found")) from dne +# noinspection PyUnusedLocal class BuyUnregisteredOrder(BaseMutation): class Meta: description = _("purchase an order without account creation") @@ -338,7 +349,7 @@ class BuyUnregisteredOrder(BaseMutation): @staticmethod def mutate( - _parent, + parent, info, products, customer_name, @@ -349,7 +360,7 @@ class BuyUnregisteredOrder(BaseMutation): customer_shipping_address=None, promocode_uuid=None, is_business=False, - ): + ): # type: ignore [override] order = Order.objects.create(status="MOMENTAL") transaction = order.buy_without_registration( products=products, @@ -362,9 +373,11 @@ class BuyUnregisteredOrder(BaseMutation): payment_method=payment_method, is_business=is_business, ) + # noinspection PyTypeChecker return BuyUnregisteredOrder(transaction=transaction) +# noinspection PyUnusedLocal,PyTypeChecker class AddWishlistProduct(BaseMutation): class Meta: description = _("add a product to the wishlist") @@ -376,7 +389,7 @@ class AddWishlistProduct(BaseMutation): wishlist = Field(WishlistType) @staticmethod - def mutate(_parent, info, product_uuid, wishlist_uuid): + def mutate(parent, info, product_uuid, wishlist_uuid): # type: ignore [override] user = info.context.user try: wishlist = Wishlist.objects.get(uuid=wishlist_uuid) @@ -392,6 +405,7 @@ class AddWishlistProduct(BaseMutation): raise Http404(_(f"wishlist {wishlist_uuid} not found")) from dne +# noinspection PyUnusedLocal,PyTypeChecker class RemoveWishlistProduct(BaseMutation): class Meta: description = _("remove a product from the wishlist") @@ -403,7 +417,7 @@ class RemoveWishlistProduct(BaseMutation): wishlist = Field(WishlistType) @staticmethod - def mutate(_parent, info, product_uuid, wishlist_uuid): + def mutate(parent, info, product_uuid, wishlist_uuid): # type: ignore [override] user = info.context.user try: wishlist = Wishlist.objects.get(uuid=wishlist_uuid) @@ -419,6 +433,7 @@ class RemoveWishlistProduct(BaseMutation): raise Http404(_(f"wishlist {wishlist_uuid} not found")) from dne +# noinspection PyUnusedLocal,PyTypeChecker class RemoveAllWishlistProducts(BaseMutation): class Meta: description = _("remove all products from the wishlist") @@ -429,7 +444,7 @@ class RemoveAllWishlistProducts(BaseMutation): wishlist = Field(WishlistType) @staticmethod - def mutate(_parent, info, wishlist_uuid): + def mutate(parent, info, wishlist_uuid): # type: ignore [override] user = info.context.user try: wishlist = Wishlist.objects.get(uuid=wishlist_uuid) @@ -446,6 +461,7 @@ class RemoveAllWishlistProducts(BaseMutation): raise Http404(_(f"wishlist {wishlist_uuid} not found")) from dne +# noinspection PyUnusedLocal,PyTypeChecker class BuyWishlist(BaseMutation): class Meta: description = _("buy all products from the wishlist") @@ -459,7 +475,7 @@ class BuyWishlist(BaseMutation): transaction = Field(TransactionType, required=False) @staticmethod - def mutate(_parent, info, wishlist_uuid, force_balance=False, force_payment=False): + def mutate(parent, info, wishlist_uuid, force_balance=False, force_payment=False): # type: ignore [override] user = info.context.user try: wishlist = Wishlist.objects.get(uuid=wishlist_uuid) @@ -489,6 +505,7 @@ class BuyWishlist(BaseMutation): raise Http404(_(f"wishlist {wishlist_uuid} not found")) from dne +# noinspection PyUnusedLocal,PyTypeChecker class BuyProduct(BaseMutation): class Meta: description = _("buy a product") @@ -507,13 +524,13 @@ class BuyProduct(BaseMutation): @staticmethod def mutate( - _parent, + parent, info, product_uuid, attributes=None, force_balance=False, force_payment=False, - ): + ): # type: ignore [override] user = info.context.user order = Order.objects.create(user=user, status="MOMENTAL") order.add_product(product_uuid=product_uuid, attributes=format_attributes(attributes)) @@ -527,6 +544,7 @@ class BuyProduct(BaseMutation): raise TypeError(_(f"wrong type came from order.buy() method: {type(instance)!s}")) +# noinspection PyUnusedLocal,PyTypeChecker class FeedbackProductAction(BaseMutation): class Meta: description = _("add or delete a feedback for orderproduct") @@ -540,7 +558,7 @@ class FeedbackProductAction(BaseMutation): feedback = Field(FeedbackType, required=False) @staticmethod - def mutate(_parent, info, order_product_uuid, action, comment=None, rating=None): + def mutate(parent, info, order_product_uuid, action, comment=None, rating=None): # type: ignore [override] user = info.context.user try: order_product = OrderProduct.objects.get(uuid=order_product_uuid) @@ -559,6 +577,7 @@ class FeedbackProductAction(BaseMutation): raise Http404(_(f"order product {order_product_uuid} not found")) from dne +# noinspection PyUnusedLocal,PyTypeChecker class CreateProduct(BaseMutation): class Arguments: name = String(required=True) @@ -568,7 +587,7 @@ class CreateProduct(BaseMutation): product = Field(ProductType) @staticmethod - def mutate(_parent, info, name, category_uuid, description=None): + def mutate(parent, info, name, category_uuid, description=None): # type: ignore [override] if not info.context.user.has_perm("core.add_product"): raise PermissionDenied(permission_denied_message) category = Category.objects.get(uuid=category_uuid) @@ -576,6 +595,7 @@ class CreateProduct(BaseMutation): return CreateProduct(product=product) +# noinspection PyUnusedLocal,PyTypeChecker class UpdateProduct(BaseMutation): class Arguments: uuid = UUID(required=True) @@ -586,7 +606,7 @@ class UpdateProduct(BaseMutation): product = Field(ProductType) @staticmethod - def mutate(_parent, info, uuid, name=None, description=None, category_uuid=None): + def mutate(parent, info, uuid, name=None, description=None, category_uuid=None): # type: ignore [override] user = info.context.user if not user.has_perm("core.change_product"): raise PermissionDenied(permission_denied_message) @@ -601,6 +621,7 @@ class UpdateProduct(BaseMutation): return UpdateProduct(product=product) +# noinspection PyUnusedLocal,PyTypeChecker class DeleteProduct(BaseMutation): class Arguments: uuid = UUID(required=True) @@ -608,7 +629,7 @@ class DeleteProduct(BaseMutation): ok = Boolean() @staticmethod - def mutate(_parent, info, uuid): + def mutate(parent, info, uuid): # type: ignore [override] user = info.context.user if not user.has_perm("core.delete_product"): raise PermissionDenied(permission_denied_message) @@ -617,6 +638,7 @@ class DeleteProduct(BaseMutation): return DeleteProduct(ok=True) +# noinspection PyUnusedLocal,PyTypeChecker class CreateAddress(BaseMutation): class Arguments: raw_data = String(required=True, description=_("original address string provided by the user")) @@ -624,13 +646,14 @@ class CreateAddress(BaseMutation): address = Field(AddressType) @staticmethod - def mutate(_parent, info, raw_data): + def mutate(parent, info, raw_data): # type: ignore [override] user = info.context.user if info.context.user.is_authenticated else None address = Address.objects.create(raw_data=raw_data, user=user) return CreateAddress(address=address) +# noinspection PyUnusedLocal class DeleteAddress(BaseMutation): class Arguments: uuid = UUID(required=True) @@ -638,7 +661,7 @@ class DeleteAddress(BaseMutation): success = Boolean() @staticmethod - def mutate(_parent, info, uuid): + def mutate(parent, info, uuid): # type: ignore [override] try: address = Address.objects.get(uuid=uuid) if ( @@ -647,6 +670,7 @@ class DeleteAddress(BaseMutation): or info.context.user == address.user ): address.delete() + # noinspection PyTypeChecker return DeleteAddress(success=True) raise PermissionDenied(permission_denied_message) @@ -656,6 +680,7 @@ class DeleteAddress(BaseMutation): raise Http404(_(f"{name} does not exist: {uuid}")) from dne +# noinspection PyUnusedLocal class AutocompleteAddress(BaseMutation): class Arguments: q = String() @@ -664,7 +689,7 @@ class AutocompleteAddress(BaseMutation): suggestions = GenericScalar() @staticmethod - def mutate(_parent, info, q, limit): + def mutate(parent, info, q, limit): # type: ignore [override] if 1 > limit > 10: raise BadRequest(_("limit must be between 1 and 10")) try: @@ -672,9 +697,11 @@ class AutocompleteAddress(BaseMutation): except Exception as e: raise BadRequest(f"geocoding error: {e!s}") from e + # noinspection PyTypeChecker return AutocompleteAddress(suggestions=suggestions) +# noinspection PyUnusedLocal class ContactUs(BaseMutation): class Arguments: email = String(required=True) @@ -687,7 +714,7 @@ class ContactUs(BaseMutation): error = String() @staticmethod - def mutate(_parent, info, email, name, subject, message, phone_number=None): + def mutate(parent, info, email, name, subject, message, phone_number=None): # type: ignore [override] try: contact_us_email.delay( { @@ -698,12 +725,14 @@ class ContactUs(BaseMutation): "message": message, } ) + # noinspection PyTypeChecker return ContactUs(received=True) except Exception as e: + # noinspection PyTypeChecker return ContactUs(received=False, error=str(e)) -# noinspection PyArgumentList +# noinspection PyArgumentList PyUnusedLocal class Search(BaseMutation): class Arguments: query = String(required=True) @@ -714,9 +743,10 @@ class Search(BaseMutation): description = _("elasticsearch - works like a charm") @staticmethod - def mutate(_parent, info, query): + def mutate(parent, info, query): # type: ignore [override] data = process_query(query=query, request=info.context) + # noinspection PyTypeChecker return Search( results=SearchResultsType( products=data["products"], diff --git a/core/graphene/object_types.py b/core/graphene/object_types.py index b80fdcc9..8d97f7b9 100644 --- a/core/graphene/object_types.py +++ b/core/graphene/object_types.py @@ -3,7 +3,7 @@ from typing import Any from constance import config from django.core.cache import cache -from django.db.models import Max, Min +from django.db.models import Max, Min, QuerySet from django.db.models.functions import Length from django.utils.translation import gettext_lazy as _ from graphene import ( @@ -60,7 +60,7 @@ from payments.graphene.object_types import TransactionType logger = logging.getLogger("django") -class SEOMetaType(ObjectType): +class SEOMetaType(ObjectType): # type: ignore [misc] title = String() description = String() canonical = String() @@ -71,7 +71,7 @@ class SEOMetaType(ObjectType): hreflang = String() -class AttributeType(DjangoObjectType): +class AttributeType(DjangoObjectType): # type: ignore [misc] values = List(lambda: AttributeValueType, description=_("attribute values")) class Meta: @@ -81,7 +81,7 @@ class AttributeType(DjangoObjectType): filter_fields = ["uuid"] description = _("attributes") - def resolve_values(self, info): + def resolve_values(self, info) -> QuerySet[AttributeValue]: base_qs = AttributeValue.objects.filter(attribute=self) product_uuid = getattr(info.context, "_product_uuid", None) @@ -91,7 +91,7 @@ class AttributeType(DjangoObjectType): return base_qs -class AttributeGroupType(DjangoObjectType): +class AttributeGroupType(DjangoObjectType): # type: ignore [misc] attributes = List(lambda: AttributeType, description=_("grouped attributes")) class Meta: @@ -101,7 +101,7 @@ class AttributeGroupType(DjangoObjectType): filter_fields = ["uuid"] description = _("groups of attributes") - def resolve_attributes(self: AttributeGroup, info): + def resolve_attributes(self: AttributeGroup, info) -> QuerySet[Attribute]: product_uuid = getattr(info.context, "_product_uuid", None) qs = self.attributes.all() @@ -112,7 +112,7 @@ class AttributeGroupType(DjangoObjectType): return qs -class BrandType(DjangoObjectType): +class BrandType(DjangoObjectType): # type: ignore [misc] categories = List(lambda: CategoryType, description=_("categories")) seo_meta = Field(SEOMetaType, description=_("SEO Meta snapshot")) @@ -123,18 +123,18 @@ class BrandType(DjangoObjectType): filter_fields = ["uuid", "name"] description = _("brands") - def resolve_categories(self: Brand, info): + def resolve_categories(self: Brand, info) -> QuerySet[Category]: if info.context.user.has_perm("core.view_category"): return self.categories.all() return self.categories.filter(is_active=True) - def resolve_big_logo(self: Brand, info): + def resolve_big_logo(self: Brand, info) -> str | None: return info.context.build_absolute_uri(self.big_logo.url) if self.big_logo else "" - def resolve_small_logo(self: Brand, info): + def resolve_small_logo(self: Brand, info) -> str | None: return info.context.build_absolute_uri(self.small_logo.url) if self.small_logo else "" - def resolve_seo_meta(self: Brand, info): + def resolve_seo_meta(self: Brand, info) -> dict[str, str | list[Any] | dict[str, str] | None]: lang = graphene_current_lang() base = f"https://{config.BASE_DOMAIN}" canonical = f"{base}/{lang}/brand/{self.slug}" @@ -177,17 +177,17 @@ class BrandType(DjangoObjectType): } -class FilterableAttributeType(ObjectType): +class FilterableAttributeType(ObjectType): # type: ignore [misc] attribute_name = String(required=True) possible_values = List(String, required=True) -class MinMaxPriceType(ObjectType): +class MinMaxPriceType(ObjectType): # type: ignore [misc] min_price = Float() max_price = Float() -class CategoryType(DjangoObjectType): +class CategoryType(DjangoObjectType): # type: ignore [misc] children = List( lambda: CategoryType, description=_("categories"), @@ -340,7 +340,7 @@ class CategoryType(DjangoObjectType): } -class VendorType(DjangoObjectType): +class VendorType(DjangoObjectType): # type: ignore [misc] markup_percent = Float(description=_("markup percentage")) class Meta: @@ -351,7 +351,7 @@ class VendorType(DjangoObjectType): description = _("vendors") -class AddressType(DjangoObjectType): +class AddressType(DjangoObjectType): # type: ignore [misc] latitude = Float(description=_("Latitude (Y coordinate)")) longitude = Float(description=_("Longitude (X coordinate)")) @@ -381,7 +381,7 @@ class AddressType(DjangoObjectType): return self.location.y if self.location else None -class FeedbackType(DjangoObjectType): +class FeedbackType(DjangoObjectType): # type: ignore [misc] comment = String(description=_("comment")) rating = Int(description=_("rating value from 1 to 10, inclusive, or 0 if not set.")) @@ -393,7 +393,7 @@ class FeedbackType(DjangoObjectType): description = _("represents feedback from a user.") -class OrderProductType(DjangoObjectType): +class OrderProductType(DjangoObjectType): # type: ignore [misc] attributes = GenericScalar(description=_("attributes")) notifications = GenericScalar(description=_("notifications")) download_url = String(description=_("download url for this order product if applicable")) @@ -429,7 +429,7 @@ class OrderProductType(DjangoObjectType): return self.download_url -class OrderType(DjangoObjectType): +class OrderType(DjangoObjectType): # type: ignore [misc] order_products = DjangoFilterConnectionField( OrderProductType, description=_("a list of order products in this order") ) @@ -482,7 +482,7 @@ class OrderType(DjangoObjectType): return None -class ProductImageType(DjangoObjectType): +class ProductImageType(DjangoObjectType): # type: ignore [misc] image = String(description=_("image url")) class Meta: @@ -496,7 +496,7 @@ class ProductImageType(DjangoObjectType): return info.context.build_absolute_uri(self.image.url) if self.image else "" -class ProductType(DjangoObjectType): +class ProductType(DjangoObjectType): # type: ignore [misc] category = Field(CategoryType, description=_("category")) images = DjangoFilterConnectionField(ProductImageType, description=_("images")) feedbacks = DjangoFilterConnectionField(FeedbackType, description=_("feedbacks")) @@ -605,7 +605,7 @@ class ProductType(DjangoObjectType): } -class AttributeValueType(DjangoObjectType): +class AttributeValueType(DjangoObjectType): # type: ignore [misc] value = String(description=_("attribute value")) class Meta: @@ -616,7 +616,7 @@ class AttributeValueType(DjangoObjectType): description = _("attribute value") -class PromoCodeType(DjangoObjectType): +class PromoCodeType(DjangoObjectType): # type: ignore [misc] discount = Float() discount_type = String() @@ -640,7 +640,7 @@ class PromoCodeType(DjangoObjectType): return "percent" if self.discount_percent else "amount" -class PromotionType(DjangoObjectType): +class PromotionType(DjangoObjectType): # type: ignore [misc] products = DjangoFilterConnectionField(ProductType, description=_("products on sale")) class Meta: @@ -651,7 +651,7 @@ class PromotionType(DjangoObjectType): description = _("promotions") -class StockType(DjangoObjectType): +class StockType(DjangoObjectType): # type: ignore [misc] vendor = Field(VendorType, description=_("vendor")) product = Field(ProductType, description=_("product")) @@ -663,7 +663,7 @@ class StockType(DjangoObjectType): description = _("stocks") -class WishlistType(DjangoObjectType): +class WishlistType(DjangoObjectType): # type: ignore [misc] products = DjangoFilterConnectionField(ProductType, description=_("wishlisted products")) class Meta: @@ -673,7 +673,7 @@ class WishlistType(DjangoObjectType): description = _("wishlists") -class ProductTagType(DjangoObjectType): +class ProductTagType(DjangoObjectType): # type: ignore [misc] product_set = DjangoFilterConnectionField(ProductType, description=_("tagged products")) class Meta: @@ -684,7 +684,7 @@ class ProductTagType(DjangoObjectType): description = _("product tags") -class CategoryTagType(DjangoObjectType): +class CategoryTagType(DjangoObjectType): # type: ignore [misc] category_set = DjangoFilterConnectionField(CategoryType, description=_("tagged categories")) class Meta: @@ -695,7 +695,7 @@ class CategoryTagType(DjangoObjectType): description = _("categories tags") -class ConfigType(ObjectType): +class ConfigType(ObjectType): # type: ignore [misc] project_name = String(description=_("project name")) base_domain = String(description=_("company email")) company_name = String(description=_("company name")) @@ -712,7 +712,7 @@ class ConfigType(ObjectType): description = _("company configuration") -class LanguageType(ObjectType): +class LanguageType(ObjectType): # type: ignore [misc] code = String(description=_("language code")) name = String(description=_("language name")) flag = String(description=_("language flag, if exists :)")) @@ -721,40 +721,40 @@ class LanguageType(ObjectType): description = _("supported languages") -class SearchProductsResultsType(ObjectType): +class SearchProductsResultsType(ObjectType): # type: ignore [misc] uuid = UUID() name = String() slug = String() image = String() -class SearchCategoriesResultsType(ObjectType): +class SearchCategoriesResultsType(ObjectType): # type: ignore [misc] uuid = UUID() name = String() slug = String() image = String() -class SearchBrandsResultsType(ObjectType): +class SearchBrandsResultsType(ObjectType): # type: ignore [misc] uuid = UUID() name = String() slug = String() image = String() -class SearchPostsResultsType(ObjectType): +class SearchPostsResultsType(ObjectType): # type: ignore [misc] uuid = UUID() name = String() slug = String() -class SearchResultsType(ObjectType): +class SearchResultsType(ObjectType): # type: ignore [misc] products = List(description=_("products search results"), of_type=SearchProductsResultsType) categories = List(description=_("products search results"), of_type=SearchCategoriesResultsType) brands = List(description=_("products search results"), of_type=SearchBrandsResultsType) posts = List(description=_("posts search results"), of_type=SearchPostsResultsType) -class BulkProductInput(InputObjectType): +class BulkProductInput(InputObjectType): # type: ignore [misc] uuid = UUID(required=True) attributes = GenericScalar(required=False) diff --git a/core/locale/ar_AR/LC_MESSAGES/django.mo b/core/locale/ar_AR/LC_MESSAGES/django.mo index 29b92258..aa360179 100644 Binary files a/core/locale/ar_AR/LC_MESSAGES/django.mo and b/core/locale/ar_AR/LC_MESSAGES/django.mo differ diff --git a/core/locale/ar_AR/LC_MESSAGES/django.po b/core/locale/ar_AR/LC_MESSAGES/django.po index 67aac41a..9e0ef9e3 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -48,82 +48,86 @@ msgstr "تم التعديل" msgid "when the object was last modified" msgstr "متى تم تحرير الكائن آخر مرة" -#: core/admin.py:63 +#: core/admin.py:68 msgid "translations" msgstr "الترجمات" -#: core/admin.py:67 +#: core/admin.py:72 msgid "general" msgstr "جنرال لواء" -#: core/admin.py:69 +#: core/admin.py:74 msgid "relations" msgstr "العلاقات" -#: core/admin.py:87 +#: core/admin.py:76 +msgid "additional info" +msgstr "معلومات إضافية" + +#: core/admin.py:94 msgid "metadata" msgstr "البيانات الوصفية" -#: core/admin.py:94 +#: core/admin.py:101 msgid "timestamps" msgstr "الطوابع الزمنية" -#: core/admin.py:109 +#: core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "تنشيط المحدد _PH_0__%(verbose_name_plural)s" -#: core/admin.py:114 +#: core/admin.py:121 msgid "selected items have been activated." msgstr "تم تفعيل العناصر المختارة!" -#: core/admin.py:120 +#: core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "إلغاء التنشيط المحدد _PH_0_%(verbose_name_plural)s" -#: core/admin.py:125 +#: core/admin.py:132 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:701 core/models.py:709 +#: core/admin.py:144 core/graphene/object_types.py:609 +#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 msgid "attribute value" msgstr "قيمة السمة" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 +#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718 msgid "attribute values" msgstr "قيم السمات" -#: core/admin.py:146 +#: core/admin.py:153 msgid "image" msgstr "الصورة" -#: core/admin.py:147 core/graphene/object_types.py:501 +#: core/admin.py:154 core/graphene/object_types.py:501 msgid "images" msgstr "الصور" -#: core/admin.py:155 core/models.py:459 +#: core/admin.py:162 core/models.py:467 msgid "stock" msgstr "المخزون" -#: core/admin.py:156 core/graphene/object_types.py:663 +#: core/admin.py:163 core/graphene/object_types.py:663 msgid "stocks" msgstr "الأسهم" -#: core/admin.py:166 core/models.py:1667 +#: core/admin.py:173 core/models.py:1675 msgid "order product" msgstr "طلب المنتج" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 msgid "order products" msgstr "اطلب المنتجات" -#: core/admin.py:180 core/admin.py:181 +#: core/admin.py:187 core/admin.py:188 msgid "children" msgstr "الأطفال" -#: core/admin.py:566 +#: core/admin.py:940 msgid "Config" msgstr "التكوين" @@ -707,23 +711,23 @@ msgstr "حذف علاقة الطلب-المنتج" msgid "add or remove feedback on an order–product relation" msgstr "إضافة أو إزالة الملاحظات على العلاقة بين الطلب والمنتج" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 msgid "no search term provided." msgstr "لم يتم توفير مصطلح بحث." -#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +#: core/filters.py:65 core/filters.py:399 core/filters.py:526 msgid "Search" msgstr "بحث" -#: core/filters.py:66 core/filters.py:554 core/filters.py:583 +#: core/filters.py:66 core/filters.py:556 core/filters.py:585 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:399 core/filters.py:526 +#: core/filters.py:67 core/filters.py:401 core/filters.py:528 msgid "Name" msgstr "الاسم" -#: core/filters.py:68 core/filters.py:528 +#: core/filters.py:68 core/filters.py:530 msgid "Categories" msgstr "الفئات" @@ -731,7 +735,7 @@ msgstr "الفئات" msgid "Categories Slugs" msgstr "الفئات الرخويات" -#: core/filters.py:71 core/filters.py:407 +#: core/filters.py:71 core/filters.py:409 msgid "Tags" msgstr "الوسوم" @@ -759,8 +763,8 @@ msgstr "السمات" msgid "Quantity" msgstr "الكمية" -#: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:301 core/models.py:383 core/models.py:536 +#: core/filters.py:78 core/filters.py:403 core/filters.py:529 +#: core/models.py:309 core/models.py:391 core/models.py:544 msgid "Slug" msgstr "سبيكة" @@ -776,7 +780,7 @@ msgstr "تضمين الفئات الفرعية" msgid "Include personal ordered" msgstr "تضمين المنتجات المطلوبة شخصيًا" -#: core/filters.py:85 core/models.py:540 +#: core/filters.py:85 core/models.py:548 msgid "SKU" msgstr "وحدة التخزين" @@ -784,48 +788,48 @@ msgstr "وحدة التخزين" msgid "there must be a category_uuid to use include_subcategories flag" msgstr "يجب أن يكون هناك category_uid لاستخدام علامة تضمين_الفئات_الفرعية" -#: core/filters.py:324 +#: core/filters.py:326 msgid "Search (ID, product name or part number)" msgstr "البحث (المعرف أو اسم المنتج أو رقم الجزء)" -#: core/filters.py:327 +#: core/filters.py:329 msgid "Bought after (inclusive)" msgstr "تم الشراء بعد (شامل)" -#: core/filters.py:328 +#: core/filters.py:330 msgid "Bought before (inclusive)" msgstr "تم الشراء من قبل (شامل)" -#: core/filters.py:331 core/filters.py:378 core/filters.py:585 +#: core/filters.py:333 core/filters.py:380 core/filters.py:587 msgid "User email" msgstr "البريد الإلكتروني للمستخدم" -#: core/filters.py:332 core/filters.py:379 core/filters.py:563 -#: core/filters.py:584 +#: core/filters.py:334 core/filters.py:381 core/filters.py:565 +#: core/filters.py:586 msgid "User UUID" msgstr "معرّف المستخدم UUID" -#: core/filters.py:333 +#: core/filters.py:335 msgid "Status" msgstr "الحالة" -#: core/filters.py:337 +#: core/filters.py:339 msgid "Human Readable ID" msgstr "معرّف قابل للقراءة من قبل الإنسان" -#: core/filters.py:400 +#: core/filters.py:402 msgid "Parent" msgstr "الوالدين" -#: core/filters.py:404 +#: core/filters.py:406 msgid "Whole category(has at least 1 product or not)" msgstr "الفئة الكاملة (تحتوي على منتج واحد على الأقل أو لا)" -#: core/filters.py:408 +#: core/filters.py:410 msgid "Level" msgstr "المستوى" -#: core/filters.py:558 +#: core/filters.py:560 msgid "Product UUID" msgstr "UUID المنتج" @@ -881,7 +885,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:679 +#: core/graphene/mutations.py:527 core/viewsets.py:680 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "جاء نوع خاطئ من طريقة order.buy(): {type(instance)!s}" @@ -955,9 +959,9 @@ msgstr "طلب المنتج {order_product_uuid} غير موجود!" msgid "original address string provided by the user" msgstr "سلسلة العنوان الأصلي المقدمة من المستخدم" -#: 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 +#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 +#: core/models.py:1289 core/models.py:1318 core/models.py:1343 +#: core/viewsets.py:683 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} غير موجود: {uuid}!" @@ -971,8 +975,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:672 core/models.py:1144 -#: core/models.py:1744 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 +#: core/models.py:1752 msgid "attributes" msgstr "السمات" @@ -985,11 +989,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:326 core/models.py:626 +#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 msgid "categories" msgstr "الفئات" -#: core/graphene/object_types.py:124 core/models.py:397 +#: core/graphene/object_types.py:124 core/models.py:405 msgid "brands" msgstr "العلامات التجارية" @@ -998,7 +1002,7 @@ msgid "category image url" msgstr "الفئات" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:263 +#: core/models.py:271 msgid "markup percentage" msgstr "النسبة المئوية للترميز" @@ -1020,7 +1024,7 @@ msgstr "العلامات الخاصة بهذه الفئة" msgid "products in this category" msgstr "المنتجات في هذه الفئة" -#: core/graphene/object_types.py:351 core/models.py:169 +#: core/graphene/object_types.py:351 core/models.py:177 msgid "vendors" msgstr "البائعون" @@ -1045,7 +1049,7 @@ msgid "represents feedback from a user." msgstr "يمثل ملاحظات من المستخدم." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1138 +#: core/models.py:1146 msgid "notifications" msgstr "الإشعارات" @@ -1053,7 +1057,7 @@ msgstr "الإشعارات" msgid "download url for this order product if applicable" msgstr "تحميل الرابط الخاص بمنتج الطلب هذا إن أمكن" -#: core/graphene/object_types.py:400 core/models.py:1860 +#: core/graphene/object_types.py:400 core/models.py:1868 msgid "feedback" msgstr "الملاحظات" @@ -1061,7 +1065,7 @@ msgstr "الملاحظات" msgid "a list of order products in this order" msgstr "قائمة بطلب المنتجات بهذا الترتيب" -#: core/graphene/object_types.py:436 core/models.py:1108 +#: core/graphene/object_types.py:436 core/models.py:1116 msgid "billing address" msgstr "عنوان إرسال الفواتير" @@ -1089,7 +1093,7 @@ msgstr "هل جميع المنتجات في الطلب رقمي" msgid "transactions for this order" msgstr "المعاملات الخاصة بهذا الطلب" -#: core/graphene/object_types.py:465 core/models.py:1172 +#: core/graphene/object_types.py:465 core/models.py:1180 msgid "orders" msgstr "الطلبات" @@ -1101,19 +1105,19 @@ msgstr "رابط الصورة" msgid "product's images" msgstr "صور المنتج" -#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 +#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 msgid "category" msgstr "الفئة" -#: core/graphene/object_types.py:502 core/models.py:1861 +#: core/graphene/object_types.py:502 core/models.py:1869 msgid "feedbacks" msgstr "الملاحظات" -#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 +#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 msgid "brand" msgstr "العلامة التجارية" -#: core/graphene/object_types.py:504 core/models.py:101 +#: core/graphene/object_types.py:504 core/models.py:102 msgid "attribute groups" msgstr "مجموعات السمات" @@ -1141,7 +1145,7 @@ msgstr "عدد الملاحظات" msgid "only available for personal orders" msgstr "المنتجات متاحة للطلبات الشخصية فقط" -#: core/graphene/object_types.py:534 core/models.py:550 +#: core/graphene/object_types.py:534 core/models.py:558 msgid "products" msgstr "المنتجات" @@ -1153,15 +1157,15 @@ msgstr "الرموز الترويجية" msgid "products on sale" msgstr "المنتجات المعروضة للبيع" -#: core/graphene/object_types.py:651 core/models.py:798 +#: core/graphene/object_types.py:651 core/models.py:806 msgid "promotions" msgstr "العروض الترويجية" -#: core/graphene/object_types.py:655 core/models.py:168 +#: core/graphene/object_types.py:655 core/models.py:176 msgid "vendor" msgstr "البائع" -#: core/graphene/object_types.py:656 core/models.py:549 +#: core/graphene/object_types.py:656 core/models.py:557 #: 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 +1173,11 @@ msgstr "البائع" msgid "product" msgstr "المنتج" -#: core/graphene/object_types.py:667 core/models.py:821 +#: core/graphene/object_types.py:667 core/models.py:829 msgid "wishlisted products" msgstr "المنتجات المفضلة" -#: core/graphene/object_types.py:673 core/models.py:838 +#: core/graphene/object_types.py:673 core/models.py:846 msgid "wishlists" msgstr "قوائم التمنيات" @@ -1181,7 +1185,7 @@ msgstr "قوائم التمنيات" msgid "tagged products" msgstr "المنتجات الموسومة" -#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 +#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 msgid "product tags" msgstr "علامات المنتج" @@ -1268,7 +1272,7 @@ msgstr "نتائج البحث عن المنتجات" msgid "posts search results" msgstr "نتائج البحث عن المنتجات" -#: core/models.py:70 +#: core/models.py:71 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1280,23 +1284,23 @@ msgstr "" "يشكل بنية هرمية. يمكن أن يكون هذا مفيدًا لتصنيف السمات وإدارتها بشكل أكثر " "فعالية في النظام المعقد." -#: core/models.py:86 +#: core/models.py:87 msgid "parent of this group" msgstr "والد هذه المجموعة" -#: core/models.py:87 +#: core/models.py:88 msgid "parent attribute group" msgstr "مجموعة السمات الرئيسية" -#: core/models.py:91 core/models.py:92 +#: core/models.py:92 core/models.py:93 msgid "attribute group's name" msgstr "اسم مجموعة السمات" -#: core/models.py:100 core/models.py:634 +#: core/models.py:101 core/models.py:642 msgid "attribute group" msgstr "مجموعة السمات" -#: core/models.py:106 +#: core/models.py:107 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1313,33 +1317,41 @@ msgstr "" "أيضًا ببيانات وصفية وقيود إضافية، مما يجعله مناسبًا للاستخدام في الأنظمة " "التي تتفاعل مع البائعين الخارجيين." -#: core/models.py:119 +#: core/models.py:120 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "تخزين بيانات الاعتماد ونقاط النهاية المطلوبة لاتصالات واجهة برمجة التطبيقات " "الخاصة بالمورّد" -#: core/models.py:120 +#: core/models.py:121 msgid "authentication info" msgstr "معلومات المصادقة" -#: core/models.py:125 +#: core/models.py:126 msgid "define the markup for products retrieved from this vendor" msgstr "تحديد الترميز للمنتجات المسترجعة من هذا البائع" -#: core/models.py:126 +#: core/models.py:127 msgid "vendor markup percentage" msgstr "نسبة هامش الربح للبائع" -#: core/models.py:130 +#: core/models.py:131 msgid "name of this vendor" msgstr "اسم هذا البائع" -#: core/models.py:131 +#: core/models.py:132 msgid "vendor name" msgstr "اسم البائع" -#: core/models.py:177 +#: core/models.py:143 +msgid "response file" +msgstr "ملف الاستجابة" + +#: core/models.py:144 +msgid "vendor's last processing response" +msgstr "استجابة البائع الأخيرة للمعالجة" + +#: core/models.py:185 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1352,27 +1364,27 @@ msgstr "" "عرض سهل الاستخدام. وهي تدعم العمليات التي يتم تصديرها من خلال mixins وتوفر " "تخصيص البيانات الوصفية لأغراض إدارية." -#: core/models.py:189 core/models.py:220 +#: core/models.py:197 core/models.py:228 msgid "internal tag identifier for the product tag" msgstr "معرّف العلامة الداخلي لعلامة المنتج" -#: core/models.py:190 core/models.py:221 +#: core/models.py:198 core/models.py:229 msgid "tag name" msgstr "اسم العلامة" -#: core/models.py:194 core/models.py:225 +#: core/models.py:202 core/models.py:233 msgid "user-friendly name for the product tag" msgstr "اسم سهل الاستخدام لعلامة المنتج" -#: core/models.py:195 core/models.py:226 +#: core/models.py:203 core/models.py:234 msgid "tag display name" msgstr "اسم عرض العلامة" -#: core/models.py:203 +#: core/models.py:211 msgid "product tag" msgstr "علامة المنتج" -#: core/models.py:209 +#: core/models.py:217 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 +1393,15 @@ msgstr "" "يمثل علامة فئة تستخدم للمنتجات. تمثل هذه الفئة علامة فئة يمكن استخدامها لربط" " المنتجات وتصنيفها. وهي تتضمن سمات لمعرف علامة داخلي واسم عرض سهل الاستخدام." -#: core/models.py:234 +#: core/models.py:242 msgid "category tag" msgstr "علامة الفئة" -#: core/models.py:235 core/models.py:307 +#: core/models.py:243 core/models.py:315 msgid "category tags" msgstr "علامات الفئة" -#: core/models.py:240 +#: core/models.py:248 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1409,51 +1421,51 @@ msgstr "" " الفئات ووصفها وتسلسلها الهرمي، بالإضافة إلى تعيين سمات مثل الصور أو " "العلامات أو الأولوية." -#: core/models.py:254 +#: core/models.py:262 msgid "upload an image representing this category" msgstr "تحميل صورة تمثل هذه الفئة" -#: core/models.py:257 +#: core/models.py:265 msgid "category image" msgstr "صورة الفئة" -#: core/models.py:262 +#: core/models.py:270 msgid "define a markup percentage for products in this category" msgstr "تحديد نسبة ترميز للمنتجات في هذه الفئة" -#: core/models.py:271 +#: core/models.py:279 msgid "parent of this category to form a hierarchical structure" msgstr "أصل هذه الفئة لتكوين بنية هرمية" -#: core/models.py:272 +#: core/models.py:280 msgid "parent category" msgstr "الفئة الرئيسية" -#: core/models.py:277 +#: core/models.py:285 msgid "category name" msgstr "اسم الفئة" -#: core/models.py:278 +#: core/models.py:286 msgid "provide a name for this category" msgstr "تقديم اسم لهذه الفئة" -#: core/models.py:285 +#: core/models.py:293 msgid "add a detailed description for this category" msgstr "إضافة وصف تفصيلي لهذه الفئة" -#: core/models.py:286 +#: core/models.py:294 msgid "category description" msgstr "وصف الفئة" -#: core/models.py:306 +#: core/models.py:314 msgid "tags that help describe or group this category" msgstr "العلامات التي تساعد في وصف هذه الفئة أو تجميعها" -#: core/models.py:313 core/models.py:389 +#: core/models.py:321 core/models.py:397 msgid "priority" msgstr "الأولوية" -#: core/models.py:332 +#: core/models.py:340 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 +1478,47 @@ msgstr "" "المرتبطة بها وسبيكة فريدة وترتيب الأولوية. يسمح بتنظيم وتمثيل البيانات " "المتعلقة بالعلامة التجارية داخل التطبيق." -#: core/models.py:342 +#: core/models.py:350 msgid "name of this brand" msgstr "اسم هذه العلامة التجارية" -#: core/models.py:343 +#: core/models.py:351 msgid "brand name" msgstr "اسم العلامة التجارية" -#: core/models.py:350 +#: core/models.py:358 msgid "upload a logo representing this brand" msgstr "تحميل شعار يمثل هذه العلامة التجارية" -#: core/models.py:352 +#: core/models.py:360 msgid "brand small image" msgstr "صورة العلامة التجارية الصغيرة" -#: core/models.py:358 +#: core/models.py:366 msgid "upload a big logo representing this brand" msgstr "رفع شعار كبير يمثل هذه العلامة التجارية" -#: core/models.py:360 +#: core/models.py:368 msgid "brand big image" msgstr "صورة كبيرة للعلامة التجارية" -#: core/models.py:365 +#: core/models.py:373 msgid "add a detailed description of the brand" msgstr "إضافة وصف تفصيلي للعلامة التجارية" -#: core/models.py:366 +#: core/models.py:374 msgid "brand description" msgstr "وصف العلامة التجارية" -#: core/models.py:371 +#: core/models.py:379 msgid "optional categories that this brand is associated with" msgstr "الفئات الاختيارية التي ترتبط بها هذه العلامة التجارية" -#: core/models.py:372 +#: core/models.py:380 msgid "associated categories" msgstr "الفئات" -#: core/models.py:402 +#: core/models.py:410 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 +1533,68 @@ msgstr "" "والأصول الرقمية. وهي جزء من نظام إدارة المخزون للسماح بتتبع وتقييم المنتجات " "المتاحة من مختلف البائعين." -#: core/models.py:414 +#: core/models.py:422 msgid "the vendor supplying this product stock" msgstr "البائع الذي يورد هذا المنتج المخزون" -#: core/models.py:415 +#: core/models.py:423 msgid "associated vendor" msgstr "البائع المرتبط" -#: core/models.py:419 +#: core/models.py:427 msgid "final price to the customer after markups" msgstr "السعر النهائي للعميل بعد هوامش الربح" -#: core/models.py:420 +#: core/models.py:428 msgid "selling price" msgstr "سعر البيع" -#: core/models.py:425 +#: core/models.py:433 msgid "the product associated with this stock entry" msgstr "المنتج المرتبط بإدخال المخزون هذا" -#: core/models.py:426 core/models.py:697 core/models.py:744 -#: core/models.py:1641 +#: core/models.py:434 core/models.py:705 core/models.py:752 +#: core/models.py:1649 msgid "associated product" msgstr "المنتج المرتبط" -#: core/models.py:433 +#: core/models.py:441 msgid "the price paid to the vendor for this product" msgstr "السعر المدفوع للبائع مقابل هذا المنتج" -#: core/models.py:434 +#: core/models.py:442 msgid "vendor purchase price" msgstr "سعر الشراء من البائع" -#: core/models.py:438 +#: core/models.py:446 msgid "available quantity of the product in stock" msgstr "الكمية المتوفرة من المنتج في المخزون" -#: core/models.py:439 +#: core/models.py:447 msgid "quantity in stock" msgstr "الكمية في المخزون" -#: core/models.py:443 +#: core/models.py:451 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU المعين من قبل البائع لتحديد المنتج" -#: core/models.py:444 +#: core/models.py:452 msgid "vendor sku" msgstr "وحدة تخزين البائع" -#: core/models.py:450 +#: core/models.py:458 msgid "digital file associated with this stock if applicable" msgstr "الملف الرقمي المرتبط بهذا المخزون إن أمكن" -#: core/models.py:451 +#: core/models.py:459 msgid "digital file" msgstr "ملف رقمي" -#: core/models.py:460 +#: core/models.py:468 msgid "stock entries" msgstr "إدخالات المخزون" -#: core/models.py:465 +#: core/models.py:473 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1602,55 +1614,55 @@ msgstr "" "للخصائص التي يتم الوصول إليها بشكل متكرر لتحسين الأداء. يتم استخدامه لتعريف " "ومعالجة بيانات المنتج والمعلومات المرتبطة به داخل التطبيق." -#: core/models.py:478 +#: core/models.py:486 msgid "category this product belongs to" msgstr "الفئة التي ينتمي إليها هذا المنتج" -#: core/models.py:487 +#: core/models.py:495 msgid "optionally associate this product with a brand" msgstr "ربط هذا المنتج اختياريًا بعلامة تجارية" -#: core/models.py:493 +#: core/models.py:501 msgid "tags that help describe or group this product" msgstr "العلامات التي تساعد في وصف أو تجميع هذا المنتج" -#: core/models.py:498 +#: core/models.py:506 msgid "indicates whether this product is digitally delivered" msgstr "يشير إلى ما إذا كان هذا المنتج يتم تسليمه رقميًا أم لا" -#: core/models.py:499 +#: core/models.py:507 msgid "is product digital" msgstr "هل المنتج رقمي" -#: core/models.py:505 +#: core/models.py:513 msgid "provide a clear identifying name for the product" msgstr "توفير اسم تعريفي واضح للمنتج" -#: core/models.py:506 +#: core/models.py:514 msgid "product name" msgstr "اسم المنتج" -#: core/models.py:511 core/models.py:786 +#: core/models.py:519 core/models.py:794 msgid "add a detailed description of the product" msgstr "إضافة وصف تفصيلي للمنتج" -#: core/models.py:512 +#: core/models.py:520 msgid "product description" msgstr "وصف المنتج" -#: core/models.py:519 +#: core/models.py:527 msgid "part number for this product" msgstr "رقم الجزء لهذا المنتج" -#: core/models.py:520 +#: core/models.py:528 msgid "part number" msgstr "رقم الجزء" -#: core/models.py:539 +#: core/models.py:547 msgid "stock keeping unit for this product" msgstr "وحدة حفظ المخزون لهذا المنتج" -#: core/models.py:613 +#: core/models.py:621 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 +1677,68 @@ msgstr "" "من القيم، بما في ذلك السلسلة، والعدد الصحيح، والعائم، والمنطقي، والصفيف، " "والكائن. وهذا يسمح بهيكلة ديناميكية ومرنة للبيانات." -#: core/models.py:625 +#: core/models.py:633 msgid "category of this attribute" msgstr "فئة هذه السمة" -#: core/models.py:633 +#: core/models.py:641 msgid "group of this attribute" msgstr "مجموعة هذه السمة" -#: core/models.py:639 +#: core/models.py:647 msgid "string" msgstr "الخيط" -#: core/models.py:640 +#: core/models.py:648 msgid "integer" msgstr "عدد صحيح" -#: core/models.py:641 +#: core/models.py:649 msgid "float" msgstr "تعويم" -#: core/models.py:642 +#: core/models.py:650 msgid "boolean" msgstr "منطقية" -#: core/models.py:643 +#: core/models.py:651 msgid "array" msgstr "المصفوفة" -#: core/models.py:644 +#: core/models.py:652 msgid "object" msgstr "الكائن" -#: core/models.py:646 +#: core/models.py:654 msgid "type of the attribute's value" msgstr "نوع قيمة السمة" -#: core/models.py:647 +#: core/models.py:655 msgid "value type" msgstr "نوع القيمة" -#: core/models.py:652 +#: core/models.py:660 msgid "name of this attribute" msgstr "اسم هذه السمة" -#: core/models.py:653 +#: core/models.py:661 msgid "attribute's name" msgstr "اسم السمة" -#: core/models.py:659 +#: core/models.py:667 msgid "is filterable" msgstr "قابل للتصفية" -#: core/models.py:660 +#: core/models.py:668 msgid "designates whether this attribute can be used for filtering or not" msgstr "يحدد ما إذا كان يمكن استخدام هذه السمة للتصفية أم لا" -#: core/models.py:671 core/models.py:689 +#: core/models.py:679 core/models.py:697 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "السمة" -#: core/models.py:677 +#: core/models.py:685 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 +1747,19 @@ msgstr "" "يمثل قيمة محددة لسمة مرتبطة بمنتج ما. يربط \"السمة\" بـ \"قيمة\" فريدة، مما " "يسمح بتنظيم أفضل وتمثيل ديناميكي لخصائص المنتج." -#: core/models.py:688 +#: core/models.py:696 msgid "attribute of this value" msgstr "سمة هذه القيمة" -#: core/models.py:696 +#: core/models.py:704 msgid "the specific product associated with this attribute's value" msgstr "المنتج المحدد المرتبط بقيمة هذه السمة" -#: core/models.py:702 +#: core/models.py:710 msgid "the specific value for this attribute" msgstr "القيمة المحددة لهذه السمة" -#: core/models.py:715 +#: core/models.py:723 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 +1771,39 @@ msgstr "" "بالمنتجات، بما في ذلك وظيفة تحميل ملفات الصور، وربطها بمنتجات معينة، وتحديد " "ترتيب عرضها. وتتضمن أيضًا ميزة إمكانية الوصول مع نص بديل للصور." -#: core/models.py:726 +#: core/models.py:734 msgid "provide alternative text for the image for accessibility" msgstr "توفير نص بديل للصورة لإمكانية الوصول" -#: core/models.py:727 +#: core/models.py:735 msgid "image alt text" msgstr "النص البديل للصورة" -#: core/models.py:730 +#: core/models.py:738 msgid "upload the image file for this product" msgstr "تحميل ملف الصورة لهذا المنتج" -#: core/models.py:731 core/models.py:756 +#: core/models.py:739 core/models.py:764 msgid "product image" msgstr "صورة المنتج" -#: core/models.py:737 +#: core/models.py:745 msgid "determines the order in which images are displayed" msgstr "يحدد الترتيب الذي يتم عرض الصور به" -#: core/models.py:738 +#: core/models.py:746 msgid "display priority" msgstr "أولوية العرض" -#: core/models.py:743 +#: core/models.py:751 msgid "the product that this image represents" msgstr "المنتج الذي تمثله هذه الصورة" -#: core/models.py:757 +#: core/models.py:765 msgid "product images" msgstr "صور المنتج" -#: core/models.py:762 +#: core/models.py:770 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 +1818,39 @@ msgstr "" "بالمنتجات القابلة للتطبيق. تتكامل مع كتالوج المنتجات لتحديد العناصر المتأثرة" " في الحملة." -#: core/models.py:774 +#: core/models.py:782 msgid "percentage discount for the selected products" msgstr "النسبة المئوية للخصم على المنتجات المختارة" -#: core/models.py:775 +#: core/models.py:783 msgid "discount percentage" msgstr "نسبة الخصم" -#: core/models.py:780 +#: core/models.py:788 msgid "provide a unique name for this promotion" msgstr "تقديم اسم فريد لهذا العرض الترويجي" -#: core/models.py:781 +#: core/models.py:789 msgid "promotion name" msgstr "اسم الترقية" -#: core/models.py:787 +#: core/models.py:795 msgid "promotion description" msgstr "وصف الترقية" -#: core/models.py:792 +#: core/models.py:800 msgid "select which products are included in this promotion" msgstr "حدد المنتجات المشمولة في هذا العرض الترويجي" -#: core/models.py:793 +#: core/models.py:801 msgid "included products" msgstr "المنتجات المشمولة" -#: core/models.py:797 +#: core/models.py:805 msgid "promotion" msgstr "الترقية" -#: core/models.py:808 +#: core/models.py:816 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 +1861,23 @@ msgstr "" " لإدارة مجموعة من المنتجات، وتدعم عمليات مثل إضافة المنتجات وإزالتها، " "بالإضافة إلى دعم عمليات إضافة وإزالة منتجات متعددة في وقت واحد." -#: core/models.py:820 +#: core/models.py:828 msgid "products that the user has marked as wanted" msgstr "المنتجات التي حددها المستخدم على أنها مطلوبة" -#: core/models.py:828 +#: core/models.py:836 msgid "user who owns this wishlist" msgstr "المستخدم الذي يمتلك قائمة الرغبات هذه" -#: core/models.py:829 +#: core/models.py:837 msgid "wishlist owner" msgstr "مالك قائمة الرغبات" -#: core/models.py:837 +#: core/models.py:845 msgid "wishlist" msgstr "قائمة الرغبات" -#: core/models.py:879 +#: core/models.py:887 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1879,19 +1891,19 @@ msgstr "" "الوصفية. يحتوي على أساليب وخصائص للتعامل مع نوع الملف ومسار التخزين للملفات " "الوثائقية. وهو يوسع الوظائف من مزيج معين ويوفر ميزات مخصصة إضافية." -#: core/models.py:892 +#: core/models.py:900 msgid "documentary" msgstr "فيلم وثائقي" -#: core/models.py:893 +#: core/models.py:901 msgid "documentaries" msgstr "الأفلام الوثائقية" -#: core/models.py:903 +#: core/models.py:911 msgid "unresolved" msgstr "لم يتم حلها" -#: core/models.py:908 +#: core/models.py:916 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1910,59 +1922,59 @@ msgstr "" "يتيح تخزين استجابات واجهة برمجة التطبيقات الخام لمزيد من المعالجة أو الفحص. " "تسمح الفئة أيضًا بربط عنوان مع مستخدم، مما يسهل التعامل مع البيانات الشخصية." -#: core/models.py:923 +#: core/models.py:931 msgid "address line for the customer" msgstr "سطر العنوان للعميل" -#: core/models.py:924 +#: core/models.py:932 msgid "address line" msgstr "سطر العنوان" -#: core/models.py:926 +#: core/models.py:934 msgid "street" msgstr "الشارع" -#: core/models.py:927 +#: core/models.py:935 msgid "district" msgstr "المنطقة" -#: core/models.py:928 +#: core/models.py:936 msgid "city" msgstr "المدينة" -#: core/models.py:929 +#: core/models.py:937 msgid "region" msgstr "المنطقة" -#: core/models.py:930 +#: core/models.py:938 msgid "postal code" msgstr "الرمز البريدي" -#: core/models.py:931 +#: core/models.py:939 msgid "country" msgstr "البلد" -#: core/models.py:938 +#: core/models.py:946 msgid "geolocation point: (longitude, latitude)" msgstr "نقطة تحديد الموقع الجغرافي(خط الطول، خط العرض)" -#: core/models.py:941 +#: core/models.py:949 msgid "full JSON response from geocoder for this address" msgstr "استجابة JSON كاملة من أداة التشفير الجغرافي لهذا العنوان" -#: core/models.py:946 +#: core/models.py:954 msgid "stored JSON response from the geocoding service" msgstr "استجابة JSON مخزّنة من خدمة الترميز الجغرافي" -#: core/models.py:954 +#: core/models.py:962 msgid "address" msgstr "العنوان" -#: core/models.py:955 +#: core/models.py:963 msgid "addresses" msgstr "العناوين" -#: core/models.py:967 +#: core/models.py:975 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 +1989,72 @@ msgstr "" "والمستخدم المرتبط به (إن وجد)، وحالة استخدامه. ويتضمن وظيفة للتحقق من صحة " "الرمز الترويجي وتطبيقه على الطلب مع ضمان استيفاء القيود." -#: core/models.py:981 +#: core/models.py:989 msgid "unique code used by a user to redeem a discount" msgstr "الرمز الفريد الذي يستخدمه المستخدم لاسترداد قيمة الخصم" -#: core/models.py:982 +#: core/models.py:990 msgid "promo code identifier" msgstr "معرّف الرمز الترويجي" -#: core/models.py:989 +#: core/models.py:997 msgid "fixed discount amount applied if percent is not used" msgstr "مبلغ الخصم الثابت المطبق في حالة عدم استخدام النسبة المئوية" -#: core/models.py:990 +#: core/models.py:998 msgid "fixed discount amount" msgstr "مبلغ الخصم الثابت" -#: core/models.py:996 +#: core/models.py:1004 msgid "percentage discount applied if fixed amount is not used" msgstr "النسبة المئوية للخصم المطبق في حالة عدم استخدام مبلغ ثابت" -#: core/models.py:997 +#: core/models.py:1005 msgid "percentage discount" msgstr "النسبة المئوية للخصم" -#: core/models.py:1002 +#: core/models.py:1010 msgid "timestamp when the promocode expires" msgstr "الطابع الزمني عند انتهاء صلاحية الرمز الترويجي" -#: core/models.py:1003 +#: core/models.py:1011 msgid "end validity time" msgstr "وقت انتهاء الصلاحية" -#: core/models.py:1008 +#: core/models.py:1016 msgid "timestamp from which this promocode is valid" msgstr "الطابع الزمني الذي يكون هذا الرمز الترويجي صالحاً منه" -#: core/models.py:1009 +#: core/models.py:1017 msgid "start validity time" msgstr "وقت بدء الصلاحية" -#: core/models.py:1014 +#: core/models.py:1022 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "الطابع الزمني عند استخدام الرمز الترويجي، فارغ إذا لم يتم استخدامه بعد" -#: core/models.py:1015 +#: core/models.py:1023 msgid "usage timestamp" msgstr "الطابع الزمني للاستخدام" -#: core/models.py:1020 +#: core/models.py:1028 msgid "user assigned to this promocode if applicable" msgstr "المستخدم المعين لهذا الرمز الترويجي إن أمكن" -#: core/models.py:1021 +#: core/models.py:1029 msgid "assigned user" msgstr "المستخدم المعين" -#: core/models.py:1028 +#: core/models.py:1036 msgid "promo code" msgstr "الرمز الترويجي" -#: core/models.py:1029 +#: core/models.py:1037 msgid "promo codes" msgstr "الرموز الترويجية" -#: core/models.py:1044 +#: core/models.py:1052 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2050,16 +2062,16 @@ msgstr "" "يجب تحديد نوع واحد فقط من الخصم (المبلغ أو النسبة المئوية)، وليس كلا النوعين" " أو لا هذا ولا ذاك." -#: core/models.py:1065 +#: core/models.py:1073 msgid "promocode already used" msgstr "تم استخدام الرمز الترويجي بالفعل" -#: core/models.py:1081 +#: core/models.py:1089 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "نوع الخصم غير صالح للرمز الترويجي {self.uuid}" -#: core/models.py:1090 +#: core/models.py:1098 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 +2086,134 @@ msgstr "" "مرتبطة، ويمكن تطبيق العروض الترويجية، وتعيين العناوين، وتحديث تفاصيل الشحن " "أو الفوترة. وبالمثل، تدعم الوظيفة إدارة المنتجات في دورة حياة الطلب." -#: core/models.py:1107 +#: core/models.py:1115 msgid "the billing address used for this order" msgstr "عنوان إرسال الفواتير المستخدم لهذا الطلب" -#: core/models.py:1115 +#: core/models.py:1123 msgid "optional promo code applied to this order" msgstr "الرمز الترويجي الاختياري المطبق على هذا الطلب" -#: core/models.py:1116 +#: core/models.py:1124 msgid "applied promo code" msgstr "الرمز الترويجي المطبق" -#: core/models.py:1124 +#: core/models.py:1132 msgid "the shipping address used for this order" msgstr "عنوان الشحن المستخدم لهذا الطلب" -#: core/models.py:1125 +#: core/models.py:1133 msgid "shipping address" msgstr "عنوان الشحن" -#: core/models.py:1131 +#: core/models.py:1139 msgid "current status of the order in its lifecycle" msgstr "الحالة الحالية للطلب في دورة حياته" -#: core/models.py:1132 +#: core/models.py:1140 msgid "order status" msgstr "حالة الطلب" -#: core/models.py:1137 core/models.py:1618 +#: core/models.py:1145 core/models.py:1626 msgid "json structure of notifications to display to users" msgstr "" "بنية JSON للإشعارات التي سيتم عرضها للمستخدمين، في واجهة مستخدم المشرف، يتم " "استخدام عرض الجدول" -#: core/models.py:1143 +#: core/models.py:1151 msgid "json representation of order attributes for this order" msgstr "تمثيل JSON لسمات الطلب لهذا الطلب" -#: core/models.py:1149 +#: core/models.py:1157 msgid "the user who placed the order" msgstr "المستخدم الذي قدم الطلب" -#: core/models.py:1150 +#: core/models.py:1158 msgid "user" msgstr "المستخدم" -#: core/models.py:1156 +#: core/models.py:1164 msgid "the timestamp when the order was finalized" msgstr "الطابع الزمني عند الانتهاء من الطلب" -#: core/models.py:1157 +#: core/models.py:1165 msgid "buy time" msgstr "وقت الشراء" -#: core/models.py:1164 +#: core/models.py:1172 msgid "a human-readable identifier for the order" msgstr "معرّف يمكن قراءته بواسطة البشر للطلب" -#: core/models.py:1165 +#: core/models.py:1173 msgid "human readable id" msgstr "معرّف يمكن قراءته من قبل البشر" -#: core/models.py:1171 +#: core/models.py:1179 msgid "order" msgstr "الطلب" -#: core/models.py:1209 +#: core/models.py:1217 msgid "a user must have only one pending order at a time" msgstr "يجب أن يكون لدى المستخدم طلب واحد فقط معلق في كل مرة!" -#: core/models.py:1249 +#: core/models.py:1257 msgid "you cannot add products to an order that is not a pending one" msgstr "لا يمكنك إضافة منتجات إلى طلب غير معلق إلى طلب غير معلق" -#: core/models.py:1254 +#: core/models.py:1262 msgid "you cannot add inactive products to order" msgstr "لا يمكنك إضافة منتجات غير نشطة للطلب" -#: core/models.py:1271 +#: core/models.py:1279 msgid "you cannot add more products than available in stock" msgstr "لا يمكنك إضافة منتجات أكثر من المتوفرة في المخزون" -#: core/models.py:1293 core/models.py:1318 core/models.py:1326 +#: core/models.py:1301 core/models.py:1326 core/models.py:1334 msgid "you cannot remove products from an order that is not a pending one" msgstr "لا يمكنك إزالة المنتجات من طلب غير معلق من طلب غير معلق" -#: core/models.py:1314 +#: core/models.py:1322 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} غير موجود مع الاستعلام <{query}>!" -#: core/models.py:1346 +#: core/models.py:1354 msgid "promocode does not exist" msgstr "الرمز الترويجي غير موجود" -#: core/models.py:1352 +#: core/models.py:1360 msgid "you can only buy physical products with shipping address specified" msgstr "يمكنك فقط شراء المنتجات المادية مع تحديد عنوان الشحن فقط!" -#: core/models.py:1371 +#: core/models.py:1379 msgid "address does not exist" msgstr "العنوان غير موجود" -#: core/models.py:1392 core/models.py:1461 +#: core/models.py:1400 core/models.py:1469 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "لا يمكنك الشراء في هذه اللحظة، يرجى المحاولة مرة أخرى بعد بضع دقائق." -#: core/models.py:1395 core/models.py:1457 +#: core/models.py:1403 core/models.py:1465 msgid "invalid force value" msgstr "قيمة القوة غير صالحة" -#: core/models.py:1401 core/models.py:1464 +#: core/models.py:1409 core/models.py:1472 msgid "you cannot purchase an empty order!" msgstr "لا يمكنك شراء طلبية فارغة!" -#: core/models.py:1420 +#: core/models.py:1428 msgid "you cannot buy an order without a user" msgstr "لا يمكنك شراء طلب بدون مستخدم!" -#: core/models.py:1434 +#: core/models.py:1442 msgid "a user without a balance cannot buy with balance" msgstr "المستخدم بدون رصيد لا يمكنه الشراء بالرصيد!" -#: core/models.py:1439 +#: core/models.py:1447 msgid "insufficient funds to complete the order" msgstr "عدم كفاية الأموال لإكمال الطلب" -#: core/models.py:1473 +#: core/models.py:1481 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2209,14 +2221,14 @@ msgstr "" "لا يمكنك الشراء بدون تسجيل، يرجى تقديم المعلومات التالية: اسم العميل، البريد" " الإلكتروني للعميل، رقم هاتف العميل" -#: core/models.py:1482 +#: core/models.py:1490 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "طريقة الدفع غير صالحة: {payment_method} من {available_payment_methods}!" -#: core/models.py:1591 +#: core/models.py:1599 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2235,108 +2247,108 @@ msgstr "" " تدعم منطق العمل، مثل حساب السعر الإجمالي أو إنشاء عنوان URL للتنزيل " "للمنتجات الرقمية. يتكامل النموذج مع نموذجي الطلب والمنتج ويخزن مرجعًا لهما." -#: core/models.py:1606 +#: core/models.py:1614 msgid "the price paid by the customer for this product at purchase time" msgstr "السعر الذي دفعه العميل لهذا المنتج وقت الشراء" -#: core/models.py:1607 +#: core/models.py:1615 msgid "purchase price at order time" msgstr "سعر الشراء وقت الطلب" -#: core/models.py:1612 +#: core/models.py:1620 msgid "internal comments for admins about this ordered product" msgstr "تعليقات داخلية للمسؤولين حول هذا المنتج المطلوب" -#: core/models.py:1613 +#: core/models.py:1621 msgid "internal comments" msgstr "التعليقات الداخلية" -#: core/models.py:1619 +#: core/models.py:1627 msgid "user notifications" msgstr "إشعارات المستخدم" -#: core/models.py:1624 +#: core/models.py:1632 msgid "json representation of this item's attributes" msgstr "تمثيل JSON لسمات هذا العنصر" -#: core/models.py:1625 +#: core/models.py:1633 msgid "ordered product attributes" msgstr "سمات المنتج المطلوبة" -#: core/models.py:1630 +#: core/models.py:1638 msgid "reference to the parent order that contains this product" msgstr "الإشارة إلى الطلب الأصلي الذي يحتوي على هذا المنتج" -#: core/models.py:1631 +#: core/models.py:1639 msgid "parent order" msgstr "ترتيب الوالدين" -#: core/models.py:1640 +#: core/models.py:1648 msgid "the specific product associated with this order line" msgstr "المنتج المحدد المرتبط بخط الطلب هذا" -#: core/models.py:1647 +#: core/models.py:1655 msgid "quantity of this specific product in the order" msgstr "كمية هذا المنتج المحدد في الطلب" -#: core/models.py:1648 +#: core/models.py:1656 msgid "product quantity" msgstr "كمية المنتج" -#: core/models.py:1655 +#: core/models.py:1663 msgid "current status of this product in the order" msgstr "الحالة الحالية لهذا المنتج بالترتيب" -#: core/models.py:1656 +#: core/models.py:1664 msgid "product line status" msgstr "حالة خط الإنتاج" -#: core/models.py:1719 +#: core/models.py:1727 msgid "order product must have an order" msgstr "يجب أن يكون لـ Orderproduct طلب مرتبط به!" -#: core/models.py:1721 +#: core/models.py:1729 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "تم تحديد إجراء خاطئ للتغذية الراجعة: {action}!" -#: core/models.py:1735 +#: core/models.py:1743 msgid "you cannot feedback an order which is not received" msgstr "لا يمكنك التعليق على طلب لم يتم استلامه" -#: core/models.py:1741 +#: core/models.py:1749 msgid "name" msgstr "الاسم" -#: core/models.py:1742 +#: core/models.py:1750 msgid "URL of the integration" msgstr "رابط التكامل" -#: core/models.py:1743 +#: core/models.py:1751 msgid "authentication credentials" msgstr "بيانات اعتماد المصادقة" -#: core/models.py:1765 +#: core/models.py:1773 msgid "you can only have one default CRM provider" msgstr "يمكن أن يكون لديك موفر CRM افتراضي واحد فقط" -#: core/models.py:1775 +#: core/models.py:1783 msgid "CRM" msgstr "إدارة علاقات العملاء" -#: core/models.py:1776 +#: core/models.py:1784 msgid "CRMs" msgstr "إدارة علاقات العملاء" -#: core/models.py:1788 +#: core/models.py:1796 msgid "order CRM link" msgstr "رابط إدارة علاقات العملاء الخاصة بالطلب" -#: core/models.py:1789 +#: core/models.py:1797 msgid "orders CRM links" msgstr "روابط إدارة علاقات العملاء الخاصة بالطلبات" -#: core/models.py:1794 +#: core/models.py:1802 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2351,15 +2363,15 @@ msgstr "" "إذا كان الأصل مرئيًا للعامة. وتتضمن طريقة لإنشاء عنوان URL لتنزيل الأصل " "عندما يكون الطلب المرتبط في حالة مكتملة." -#: core/models.py:1808 +#: core/models.py:1816 msgid "download" msgstr "تنزيل" -#: core/models.py:1809 +#: core/models.py:1817 msgid "downloads" msgstr "التنزيلات" -#: core/models.py:1823 +#: core/models.py:1831 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2372,28 +2384,28 @@ msgstr "" "المستخدم، ومرجع إلى المنتج ذي الصلة في الطلب، وتقييم معين من قبل المستخدم. " "يستخدم الفصل حقول قاعدة البيانات لنمذجة وإدارة بيانات الملاحظات بشكل فعال." -#: core/models.py:1835 +#: core/models.py:1843 msgid "user-provided comments about their experience with the product" msgstr "التعليقات المقدمة من المستخدمين حول تجربتهم مع المنتج" -#: core/models.py:1836 +#: core/models.py:1844 msgid "feedback comments" msgstr "تعليقات على الملاحظات" -#: core/models.py:1843 +#: core/models.py:1851 msgid "" "references the specific product in an order that this feedback is about" msgstr "الإشارة إلى المنتج المحدد في الطلب الذي تدور حوله هذه الملاحظات" -#: core/models.py:1844 +#: core/models.py:1852 msgid "related order product" msgstr "منتجات الطلبات ذات الصلة" -#: core/models.py:1849 +#: core/models.py:1857 msgid "user-assigned rating for the product" msgstr "التصنيف المعين من قبل المستخدم للمنتج" -#: core/models.py:1850 +#: core/models.py:1858 msgid "product rating" msgstr "تصنيف المنتج" @@ -2603,22 +2615,22 @@ msgstr "كل من البيانات والمهلة مطلوبة" msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "قيمة المهلة غير صالحة، يجب أن تكون بين 0 و216000 ثانية" -#: core/utils/emailing.py:25 +#: core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | بادر بالاتصال بنا" -#: core/utils/emailing.py:74 +#: core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | تأكيد الطلب" -#: core/utils/emailing.py:109 +#: core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | طلبية تم تسليمها" -#: core/utils/emailing.py:197 +#: core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | الرمز الترويجي الممنوح" @@ -2854,7 +2866,7 @@ msgstr "" " \"مجموعة عرض الملاحظات\" الأساسية وتستفيد من نظام تصفية Django للاستعلام عن" " البيانات." -#: core/viewsets.py:593 +#: core/viewsets.py:594 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2871,7 +2883,7 @@ msgstr "" "عليه. يستخدم ViewSet العديد من المتسلسلات بناءً على الإجراء المحدد الذي يتم " "تنفيذه ويفرض الأذونات وفقًا لذلك أثناء التفاعل مع بيانات الطلبات." -#: core/viewsets.py:782 +#: core/viewsets.py:784 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2884,11 +2896,11 @@ msgstr "" "من الأذونات، وتبديل المتسلسل بناءً على الإجراء المطلوب. بالإضافة إلى ذلك، " "توفر إجراءً مفصلاً للتعامل مع الملاحظات على مثيلات OrderProduct" -#: core/viewsets.py:833 +#: core/viewsets.py:835 msgid "Manages operations related to Product images in the application. " msgstr "يدير العمليات المتعلقة بصور المنتج في التطبيق." -#: core/viewsets.py:845 +#: core/viewsets.py:847 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -2896,15 +2908,15 @@ msgstr "" "يدير استرداد مثيلات PromoCode ومعالجتها من خلال إجراءات واجهة برمجة " "التطبيقات المختلفة." -#: core/viewsets.py:866 +#: core/viewsets.py:868 msgid "Represents a view set for managing promotions. " msgstr "يمثل مجموعة عرض لإدارة الترقيات." -#: core/viewsets.py:878 +#: core/viewsets.py:880 msgid "Handles operations related to Stock data in the system." msgstr "يتعامل مع العمليات المتعلقة ببيانات المخزون في النظام." -#: core/viewsets.py:892 +#: core/viewsets.py:894 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -2921,7 +2933,7 @@ msgstr "" "الأذونات للتأكد من أن المستخدمين يمكنهم فقط إدارة قوائم الرغبات الخاصة بهم " "ما لم يتم منح أذونات صريحة." -#: core/viewsets.py:1007 +#: core/viewsets.py:1009 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -2934,12 +2946,12 @@ msgstr "" "العناوين. وتتضمن سلوكيات متخصصة لطرق HTTP المختلفة، وتجاوزات المتسلسل، " "ومعالجة الأذونات بناءً على سياق الطلب." -#: core/viewsets.py:1074 +#: core/viewsets.py:1076 #, python-brace-format msgid "Geocoding error: {e}" msgstr "خطأ في الترميز الجغرافي: {e}" -#: core/viewsets.py:1081 +#: core/viewsets.py:1083 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/cs_CZ/LC_MESSAGES/django.mo b/core/locale/cs_CZ/LC_MESSAGES/django.mo index 8b96c028..3502a453 100644 Binary files a/core/locale/cs_CZ/LC_MESSAGES/django.mo and b/core/locale/cs_CZ/LC_MESSAGES/django.mo differ diff --git a/core/locale/cs_CZ/LC_MESSAGES/django.po b/core/locale/cs_CZ/LC_MESSAGES/django.po index 4274b7d6..21e8b2bd 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -50,82 +50,86 @@ msgstr "Upraveno" msgid "when the object was last modified" msgstr "Kdy byl objekt naposledy upraven" -#: core/admin.py:63 +#: core/admin.py:68 msgid "translations" msgstr "Překlady" -#: core/admin.py:67 +#: core/admin.py:72 msgid "general" msgstr "Obecné" -#: core/admin.py:69 +#: core/admin.py:74 msgid "relations" msgstr "Vztahy" -#: core/admin.py:87 +#: core/admin.py:76 +msgid "additional info" +msgstr "další informace" + +#: core/admin.py:94 msgid "metadata" msgstr "Metadata" -#: core/admin.py:94 +#: core/admin.py:101 msgid "timestamps" msgstr "Časová razítka" -#: core/admin.py:109 +#: core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Aktivace vybraného %(verbose_name_plural)s" -#: core/admin.py:114 +#: core/admin.py:121 msgid "selected items have been activated." msgstr "Vybrané položky byly aktivovány!" -#: core/admin.py:120 +#: core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Deaktivace vybraných %(verbose_name_plural)s" -#: core/admin.py:125 +#: core/admin.py:132 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:701 core/models.py:709 +#: core/admin.py:144 core/graphene/object_types.py:609 +#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 msgid "attribute value" msgstr "Hodnota atributu" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 +#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718 msgid "attribute values" msgstr "Hodnoty atributů" -#: core/admin.py:146 +#: core/admin.py:153 msgid "image" msgstr "Obrázek" -#: core/admin.py:147 core/graphene/object_types.py:501 +#: core/admin.py:154 core/graphene/object_types.py:501 msgid "images" msgstr "Obrázky" -#: core/admin.py:155 core/models.py:459 +#: core/admin.py:162 core/models.py:467 msgid "stock" msgstr "Stock" -#: core/admin.py:156 core/graphene/object_types.py:663 +#: core/admin.py:163 core/graphene/object_types.py:663 msgid "stocks" msgstr "Zásoby" -#: core/admin.py:166 core/models.py:1667 +#: core/admin.py:173 core/models.py:1675 msgid "order product" msgstr "Objednat produkt" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 msgid "order products" msgstr "Objednat produkty" -#: core/admin.py:180 core/admin.py:181 +#: core/admin.py:187 core/admin.py:188 msgid "children" msgstr "Děti" -#: core/admin.py:566 +#: core/admin.py:940 msgid "Config" msgstr "Konfigurace" @@ -732,23 +736,23 @@ 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:118 core/elasticsearch/__init__.py:498 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 msgid "no search term provided." msgstr "Nebyl zadán žádný vyhledávací termín." -#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +#: core/filters.py:65 core/filters.py:399 core/filters.py:526 msgid "Search" msgstr "Vyhledávání" -#: core/filters.py:66 core/filters.py:554 core/filters.py:583 +#: core/filters.py:66 core/filters.py:556 core/filters.py:585 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:399 core/filters.py:526 +#: core/filters.py:67 core/filters.py:401 core/filters.py:528 msgid "Name" msgstr "Název" -#: core/filters.py:68 core/filters.py:528 +#: core/filters.py:68 core/filters.py:530 msgid "Categories" msgstr "Kategorie" @@ -756,7 +760,7 @@ msgstr "Kategorie" msgid "Categories Slugs" msgstr "Kategorie Slimáci" -#: core/filters.py:71 core/filters.py:407 +#: core/filters.py:71 core/filters.py:409 msgid "Tags" msgstr "Štítky" @@ -784,8 +788,8 @@ msgstr "Atributy" msgid "Quantity" msgstr "Množství" -#: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:301 core/models.py:383 core/models.py:536 +#: core/filters.py:78 core/filters.py:403 core/filters.py:529 +#: core/models.py:309 core/models.py:391 core/models.py:544 msgid "Slug" msgstr "Slug" @@ -801,7 +805,7 @@ msgstr "Zahrnout podkategorie" msgid "Include personal ordered" msgstr "Zahrnout osobně objednané produkty" -#: core/filters.py:85 core/models.py:540 +#: core/filters.py:85 core/models.py:548 msgid "SKU" msgstr "SKU" @@ -810,48 +814,48 @@ 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:324 +#: core/filters.py:326 msgid "Search (ID, product name or part number)" msgstr "Vyhledávání (ID, název produktu nebo číslo dílu)" -#: core/filters.py:327 +#: core/filters.py:329 msgid "Bought after (inclusive)" msgstr "Koupeno po (včetně)" -#: core/filters.py:328 +#: core/filters.py:330 msgid "Bought before (inclusive)" msgstr "Koupeno před (včetně)" -#: core/filters.py:331 core/filters.py:378 core/filters.py:585 +#: core/filters.py:333 core/filters.py:380 core/filters.py:587 msgid "User email" msgstr "E-mail uživatele" -#: core/filters.py:332 core/filters.py:379 core/filters.py:563 -#: core/filters.py:584 +#: core/filters.py:334 core/filters.py:381 core/filters.py:565 +#: core/filters.py:586 msgid "User UUID" msgstr "UUID uživatele" -#: core/filters.py:333 +#: core/filters.py:335 msgid "Status" msgstr "Stav" -#: core/filters.py:337 +#: core/filters.py:339 msgid "Human Readable ID" msgstr "Lidsky čitelné ID" -#: core/filters.py:400 +#: core/filters.py:402 msgid "Parent" msgstr "Rodič" -#: core/filters.py:404 +#: core/filters.py:406 msgid "Whole category(has at least 1 product or not)" msgstr "Celá kategorie (má nebo nemá alespoň 1 produkt)" -#: core/filters.py:408 +#: core/filters.py:410 msgid "Level" msgstr "Úroveň" -#: core/filters.py:558 +#: core/filters.py:560 msgid "Product UUID" msgstr "UUID produktu" @@ -906,7 +910,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:679 +#: core/graphene/mutations.py:527 core/viewsets.py:680 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 +986,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:849 core/models.py:862 -#: core/models.py:1281 core/models.py:1310 core/models.py:1335 -#: core/viewsets.py:682 +#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 +#: core/models.py:1289 core/models.py:1318 core/models.py:1343 +#: core/viewsets.py:683 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} neexistuje: {uuid}!" @@ -998,8 +1002,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:672 core/models.py:1144 -#: core/models.py:1744 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 +#: core/models.py:1752 msgid "attributes" msgstr "Atributy" @@ -1012,11 +1016,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:326 core/models.py:626 +#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 msgid "categories" msgstr "Kategorie" -#: core/graphene/object_types.py:124 core/models.py:397 +#: core/graphene/object_types.py:124 core/models.py:405 msgid "brands" msgstr "Značky" @@ -1025,7 +1029,7 @@ msgid "category image url" msgstr "Kategorie" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:263 +#: core/models.py:271 msgid "markup percentage" msgstr "Procento přirážky" @@ -1048,7 +1052,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:169 +#: core/graphene/object_types.py:351 core/models.py:177 msgid "vendors" msgstr "Prodejci" @@ -1073,7 +1077,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:1138 +#: core/models.py:1146 msgid "notifications" msgstr "Oznámení" @@ -1081,7 +1085,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:1860 +#: core/graphene/object_types.py:400 core/models.py:1868 msgid "feedback" msgstr "Zpětná vazba" @@ -1089,7 +1093,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:1108 +#: core/graphene/object_types.py:436 core/models.py:1116 msgid "billing address" msgstr "Fakturační adresa" @@ -1117,7 +1121,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:1172 +#: core/graphene/object_types.py:465 core/models.py:1180 msgid "orders" msgstr "Objednávky" @@ -1129,19 +1133,19 @@ msgstr "Adresa URL obrázku" msgid "product's images" msgstr "Obrázky produktu" -#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 +#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 msgid "category" msgstr "Kategorie" -#: core/graphene/object_types.py:502 core/models.py:1861 +#: core/graphene/object_types.py:502 core/models.py:1869 msgid "feedbacks" msgstr "Zpětná vazba" -#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 +#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 msgid "brand" msgstr "Značka" -#: core/graphene/object_types.py:504 core/models.py:101 +#: core/graphene/object_types.py:504 core/models.py:102 msgid "attribute groups" msgstr "Skupiny atributů" @@ -1169,7 +1173,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:550 +#: core/graphene/object_types.py:534 core/models.py:558 msgid "products" msgstr "Produkty" @@ -1181,15 +1185,15 @@ msgstr "Propagační kódy" msgid "products on sale" msgstr "Produkty v prodeji" -#: core/graphene/object_types.py:651 core/models.py:798 +#: core/graphene/object_types.py:651 core/models.py:806 msgid "promotions" msgstr "Propagační akce" -#: core/graphene/object_types.py:655 core/models.py:168 +#: core/graphene/object_types.py:655 core/models.py:176 msgid "vendor" msgstr "Prodejce" -#: core/graphene/object_types.py:656 core/models.py:549 +#: core/graphene/object_types.py:656 core/models.py:557 #: 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 +1201,11 @@ msgstr "Prodejce" msgid "product" msgstr "Produkt" -#: core/graphene/object_types.py:667 core/models.py:821 +#: core/graphene/object_types.py:667 core/models.py:829 msgid "wishlisted products" msgstr "Produkty uvedené na seznamu přání" -#: core/graphene/object_types.py:673 core/models.py:838 +#: core/graphene/object_types.py:673 core/models.py:846 msgid "wishlists" msgstr "Seznamy přání" @@ -1209,7 +1213,7 @@ msgstr "Seznamy přání" msgid "tagged products" msgstr "Produkty s příznakem" -#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 +#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 msgid "product tags" msgstr "Štítky produktu" @@ -1295,7 +1299,7 @@ msgstr "Výsledky vyhledávání produktů" msgid "posts search results" msgstr "Výsledky vyhledávání produktů" -#: core/models.py:70 +#: core/models.py:71 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1308,23 +1312,23 @@ msgstr "" "užitečné pro efektivnější kategorizaci a správu atributů v komplexním " "systému." -#: core/models.py:86 +#: core/models.py:87 msgid "parent of this group" msgstr "Rodič této skupiny" -#: core/models.py:87 +#: core/models.py:88 msgid "parent attribute group" msgstr "Nadřazená skupina atributů" -#: core/models.py:91 core/models.py:92 +#: core/models.py:92 core/models.py:93 msgid "attribute group's name" msgstr "Název skupiny atributů" -#: core/models.py:100 core/models.py:634 +#: core/models.py:101 core/models.py:642 msgid "attribute group" msgstr "Skupina atributů" -#: core/models.py:106 +#: core/models.py:107 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1342,33 +1346,41 @@ msgstr "" " další metadata a omezení, takže je vhodný pro použití v systémech, které " "komunikují s prodejci třetích stran." -#: core/models.py:119 +#: core/models.py:120 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Ukládá pověření a koncové body potřebné pro komunikaci s rozhraním API " "dodavatele." -#: core/models.py:120 +#: core/models.py:121 msgid "authentication info" msgstr "Informace o ověřování" -#: core/models.py:125 +#: core/models.py:126 msgid "define the markup for products retrieved from this vendor" msgstr "Definice přirážky pro produkty získané od tohoto dodavatele" -#: core/models.py:126 +#: core/models.py:127 msgid "vendor markup percentage" msgstr "Procento přirážky prodejce" -#: core/models.py:130 +#: core/models.py:131 msgid "name of this vendor" msgstr "Název tohoto prodejce" -#: core/models.py:131 +#: core/models.py:132 msgid "vendor name" msgstr "Název prodejce" -#: core/models.py:177 +#: core/models.py:143 +msgid "response file" +msgstr "soubor s odpovědí" + +#: core/models.py:144 +msgid "vendor's last processing response" +msgstr "poslední odpověď prodejce na zpracování" + +#: core/models.py:185 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1382,27 +1394,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:189 core/models.py:220 +#: core/models.py:197 core/models.py:228 msgid "internal tag identifier for the product tag" msgstr "Interní identifikátor značky produktu" -#: core/models.py:190 core/models.py:221 +#: core/models.py:198 core/models.py:229 msgid "tag name" msgstr "Název štítku" -#: core/models.py:194 core/models.py:225 +#: core/models.py:202 core/models.py:233 msgid "user-friendly name for the product tag" msgstr "Uživatelsky přívětivý název pro značku produktu" -#: core/models.py:195 core/models.py:226 +#: core/models.py:203 core/models.py:234 msgid "tag display name" msgstr "Zobrazení názvu štítku" -#: core/models.py:203 +#: core/models.py:211 msgid "product tag" msgstr "Štítek produktu" -#: core/models.py:209 +#: core/models.py:217 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 +1425,15 @@ msgstr "" "Obsahuje atributy pro interní identifikátor značky a uživatelsky přívětivý " "zobrazovací název." -#: core/models.py:234 +#: core/models.py:242 msgid "category tag" msgstr "značka kategorie" -#: core/models.py:235 core/models.py:307 +#: core/models.py:243 core/models.py:315 msgid "category tags" msgstr "štítky kategorií" -#: core/models.py:240 +#: core/models.py:248 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1443,51 +1455,51 @@ msgstr "" "kategorií a také přiřazovat atributy, jako jsou obrázky, značky nebo " "priorita." -#: core/models.py:254 +#: core/models.py:262 msgid "upload an image representing this category" msgstr "Nahrát obrázek reprezentující tuto kategorii" -#: core/models.py:257 +#: core/models.py:265 msgid "category image" msgstr "Obrázek kategorie" -#: core/models.py:262 +#: core/models.py:270 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:271 +#: core/models.py:279 msgid "parent of this category to form a hierarchical structure" msgstr "Nadřízený této kategorie, který tvoří hierarchickou strukturu." -#: core/models.py:272 +#: core/models.py:280 msgid "parent category" msgstr "Nadřazená kategorie" -#: core/models.py:277 +#: core/models.py:285 msgid "category name" msgstr "Název kategorie" -#: core/models.py:278 +#: core/models.py:286 msgid "provide a name for this category" msgstr "Uveďte název této kategorie" -#: core/models.py:285 +#: core/models.py:293 msgid "add a detailed description for this category" msgstr "Přidejte podrobný popis této kategorie" -#: core/models.py:286 +#: core/models.py:294 msgid "category description" msgstr "Popis kategorie" -#: core/models.py:306 +#: core/models.py:314 msgid "tags that help describe or group this category" msgstr "značky, které pomáhají popsat nebo seskupit tuto kategorii" -#: core/models.py:313 core/models.py:389 +#: core/models.py:321 core/models.py:397 msgid "priority" msgstr "Priorita" -#: core/models.py:332 +#: core/models.py:340 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 +1512,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:342 +#: core/models.py:350 msgid "name of this brand" msgstr "Název této značky" -#: core/models.py:343 +#: core/models.py:351 msgid "brand name" msgstr "Název značky" -#: core/models.py:350 +#: core/models.py:358 msgid "upload a logo representing this brand" msgstr "Nahrát logo reprezentující tuto značku" -#: core/models.py:352 +#: core/models.py:360 msgid "brand small image" msgstr "Malý obrázek značky" -#: core/models.py:358 +#: core/models.py:366 msgid "upload a big logo representing this brand" msgstr "Nahrát velké logo reprezentující tuto značku" -#: core/models.py:360 +#: core/models.py:368 msgid "brand big image" msgstr "Velká image značky" -#: core/models.py:365 +#: core/models.py:373 msgid "add a detailed description of the brand" msgstr "Přidejte podrobný popis značky" -#: core/models.py:366 +#: core/models.py:374 msgid "brand description" msgstr "Popis značky" -#: core/models.py:371 +#: core/models.py:379 msgid "optional categories that this brand is associated with" msgstr "Volitelné kategorie, se kterými je tato značka spojena" -#: core/models.py:372 +#: core/models.py:380 msgid "associated categories" msgstr "Kategorie" -#: core/models.py:402 +#: core/models.py:410 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 +1568,68 @@ msgstr "" "zásob, který umožňuje sledovat a vyhodnocovat produkty dostupné od různých " "dodavatelů." -#: core/models.py:414 +#: core/models.py:422 msgid "the vendor supplying this product stock" msgstr "Prodejce dodávající tento výrobek na sklad" -#: core/models.py:415 +#: core/models.py:423 msgid "associated vendor" msgstr "Přidružený prodejce" -#: core/models.py:419 +#: core/models.py:427 msgid "final price to the customer after markups" msgstr "Konečná cena pro zákazníka po přirážkách" -#: core/models.py:420 +#: core/models.py:428 msgid "selling price" msgstr "Prodejní cena" -#: core/models.py:425 +#: core/models.py:433 msgid "the product associated with this stock entry" msgstr "Produkt spojený s touto skladovou položkou" -#: core/models.py:426 core/models.py:697 core/models.py:744 -#: core/models.py:1641 +#: core/models.py:434 core/models.py:705 core/models.py:752 +#: core/models.py:1649 msgid "associated product" msgstr "Související produkt" -#: core/models.py:433 +#: core/models.py:441 msgid "the price paid to the vendor for this product" msgstr "Cena zaplacená prodejci za tento výrobek" -#: core/models.py:434 +#: core/models.py:442 msgid "vendor purchase price" msgstr "Kupní cena prodejce" -#: core/models.py:438 +#: core/models.py:446 msgid "available quantity of the product in stock" msgstr "Dostupné množství produktu na skladě" -#: core/models.py:439 +#: core/models.py:447 msgid "quantity in stock" msgstr "Množství na skladě" -#: core/models.py:443 +#: core/models.py:451 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU přidělený prodejcem pro identifikaci výrobku" -#: core/models.py:444 +#: core/models.py:452 msgid "vendor sku" msgstr "SKU prodejce" -#: core/models.py:450 +#: core/models.py:458 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:451 +#: core/models.py:459 msgid "digital file" msgstr "Digitální soubor" -#: core/models.py:460 +#: core/models.py:468 msgid "stock entries" msgstr "Zápisy do zásob" -#: core/models.py:465 +#: core/models.py:473 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1638,55 +1650,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:478 +#: core/models.py:486 msgid "category this product belongs to" msgstr "Kategorie, do které tento produkt patří" -#: core/models.py:487 +#: core/models.py:495 msgid "optionally associate this product with a brand" msgstr "Volitelně přiřadit tento produkt ke značce" -#: core/models.py:493 +#: core/models.py:501 msgid "tags that help describe or group this product" msgstr "Značky, které pomáhají popsat nebo seskupit tento produkt" -#: core/models.py:498 +#: core/models.py:506 msgid "indicates whether this product is digitally delivered" msgstr "Označuje, zda je tento produkt dodáván digitálně" -#: core/models.py:499 +#: core/models.py:507 msgid "is product digital" msgstr "Je produkt digitální" -#: core/models.py:505 +#: core/models.py:513 msgid "provide a clear identifying name for the product" msgstr "Uveďte jasný identifikační název výrobku" -#: core/models.py:506 +#: core/models.py:514 msgid "product name" msgstr "Název produktu" -#: core/models.py:511 core/models.py:786 +#: core/models.py:519 core/models.py:794 msgid "add a detailed description of the product" msgstr "Přidejte podrobný popis produktu" -#: core/models.py:512 +#: core/models.py:520 msgid "product description" msgstr "Popis produktu" -#: core/models.py:519 +#: core/models.py:527 msgid "part number for this product" msgstr "Číslo dílu pro tento produkt" -#: core/models.py:520 +#: core/models.py:528 msgid "part number" msgstr "Číslo dílu" -#: core/models.py:539 +#: core/models.py:547 msgid "stock keeping unit for this product" msgstr "Skladová jednotka pro tento produkt" -#: core/models.py:613 +#: core/models.py:621 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 +1714,68 @@ msgstr "" "booleanu, pole a objektu. To umožňuje dynamické a flexibilní strukturování " "dat." -#: core/models.py:625 +#: core/models.py:633 msgid "category of this attribute" msgstr "Kategorie tohoto atributu" -#: core/models.py:633 +#: core/models.py:641 msgid "group of this attribute" msgstr "Skupina tohoto atributu" -#: core/models.py:639 +#: core/models.py:647 msgid "string" msgstr "Řetězec" -#: core/models.py:640 +#: core/models.py:648 msgid "integer" msgstr "Celé číslo" -#: core/models.py:641 +#: core/models.py:649 msgid "float" msgstr "Float" -#: core/models.py:642 +#: core/models.py:650 msgid "boolean" msgstr "Boolean" -#: core/models.py:643 +#: core/models.py:651 msgid "array" msgstr "Pole" -#: core/models.py:644 +#: core/models.py:652 msgid "object" msgstr "Objekt" -#: core/models.py:646 +#: core/models.py:654 msgid "type of the attribute's value" msgstr "Typ hodnoty atributu" -#: core/models.py:647 +#: core/models.py:655 msgid "value type" msgstr "Typ hodnoty" -#: core/models.py:652 +#: core/models.py:660 msgid "name of this attribute" msgstr "Název tohoto atributu" -#: core/models.py:653 +#: core/models.py:661 msgid "attribute's name" msgstr "Název atributu" -#: core/models.py:659 +#: core/models.py:667 msgid "is filterable" msgstr "je filtrovatelný" -#: core/models.py:660 +#: core/models.py:668 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:671 core/models.py:689 +#: core/models.py:679 core/models.py:697 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Atribut" -#: core/models.py:677 +#: core/models.py:685 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 +1785,19 @@ msgstr "" " \"atribut\" s jedinečnou \"hodnotou\", což umožňuje lepší organizaci a " "dynamickou reprezentaci vlastností produktu." -#: core/models.py:688 +#: core/models.py:696 msgid "attribute of this value" msgstr "Atribut této hodnoty" -#: core/models.py:696 +#: core/models.py:704 msgid "the specific product associated with this attribute's value" msgstr "Konkrétní produkt spojený s hodnotou tohoto atributu" -#: core/models.py:702 +#: core/models.py:710 msgid "the specific value for this attribute" msgstr "Konkrétní hodnota tohoto atributu" -#: core/models.py:715 +#: core/models.py:723 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 +1811,39 @@ msgstr "" " zobrazení. Obsahuje také funkci pro zpřístupnění alternativního textu pro " "obrázky." -#: core/models.py:726 +#: core/models.py:734 msgid "provide alternative text for the image for accessibility" msgstr "Poskytněte alternativní text k obrázku kvůli přístupnosti." -#: core/models.py:727 +#: core/models.py:735 msgid "image alt text" msgstr "Text alt obrázku" -#: core/models.py:730 +#: core/models.py:738 msgid "upload the image file for this product" msgstr "Nahrát soubor s obrázkem tohoto produktu" -#: core/models.py:731 core/models.py:756 +#: core/models.py:739 core/models.py:764 msgid "product image" msgstr "Obrázek produktu" -#: core/models.py:737 +#: core/models.py:745 msgid "determines the order in which images are displayed" msgstr "Určuje pořadí, v jakém se obrázky zobrazují." -#: core/models.py:738 +#: core/models.py:746 msgid "display priority" msgstr "Priorita zobrazení" -#: core/models.py:743 +#: core/models.py:751 msgid "the product that this image represents" msgstr "Výrobek, který tento obrázek představuje" -#: core/models.py:757 +#: core/models.py:765 msgid "product images" msgstr "Obrázky produktů" -#: core/models.py:762 +#: core/models.py:770 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 +1858,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:774 +#: core/models.py:782 msgid "percentage discount for the selected products" msgstr "Procentuální sleva na vybrané produkty" -#: core/models.py:775 +#: core/models.py:783 msgid "discount percentage" msgstr "Procento slevy" -#: core/models.py:780 +#: core/models.py:788 msgid "provide a unique name for this promotion" msgstr "Uveďte jedinečný název této propagační akce" -#: core/models.py:781 +#: core/models.py:789 msgid "promotion name" msgstr "Název akce" -#: core/models.py:787 +#: core/models.py:795 msgid "promotion description" msgstr "Popis propagace" -#: core/models.py:792 +#: core/models.py:800 msgid "select which products are included in this promotion" msgstr "Vyberte, které produkty jsou zahrnuty do této akce" -#: core/models.py:793 +#: core/models.py:801 msgid "included products" msgstr "Zahrnuté produkty" -#: core/models.py:797 +#: core/models.py:805 msgid "promotion" msgstr "Propagace" -#: core/models.py:808 +#: core/models.py:816 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 +1902,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:820 +#: core/models.py:828 msgid "products that the user has marked as wanted" msgstr "Výrobky, které uživatel označil jako požadované" -#: core/models.py:828 +#: core/models.py:836 msgid "user who owns this wishlist" msgstr "Uživatel, který vlastní tento seznam přání" -#: core/models.py:829 +#: core/models.py:837 msgid "wishlist owner" msgstr "Majitel seznamu přání" -#: core/models.py:837 +#: core/models.py:845 msgid "wishlist" msgstr "Seznam přání" -#: core/models.py:879 +#: core/models.py:887 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1921,19 +1933,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:892 +#: core/models.py:900 msgid "documentary" msgstr "Dokumentární film" -#: core/models.py:893 +#: core/models.py:901 msgid "documentaries" msgstr "Dokumentární filmy" -#: core/models.py:903 +#: core/models.py:911 msgid "unresolved" msgstr "Nevyřešené" -#: core/models.py:908 +#: core/models.py:916 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1953,59 +1965,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:923 +#: core/models.py:931 msgid "address line for the customer" msgstr "Adresní řádek pro zákazníka" -#: core/models.py:924 +#: core/models.py:932 msgid "address line" msgstr "Adresní řádek" -#: core/models.py:926 +#: core/models.py:934 msgid "street" msgstr "Ulice" -#: core/models.py:927 +#: core/models.py:935 msgid "district" msgstr "Okres" -#: core/models.py:928 +#: core/models.py:936 msgid "city" msgstr "Město" -#: core/models.py:929 +#: core/models.py:937 msgid "region" msgstr "Region" -#: core/models.py:930 +#: core/models.py:938 msgid "postal code" msgstr "Poštovní směrovací číslo" -#: core/models.py:931 +#: core/models.py:939 msgid "country" msgstr "Země" -#: core/models.py:938 +#: core/models.py:946 msgid "geolocation point: (longitude, latitude)" msgstr "Geolokace Bod(Zeměpisná délka, Zeměpisná šířka)" -#: core/models.py:941 +#: core/models.py:949 msgid "full JSON response from geocoder for this address" msgstr "Úplná odpověď JSON z geokodéru pro tuto adresu" -#: core/models.py:946 +#: core/models.py:954 msgid "stored JSON response from the geocoding service" msgstr "Uložená odpověď JSON ze služby geokódování" -#: core/models.py:954 +#: core/models.py:962 msgid "address" msgstr "Adresa" -#: core/models.py:955 +#: core/models.py:963 msgid "addresses" msgstr "Adresy" -#: core/models.py:967 +#: core/models.py:975 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 +2033,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:981 +#: core/models.py:989 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:982 +#: core/models.py:990 msgid "promo code identifier" msgstr "Identifikátor propagačního kódu" -#: core/models.py:989 +#: core/models.py:997 msgid "fixed discount amount applied if percent is not used" msgstr "Pevná výše slevy, pokud není použito procento" -#: core/models.py:990 +#: core/models.py:998 msgid "fixed discount amount" msgstr "Pevná výše slevy" -#: core/models.py:996 +#: core/models.py:1004 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:997 +#: core/models.py:1005 msgid "percentage discount" msgstr "Procentuální sleva" -#: core/models.py:1002 +#: core/models.py:1010 msgid "timestamp when the promocode expires" msgstr "Časové razítko ukončení platnosti promokódu" -#: core/models.py:1003 +#: core/models.py:1011 msgid "end validity time" msgstr "Doba ukončení platnosti" -#: core/models.py:1008 +#: core/models.py:1016 msgid "timestamp from which this promocode is valid" msgstr "Časové razítko, od kterého je tento promokód platný" -#: core/models.py:1009 +#: core/models.py:1017 msgid "start validity time" msgstr "Čas zahájení platnosti" -#: core/models.py:1014 +#: core/models.py:1022 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:1015 +#: core/models.py:1023 msgid "usage timestamp" msgstr "Časové razítko použití" -#: core/models.py:1020 +#: core/models.py:1028 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:1021 +#: core/models.py:1029 msgid "assigned user" msgstr "Přiřazený uživatel" -#: core/models.py:1028 +#: core/models.py:1036 msgid "promo code" msgstr "Propagační kód" -#: core/models.py:1029 +#: core/models.py:1037 msgid "promo codes" msgstr "Propagační kódy" -#: core/models.py:1044 +#: core/models.py:1052 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2093,16 +2105,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:1065 +#: core/models.py:1073 msgid "promocode already used" msgstr "Promo kód byl již použit" -#: core/models.py:1081 +#: core/models.py:1089 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Neplatný typ slevy pro promokód {self.uuid}!" -#: core/models.py:1090 +#: core/models.py:1098 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 +2131,136 @@ msgstr "" "fakturaci. Stejně tak funkce podporuje správu produktů v životním cyklu " "objednávky." -#: core/models.py:1107 +#: core/models.py:1115 msgid "the billing address used for this order" msgstr "Fakturační adresa použitá pro tuto objednávku" -#: core/models.py:1115 +#: core/models.py:1123 msgid "optional promo code applied to this order" msgstr "Volitelný promo kód použitý na tuto objednávku" -#: core/models.py:1116 +#: core/models.py:1124 msgid "applied promo code" msgstr "Použitý promo kód" -#: core/models.py:1124 +#: core/models.py:1132 msgid "the shipping address used for this order" msgstr "Dodací adresa použitá pro tuto objednávku" -#: core/models.py:1125 +#: core/models.py:1133 msgid "shipping address" msgstr "Dodací adresa" -#: core/models.py:1131 +#: core/models.py:1139 msgid "current status of the order in its lifecycle" msgstr "Aktuální stav zakázky v jejím životním cyklu" -#: core/models.py:1132 +#: core/models.py:1140 msgid "order status" msgstr "Stav objednávky" -#: core/models.py:1137 core/models.py:1618 +#: core/models.py:1145 core/models.py:1626 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:1143 +#: core/models.py:1151 msgid "json representation of order attributes for this order" msgstr "JSON reprezentace atributů objednávky pro tuto objednávku" -#: core/models.py:1149 +#: core/models.py:1157 msgid "the user who placed the order" msgstr "Uživatel, který zadal objednávku" -#: core/models.py:1150 +#: core/models.py:1158 msgid "user" msgstr "Uživatel" -#: core/models.py:1156 +#: core/models.py:1164 msgid "the timestamp when the order was finalized" msgstr "Časové razítko, kdy byla objednávka dokončena." -#: core/models.py:1157 +#: core/models.py:1165 msgid "buy time" msgstr "Kupte si čas" -#: core/models.py:1164 +#: core/models.py:1172 msgid "a human-readable identifier for the order" msgstr "Lidsky čitelný identifikátor objednávky" -#: core/models.py:1165 +#: core/models.py:1173 msgid "human readable id" msgstr "lidsky čitelné ID" -#: core/models.py:1171 +#: core/models.py:1179 msgid "order" msgstr "Objednávka" -#: core/models.py:1209 +#: core/models.py:1217 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:1249 +#: core/models.py:1257 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:1254 +#: core/models.py:1262 msgid "you cannot add inactive products to order" msgstr "Do objednávky nelze přidat neaktivní produkty" -#: core/models.py:1271 +#: core/models.py:1279 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:1293 core/models.py:1318 core/models.py:1326 +#: core/models.py:1301 core/models.py:1326 core/models.py:1334 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:1314 +#: core/models.py:1322 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} neexistuje s dotazem <{query}>!" -#: core/models.py:1346 +#: core/models.py:1354 msgid "promocode does not exist" msgstr "Promo kód neexistuje" -#: core/models.py:1352 +#: core/models.py:1360 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:1371 +#: core/models.py:1379 msgid "address does not exist" msgstr "Adresa neexistuje" -#: core/models.py:1392 core/models.py:1461 +#: core/models.py:1400 core/models.py:1469 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:1395 core/models.py:1457 +#: core/models.py:1403 core/models.py:1465 msgid "invalid force value" msgstr "Neplatná hodnota síly" -#: core/models.py:1401 core/models.py:1464 +#: core/models.py:1409 core/models.py:1472 msgid "you cannot purchase an empty order!" msgstr "Nelze zakoupit prázdnou objednávku!" -#: core/models.py:1420 +#: core/models.py:1428 msgid "you cannot buy an order without a user" msgstr "Bez uživatele nelze objednávku zakoupit!" -#: core/models.py:1434 +#: core/models.py:1442 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:1439 +#: core/models.py:1447 msgid "insufficient funds to complete the order" msgstr "Nedostatek finančních prostředků na dokončení objednávky" -#: core/models.py:1473 +#: core/models.py:1481 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2256,14 +2268,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:1482 +#: core/models.py:1490 #, 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:1591 +#: core/models.py:1599 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2285,108 +2297,108 @@ msgstr "" "produktů. Model se integruje s modely objednávek a produktů a ukládá na ně " "odkaz." -#: core/models.py:1606 +#: core/models.py:1614 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:1607 +#: core/models.py:1615 msgid "purchase price at order time" msgstr "Nákupní cena v době objednávky" -#: core/models.py:1612 +#: core/models.py:1620 msgid "internal comments for admins about this ordered product" msgstr "Interní komentáře pro administrátory k tomuto objednanému produktu" -#: core/models.py:1613 +#: core/models.py:1621 msgid "internal comments" msgstr "Interní připomínky" -#: core/models.py:1619 +#: core/models.py:1627 msgid "user notifications" msgstr "Oznámení uživatele" -#: core/models.py:1624 +#: core/models.py:1632 msgid "json representation of this item's attributes" msgstr "JSON reprezentace atributů této položky" -#: core/models.py:1625 +#: core/models.py:1633 msgid "ordered product attributes" msgstr "Objednané atributy produktu" -#: core/models.py:1630 +#: core/models.py:1638 msgid "reference to the parent order that contains this product" msgstr "Odkaz na nadřazenou objednávku, která obsahuje tento produkt" -#: core/models.py:1631 +#: core/models.py:1639 msgid "parent order" msgstr "Objednávka rodičů" -#: core/models.py:1640 +#: core/models.py:1648 msgid "the specific product associated with this order line" msgstr "Konkrétní produkt spojený s touto objednávkou" -#: core/models.py:1647 +#: core/models.py:1655 msgid "quantity of this specific product in the order" msgstr "Množství tohoto konkrétního produktu v objednávce" -#: core/models.py:1648 +#: core/models.py:1656 msgid "product quantity" msgstr "Množství produktu" -#: core/models.py:1655 +#: core/models.py:1663 msgid "current status of this product in the order" msgstr "Aktuální stav tohoto produktu v objednávce" -#: core/models.py:1656 +#: core/models.py:1664 msgid "product line status" msgstr "Stav produktové řady" -#: core/models.py:1719 +#: core/models.py:1727 msgid "order product must have an order" msgstr "Orderproduct musí mít přiřazenou objednávku!" -#: core/models.py:1721 +#: core/models.py:1729 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Špatně zadaná akce pro zpětnou vazbu: {action}!" -#: core/models.py:1735 +#: core/models.py:1743 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:1741 +#: core/models.py:1749 msgid "name" msgstr "Název" -#: core/models.py:1742 +#: core/models.py:1750 msgid "URL of the integration" msgstr "Adresa URL integrace" -#: core/models.py:1743 +#: core/models.py:1751 msgid "authentication credentials" msgstr "Ověřovací pověření" -#: core/models.py:1765 +#: core/models.py:1773 msgid "you can only have one default CRM provider" msgstr "Můžete mít pouze jednoho výchozího poskytovatele CRM" -#: core/models.py:1775 +#: core/models.py:1783 msgid "CRM" msgstr "CRM" -#: core/models.py:1776 +#: core/models.py:1784 msgid "CRMs" msgstr "CRM" -#: core/models.py:1788 +#: core/models.py:1796 msgid "order CRM link" msgstr "Odkaz na CRM objednávky" -#: core/models.py:1789 +#: core/models.py:1797 msgid "orders CRM links" msgstr "Odkazy CRM objednávek" -#: core/models.py:1794 +#: core/models.py:1802 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2402,15 +2414,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:1808 +#: core/models.py:1816 msgid "download" msgstr "Stáhnout" -#: core/models.py:1809 +#: core/models.py:1817 msgid "downloads" msgstr "Ke stažení na" -#: core/models.py:1823 +#: core/models.py:1831 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2424,30 +2436,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:1835 +#: core/models.py:1843 msgid "user-provided comments about their experience with the product" msgstr "Komentáře uživatelů o jejich zkušenostech s produktem" -#: core/models.py:1836 +#: core/models.py:1844 msgid "feedback comments" msgstr "Zpětná vazba" -#: core/models.py:1843 +#: core/models.py:1851 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:1844 +#: core/models.py:1852 msgid "related order product" msgstr "Související objednávka produktu" -#: core/models.py:1849 +#: core/models.py:1857 msgid "user-assigned rating for the product" msgstr "Hodnocení produktu přidělené uživatelem" -#: core/models.py:1850 +#: core/models.py:1858 msgid "product rating" msgstr "Hodnocení produktu" @@ -2664,22 +2676,22 @@ msgstr "Jsou vyžadována data i časový limit" msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "Nesprávná hodnota timeoutu, musí být v rozmezí 0 až 216000 sekund." -#: core/utils/emailing.py:25 +#: core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | kontaktujte nás inicioval" -#: core/utils/emailing.py:74 +#: core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Potvrzení objednávky" -#: core/utils/emailing.py:109 +#: core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Objednávka doručena" -#: core/utils/emailing.py:197 +#: core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | promocode uděleno" @@ -2924,7 +2936,7 @@ msgstr "" "objekty Zpětné vazby na základě oprávnění. Rozšiřuje základní třídu " "`EvibesViewSet` a využívá systém filtrování Djanga pro dotazování na data." -#: core/viewsets.py:593 +#: core/viewsets.py:594 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2942,7 +2954,7 @@ msgstr "" " Sada ViewSet používá několik serializátorů podle konkrétní prováděné akce a" " podle toho vynucuje oprávnění při interakci s daty objednávek." -#: core/viewsets.py:782 +#: core/viewsets.py:784 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2956,11 +2968,11 @@ msgstr "" " požadované akce. Kromě toho poskytuje podrobnou akci pro zpracování zpětné " "vazby na instance OrderProduct" -#: core/viewsets.py:833 +#: core/viewsets.py:835 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 +#: core/viewsets.py:847 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -2968,15 +2980,15 @@ msgstr "" "Spravuje načítání a zpracování instancí PromoCode prostřednictvím různých " "akcí API." -#: core/viewsets.py:866 +#: core/viewsets.py:868 msgid "Represents a view set for managing promotions. " msgstr "Představuje sadu zobrazení pro správu povýšení." -#: core/viewsets.py:878 +#: core/viewsets.py:880 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 +#: core/viewsets.py:894 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -2994,7 +3006,7 @@ msgstr "" "uživatelé mohou spravovat pouze své vlastní seznamy přání, pokud jim nejsou " "udělena výslovná oprávnění." -#: core/viewsets.py:1007 +#: core/viewsets.py:1009 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3008,12 +3020,12 @@ msgstr "" "přepisování serializátoru a zpracování oprávnění na základě kontextu " "požadavku." -#: core/viewsets.py:1074 +#: core/viewsets.py:1076 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Chyba v zeměpisném kódování: {e}" -#: core/viewsets.py:1081 +#: core/viewsets.py:1083 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/da_DK/LC_MESSAGES/django.mo b/core/locale/da_DK/LC_MESSAGES/django.mo index d8ad9255..9e5ed830 100644 Binary files a/core/locale/da_DK/LC_MESSAGES/django.mo and b/core/locale/da_DK/LC_MESSAGES/django.mo differ diff --git a/core/locale/da_DK/LC_MESSAGES/django.po b/core/locale/da_DK/LC_MESSAGES/django.po index d8ccb886..27701f98 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -49,82 +49,86 @@ msgstr "Modificeret" msgid "when the object was last modified" msgstr "Hvornår objektet sidst blev redigeret" -#: core/admin.py:63 +#: core/admin.py:68 msgid "translations" msgstr "Oversættelser" -#: core/admin.py:67 +#: core/admin.py:72 msgid "general" msgstr "Generelt" -#: core/admin.py:69 +#: core/admin.py:74 msgid "relations" msgstr "Relationer" -#: core/admin.py:87 +#: core/admin.py:76 +msgid "additional info" +msgstr "Yderligere info" + +#: core/admin.py:94 msgid "metadata" msgstr "Metadata" -#: core/admin.py:94 +#: core/admin.py:101 msgid "timestamps" msgstr "Tidsstempler" -#: core/admin.py:109 +#: core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Aktivér valgt %(verbose_name_plural)s." -#: core/admin.py:114 +#: core/admin.py:121 msgid "selected items have been activated." msgstr "Udvalgte varer er blevet aktiveret!" -#: core/admin.py:120 +#: core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Deaktiver valgte %(verbose_name_plural)s." -#: core/admin.py:125 +#: core/admin.py:132 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:701 core/models.py:709 +#: core/admin.py:144 core/graphene/object_types.py:609 +#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 msgid "attribute value" msgstr "Attributværdi" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 +#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718 msgid "attribute values" msgstr "Attributværdier" -#: core/admin.py:146 +#: core/admin.py:153 msgid "image" msgstr "Billede" -#: core/admin.py:147 core/graphene/object_types.py:501 +#: core/admin.py:154 core/graphene/object_types.py:501 msgid "images" msgstr "Billeder" -#: core/admin.py:155 core/models.py:459 +#: core/admin.py:162 core/models.py:467 msgid "stock" msgstr "Lager" -#: core/admin.py:156 core/graphene/object_types.py:663 +#: core/admin.py:163 core/graphene/object_types.py:663 msgid "stocks" msgstr "Aktier" -#: core/admin.py:166 core/models.py:1667 +#: core/admin.py:173 core/models.py:1675 msgid "order product" msgstr "Bestil produkt" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 msgid "order products" msgstr "Bestil produkter" -#: core/admin.py:180 core/admin.py:181 +#: core/admin.py:187 core/admin.py:188 msgid "children" msgstr "Børn" -#: core/admin.py:566 +#: core/admin.py:940 msgid "Config" msgstr "Konfig" @@ -734,23 +738,23 @@ 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:118 core/elasticsearch/__init__.py:498 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 msgid "no search term provided." msgstr "Der er ikke angivet noget søgeord." -#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +#: core/filters.py:65 core/filters.py:399 core/filters.py:526 msgid "Search" msgstr "Søg efter" -#: core/filters.py:66 core/filters.py:554 core/filters.py:583 +#: core/filters.py:66 core/filters.py:556 core/filters.py:585 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:399 core/filters.py:526 +#: core/filters.py:67 core/filters.py:401 core/filters.py:528 msgid "Name" msgstr "Navn" -#: core/filters.py:68 core/filters.py:528 +#: core/filters.py:68 core/filters.py:530 msgid "Categories" msgstr "Kategorier" @@ -758,7 +762,7 @@ msgstr "Kategorier" msgid "Categories Slugs" msgstr "Kategorier Snegle" -#: core/filters.py:71 core/filters.py:407 +#: core/filters.py:71 core/filters.py:409 msgid "Tags" msgstr "Tags" @@ -786,8 +790,8 @@ msgstr "Egenskaber" msgid "Quantity" msgstr "Mængde" -#: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:301 core/models.py:383 core/models.py:536 +#: core/filters.py:78 core/filters.py:403 core/filters.py:529 +#: core/models.py:309 core/models.py:391 core/models.py:544 msgid "Slug" msgstr "Snegl" @@ -803,7 +807,7 @@ msgstr "Inkluder underkategorier" msgid "Include personal ordered" msgstr "Inkluder personligt bestilte produkter" -#: core/filters.py:85 core/models.py:540 +#: core/filters.py:85 core/models.py:548 msgid "SKU" msgstr "VARENUMMER" @@ -812,48 +816,48 @@ 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:324 +#: core/filters.py:326 msgid "Search (ID, product name or part number)" msgstr "Søg (ID, produktnavn eller reservedelsnummer)" -#: core/filters.py:327 +#: core/filters.py:329 msgid "Bought after (inclusive)" msgstr "Købt efter (inklusive)" -#: core/filters.py:328 +#: core/filters.py:330 msgid "Bought before (inclusive)" msgstr "Købt før (inklusive)" -#: core/filters.py:331 core/filters.py:378 core/filters.py:585 +#: core/filters.py:333 core/filters.py:380 core/filters.py:587 msgid "User email" msgstr "Brugerens e-mail" -#: core/filters.py:332 core/filters.py:379 core/filters.py:563 -#: core/filters.py:584 +#: core/filters.py:334 core/filters.py:381 core/filters.py:565 +#: core/filters.py:586 msgid "User UUID" msgstr "Bruger UUID" -#: core/filters.py:333 +#: core/filters.py:335 msgid "Status" msgstr "Status" -#: core/filters.py:337 +#: core/filters.py:339 msgid "Human Readable ID" msgstr "Menneskeligt læsbart ID" -#: core/filters.py:400 +#: core/filters.py:402 msgid "Parent" msgstr "Forælder" -#: core/filters.py:404 +#: core/filters.py:406 msgid "Whole category(has at least 1 product or not)" msgstr "Hele kategorien (har mindst 1 produkt eller ej)" -#: core/filters.py:408 +#: core/filters.py:410 msgid "Level" msgstr "Niveau" -#: core/filters.py:558 +#: core/filters.py:560 msgid "Product UUID" msgstr "Produkt UUID" @@ -908,7 +912,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:679 +#: core/graphene/mutations.py:527 core/viewsets.py:680 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Forkert type kom fra metoden order.buy(): {type(instance)!s}" @@ -984,9 +988,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:849 core/models.py:862 -#: core/models.py:1281 core/models.py:1310 core/models.py:1335 -#: core/viewsets.py:682 +#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 +#: core/models.py:1289 core/models.py:1318 core/models.py:1343 +#: core/viewsets.py:683 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} findes ikke: {uuid}!" @@ -1000,8 +1004,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:672 core/models.py:1144 -#: core/models.py:1744 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 +#: core/models.py:1752 msgid "attributes" msgstr "Egenskaber" @@ -1014,11 +1018,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:326 core/models.py:626 +#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 msgid "categories" msgstr "Kategorier" -#: core/graphene/object_types.py:124 core/models.py:397 +#: core/graphene/object_types.py:124 core/models.py:405 msgid "brands" msgstr "Mærker" @@ -1027,7 +1031,7 @@ msgid "category image url" msgstr "Kategorier" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:263 +#: core/models.py:271 msgid "markup percentage" msgstr "Markup-procentdel" @@ -1052,7 +1056,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:169 +#: core/graphene/object_types.py:351 core/models.py:177 msgid "vendors" msgstr "Leverandører" @@ -1079,7 +1083,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:1138 +#: core/models.py:1146 msgid "notifications" msgstr "Meddelelser" @@ -1087,7 +1091,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:1860 +#: core/graphene/object_types.py:400 core/models.py:1868 msgid "feedback" msgstr "Feedback" @@ -1095,7 +1099,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:1108 +#: core/graphene/object_types.py:436 core/models.py:1116 msgid "billing address" msgstr "Faktureringsadresse" @@ -1123,7 +1127,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:1172 +#: core/graphene/object_types.py:465 core/models.py:1180 msgid "orders" msgstr "Bestillinger" @@ -1135,19 +1139,19 @@ msgstr "Billed-URL" msgid "product's images" msgstr "Produktets billeder" -#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 +#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 msgid "category" msgstr "Kategori" -#: core/graphene/object_types.py:502 core/models.py:1861 +#: core/graphene/object_types.py:502 core/models.py:1869 msgid "feedbacks" msgstr "Tilbagemeldinger" -#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 +#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 msgid "brand" msgstr "Brand" -#: core/graphene/object_types.py:504 core/models.py:101 +#: core/graphene/object_types.py:504 core/models.py:102 msgid "attribute groups" msgstr "Attributgrupper" @@ -1175,7 +1179,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:550 +#: core/graphene/object_types.py:534 core/models.py:558 msgid "products" msgstr "Produkter" @@ -1187,15 +1191,15 @@ msgstr "Promokoder" msgid "products on sale" msgstr "Produkter til salg" -#: core/graphene/object_types.py:651 core/models.py:798 +#: core/graphene/object_types.py:651 core/models.py:806 msgid "promotions" msgstr "Kampagner" -#: core/graphene/object_types.py:655 core/models.py:168 +#: core/graphene/object_types.py:655 core/models.py:176 msgid "vendor" msgstr "Leverandør" -#: core/graphene/object_types.py:656 core/models.py:549 +#: core/graphene/object_types.py:656 core/models.py:557 #: 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 +1207,11 @@ msgstr "Leverandør" msgid "product" msgstr "Produkt" -#: core/graphene/object_types.py:667 core/models.py:821 +#: core/graphene/object_types.py:667 core/models.py:829 msgid "wishlisted products" msgstr "Produkter på ønskelisten" -#: core/graphene/object_types.py:673 core/models.py:838 +#: core/graphene/object_types.py:673 core/models.py:846 msgid "wishlists" msgstr "Ønskelister" @@ -1215,7 +1219,7 @@ msgstr "Ønskelister" msgid "tagged products" msgstr "Mærkede produkter" -#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 +#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 msgid "product tags" msgstr "Produktmærker" @@ -1301,7 +1305,7 @@ msgstr "Søgeresultater for produkter" msgid "posts search results" msgstr "Søgeresultater for produkter" -#: core/models.py:70 +#: core/models.py:71 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1314,23 +1318,23 @@ msgstr "" "struktur. Dette kan være nyttigt til at kategorisere og styre attributter " "mere effektivt i et komplekst system." -#: core/models.py:86 +#: core/models.py:87 msgid "parent of this group" msgstr "Forælder til denne gruppe" -#: core/models.py:87 +#: core/models.py:88 msgid "parent attribute group" msgstr "Overordnet attributgruppe" -#: core/models.py:91 core/models.py:92 +#: core/models.py:92 core/models.py:93 msgid "attribute group's name" msgstr "Attributgruppens navn" -#: core/models.py:100 core/models.py:634 +#: core/models.py:101 core/models.py:642 msgid "attribute group" msgstr "Attributgruppe" -#: core/models.py:106 +#: core/models.py:107 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1349,33 +1353,41 @@ msgstr "" "begrænsninger, hvilket gør den velegnet til brug i systemer, der interagerer" " med tredjepartsleverandører." -#: core/models.py:119 +#: core/models.py:120 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Gemmer legitimationsoplysninger og slutpunkter, der er nødvendige for " "leverandørens API-kommunikation" -#: core/models.py:120 +#: core/models.py:121 msgid "authentication info" msgstr "Oplysninger om godkendelse" -#: core/models.py:125 +#: core/models.py:126 msgid "define the markup for products retrieved from this vendor" msgstr "Definer markeringen for produkter, der hentes fra denne leverandør" -#: core/models.py:126 +#: core/models.py:127 msgid "vendor markup percentage" msgstr "Sælgerens markup-procentdel" -#: core/models.py:130 +#: core/models.py:131 msgid "name of this vendor" msgstr "Navn på denne leverandør" -#: core/models.py:131 +#: core/models.py:132 msgid "vendor name" msgstr "Leverandørens navn" -#: core/models.py:177 +#: core/models.py:143 +msgid "response file" +msgstr "Svarfil" + +#: core/models.py:144 +msgid "vendor's last processing response" +msgstr "leverandørens sidste behandlingssvar" + +#: core/models.py:185 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1390,27 +1402,27 @@ msgstr "" "operationer, der eksporteres gennem mixins, og giver mulighed for tilpasning" " af metadata til administrative formål." -#: core/models.py:189 core/models.py:220 +#: core/models.py:197 core/models.py:228 msgid "internal tag identifier for the product tag" msgstr "Intern tag-identifikator for produkttagget" -#: core/models.py:190 core/models.py:221 +#: core/models.py:198 core/models.py:229 msgid "tag name" msgstr "Tag-navn" -#: core/models.py:194 core/models.py:225 +#: core/models.py:202 core/models.py:233 msgid "user-friendly name for the product tag" msgstr "Brugervenligt navn til produktmærket" -#: core/models.py:195 core/models.py:226 +#: core/models.py:203 core/models.py:234 msgid "tag display name" msgstr "Navn på tag-visning" -#: core/models.py:203 +#: core/models.py:211 msgid "product tag" msgstr "Produktmærke" -#: core/models.py:209 +#: core/models.py:217 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 +1433,15 @@ msgstr "" "produkter. Den indeholder attributter til en intern tag-identifikator og et " "brugervenligt visningsnavn." -#: core/models.py:234 +#: core/models.py:242 msgid "category tag" msgstr "Kategori-tag" -#: core/models.py:235 core/models.py:307 +#: core/models.py:243 core/models.py:315 msgid "category tags" msgstr "Kategori-tags" -#: core/models.py:240 +#: core/models.py:248 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1451,51 +1463,51 @@ msgstr "" " angive navn, beskrivelse og hierarki for kategorier samt tildele " "attributter som billeder, tags eller prioritet." -#: core/models.py:254 +#: core/models.py:262 msgid "upload an image representing this category" msgstr "Upload et billede, der repræsenterer denne kategori" -#: core/models.py:257 +#: core/models.py:265 msgid "category image" msgstr "Kategori billede" -#: core/models.py:262 +#: core/models.py:270 msgid "define a markup percentage for products in this category" msgstr "Definer en markup-procentdel for produkter i denne kategori" -#: core/models.py:271 +#: core/models.py:279 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:272 +#: core/models.py:280 msgid "parent category" msgstr "Overordnet kategori" -#: core/models.py:277 +#: core/models.py:285 msgid "category name" msgstr "Navn på kategori" -#: core/models.py:278 +#: core/models.py:286 msgid "provide a name for this category" msgstr "Giv et navn til denne kategori" -#: core/models.py:285 +#: core/models.py:293 msgid "add a detailed description for this category" msgstr "Tilføj en detaljeret beskrivelse af denne kategori" -#: core/models.py:286 +#: core/models.py:294 msgid "category description" msgstr "Beskrivelse af kategori" -#: core/models.py:306 +#: core/models.py:314 msgid "tags that help describe or group this category" msgstr "tags, der hjælper med at beskrive eller gruppere denne kategori" -#: core/models.py:313 core/models.py:389 +#: core/models.py:321 core/models.py:397 msgid "priority" msgstr "Prioritet" -#: core/models.py:332 +#: core/models.py:340 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 +1521,47 @@ msgstr "" " Den gør det muligt at organisere og repræsentere brand-relaterede data i " "applikationen." -#: core/models.py:342 +#: core/models.py:350 msgid "name of this brand" msgstr "Navnet på dette mærke" -#: core/models.py:343 +#: core/models.py:351 msgid "brand name" msgstr "Varemærke" -#: core/models.py:350 +#: core/models.py:358 msgid "upload a logo representing this brand" msgstr "Upload et logo, der repræsenterer dette brand" -#: core/models.py:352 +#: core/models.py:360 msgid "brand small image" msgstr "Brandets lille image" -#: core/models.py:358 +#: core/models.py:366 msgid "upload a big logo representing this brand" msgstr "Upload et stort logo, der repræsenterer dette brand" -#: core/models.py:360 +#: core/models.py:368 msgid "brand big image" msgstr "Brandets store image" -#: core/models.py:365 +#: core/models.py:373 msgid "add a detailed description of the brand" msgstr "Tilføj en detaljeret beskrivelse af brandet" -#: core/models.py:366 +#: core/models.py:374 msgid "brand description" msgstr "Varemærkebeskrivelse" -#: core/models.py:371 +#: core/models.py:379 msgid "optional categories that this brand is associated with" msgstr "Valgfrie kategorier, som dette brand er forbundet med" -#: core/models.py:372 +#: core/models.py:380 msgid "associated categories" msgstr "Kategorier" -#: core/models.py:402 +#: core/models.py:410 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 +1577,68 @@ msgstr "" "muliggøre sporing og evaluering af produkter, der er tilgængelige fra " "forskellige leverandører." -#: core/models.py:414 +#: core/models.py:422 msgid "the vendor supplying this product stock" msgstr "Den leverandør, der leverer dette produkt, lagerfører" -#: core/models.py:415 +#: core/models.py:423 msgid "associated vendor" msgstr "Tilknyttet leverandør" -#: core/models.py:419 +#: core/models.py:427 msgid "final price to the customer after markups" msgstr "Endelig pris til kunden efter tillæg" -#: core/models.py:420 +#: core/models.py:428 msgid "selling price" msgstr "Salgspris" -#: core/models.py:425 +#: core/models.py:433 msgid "the product associated with this stock entry" msgstr "Det produkt, der er knyttet til denne lagerpost" -#: core/models.py:426 core/models.py:697 core/models.py:744 -#: core/models.py:1641 +#: core/models.py:434 core/models.py:705 core/models.py:752 +#: core/models.py:1649 msgid "associated product" msgstr "Tilknyttet produkt" -#: core/models.py:433 +#: core/models.py:441 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:434 +#: core/models.py:442 msgid "vendor purchase price" msgstr "Leverandørens købspris" -#: core/models.py:438 +#: core/models.py:446 msgid "available quantity of the product in stock" msgstr "Tilgængelig mængde af produktet på lager" -#: core/models.py:439 +#: core/models.py:447 msgid "quantity in stock" msgstr "Antal på lager" -#: core/models.py:443 +#: core/models.py:451 msgid "vendor-assigned SKU for identifying the product" msgstr "Leverandørtildelt SKU til identifikation af produktet" -#: core/models.py:444 +#: core/models.py:452 msgid "vendor sku" msgstr "Leverandørens SKU" -#: core/models.py:450 +#: core/models.py:458 msgid "digital file associated with this stock if applicable" msgstr "Digital fil knyttet til dette lager, hvis relevant" -#: core/models.py:451 +#: core/models.py:459 msgid "digital file" msgstr "Digital fil" -#: core/models.py:460 +#: core/models.py:468 msgid "stock entries" msgstr "Lagerposteringer" -#: core/models.py:465 +#: core/models.py:473 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1646,55 +1658,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:478 +#: core/models.py:486 msgid "category this product belongs to" msgstr "Kategori, som dette produkt tilhører" -#: core/models.py:487 +#: core/models.py:495 msgid "optionally associate this product with a brand" msgstr "Tilknyt eventuelt dette produkt til et brand" -#: core/models.py:493 +#: core/models.py:501 msgid "tags that help describe or group this product" msgstr "Tags, der hjælper med at beskrive eller gruppere dette produkt" -#: core/models.py:498 +#: core/models.py:506 msgid "indicates whether this product is digitally delivered" msgstr "Angiver, om dette produkt leveres digitalt" -#: core/models.py:499 +#: core/models.py:507 msgid "is product digital" msgstr "Er produktet digitalt?" -#: core/models.py:505 +#: core/models.py:513 msgid "provide a clear identifying name for the product" msgstr "Giv produktet et klart identificerende navn" -#: core/models.py:506 +#: core/models.py:514 msgid "product name" msgstr "Produktets navn" -#: core/models.py:511 core/models.py:786 +#: core/models.py:519 core/models.py:794 msgid "add a detailed description of the product" msgstr "Tilføj en detaljeret beskrivelse af produktet" -#: core/models.py:512 +#: core/models.py:520 msgid "product description" msgstr "Produktbeskrivelse" -#: core/models.py:519 +#: core/models.py:527 msgid "part number for this product" msgstr "Reservedelsnummer for dette produkt" -#: core/models.py:520 +#: core/models.py:528 msgid "part number" msgstr "Varenummer" -#: core/models.py:539 +#: core/models.py:547 msgid "stock keeping unit for this product" msgstr "Lagerbeholdning for dette produkt" -#: core/models.py:613 +#: core/models.py:621 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 +1722,70 @@ msgstr "" "string, integer, float, boolean, array og object. Det giver mulighed for " "dynamisk og fleksibel datastrukturering." -#: core/models.py:625 +#: core/models.py:633 msgid "category of this attribute" msgstr "Kategori for denne attribut" -#: core/models.py:633 +#: core/models.py:641 msgid "group of this attribute" msgstr "Gruppe af denne attribut" -#: core/models.py:639 +#: core/models.py:647 msgid "string" msgstr "Streng" -#: core/models.py:640 +#: core/models.py:648 msgid "integer" msgstr "Heltal" -#: core/models.py:641 +#: core/models.py:649 msgid "float" msgstr "Flyder" -#: core/models.py:642 +#: core/models.py:650 msgid "boolean" msgstr "Boolsk" -#: core/models.py:643 +#: core/models.py:651 msgid "array" msgstr "Array" -#: core/models.py:644 +#: core/models.py:652 msgid "object" msgstr "Objekt" -#: core/models.py:646 +#: core/models.py:654 msgid "type of the attribute's value" msgstr "Type af attributtens værdi" -#: core/models.py:647 +#: core/models.py:655 msgid "value type" msgstr "Værditype" -#: core/models.py:652 +#: core/models.py:660 msgid "name of this attribute" msgstr "Navn på denne attribut" -#: core/models.py:653 +#: core/models.py:661 msgid "attribute's name" msgstr "Attributtens navn" -#: core/models.py:659 +#: core/models.py:667 msgid "is filterable" msgstr "er filtrerbar" -#: core/models.py:660 +#: core/models.py:668 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:671 core/models.py:689 +#: core/models.py:679 core/models.py:697 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attribut" -#: core/models.py:677 +#: core/models.py:685 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 +1796,19 @@ msgstr "" "mulighed for bedre organisering og dynamisk repræsentation af " "produktegenskaber." -#: core/models.py:688 +#: core/models.py:696 msgid "attribute of this value" msgstr "Attribut for denne værdi" -#: core/models.py:696 +#: core/models.py:704 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:702 +#: core/models.py:710 msgid "the specific value for this attribute" msgstr "Den specifikke værdi for denne attribut" -#: core/models.py:715 +#: core/models.py:723 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 +1822,39 @@ msgstr "" "specifikke produkter og bestemme deres visningsrækkefølge. Den indeholder " "også en tilgængelighedsfunktion med alternativ tekst til billederne." -#: core/models.py:726 +#: core/models.py:734 msgid "provide alternative text for the image for accessibility" msgstr "Giv alternativ tekst til billedet af hensyn til tilgængeligheden" -#: core/models.py:727 +#: core/models.py:735 msgid "image alt text" msgstr "Billedets alt-tekst" -#: core/models.py:730 +#: core/models.py:738 msgid "upload the image file for this product" msgstr "Upload billedfilen til dette produkt" -#: core/models.py:731 core/models.py:756 +#: core/models.py:739 core/models.py:764 msgid "product image" msgstr "Produktbillede" -#: core/models.py:737 +#: core/models.py:745 msgid "determines the order in which images are displayed" msgstr "Bestemmer den rækkefølge, billederne vises i" -#: core/models.py:738 +#: core/models.py:746 msgid "display priority" msgstr "Skærm-prioritet" -#: core/models.py:743 +#: core/models.py:751 msgid "the product that this image represents" msgstr "Det produkt, som dette billede repræsenterer" -#: core/models.py:757 +#: core/models.py:765 msgid "product images" msgstr "Produktbilleder" -#: core/models.py:762 +#: core/models.py:770 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 +1870,39 @@ msgstr "" "relevante produkter. Den integreres med produktkataloget for at bestemme de " "berørte varer i kampagnen." -#: core/models.py:774 +#: core/models.py:782 msgid "percentage discount for the selected products" msgstr "Procentvis rabat for de valgte produkter" -#: core/models.py:775 +#: core/models.py:783 msgid "discount percentage" msgstr "Rabatprocent" -#: core/models.py:780 +#: core/models.py:788 msgid "provide a unique name for this promotion" msgstr "Giv et unikt navn til denne kampagne" -#: core/models.py:781 +#: core/models.py:789 msgid "promotion name" msgstr "Navn på kampagne" -#: core/models.py:787 +#: core/models.py:795 msgid "promotion description" msgstr "Beskrivelse af kampagnen" -#: core/models.py:792 +#: core/models.py:800 msgid "select which products are included in this promotion" msgstr "Vælg, hvilke produkter der er inkluderet i denne kampagne" -#: core/models.py:793 +#: core/models.py:801 msgid "included products" msgstr "Inkluderede produkter" -#: core/models.py:797 +#: core/models.py:805 msgid "promotion" msgstr "Forfremmelse" -#: core/models.py:808 +#: core/models.py:816 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 +1915,23 @@ msgstr "" "produkter samt operationer til at tilføje og fjerne flere produkter på én " "gang." -#: core/models.py:820 +#: core/models.py:828 msgid "products that the user has marked as wanted" msgstr "Produkter, som brugeren har markeret som ønskede" -#: core/models.py:828 +#: core/models.py:836 msgid "user who owns this wishlist" msgstr "Bruger, der ejer denne ønskeliste" -#: core/models.py:829 +#: core/models.py:837 msgid "wishlist owner" msgstr "Ønskelistens ejer" -#: core/models.py:837 +#: core/models.py:845 msgid "wishlist" msgstr "Ønskeliste" -#: core/models.py:879 +#: core/models.py:887 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1935,19 +1947,19 @@ msgstr "" "dokumentarfilerne. Den udvider funktionaliteten fra specifikke mixins og " "giver yderligere brugerdefinerede funktioner." -#: core/models.py:892 +#: core/models.py:900 msgid "documentary" msgstr "Dokumentarfilm" -#: core/models.py:893 +#: core/models.py:901 msgid "documentaries" msgstr "Dokumentarfilm" -#: core/models.py:903 +#: core/models.py:911 msgid "unresolved" msgstr "Uafklaret" -#: core/models.py:908 +#: core/models.py:916 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1968,59 +1980,59 @@ msgstr "" "Klassen gør det også muligt at knytte en adresse til en bruger, hvilket " "letter personlig datahåndtering." -#: core/models.py:923 +#: core/models.py:931 msgid "address line for the customer" msgstr "Adresselinje til kunden" -#: core/models.py:924 +#: core/models.py:932 msgid "address line" msgstr "Adresselinje" -#: core/models.py:926 +#: core/models.py:934 msgid "street" msgstr "Gade" -#: core/models.py:927 +#: core/models.py:935 msgid "district" msgstr "Distrikt" -#: core/models.py:928 +#: core/models.py:936 msgid "city" msgstr "By" -#: core/models.py:929 +#: core/models.py:937 msgid "region" msgstr "Region" -#: core/models.py:930 +#: core/models.py:938 msgid "postal code" msgstr "Postnummer" -#: core/models.py:931 +#: core/models.py:939 msgid "country" msgstr "Land" -#: core/models.py:938 +#: core/models.py:946 msgid "geolocation point: (longitude, latitude)" msgstr "Geolokaliseringspunkt (længdegrad, breddegrad)" -#: core/models.py:941 +#: core/models.py:949 msgid "full JSON response from geocoder for this address" msgstr "Fuldt JSON-svar fra geokoderen for denne adresse" -#: core/models.py:946 +#: core/models.py:954 msgid "stored JSON response from the geocoding service" msgstr "Gemt JSON-svar fra geokodningstjenesten" -#: core/models.py:954 +#: core/models.py:962 msgid "address" msgstr "Adresse" -#: core/models.py:955 +#: core/models.py:963 msgid "addresses" msgstr "Adresser" -#: core/models.py:967 +#: core/models.py:975 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 +2048,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:981 +#: core/models.py:989 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:982 +#: core/models.py:990 msgid "promo code identifier" msgstr "Identifikator for kampagnekode" -#: core/models.py:989 +#: core/models.py:997 msgid "fixed discount amount applied if percent is not used" msgstr "Fast rabatbeløb anvendes, hvis procent ikke bruges" -#: core/models.py:990 +#: core/models.py:998 msgid "fixed discount amount" msgstr "Fast rabatbeløb" -#: core/models.py:996 +#: core/models.py:1004 msgid "percentage discount applied if fixed amount is not used" msgstr "Procentvis rabat, hvis det faste beløb ikke bruges" -#: core/models.py:997 +#: core/models.py:1005 msgid "percentage discount" msgstr "Procentvis rabat" -#: core/models.py:1002 +#: core/models.py:1010 msgid "timestamp when the promocode expires" msgstr "Tidsstempel, når promokoden udløber" -#: core/models.py:1003 +#: core/models.py:1011 msgid "end validity time" msgstr "Slut gyldighedstid" -#: core/models.py:1008 +#: core/models.py:1016 msgid "timestamp from which this promocode is valid" msgstr "Tidsstempel, hvorfra denne promokode er gyldig" -#: core/models.py:1009 +#: core/models.py:1017 msgid "start validity time" msgstr "Start gyldighedstid" -#: core/models.py:1014 +#: core/models.py:1022 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:1015 +#: core/models.py:1023 msgid "usage timestamp" msgstr "Tidsstempel for brug" -#: core/models.py:1020 +#: core/models.py:1028 msgid "user assigned to this promocode if applicable" msgstr "Bruger tildelt denne promokode, hvis relevant" -#: core/models.py:1021 +#: core/models.py:1029 msgid "assigned user" msgstr "Tildelt bruger" -#: core/models.py:1028 +#: core/models.py:1036 msgid "promo code" msgstr "Kampagnekode" -#: core/models.py:1029 +#: core/models.py:1037 msgid "promo codes" msgstr "Kampagnekoder" -#: core/models.py:1044 +#: core/models.py:1052 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2109,16 +2121,16 @@ msgstr "" "Der skal kun defineres én type rabat (beløb eller procent), men ikke begge " "eller ingen af dem." -#: core/models.py:1065 +#: core/models.py:1073 msgid "promocode already used" msgstr "Promokoden er allerede blevet brugt" -#: core/models.py:1081 +#: core/models.py:1089 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Ugyldig rabattype for promokode {self.uuid}!" -#: core/models.py:1090 +#: core/models.py:1098 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 +2147,138 @@ msgstr "" " eller faktureringsoplysninger kan opdateres. Ligeledes understøtter " "funktionaliteten håndtering af produkterne i ordrens livscyklus." -#: core/models.py:1107 +#: core/models.py:1115 msgid "the billing address used for this order" msgstr "Den faktureringsadresse, der bruges til denne ordre" -#: core/models.py:1115 +#: core/models.py:1123 msgid "optional promo code applied to this order" msgstr "Valgfri kampagnekode anvendt på denne ordre" -#: core/models.py:1116 +#: core/models.py:1124 msgid "applied promo code" msgstr "Anvendt kampagnekode" -#: core/models.py:1124 +#: core/models.py:1132 msgid "the shipping address used for this order" msgstr "Den leveringsadresse, der er brugt til denne ordre" -#: core/models.py:1125 +#: core/models.py:1133 msgid "shipping address" msgstr "Leveringsadresse" -#: core/models.py:1131 +#: core/models.py:1139 msgid "current status of the order in its lifecycle" msgstr "Ordrens aktuelle status i dens livscyklus" -#: core/models.py:1132 +#: core/models.py:1140 msgid "order status" msgstr "Bestillingsstatus" -#: core/models.py:1137 core/models.py:1618 +#: core/models.py:1145 core/models.py:1626 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:1143 +#: core/models.py:1151 msgid "json representation of order attributes for this order" msgstr "JSON-repræsentation af ordreattributter for denne ordre" -#: core/models.py:1149 +#: core/models.py:1157 msgid "the user who placed the order" msgstr "Den bruger, der har afgivet ordren" -#: core/models.py:1150 +#: core/models.py:1158 msgid "user" msgstr "Bruger" -#: core/models.py:1156 +#: core/models.py:1164 msgid "the timestamp when the order was finalized" msgstr "Tidsstemplet for, hvornår ordren blev afsluttet" -#: core/models.py:1157 +#: core/models.py:1165 msgid "buy time" msgstr "Køb tid" -#: core/models.py:1164 +#: core/models.py:1172 msgid "a human-readable identifier for the order" msgstr "En menneskeligt læsbar identifikator for ordren" -#: core/models.py:1165 +#: core/models.py:1173 msgid "human readable id" msgstr "menneskeligt læsbart ID" -#: core/models.py:1171 +#: core/models.py:1179 msgid "order" msgstr "Bestil" -#: core/models.py:1209 +#: core/models.py:1217 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:1249 +#: core/models.py:1257 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:1254 +#: core/models.py:1262 msgid "you cannot add inactive products to order" msgstr "Du kan ikke tilføje inaktive produkter til en ordre" -#: core/models.py:1271 +#: core/models.py:1279 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:1293 core/models.py:1318 core/models.py:1326 +#: core/models.py:1301 core/models.py:1326 core/models.py:1334 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:1314 +#: core/models.py:1322 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} findes ikke med forespørgslen <{query}>!" -#: core/models.py:1346 +#: core/models.py:1354 msgid "promocode does not exist" msgstr "Promokode findes ikke" -#: core/models.py:1352 +#: core/models.py:1360 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:1371 +#: core/models.py:1379 msgid "address does not exist" msgstr "Adressen findes ikke" -#: core/models.py:1392 core/models.py:1461 +#: core/models.py:1400 core/models.py:1469 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:1395 core/models.py:1457 +#: core/models.py:1403 core/models.py:1465 msgid "invalid force value" msgstr "Ugyldig kraftværdi" -#: core/models.py:1401 core/models.py:1464 +#: core/models.py:1409 core/models.py:1472 msgid "you cannot purchase an empty order!" msgstr "Du kan ikke købe en tom ordre!" -#: core/models.py:1420 +#: core/models.py:1428 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:1434 +#: core/models.py:1442 msgid "a user without a balance cannot buy with balance" msgstr "En bruger uden saldo kan ikke købe med saldo!" -#: core/models.py:1439 +#: core/models.py:1447 msgid "insufficient funds to complete the order" msgstr "Utilstrækkelige midler til at gennemføre ordren" -#: core/models.py:1473 +#: core/models.py:1481 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2274,14 +2286,14 @@ msgstr "" "du kan ikke købe uden registrering, angiv venligst følgende oplysninger: " "kundens navn, kundens e-mail, kundens telefonnummer" -#: core/models.py:1482 +#: core/models.py:1490 #, 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:1591 +#: core/models.py:1599 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2303,110 +2315,110 @@ msgstr "" "en download-URL for digitale produkter. Modellen integreres med Order- og " "Product-modellerne og gemmer en reference til dem." -#: core/models.py:1606 +#: core/models.py:1614 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:1607 +#: core/models.py:1615 msgid "purchase price at order time" msgstr "Købspris på bestillingstidspunktet" -#: core/models.py:1612 +#: core/models.py:1620 msgid "internal comments for admins about this ordered product" msgstr "Interne kommentarer til administratorer om dette bestilte produkt" -#: core/models.py:1613 +#: core/models.py:1621 msgid "internal comments" msgstr "Interne kommentarer" -#: core/models.py:1619 +#: core/models.py:1627 msgid "user notifications" msgstr "Notifikationer til brugere" -#: core/models.py:1624 +#: core/models.py:1632 msgid "json representation of this item's attributes" msgstr "JSON-repræsentation af dette elements attributter" -#: core/models.py:1625 +#: core/models.py:1633 msgid "ordered product attributes" msgstr "Bestilte produktattributter" -#: core/models.py:1630 +#: core/models.py:1638 msgid "reference to the parent order that contains this product" msgstr "Henvisning til den overordnede ordre, der indeholder dette produkt" -#: core/models.py:1631 +#: core/models.py:1639 msgid "parent order" msgstr "Forældreordre" -#: core/models.py:1640 +#: core/models.py:1648 msgid "the specific product associated with this order line" msgstr "Det specifikke produkt, der er knyttet til denne ordrelinje" -#: core/models.py:1647 +#: core/models.py:1655 msgid "quantity of this specific product in the order" msgstr "Mængde af dette specifikke produkt i ordren" -#: core/models.py:1648 +#: core/models.py:1656 msgid "product quantity" msgstr "Produktmængde" -#: core/models.py:1655 +#: core/models.py:1663 msgid "current status of this product in the order" msgstr "Aktuel status for dette produkt i bestillingen" -#: core/models.py:1656 +#: core/models.py:1664 msgid "product line status" msgstr "Status for produktlinje" -#: core/models.py:1719 +#: core/models.py:1727 msgid "order product must have an order" msgstr "Orderproduct skal have en tilknyttet ordre!" -#: core/models.py:1721 +#: core/models.py:1729 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Forkert handling angivet for feedback: {action}!" -#: core/models.py:1735 +#: core/models.py:1743 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:1741 +#: core/models.py:1749 msgid "name" msgstr "Navn" -#: core/models.py:1742 +#: core/models.py:1750 msgid "URL of the integration" msgstr "URL til integrationen" -#: core/models.py:1743 +#: core/models.py:1751 msgid "authentication credentials" msgstr "Legitimationsoplysninger til godkendelse" -#: core/models.py:1765 +#: core/models.py:1773 msgid "you can only have one default CRM provider" msgstr "Du kan kun have én standard CRM-udbyder" -#: core/models.py:1775 +#: core/models.py:1783 msgid "CRM" msgstr "CRM" -#: core/models.py:1776 +#: core/models.py:1784 msgid "CRMs" msgstr "CRM'er" -#: core/models.py:1788 +#: core/models.py:1796 msgid "order CRM link" msgstr "Ordrens CRM-link" -#: core/models.py:1789 +#: core/models.py:1797 msgid "orders CRM links" msgstr "Bestillingernes CRM-links" -#: core/models.py:1794 +#: core/models.py:1802 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2423,15 +2435,15 @@ msgstr "" "URL til download af aktivet, når den tilknyttede ordre har status som " "afsluttet." -#: core/models.py:1808 +#: core/models.py:1816 msgid "download" msgstr "Download" -#: core/models.py:1809 +#: core/models.py:1817 msgid "downloads" msgstr "Downloads" -#: core/models.py:1823 +#: core/models.py:1831 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2446,30 +2458,30 @@ msgstr "" "bruger databasefelter til effektivt at modellere og administrere " "feedbackdata." -#: core/models.py:1835 +#: core/models.py:1843 msgid "user-provided comments about their experience with the product" msgstr "Brugernes kommentarer om deres oplevelse med produktet" -#: core/models.py:1836 +#: core/models.py:1844 msgid "feedback comments" msgstr "Kommentarer til feedback" -#: core/models.py:1843 +#: core/models.py:1851 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:1844 +#: core/models.py:1852 msgid "related order product" msgstr "Relateret ordreprodukt" -#: core/models.py:1849 +#: core/models.py:1857 msgid "user-assigned rating for the product" msgstr "Brugertildelt vurdering af produktet" -#: core/models.py:1850 +#: core/models.py:1858 msgid "product rating" msgstr "Produktvurdering" @@ -2686,22 +2698,22 @@ msgstr "Både data og timeout er påkrævet" msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "Ugyldig timeout-værdi, den skal være mellem 0 og 216000 sekunder" -#: core/utils/emailing.py:25 +#: core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | kontakt os påbegyndt" -#: core/utils/emailing.py:74 +#: core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Ordrebekræftelse" -#: core/utils/emailing.py:109 +#: core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Order Delivered" -#: core/utils/emailing.py:197 +#: core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | promokode givet" @@ -2950,7 +2962,7 @@ msgstr "" " basen `EvibesViewSet` og gør brug af Djangos filtreringssystem til at " "forespørge på data." -#: core/viewsets.py:593 +#: core/viewsets.py:594 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2969,7 +2981,7 @@ msgstr "" "baseret på den specifikke handling, der udføres, og håndhæver tilladelser i " "overensstemmelse hermed, mens der interageres med ordredata." -#: core/viewsets.py:782 +#: core/viewsets.py:784 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2984,11 +2996,11 @@ msgstr "" "Derudover indeholder det en detaljeret handling til håndtering af feedback " "på OrderProduct-instanser." -#: core/viewsets.py:833 +#: core/viewsets.py:835 msgid "Manages operations related to Product images in the application. " msgstr "Håndterer operationer relateret til produktbilleder i applikationen." -#: core/viewsets.py:845 +#: core/viewsets.py:847 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -2996,15 +3008,15 @@ msgstr "" "Administrerer hentning og håndtering af PromoCode-instanser gennem " "forskellige API-handlinger." -#: core/viewsets.py:866 +#: core/viewsets.py:868 msgid "Represents a view set for managing promotions. " msgstr "Repræsenterer et visningssæt til håndtering af kampagner." -#: core/viewsets.py:878 +#: core/viewsets.py:880 msgid "Handles operations related to Stock data in the system." msgstr "Håndterer operationer relateret til lagerdata i systemet." -#: core/viewsets.py:892 +#: core/viewsets.py:894 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3022,7 +3034,7 @@ msgstr "" "integreret for at sikre, at brugere kun kan administrere deres egne " "ønskelister, medmindre der er givet eksplicitte tilladelser." -#: core/viewsets.py:1007 +#: core/viewsets.py:1009 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3036,12 +3048,12 @@ msgstr "" "omfatter specialiseret adfærd for forskellige HTTP-metoder, tilsidesættelse " "af serializer og håndtering af tilladelser baseret på anmodningskonteksten." -#: core/viewsets.py:1074 +#: core/viewsets.py:1076 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Fejl i geokodning: {e}" -#: core/viewsets.py:1081 +#: core/viewsets.py:1083 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/de_DE/LC_MESSAGES/django.mo b/core/locale/de_DE/LC_MESSAGES/django.mo index e210205d..6e3ac554 100644 Binary files a/core/locale/de_DE/LC_MESSAGES/django.mo and b/core/locale/de_DE/LC_MESSAGES/django.mo differ diff --git a/core/locale/de_DE/LC_MESSAGES/django.po b/core/locale/de_DE/LC_MESSAGES/django.po index f55009f1..66817bd7 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -51,82 +51,86 @@ msgstr "Geändert" msgid "when the object was last modified" msgstr "Wann das Objekt zuletzt bearbeitet wurde" -#: core/admin.py:63 +#: core/admin.py:68 msgid "translations" msgstr "Übersetzungen" -#: core/admin.py:67 +#: core/admin.py:72 msgid "general" msgstr "Allgemein" -#: core/admin.py:69 +#: core/admin.py:74 msgid "relations" msgstr "Beziehungen" -#: core/admin.py:87 +#: core/admin.py:76 +msgid "additional info" +msgstr "Zusatzinfo" + +#: core/admin.py:94 msgid "metadata" msgstr "Metadaten" -#: core/admin.py:94 +#: core/admin.py:101 msgid "timestamps" msgstr "Zeitstempel" -#: core/admin.py:109 +#: core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Ausgewählte %(verbose_name_plural)s aktivieren" -#: core/admin.py:114 +#: core/admin.py:121 msgid "selected items have been activated." msgstr "Ausgewählte Artikel wurden aktiviert!" -#: core/admin.py:120 +#: core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Ausgewählte %(verbose_name_plural)s deaktivieren" -#: core/admin.py:125 +#: core/admin.py:132 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:701 core/models.py:709 +#: core/admin.py:144 core/graphene/object_types.py:609 +#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 msgid "attribute value" msgstr "Attribut Wert" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 +#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718 msgid "attribute values" msgstr "Attribut Werte" -#: core/admin.py:146 +#: core/admin.py:153 msgid "image" msgstr "Bild" -#: core/admin.py:147 core/graphene/object_types.py:501 +#: core/admin.py:154 core/graphene/object_types.py:501 msgid "images" msgstr "Bilder" -#: core/admin.py:155 core/models.py:459 +#: core/admin.py:162 core/models.py:467 msgid "stock" msgstr "Lagerbestand" -#: core/admin.py:156 core/graphene/object_types.py:663 +#: core/admin.py:163 core/graphene/object_types.py:663 msgid "stocks" msgstr "Bestände" -#: core/admin.py:166 core/models.py:1667 +#: core/admin.py:173 core/models.py:1675 msgid "order product" msgstr "Produkt bestellen" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 msgid "order products" msgstr "Produkte bestellen" -#: core/admin.py:180 core/admin.py:181 +#: core/admin.py:187 core/admin.py:188 msgid "children" msgstr "Kinder" -#: core/admin.py:566 +#: core/admin.py:940 msgid "Config" msgstr "Konfigurieren Sie" @@ -760,23 +764,23 @@ 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:118 core/elasticsearch/__init__.py:498 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 msgid "no search term provided." msgstr "Kein Suchbegriff angegeben." -#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +#: core/filters.py:65 core/filters.py:399 core/filters.py:526 msgid "Search" msgstr "Suche" -#: core/filters.py:66 core/filters.py:554 core/filters.py:583 +#: core/filters.py:66 core/filters.py:556 core/filters.py:585 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:399 core/filters.py:526 +#: core/filters.py:67 core/filters.py:401 core/filters.py:528 msgid "Name" msgstr "Name" -#: core/filters.py:68 core/filters.py:528 +#: core/filters.py:68 core/filters.py:530 msgid "Categories" msgstr "Kategorien" @@ -784,7 +788,7 @@ msgstr "Kategorien" msgid "Categories Slugs" msgstr "Kategorien Schnecken" -#: core/filters.py:71 core/filters.py:407 +#: core/filters.py:71 core/filters.py:409 msgid "Tags" msgstr "Tags" @@ -812,8 +816,8 @@ msgstr "Attribute" msgid "Quantity" msgstr "Menge" -#: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:301 core/models.py:383 core/models.py:536 +#: core/filters.py:78 core/filters.py:403 core/filters.py:529 +#: core/models.py:309 core/models.py:391 core/models.py:544 msgid "Slug" msgstr "Schnecke" @@ -829,7 +833,7 @@ msgstr "Unterkategorien einbeziehen" msgid "Include personal ordered" msgstr "Persönlich bestellte Produkte einbeziehen" -#: core/filters.py:85 core/models.py:540 +#: core/filters.py:85 core/models.py:548 msgid "SKU" msgstr "SKU" @@ -839,48 +843,48 @@ msgstr "" "Es muss eine category_uuid vorhanden sein, um das Flag include_subcategories" " zu verwenden" -#: core/filters.py:324 +#: core/filters.py:326 msgid "Search (ID, product name or part number)" msgstr "Suche (ID, Produktname oder Teilenummer)" -#: core/filters.py:327 +#: core/filters.py:329 msgid "Bought after (inclusive)" msgstr "Gekauft nach (einschließlich)" -#: core/filters.py:328 +#: core/filters.py:330 msgid "Bought before (inclusive)" msgstr "Gekauft vor (einschließlich)" -#: core/filters.py:331 core/filters.py:378 core/filters.py:585 +#: core/filters.py:333 core/filters.py:380 core/filters.py:587 msgid "User email" msgstr "Benutzer-E-Mail" -#: core/filters.py:332 core/filters.py:379 core/filters.py:563 -#: core/filters.py:584 +#: core/filters.py:334 core/filters.py:381 core/filters.py:565 +#: core/filters.py:586 msgid "User UUID" msgstr "User UUID" -#: core/filters.py:333 +#: core/filters.py:335 msgid "Status" msgstr "Status" -#: core/filters.py:337 +#: core/filters.py:339 msgid "Human Readable ID" msgstr "Human Readable ID" -#: core/filters.py:400 +#: core/filters.py:402 msgid "Parent" msgstr "Elternteil" -#: core/filters.py:404 +#: core/filters.py:406 msgid "Whole category(has at least 1 product or not)" msgstr "Gesamte Kategorie (mit oder ohne mindestens 1 Produkt)" -#: core/filters.py:408 +#: core/filters.py:410 msgid "Level" msgstr "Ebene" -#: core/filters.py:558 +#: core/filters.py:560 msgid "Product UUID" msgstr "Produkt UUID" @@ -937,7 +941,7 @@ msgstr "" "sich gegenseitig aus!" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:679 +#: core/graphene/mutations.py:527 core/viewsets.py:680 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 +1018,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:849 core/models.py:862 -#: core/models.py:1281 core/models.py:1310 core/models.py:1335 -#: core/viewsets.py:682 +#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 +#: core/models.py:1289 core/models.py:1318 core/models.py:1343 +#: core/viewsets.py:683 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} existiert nicht: {uuid}!" @@ -1030,8 +1034,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:672 core/models.py:1144 -#: core/models.py:1744 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 +#: core/models.py:1752 msgid "attributes" msgstr "Attribute" @@ -1044,11 +1048,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:326 core/models.py:626 +#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 msgid "categories" msgstr "Kategorien" -#: core/graphene/object_types.py:124 core/models.py:397 +#: core/graphene/object_types.py:124 core/models.py:405 msgid "brands" msgstr "Marken" @@ -1057,7 +1061,7 @@ msgid "category image url" msgstr "Kategorien" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:263 +#: core/models.py:271 msgid "markup percentage" msgstr "Markup Percentage" @@ -1082,7 +1086,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:169 +#: core/graphene/object_types.py:351 core/models.py:177 msgid "vendors" msgstr "Anbieter" @@ -1108,7 +1112,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:1138 +#: core/models.py:1146 msgid "notifications" msgstr "Benachrichtigungen" @@ -1116,7 +1120,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:1860 +#: core/graphene/object_types.py:400 core/models.py:1868 msgid "feedback" msgstr "Rückmeldung" @@ -1124,7 +1128,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:1108 +#: core/graphene/object_types.py:436 core/models.py:1116 msgid "billing address" msgstr "Rechnungsadresse" @@ -1152,7 +1156,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:1172 +#: core/graphene/object_types.py:465 core/models.py:1180 msgid "orders" msgstr "Bestellungen" @@ -1164,19 +1168,19 @@ msgstr "Bild URL" msgid "product's images" msgstr "Bilder des Produkts" -#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 +#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 msgid "category" msgstr "Kategorie" -#: core/graphene/object_types.py:502 core/models.py:1861 +#: core/graphene/object_types.py:502 core/models.py:1869 msgid "feedbacks" msgstr "Rückmeldungen" -#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 +#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 msgid "brand" msgstr "Marke" -#: core/graphene/object_types.py:504 core/models.py:101 +#: core/graphene/object_types.py:504 core/models.py:102 msgid "attribute groups" msgstr "Attribut-Gruppen" @@ -1204,7 +1208,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:550 +#: core/graphene/object_types.py:534 core/models.py:558 msgid "products" msgstr "Produkte" @@ -1216,15 +1220,15 @@ msgstr "Promocodes" msgid "products on sale" msgstr "Zum Verkauf stehende Produkte" -#: core/graphene/object_types.py:651 core/models.py:798 +#: core/graphene/object_types.py:651 core/models.py:806 msgid "promotions" msgstr "Werbeaktionen" -#: core/graphene/object_types.py:655 core/models.py:168 +#: core/graphene/object_types.py:655 core/models.py:176 msgid "vendor" msgstr "Anbieter" -#: core/graphene/object_types.py:656 core/models.py:549 +#: core/graphene/object_types.py:656 core/models.py:557 #: 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 +1236,11 @@ msgstr "Anbieter" msgid "product" msgstr "Produkt" -#: core/graphene/object_types.py:667 core/models.py:821 +#: core/graphene/object_types.py:667 core/models.py:829 msgid "wishlisted products" msgstr "Auf dem Wunschzettel stehende Produkte" -#: core/graphene/object_types.py:673 core/models.py:838 +#: core/graphene/object_types.py:673 core/models.py:846 msgid "wishlists" msgstr "Wunschzettel" @@ -1244,7 +1248,7 @@ msgstr "Wunschzettel" msgid "tagged products" msgstr "Markierte Produkte" -#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 +#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 msgid "product tags" msgstr "Produkt-Tags" @@ -1330,7 +1334,7 @@ msgstr "Suchergebnisse für Produkte" msgid "posts search results" msgstr "Suchergebnisse für Produkte" -#: core/models.py:70 +#: core/models.py:71 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1343,23 +1347,23 @@ msgstr "" "eine hierarchische Struktur bildet. Dies kann nützlich sein, um Attribute in" " einem komplexen System effektiver zu kategorisieren und zu verwalten." -#: core/models.py:86 +#: core/models.py:87 msgid "parent of this group" msgstr "Elternteil dieser Gruppe" -#: core/models.py:87 +#: core/models.py:88 msgid "parent attribute group" msgstr "Übergeordnete Attributgruppe" -#: core/models.py:91 core/models.py:92 +#: core/models.py:92 core/models.py:93 msgid "attribute group's name" msgstr "Name der Attributgruppe" -#: core/models.py:100 core/models.py:634 +#: core/models.py:101 core/models.py:642 msgid "attribute group" msgstr "Attribut-Gruppe" -#: core/models.py:106 +#: core/models.py:107 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1378,35 +1382,43 @@ msgstr "" "verwaltet auch zusätzliche Metadaten und Einschränkungen, wodurch es sich " "für die Verwendung in Systemen eignet, die mit Drittanbietern interagieren." -#: core/models.py:119 +#: core/models.py:120 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Speichert Anmeldeinformationen und Endpunkte, die für die API-Kommunikation " "des Anbieters erforderlich sind" -#: core/models.py:120 +#: core/models.py:121 msgid "authentication info" msgstr "Informationen zur Authentifizierung" -#: core/models.py:125 +#: core/models.py:126 msgid "define the markup for products retrieved from this vendor" msgstr "" "Definieren Sie den Aufschlag für Produkte, die von diesem Lieferanten " "bezogen werden" -#: core/models.py:126 +#: core/models.py:127 msgid "vendor markup percentage" msgstr "Prozentualer Aufschlag des Lieferanten" -#: core/models.py:130 +#: core/models.py:131 msgid "name of this vendor" msgstr "Name dieses Anbieters" -#: core/models.py:131 +#: core/models.py:132 msgid "vendor name" msgstr "Name des Anbieters" -#: core/models.py:177 +#: core/models.py:143 +msgid "response file" +msgstr "Antwortdatei" + +#: core/models.py:144 +msgid "vendor's last processing response" +msgstr "die letzte Verarbeitungsantwort des Lieferanten" + +#: core/models.py:185 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1421,27 +1433,27 @@ msgstr "" "Sie unterstützt Operationen, die über Mixins exportiert werden, und " "ermöglicht die Anpassung von Metadaten für Verwaltungszwecke." -#: core/models.py:189 core/models.py:220 +#: core/models.py:197 core/models.py:228 msgid "internal tag identifier for the product tag" msgstr "Interner Tag-Identifikator für das Produkt-Tag" -#: core/models.py:190 core/models.py:221 +#: core/models.py:198 core/models.py:229 msgid "tag name" msgstr "Tag name" -#: core/models.py:194 core/models.py:225 +#: core/models.py:202 core/models.py:233 msgid "user-friendly name for the product tag" msgstr "Benutzerfreundlicher Name für den Produktanhänger" -#: core/models.py:195 core/models.py:226 +#: core/models.py:203 core/models.py:234 msgid "tag display name" msgstr "Tag-Anzeigename" -#: core/models.py:203 +#: core/models.py:211 msgid "product tag" msgstr "Produkt-Tag" -#: core/models.py:209 +#: core/models.py:217 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 +1464,15 @@ msgstr "" "zuzuordnen und zu klassifizieren. Sie enthält Attribute für einen internen " "Tag-Bezeichner und einen benutzerfreundlichen Anzeigenamen." -#: core/models.py:234 +#: core/models.py:242 msgid "category tag" msgstr "Kategorie-Tag" -#: core/models.py:235 core/models.py:307 +#: core/models.py:243 core/models.py:315 msgid "category tags" msgstr "Kategorie-Tags" -#: core/models.py:240 +#: core/models.py:248 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1483,53 +1495,53 @@ msgstr "" " Beschreibung und die Hierarchie von Kategorien festzulegen sowie Attribute " "wie Bilder, Tags oder Priorität zuzuweisen." -#: core/models.py:254 +#: core/models.py:262 msgid "upload an image representing this category" msgstr "Laden Sie ein Bild hoch, das diese Kategorie repräsentiert" -#: core/models.py:257 +#: core/models.py:265 msgid "category image" msgstr "Kategorie Bild" -#: core/models.py:262 +#: core/models.py:270 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:271 +#: core/models.py:279 msgid "parent of this category to form a hierarchical structure" msgstr "" "Übergeordneter dieser Kategorie, um eine hierarchische Struktur zu bilden" -#: core/models.py:272 +#: core/models.py:280 msgid "parent category" msgstr "Übergeordnete Kategorie" -#: core/models.py:277 +#: core/models.py:285 msgid "category name" msgstr "Name der Kategorie" -#: core/models.py:278 +#: core/models.py:286 msgid "provide a name for this category" msgstr "Geben Sie einen Namen für diese Kategorie an" -#: core/models.py:285 +#: core/models.py:293 msgid "add a detailed description for this category" msgstr "Fügen Sie eine detaillierte Beschreibung für diese Kategorie hinzu" -#: core/models.py:286 +#: core/models.py:294 msgid "category description" msgstr "Beschreibung der Kategorie" -#: core/models.py:306 +#: core/models.py:314 msgid "tags that help describe or group this category" msgstr "Tags, die helfen, diese Kategorie zu beschreiben oder zu gruppieren" -#: core/models.py:313 core/models.py:389 +#: core/models.py:321 core/models.py:397 msgid "priority" msgstr "Priorität" -#: core/models.py:332 +#: core/models.py:340 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 +1555,48 @@ msgstr "" "der Prioritätsreihenfolge. Sie ermöglicht die Organisation und Darstellung " "von markenbezogenen Daten innerhalb der Anwendung." -#: core/models.py:342 +#: core/models.py:350 msgid "name of this brand" msgstr "Name dieser Marke" -#: core/models.py:343 +#: core/models.py:351 msgid "brand name" msgstr "Markenname" -#: core/models.py:350 +#: core/models.py:358 msgid "upload a logo representing this brand" msgstr "Laden Sie ein Logo hoch, das diese Marke repräsentiert" -#: core/models.py:352 +#: core/models.py:360 msgid "brand small image" msgstr "Marke kleines Bild" -#: core/models.py:358 +#: core/models.py:366 msgid "upload a big logo representing this brand" msgstr "Laden Sie ein großes Logo hoch, das diese Marke repräsentiert" -#: core/models.py:360 +#: core/models.py:368 msgid "brand big image" msgstr "Großes Image der Marke" -#: core/models.py:365 +#: core/models.py:373 msgid "add a detailed description of the brand" msgstr "Fügen Sie eine detaillierte Beschreibung der Marke hinzu" -#: core/models.py:366 +#: core/models.py:374 msgid "brand description" msgstr "Beschreibung der Marke" -#: core/models.py:371 +#: core/models.py:379 msgid "optional categories that this brand is associated with" msgstr "" "Optionale Kategorien, mit denen diese Marke in Verbindung gebracht wird" -#: core/models.py:372 +#: core/models.py:380 msgid "associated categories" msgstr "Kategorien" -#: core/models.py:402 +#: core/models.py:410 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 +1612,69 @@ msgstr "" "Bestandsverwaltungssystems, um die Nachverfolgung und Bewertung der von " "verschiedenen Anbietern verfügbaren Produkte zu ermöglichen." -#: core/models.py:414 +#: core/models.py:422 msgid "the vendor supplying this product stock" msgstr "Der Verkäufer, der dieses Produkt liefert, hat folgende Bestände" -#: core/models.py:415 +#: core/models.py:423 msgid "associated vendor" msgstr "Zugehöriger Anbieter" -#: core/models.py:419 +#: core/models.py:427 msgid "final price to the customer after markups" msgstr "Endpreis für den Kunden nach Aufschlägen" -#: core/models.py:420 +#: core/models.py:428 msgid "selling price" msgstr "Verkaufspreis" -#: core/models.py:425 +#: core/models.py:433 msgid "the product associated with this stock entry" msgstr "Das mit diesem Bestandseintrag verbundene Produkt" -#: core/models.py:426 core/models.py:697 core/models.py:744 -#: core/models.py:1641 +#: core/models.py:434 core/models.py:705 core/models.py:752 +#: core/models.py:1649 msgid "associated product" msgstr "Zugehöriges Produkt" -#: core/models.py:433 +#: core/models.py:441 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:434 +#: core/models.py:442 msgid "vendor purchase price" msgstr "Einkaufspreis des Verkäufers" -#: core/models.py:438 +#: core/models.py:446 msgid "available quantity of the product in stock" msgstr "Verfügbare Menge des Produkts auf Lager" -#: core/models.py:439 +#: core/models.py:447 msgid "quantity in stock" msgstr "Vorrätige Menge" -#: core/models.py:443 +#: core/models.py:451 msgid "vendor-assigned SKU for identifying the product" msgstr "Vom Hersteller zugewiesene SKU zur Identifizierung des Produkts" -#: core/models.py:444 +#: core/models.py:452 msgid "vendor sku" msgstr "SKU des Verkäufers" -#: core/models.py:450 +#: core/models.py:458 msgid "digital file associated with this stock if applicable" msgstr "" "Digitale Datei, die mit diesem Bestand verbunden ist, falls zutreffend" -#: core/models.py:451 +#: core/models.py:459 msgid "digital file" msgstr "Digitale Datei" -#: core/models.py:460 +#: core/models.py:468 msgid "stock entries" msgstr "Bestandseinträge" -#: core/models.py:465 +#: core/models.py:473 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1684,56 +1696,56 @@ msgstr "" " um Produktdaten und die damit verbundenen Informationen innerhalb einer " "Anwendung zu definieren und zu manipulieren." -#: core/models.py:478 +#: core/models.py:486 msgid "category this product belongs to" msgstr "Kategorie, zu der dieses Produkt gehört" -#: core/models.py:487 +#: core/models.py:495 msgid "optionally associate this product with a brand" msgstr "Optional können Sie dieses Produkt mit einer Marke verknüpfen" -#: core/models.py:493 +#: core/models.py:501 msgid "tags that help describe or group this product" msgstr "Tags, die helfen, dieses Produkt zu beschreiben oder zu gruppieren" -#: core/models.py:498 +#: core/models.py:506 msgid "indicates whether this product is digitally delivered" msgstr "Gibt an, ob dieses Produkt digital geliefert wird" -#: core/models.py:499 +#: core/models.py:507 msgid "is product digital" msgstr "Ist das Produkt digital" -#: core/models.py:505 +#: core/models.py:513 msgid "provide a clear identifying name for the product" msgstr "" "Geben Sie einen eindeutigen Namen zur Identifizierung des Produkts an." -#: core/models.py:506 +#: core/models.py:514 msgid "product name" msgstr "Name des Produkts" -#: core/models.py:511 core/models.py:786 +#: core/models.py:519 core/models.py:794 msgid "add a detailed description of the product" msgstr "Fügen Sie eine detaillierte Beschreibung des Produkts hinzu" -#: core/models.py:512 +#: core/models.py:520 msgid "product description" msgstr "Beschreibung des Produkts" -#: core/models.py:519 +#: core/models.py:527 msgid "part number for this product" msgstr "Teilenummer für dieses Produkt" -#: core/models.py:520 +#: core/models.py:528 msgid "part number" msgstr "Teilnummer" -#: core/models.py:539 +#: core/models.py:547 msgid "stock keeping unit for this product" msgstr "Lagerhaltende Einheit für dieses Produkt" -#: core/models.py:613 +#: core/models.py:621 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 +1762,70 @@ msgstr "" "Array und Object. Dies ermöglicht eine dynamische und flexible " "Datenstrukturierung." -#: core/models.py:625 +#: core/models.py:633 msgid "category of this attribute" msgstr "Kategorie dieses Attributs" -#: core/models.py:633 +#: core/models.py:641 msgid "group of this attribute" msgstr "Gruppe dieses Attributs" -#: core/models.py:639 +#: core/models.py:647 msgid "string" msgstr "Zeichenfolge" -#: core/models.py:640 +#: core/models.py:648 msgid "integer" msgstr "Integer" -#: core/models.py:641 +#: core/models.py:649 msgid "float" msgstr "Schwimmer" -#: core/models.py:642 +#: core/models.py:650 msgid "boolean" msgstr "Boolesche" -#: core/models.py:643 +#: core/models.py:651 msgid "array" msgstr "Array" -#: core/models.py:644 +#: core/models.py:652 msgid "object" msgstr "Objekt" -#: core/models.py:646 +#: core/models.py:654 msgid "type of the attribute's value" msgstr "Typ des Attributwerts" -#: core/models.py:647 +#: core/models.py:655 msgid "value type" msgstr "Werttyp" -#: core/models.py:652 +#: core/models.py:660 msgid "name of this attribute" msgstr "Name dieses Attributs" -#: core/models.py:653 +#: core/models.py:661 msgid "attribute's name" msgstr "Name des Attributs" -#: core/models.py:659 +#: core/models.py:667 msgid "is filterable" msgstr "ist filterbar" -#: core/models.py:660 +#: core/models.py:668 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:671 core/models.py:689 +#: core/models.py:679 core/models.py:697 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attribut" -#: core/models.py:677 +#: core/models.py:685 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 +1836,20 @@ msgstr "" "und ermöglicht so eine bessere Organisation und dynamische Darstellung der " "Produktmerkmale." -#: core/models.py:688 +#: core/models.py:696 msgid "attribute of this value" msgstr "Attribut dieses Wertes" -#: core/models.py:696 +#: core/models.py:704 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:702 +#: core/models.py:710 msgid "the specific value for this attribute" msgstr "Der spezifische Wert für dieses Attribut" -#: core/models.py:715 +#: core/models.py:723 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 +1863,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:726 +#: core/models.py:734 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:727 +#: core/models.py:735 msgid "image alt text" msgstr "Bild-Alt-Text" -#: core/models.py:730 +#: core/models.py:738 msgid "upload the image file for this product" msgstr "Laden Sie die Bilddatei für dieses Produkt hoch" -#: core/models.py:731 core/models.py:756 +#: core/models.py:739 core/models.py:764 msgid "product image" msgstr "Produktbild" -#: core/models.py:737 +#: core/models.py:745 msgid "determines the order in which images are displayed" msgstr "Legt die Reihenfolge fest, in der die Bilder angezeigt werden" -#: core/models.py:738 +#: core/models.py:746 msgid "display priority" msgstr "Priorität anzeigen" -#: core/models.py:743 +#: core/models.py:751 msgid "the product that this image represents" msgstr "Das Produkt, das dieses Bild darstellt" -#: core/models.py:757 +#: core/models.py:765 msgid "product images" msgstr "Produktbilder" -#: core/models.py:762 +#: core/models.py:770 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 +1914,39 @@ msgstr "" "Sie ist mit dem Produktkatalog integriert, um die betroffenen Artikel in der" " Kampagne zu bestimmen." -#: core/models.py:774 +#: core/models.py:782 msgid "percentage discount for the selected products" msgstr "Prozentualer Rabatt für die ausgewählten Produkte" -#: core/models.py:775 +#: core/models.py:783 msgid "discount percentage" msgstr "Prozentsatz der Ermäßigung" -#: core/models.py:780 +#: core/models.py:788 msgid "provide a unique name for this promotion" msgstr "Geben Sie einen eindeutigen Namen für diese Aktion an" -#: core/models.py:781 +#: core/models.py:789 msgid "promotion name" msgstr "Name der Aktion" -#: core/models.py:787 +#: core/models.py:795 msgid "promotion description" msgstr "Promotion description" -#: core/models.py:792 +#: core/models.py:800 msgid "select which products are included in this promotion" msgstr "Wählen Sie aus, welche Produkte in dieser Aktion enthalten sind" -#: core/models.py:793 +#: core/models.py:801 msgid "included products" msgstr "Enthaltene Produkte" -#: core/models.py:797 +#: core/models.py:805 msgid "promotion" msgstr "Förderung" -#: core/models.py:808 +#: core/models.py:816 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 +1959,23 @@ msgstr "" "Entfernen von Produkten sowie das Hinzufügen und Entfernen mehrerer Produkte" " gleichzeitig." -#: core/models.py:820 +#: core/models.py:828 msgid "products that the user has marked as wanted" msgstr "Produkte, die der Benutzer als gewünscht markiert hat" -#: core/models.py:828 +#: core/models.py:836 msgid "user who owns this wishlist" msgstr "Benutzer, dem diese Wunschliste gehört" -#: core/models.py:829 +#: core/models.py:837 msgid "wishlist owner" msgstr "Besitzer der Wishlist" -#: core/models.py:837 +#: core/models.py:845 msgid "wishlist" msgstr "Wunschzettel" -#: core/models.py:879 +#: core/models.py:887 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1980,19 +1992,19 @@ msgstr "" " die Funktionalität von bestimmten Mixins und bietet zusätzliche " "benutzerdefinierte Funktionen." -#: core/models.py:892 +#: core/models.py:900 msgid "documentary" msgstr "Dokumentarfilm" -#: core/models.py:893 +#: core/models.py:901 msgid "documentaries" msgstr "Dokumentarfilme" -#: core/models.py:903 +#: core/models.py:911 msgid "unresolved" msgstr "Ungelöst" -#: core/models.py:908 +#: core/models.py:916 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2014,59 +2026,59 @@ msgstr "" "ermöglicht es auch, eine Adresse mit einem Benutzer zu verknüpfen, was die " "personalisierte Datenverarbeitung erleichtert." -#: core/models.py:923 +#: core/models.py:931 msgid "address line for the customer" msgstr "Adresszeile für den Kunden" -#: core/models.py:924 +#: core/models.py:932 msgid "address line" msgstr "Adresszeile" -#: core/models.py:926 +#: core/models.py:934 msgid "street" msgstr "Straße" -#: core/models.py:927 +#: core/models.py:935 msgid "district" msgstr "Bezirk" -#: core/models.py:928 +#: core/models.py:936 msgid "city" msgstr "Stadt" -#: core/models.py:929 +#: core/models.py:937 msgid "region" msgstr "Region" -#: core/models.py:930 +#: core/models.py:938 msgid "postal code" msgstr "Postleitzahl" -#: core/models.py:931 +#: core/models.py:939 msgid "country" msgstr "Land" -#: core/models.py:938 +#: core/models.py:946 msgid "geolocation point: (longitude, latitude)" msgstr "Geolocation Point(Längengrad, Breitengrad)" -#: core/models.py:941 +#: core/models.py:949 msgid "full JSON response from geocoder for this address" msgstr "Vollständige JSON-Antwort vom Geocoder für diese Adresse" -#: core/models.py:946 +#: core/models.py:954 msgid "stored JSON response from the geocoding service" msgstr "Gespeicherte JSON-Antwort vom Geokodierungsdienst" -#: core/models.py:954 +#: core/models.py:962 msgid "address" msgstr "Adresse" -#: core/models.py:955 +#: core/models.py:963 msgid "addresses" msgstr "Adressen" -#: core/models.py:967 +#: core/models.py:975 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 +2096,76 @@ msgstr "" "Validierung und Anwendung des Promo-Codes auf eine Bestellung, wobei " "sichergestellt wird, dass die Einschränkungen eingehalten werden." -#: core/models.py:981 +#: core/models.py:989 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:982 +#: core/models.py:990 msgid "promo code identifier" msgstr "Kennung des Promo-Codes" -#: core/models.py:989 +#: core/models.py:997 msgid "fixed discount amount applied if percent is not used" msgstr "" "Fester Rabattbetrag, der angewandt wird, wenn kein Prozentsatz verwendet " "wird" -#: core/models.py:990 +#: core/models.py:998 msgid "fixed discount amount" msgstr "Fester Rabattbetrag" -#: core/models.py:996 +#: core/models.py:1004 msgid "percentage discount applied if fixed amount is not used" msgstr "Prozentualer Rabatt, wenn der Festbetrag nicht verwendet wird" -#: core/models.py:997 +#: core/models.py:1005 msgid "percentage discount" msgstr "Prozentualer Rabatt" -#: core/models.py:1002 +#: core/models.py:1010 msgid "timestamp when the promocode expires" msgstr "Zeitstempel, wann der Promocode abläuft" -#: core/models.py:1003 +#: core/models.py:1011 msgid "end validity time" msgstr "Ende der Gültigkeitsdauer" -#: core/models.py:1008 +#: core/models.py:1016 msgid "timestamp from which this promocode is valid" msgstr "Zeitstempel, ab dem dieser Promocode gültig ist" -#: core/models.py:1009 +#: core/models.py:1017 msgid "start validity time" msgstr "Beginn der Gültigkeitsdauer" -#: core/models.py:1014 +#: core/models.py:1022 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:1015 +#: core/models.py:1023 msgid "usage timestamp" msgstr "Zeitstempel der Verwendung" -#: core/models.py:1020 +#: core/models.py:1028 msgid "user assigned to this promocode if applicable" msgstr "Diesem Promocode zugewiesener Benutzer, falls zutreffend" -#: core/models.py:1021 +#: core/models.py:1029 msgid "assigned user" msgstr "Zugewiesener Benutzer" -#: core/models.py:1028 +#: core/models.py:1036 msgid "promo code" msgstr "Promo-Code" -#: core/models.py:1029 +#: core/models.py:1037 msgid "promo codes" msgstr "Promo-Codes" -#: core/models.py:1044 +#: core/models.py:1052 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2161,16 +2173,16 @@ msgstr "" "Es sollte nur eine Art von Rabatt definiert werden (Betrag oder " "Prozentsatz), aber nicht beides oder keines von beiden." -#: core/models.py:1065 +#: core/models.py:1073 msgid "promocode already used" msgstr "Promocode wurde bereits verwendet" -#: core/models.py:1081 +#: core/models.py:1089 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Ungültiger Rabatttyp für den Promocode {self.uuid}!" -#: core/models.py:1090 +#: core/models.py:1098 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 +2200,143 @@ msgstr "" "aktualisiert werden. Ebenso unterstützt die Funktionalität die Verwaltung " "der Produkte im Lebenszyklus der Bestellung." -#: core/models.py:1107 +#: core/models.py:1115 msgid "the billing address used for this order" msgstr "Die für diese Bestellung verwendete Rechnungsadresse" -#: core/models.py:1115 +#: core/models.py:1123 msgid "optional promo code applied to this order" msgstr "Optionaler Promo-Code für diese Bestellung" -#: core/models.py:1116 +#: core/models.py:1124 msgid "applied promo code" msgstr "Angewandter Promo-Code" -#: core/models.py:1124 +#: core/models.py:1132 msgid "the shipping address used for this order" msgstr "Die für diese Bestellung verwendete Lieferadresse" -#: core/models.py:1125 +#: core/models.py:1133 msgid "shipping address" msgstr "Lieferadresse" -#: core/models.py:1131 +#: core/models.py:1139 msgid "current status of the order in its lifecycle" msgstr "Aktueller Status des Auftrags in seinem Lebenszyklus" -#: core/models.py:1132 +#: core/models.py:1140 msgid "order status" msgstr "Status der Bestellung" -#: core/models.py:1137 core/models.py:1618 +#: core/models.py:1145 core/models.py:1626 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:1143 +#: core/models.py:1151 msgid "json representation of order attributes for this order" msgstr "JSON-Darstellung der Auftragsattribute für diesen Auftrag" -#: core/models.py:1149 +#: core/models.py:1157 msgid "the user who placed the order" msgstr "Der Benutzer, der die Bestellung aufgegeben hat" -#: core/models.py:1150 +#: core/models.py:1158 msgid "user" msgstr "Benutzer" -#: core/models.py:1156 +#: core/models.py:1164 msgid "the timestamp when the order was finalized" msgstr "Der Zeitstempel, zu dem der Auftrag abgeschlossen wurde" -#: core/models.py:1157 +#: core/models.py:1165 msgid "buy time" msgstr "Zeit kaufen" -#: core/models.py:1164 +#: core/models.py:1172 msgid "a human-readable identifier for the order" msgstr "Ein von Menschen lesbarer Identifikator für den Auftrag" -#: core/models.py:1165 +#: core/models.py:1173 msgid "human readable id" msgstr "menschenlesbare ID" -#: core/models.py:1171 +#: core/models.py:1179 msgid "order" msgstr "Bestellung" -#: core/models.py:1209 +#: core/models.py:1217 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:1249 +#: core/models.py:1257 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:1254 +#: core/models.py:1262 msgid "you cannot add inactive products to order" msgstr "Sie können keine inaktiven Produkte zur Bestellung hinzufügen" -#: core/models.py:1271 +#: core/models.py:1279 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:1293 core/models.py:1318 core/models.py:1326 +#: core/models.py:1301 core/models.py:1326 core/models.py:1334 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:1314 +#: core/models.py:1322 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} existiert nicht mit Abfrage <{query}>!" -#: core/models.py:1346 +#: core/models.py:1354 msgid "promocode does not exist" msgstr "Promocode existiert nicht" -#: core/models.py:1352 +#: core/models.py:1360 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:1371 +#: core/models.py:1379 msgid "address does not exist" msgstr "Adresse ist nicht vorhanden" -#: core/models.py:1392 core/models.py:1461 +#: core/models.py:1400 core/models.py:1469 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:1395 core/models.py:1457 +#: core/models.py:1403 core/models.py:1465 msgid "invalid force value" msgstr "Ungültiger Force-Wert" -#: core/models.py:1401 core/models.py:1464 +#: core/models.py:1409 core/models.py:1472 msgid "you cannot purchase an empty order!" msgstr "Sie können keine leere Bestellung kaufen!" -#: core/models.py:1420 +#: core/models.py:1428 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:1434 +#: core/models.py:1442 msgid "a user without a balance cannot buy with balance" msgstr "Ein Benutzer ohne Guthaben kann nicht mit Guthaben kaufen!" -#: core/models.py:1439 +#: core/models.py:1447 msgid "insufficient funds to complete the order" msgstr "Unzureichende Mittel für die Ausführung des Auftrags" -#: core/models.py:1473 +#: core/models.py:1481 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2332,14 +2344,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:1482 +#: core/models.py:1490 #, 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:1591 +#: core/models.py:1599 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2362,112 +2374,112 @@ msgstr "" "Produkte. Das Modell ist mit den Modellen \"Order\" und \"Product\" " "integriert und speichert einen Verweis auf diese." -#: core/models.py:1606 +#: core/models.py:1614 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:1607 +#: core/models.py:1615 msgid "purchase price at order time" msgstr "Einkaufspreis zum Zeitpunkt der Bestellung" -#: core/models.py:1612 +#: core/models.py:1620 msgid "internal comments for admins about this ordered product" msgstr "Interne Kommentare für Administratoren zu diesem bestellten Produkt" -#: core/models.py:1613 +#: core/models.py:1621 msgid "internal comments" msgstr "Interne Kommentare" -#: core/models.py:1619 +#: core/models.py:1627 msgid "user notifications" msgstr "Benutzerbenachrichtigungen" -#: core/models.py:1624 +#: core/models.py:1632 msgid "json representation of this item's attributes" msgstr "JSON-Darstellung der Attribute dieses Artikels" -#: core/models.py:1625 +#: core/models.py:1633 msgid "ordered product attributes" msgstr "Bestellte Produktattribute" -#: core/models.py:1630 +#: core/models.py:1638 msgid "reference to the parent order that contains this product" msgstr "Verweis auf den übergeordneten Auftrag, der dieses Produkt enthält" -#: core/models.py:1631 +#: core/models.py:1639 msgid "parent order" msgstr "Übergeordneter Auftrag" -#: core/models.py:1640 +#: core/models.py:1648 msgid "the specific product associated with this order line" msgstr "Das spezifische Produkt, das mit dieser Auftragszeile verbunden ist" -#: core/models.py:1647 +#: core/models.py:1655 msgid "quantity of this specific product in the order" msgstr "Menge dieses spezifischen Produkts in der Bestellung" -#: core/models.py:1648 +#: core/models.py:1656 msgid "product quantity" msgstr "Produktmenge" -#: core/models.py:1655 +#: core/models.py:1663 msgid "current status of this product in the order" msgstr "Aktueller Status dieses Produkts im Auftrag" -#: core/models.py:1656 +#: core/models.py:1664 msgid "product line status" msgstr "Status der Produktlinie" -#: core/models.py:1719 +#: core/models.py:1727 msgid "order product must have an order" msgstr "Das Bestellprodukt muss eine zugehörige Bestellung haben!" -#: core/models.py:1721 +#: core/models.py:1729 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Falsche Aktion für Feedback angegeben: {action}!" -#: core/models.py:1735 +#: core/models.py:1743 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:1741 +#: core/models.py:1749 msgid "name" msgstr "Name" -#: core/models.py:1742 +#: core/models.py:1750 msgid "URL of the integration" msgstr "URL der Integration" -#: core/models.py:1743 +#: core/models.py:1751 msgid "authentication credentials" msgstr "Anmeldeinformationen zur Authentifizierung" -#: core/models.py:1765 +#: core/models.py:1773 msgid "you can only have one default CRM provider" msgstr "Sie können nur einen Standard-CRM-Anbieter haben" -#: core/models.py:1775 +#: core/models.py:1783 msgid "CRM" msgstr "CRM" -#: core/models.py:1776 +#: core/models.py:1784 msgid "CRMs" msgstr "CRMs" -#: core/models.py:1788 +#: core/models.py:1796 msgid "order CRM link" msgstr "CRM-Link der Bestellung" -#: core/models.py:1789 +#: core/models.py:1797 msgid "orders CRM links" msgstr "CRM-Links der Bestellungen" -#: core/models.py:1794 +#: core/models.py:1802 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2484,15 +2496,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:1808 +#: core/models.py:1816 msgid "download" msgstr "Herunterladen" -#: core/models.py:1809 +#: core/models.py:1817 msgid "downloads" msgstr "Herunterladen" -#: core/models.py:1823 +#: core/models.py:1831 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2507,30 +2519,30 @@ msgstr "" "Benutzer zugewiesene Bewertung. Die Klasse verwendet Datenbankfelder, um " "Feedbackdaten effektiv zu modellieren und zu verwalten." -#: core/models.py:1835 +#: core/models.py:1843 msgid "user-provided comments about their experience with the product" msgstr "Kommentare der Nutzer über ihre Erfahrungen mit dem Produkt" -#: core/models.py:1836 +#: core/models.py:1844 msgid "feedback comments" msgstr "Kommentare zum Feedback" -#: core/models.py:1843 +#: core/models.py:1851 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:1844 +#: core/models.py:1852 msgid "related order product" msgstr "Produkt zur Bestellung" -#: core/models.py:1849 +#: core/models.py:1857 msgid "user-assigned rating for the product" msgstr "Vom Benutzer zugewiesene Bewertung für das Produkt" -#: core/models.py:1850 +#: core/models.py:1858 msgid "product rating" msgstr "Produktbewertung" @@ -2749,22 +2761,22 @@ msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "" "Ungültiger Timeout-Wert, er muss zwischen 0 und 216000 Sekunden liegen" -#: core/utils/emailing.py:25 +#: core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | Kontakt eingeleitet" -#: core/utils/emailing.py:74 +#: core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Auftragsbestätigung" -#: core/utils/emailing.py:109 +#: core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Bestellung ausgeliefert" -#: core/utils/emailing.py:197 +#: core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | Promocode gewährt" @@ -3021,7 +3033,7 @@ msgstr "" "implementieren. Es erweitert das Basis `EvibesViewSet` und nutzt das " "Filtersystem von Django zur Abfrage von Daten." -#: core/viewsets.py:593 +#: core/viewsets.py:594 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3041,7 +3053,7 @@ msgstr "" "basieren, die durchgeführt wird, und erzwingt die entsprechenden " "Berechtigungen, während es mit den Bestelldaten interagiert." -#: core/viewsets.py:782 +#: core/viewsets.py:784 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3056,12 +3068,12 @@ msgstr "" "Außerdem bietet es eine detaillierte Aktion für die Bearbeitung von Feedback" " zu OrderProduct-Instanzen" -#: core/viewsets.py:833 +#: core/viewsets.py:835 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 +#: core/viewsets.py:847 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3069,15 +3081,15 @@ msgstr "" "Verwaltet den Abruf und die Handhabung von PromoCode-Instanzen durch " "verschiedene API-Aktionen." -#: core/viewsets.py:866 +#: core/viewsets.py:868 msgid "Represents a view set for managing promotions. " msgstr "Stellt ein Ansichtsset für die Verwaltung von Werbeaktionen dar." -#: core/viewsets.py:878 +#: core/viewsets.py:880 msgid "Handles operations related to Stock data in the system." msgstr "Erledigt Vorgänge im Zusammenhang mit Bestandsdaten im System." -#: core/viewsets.py:892 +#: core/viewsets.py:894 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3096,7 +3108,7 @@ msgstr "" "nur ihre eigenen Wunschlisten verwalten können, sofern keine expliziten " "Berechtigungen erteilt wurden." -#: core/viewsets.py:1007 +#: core/viewsets.py:1009 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3111,12 +3123,12 @@ msgstr "" "HTTP-Methoden, Serialisierungsüberschreibungen und die Behandlung von " "Berechtigungen auf der Grundlage des Anfragekontexts." -#: core/viewsets.py:1074 +#: core/viewsets.py:1076 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Geocodierungsfehler: {e}" -#: core/viewsets.py:1081 +#: core/viewsets.py:1083 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/en_GB/LC_MESSAGES/django.mo b/core/locale/en_GB/LC_MESSAGES/django.mo index 30eaac40..f2df83a7 100644 Binary files a/core/locale/en_GB/LC_MESSAGES/django.mo and b/core/locale/en_GB/LC_MESSAGES/django.mo differ diff --git a/core/locale/en_GB/LC_MESSAGES/django.po b/core/locale/en_GB/LC_MESSAGES/django.po index 6d5dce1f..82c2bb53 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -53,82 +53,86 @@ msgstr "Modified" msgid "when the object was last modified" msgstr "When the object was last edited" -#: core/admin.py:63 +#: core/admin.py:68 msgid "translations" msgstr "Translations" -#: core/admin.py:67 +#: core/admin.py:72 msgid "general" msgstr "General" -#: core/admin.py:69 +#: core/admin.py:74 msgid "relations" msgstr "Relations" -#: core/admin.py:87 +#: core/admin.py:76 +msgid "additional info" +msgstr "additional info" + +#: core/admin.py:94 msgid "metadata" msgstr "Metadata" -#: core/admin.py:94 +#: core/admin.py:101 msgid "timestamps" msgstr "Timestamps" -#: core/admin.py:109 +#: core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Activate selected %(verbose_name_plural)s" -#: core/admin.py:114 +#: core/admin.py:121 msgid "selected items have been activated." msgstr "Selected items have been activated!" -#: core/admin.py:120 +#: core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Deactivate selected %(verbose_name_plural)s" -#: core/admin.py:125 +#: core/admin.py:132 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:701 core/models.py:709 +#: core/admin.py:144 core/graphene/object_types.py:609 +#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 msgid "attribute value" msgstr "Attribute Value" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 +#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718 msgid "attribute values" msgstr "Attribute Values" -#: core/admin.py:146 +#: core/admin.py:153 msgid "image" msgstr "Image" -#: core/admin.py:147 core/graphene/object_types.py:501 +#: core/admin.py:154 core/graphene/object_types.py:501 msgid "images" msgstr "Images" -#: core/admin.py:155 core/models.py:459 +#: core/admin.py:162 core/models.py:467 msgid "stock" msgstr "Stock" -#: core/admin.py:156 core/graphene/object_types.py:663 +#: core/admin.py:163 core/graphene/object_types.py:663 msgid "stocks" msgstr "Stocks" -#: core/admin.py:166 core/models.py:1667 +#: core/admin.py:173 core/models.py:1675 msgid "order product" msgstr "Order Product" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 msgid "order products" msgstr "Order Products" -#: core/admin.py:180 core/admin.py:181 +#: core/admin.py:187 core/admin.py:188 msgid "children" msgstr "Children" -#: core/admin.py:566 +#: core/admin.py:940 msgid "Config" msgstr "Config" @@ -712,23 +716,23 @@ 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:118 core/elasticsearch/__init__.py:498 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 msgid "no search term provided." msgstr "No search term provided." -#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +#: core/filters.py:65 core/filters.py:399 core/filters.py:526 msgid "Search" msgstr "Search" -#: core/filters.py:66 core/filters.py:554 core/filters.py:583 +#: core/filters.py:66 core/filters.py:556 core/filters.py:585 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:399 core/filters.py:526 +#: core/filters.py:67 core/filters.py:401 core/filters.py:528 msgid "Name" msgstr "Name" -#: core/filters.py:68 core/filters.py:528 +#: core/filters.py:68 core/filters.py:530 msgid "Categories" msgstr "Categories" @@ -736,7 +740,7 @@ msgstr "Categories" msgid "Categories Slugs" msgstr "Categories Slugs" -#: core/filters.py:71 core/filters.py:407 +#: core/filters.py:71 core/filters.py:409 msgid "Tags" msgstr "Tags" @@ -764,8 +768,8 @@ msgstr "Attributes" msgid "Quantity" msgstr "Quantity" -#: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:301 core/models.py:383 core/models.py:536 +#: core/filters.py:78 core/filters.py:403 core/filters.py:529 +#: core/models.py:309 core/models.py:391 core/models.py:544 msgid "Slug" msgstr "Slug" @@ -781,7 +785,7 @@ msgstr "Include sub-categories" msgid "Include personal ordered" msgstr "Include personal ordered products" -#: core/filters.py:85 core/models.py:540 +#: core/filters.py:85 core/models.py:548 msgid "SKU" msgstr "SKU" @@ -789,48 +793,48 @@ msgstr "SKU" 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:324 +#: core/filters.py:326 msgid "Search (ID, product name or part number)" msgstr "Search (ID, product name or part number)" -#: core/filters.py:327 +#: core/filters.py:329 msgid "Bought after (inclusive)" msgstr "Bought after (inclusive)" -#: core/filters.py:328 +#: core/filters.py:330 msgid "Bought before (inclusive)" msgstr "Bought before (inclusive)" -#: core/filters.py:331 core/filters.py:378 core/filters.py:585 +#: core/filters.py:333 core/filters.py:380 core/filters.py:587 msgid "User email" msgstr "User email" -#: core/filters.py:332 core/filters.py:379 core/filters.py:563 -#: core/filters.py:584 +#: core/filters.py:334 core/filters.py:381 core/filters.py:565 +#: core/filters.py:586 msgid "User UUID" msgstr "User UUID" -#: core/filters.py:333 +#: core/filters.py:335 msgid "Status" msgstr "Status" -#: core/filters.py:337 +#: core/filters.py:339 msgid "Human Readable ID" msgstr "Human Readable ID" -#: core/filters.py:400 +#: core/filters.py:402 msgid "Parent" msgstr "Parent" -#: core/filters.py:404 +#: core/filters.py:406 msgid "Whole category(has at least 1 product or not)" msgstr "Whole category(has at least 1 product or not)" -#: core/filters.py:408 +#: core/filters.py:410 msgid "Level" msgstr "Level" -#: core/filters.py:558 +#: core/filters.py:560 msgid "Product UUID" msgstr "Product UUID" @@ -885,7 +889,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:679 +#: core/graphene/mutations.py:527 core/viewsets.py:680 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Wrong type came from order.buy() method: {type(instance)!s}" @@ -961,9 +965,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:849 core/models.py:862 -#: core/models.py:1281 core/models.py:1310 core/models.py:1335 -#: core/viewsets.py:682 +#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 +#: core/models.py:1289 core/models.py:1318 core/models.py:1343 +#: core/viewsets.py:683 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} does not exist: {uuid}!" @@ -977,8 +981,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:672 core/models.py:1144 -#: core/models.py:1744 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 +#: core/models.py:1752 msgid "attributes" msgstr "Attributes" @@ -991,11 +995,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:326 core/models.py:626 +#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 msgid "categories" msgstr "Categories" -#: core/graphene/object_types.py:124 core/models.py:397 +#: core/graphene/object_types.py:124 core/models.py:405 msgid "brands" msgstr "Brands" @@ -1004,7 +1008,7 @@ msgid "category image url" msgstr "Categories" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:263 +#: core/models.py:271 msgid "markup percentage" msgstr "Markup Percentage" @@ -1026,7 +1030,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:169 +#: core/graphene/object_types.py:351 core/models.py:177 msgid "vendors" msgstr "Vendors" @@ -1051,7 +1055,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:1138 +#: core/models.py:1146 msgid "notifications" msgstr "Notifications" @@ -1059,7 +1063,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:1860 +#: core/graphene/object_types.py:400 core/models.py:1868 msgid "feedback" msgstr "Feedback" @@ -1067,7 +1071,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:1108 +#: core/graphene/object_types.py:436 core/models.py:1116 msgid "billing address" msgstr "Billing address" @@ -1095,7 +1099,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:1172 +#: core/graphene/object_types.py:465 core/models.py:1180 msgid "orders" msgstr "Orders" @@ -1107,19 +1111,19 @@ msgstr "Image URL" msgid "product's images" msgstr "Product's images" -#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 +#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 msgid "category" msgstr "Category" -#: core/graphene/object_types.py:502 core/models.py:1861 +#: core/graphene/object_types.py:502 core/models.py:1869 msgid "feedbacks" msgstr "Feedbacks" -#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 +#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 msgid "brand" msgstr "Brand" -#: core/graphene/object_types.py:504 core/models.py:101 +#: core/graphene/object_types.py:504 core/models.py:102 msgid "attribute groups" msgstr "Attribute groups" @@ -1147,7 +1151,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:550 +#: core/graphene/object_types.py:534 core/models.py:558 msgid "products" msgstr "Products" @@ -1159,15 +1163,15 @@ msgstr "Promocodes" msgid "products on sale" msgstr "Products on sale" -#: core/graphene/object_types.py:651 core/models.py:798 +#: core/graphene/object_types.py:651 core/models.py:806 msgid "promotions" msgstr "Promotions" -#: core/graphene/object_types.py:655 core/models.py:168 +#: core/graphene/object_types.py:655 core/models.py:176 msgid "vendor" msgstr "Vendor" -#: core/graphene/object_types.py:656 core/models.py:549 +#: core/graphene/object_types.py:656 core/models.py:557 #: 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 +1179,11 @@ msgstr "Vendor" msgid "product" msgstr "Product" -#: core/graphene/object_types.py:667 core/models.py:821 +#: core/graphene/object_types.py:667 core/models.py:829 msgid "wishlisted products" msgstr "Wishlisted products" -#: core/graphene/object_types.py:673 core/models.py:838 +#: core/graphene/object_types.py:673 core/models.py:846 msgid "wishlists" msgstr "Wishlists" @@ -1187,7 +1191,7 @@ msgstr "Wishlists" msgid "tagged products" msgstr "Tagged products" -#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 +#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 msgid "product tags" msgstr "Product tags" @@ -1272,7 +1276,7 @@ msgstr "Products search results" msgid "posts search results" msgstr "Products search results" -#: core/models.py:70 +#: core/models.py:71 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1284,23 +1288,23 @@ msgstr "" "parent group, forming a hierarchical structure. This can be useful for " "categorizing and managing attributes more effectively in acomplex system." -#: core/models.py:86 +#: core/models.py:87 msgid "parent of this group" msgstr "Parent of this group" -#: core/models.py:87 +#: core/models.py:88 msgid "parent attribute group" msgstr "Parent attribute group" -#: core/models.py:91 core/models.py:92 +#: core/models.py:92 core/models.py:93 msgid "attribute group's name" msgstr "Attribute group's name" -#: core/models.py:100 core/models.py:634 +#: core/models.py:101 core/models.py:642 msgid "attribute group" msgstr "Attribute group" -#: core/models.py:106 +#: core/models.py:107 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1318,32 +1322,40 @@ msgstr "" "also maintains additional metadata and constraints, making it suitable for " "use in systems that interact with third-party vendors." -#: core/models.py:119 +#: core/models.py:120 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Stores credentials and endpoints required for vendor's API communication" -#: core/models.py:120 +#: core/models.py:121 msgid "authentication info" msgstr "Authentication info" -#: core/models.py:125 +#: core/models.py:126 msgid "define the markup for products retrieved from this vendor" msgstr "Define the markup for products retrieved from this vendor" -#: core/models.py:126 +#: core/models.py:127 msgid "vendor markup percentage" msgstr "Vendor markup percentage" -#: core/models.py:130 +#: core/models.py:131 msgid "name of this vendor" msgstr "Name of this vendor" -#: core/models.py:131 +#: core/models.py:132 msgid "vendor name" msgstr "Vendor name" -#: core/models.py:177 +#: core/models.py:143 +msgid "response file" +msgstr "response file" + +#: core/models.py:144 +msgid "vendor's last processing response" +msgstr "vendor's last processing response" + +#: core/models.py:185 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1357,27 +1369,27 @@ msgstr "" "display name. It supports operations exported through mixins and provides " "metadata customization for administrative purposes." -#: core/models.py:189 core/models.py:220 +#: core/models.py:197 core/models.py:228 msgid "internal tag identifier for the product tag" msgstr "Internal tag identifier for the product tag" -#: core/models.py:190 core/models.py:221 +#: core/models.py:198 core/models.py:229 msgid "tag name" msgstr "Tag name" -#: core/models.py:194 core/models.py:225 +#: core/models.py:202 core/models.py:233 msgid "user-friendly name for the product tag" msgstr "User-friendly name for the product tag" -#: core/models.py:195 core/models.py:226 +#: core/models.py:203 core/models.py:234 msgid "tag display name" msgstr "Tag display name" -#: core/models.py:203 +#: core/models.py:211 msgid "product tag" msgstr "Product tag" -#: core/models.py:209 +#: core/models.py:217 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 +1399,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:234 +#: core/models.py:242 msgid "category tag" msgstr "category tag" -#: core/models.py:235 core/models.py:307 +#: core/models.py:243 core/models.py:315 msgid "category tags" msgstr "category tags" -#: core/models.py:240 +#: core/models.py:248 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1417,51 +1429,51 @@ msgstr "" "hierarchy of categories, as well as assign attributes like images, tags, or " "priority." -#: core/models.py:254 +#: core/models.py:262 msgid "upload an image representing this category" msgstr "Upload an image representing this category" -#: core/models.py:257 +#: core/models.py:265 msgid "category image" msgstr "Category image" -#: core/models.py:262 +#: core/models.py:270 msgid "define a markup percentage for products in this category" msgstr "Define a markup percentage for products in this category" -#: core/models.py:271 +#: core/models.py:279 msgid "parent of this category to form a hierarchical structure" msgstr "Parent of this category to form a hierarchical structure" -#: core/models.py:272 +#: core/models.py:280 msgid "parent category" msgstr "Parent category" -#: core/models.py:277 +#: core/models.py:285 msgid "category name" msgstr "Category name" -#: core/models.py:278 +#: core/models.py:286 msgid "provide a name for this category" msgstr "Provide a name for this category" -#: core/models.py:285 +#: core/models.py:293 msgid "add a detailed description for this category" msgstr "Add a detailed description for this category" -#: core/models.py:286 +#: core/models.py:294 msgid "category description" msgstr "Category description" -#: core/models.py:306 +#: core/models.py:314 msgid "tags that help describe or group this category" msgstr "tags that help describe or group this category" -#: core/models.py:313 core/models.py:389 +#: core/models.py:321 core/models.py:397 msgid "priority" msgstr "Priority" -#: core/models.py:332 +#: core/models.py:340 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 +1487,47 @@ msgstr "" "organization and representation of brand-related data within the " "application." -#: core/models.py:342 +#: core/models.py:350 msgid "name of this brand" msgstr "Name of this brand" -#: core/models.py:343 +#: core/models.py:351 msgid "brand name" msgstr "Brand name" -#: core/models.py:350 +#: core/models.py:358 msgid "upload a logo representing this brand" msgstr "Upload a logo representing this brand" -#: core/models.py:352 +#: core/models.py:360 msgid "brand small image" msgstr "Brand small image" -#: core/models.py:358 +#: core/models.py:366 msgid "upload a big logo representing this brand" msgstr "Upload a big logo representing this brand" -#: core/models.py:360 +#: core/models.py:368 msgid "brand big image" msgstr "Brand big image" -#: core/models.py:365 +#: core/models.py:373 msgid "add a detailed description of the brand" msgstr "Add a detailed description of the brand" -#: core/models.py:366 +#: core/models.py:374 msgid "brand description" msgstr "Brand description" -#: core/models.py:371 +#: core/models.py:379 msgid "optional categories that this brand is associated with" msgstr "Optional categories that this brand is associated with" -#: core/models.py:372 +#: core/models.py:380 msgid "associated categories" msgstr "Categories" -#: core/models.py:402 +#: core/models.py:410 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 +1543,68 @@ msgstr "" "management system to allow tracking and evaluation of products available " "from various vendors." -#: core/models.py:414 +#: core/models.py:422 msgid "the vendor supplying this product stock" msgstr "The vendor supplying this product stock" -#: core/models.py:415 +#: core/models.py:423 msgid "associated vendor" msgstr "Associated vendor" -#: core/models.py:419 +#: core/models.py:427 msgid "final price to the customer after markups" msgstr "Final price to the customer after markups" -#: core/models.py:420 +#: core/models.py:428 msgid "selling price" msgstr "Selling price" -#: core/models.py:425 +#: core/models.py:433 msgid "the product associated with this stock entry" msgstr "The product associated with this stock entry" -#: core/models.py:426 core/models.py:697 core/models.py:744 -#: core/models.py:1641 +#: core/models.py:434 core/models.py:705 core/models.py:752 +#: core/models.py:1649 msgid "associated product" msgstr "Associated product" -#: core/models.py:433 +#: core/models.py:441 msgid "the price paid to the vendor for this product" msgstr "The price paid to the vendor for this product" -#: core/models.py:434 +#: core/models.py:442 msgid "vendor purchase price" msgstr "Vendor purchase price" -#: core/models.py:438 +#: core/models.py:446 msgid "available quantity of the product in stock" msgstr "Available quantity of the product in stock" -#: core/models.py:439 +#: core/models.py:447 msgid "quantity in stock" msgstr "Quantity in stock" -#: core/models.py:443 +#: core/models.py:451 msgid "vendor-assigned SKU for identifying the product" msgstr "Vendor-assigned SKU for identifying the product" -#: core/models.py:444 +#: core/models.py:452 msgid "vendor sku" msgstr "Vendor's SKU" -#: core/models.py:450 +#: core/models.py:458 msgid "digital file associated with this stock if applicable" msgstr "Digital file associated with this stock if applicable" -#: core/models.py:451 +#: core/models.py:459 msgid "digital file" msgstr "Digital file" -#: core/models.py:460 +#: core/models.py:468 msgid "stock entries" msgstr "Stock entries" -#: core/models.py:465 +#: core/models.py:473 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1612,55 +1624,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:478 +#: core/models.py:486 msgid "category this product belongs to" msgstr "Category this product belongs to" -#: core/models.py:487 +#: core/models.py:495 msgid "optionally associate this product with a brand" msgstr "Optionally associate this product with a brand" -#: core/models.py:493 +#: core/models.py:501 msgid "tags that help describe or group this product" msgstr "Tags that help describe or group this product" -#: core/models.py:498 +#: core/models.py:506 msgid "indicates whether this product is digitally delivered" msgstr "Indicates whether this product is digitally delivered" -#: core/models.py:499 +#: core/models.py:507 msgid "is product digital" msgstr "Is product digital" -#: core/models.py:505 +#: core/models.py:513 msgid "provide a clear identifying name for the product" msgstr "Provide a clear identifying name for the product" -#: core/models.py:506 +#: core/models.py:514 msgid "product name" msgstr "Product name" -#: core/models.py:511 core/models.py:786 +#: core/models.py:519 core/models.py:794 msgid "add a detailed description of the product" msgstr "Add a detailed description of the product" -#: core/models.py:512 +#: core/models.py:520 msgid "product description" msgstr "Product description" -#: core/models.py:519 +#: core/models.py:527 msgid "part number for this product" msgstr "Part number for this product" -#: core/models.py:520 +#: core/models.py:528 msgid "part number" msgstr "Part number" -#: core/models.py:539 +#: core/models.py:547 msgid "stock keeping unit for this product" msgstr "Stock Keeping Unit for this product" -#: core/models.py:613 +#: core/models.py:621 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 +1688,68 @@ msgstr "" " including string, integer, float, boolean, array, and object. This allows " "for dynamic and flexible data structuring." -#: core/models.py:625 +#: core/models.py:633 msgid "category of this attribute" msgstr "Category of this attribute" -#: core/models.py:633 +#: core/models.py:641 msgid "group of this attribute" msgstr "Group of this attribute" -#: core/models.py:639 +#: core/models.py:647 msgid "string" msgstr "String" -#: core/models.py:640 +#: core/models.py:648 msgid "integer" msgstr "Integer" -#: core/models.py:641 +#: core/models.py:649 msgid "float" msgstr "Float" -#: core/models.py:642 +#: core/models.py:650 msgid "boolean" msgstr "Boolean" -#: core/models.py:643 +#: core/models.py:651 msgid "array" msgstr "Array" -#: core/models.py:644 +#: core/models.py:652 msgid "object" msgstr "Object" -#: core/models.py:646 +#: core/models.py:654 msgid "type of the attribute's value" msgstr "Type of the attribute's value" -#: core/models.py:647 +#: core/models.py:655 msgid "value type" msgstr "Value type" -#: core/models.py:652 +#: core/models.py:660 msgid "name of this attribute" msgstr "Name of this attribute" -#: core/models.py:653 +#: core/models.py:661 msgid "attribute's name" msgstr "Attribute's name" -#: core/models.py:659 +#: core/models.py:667 msgid "is filterable" msgstr "is filterable" -#: core/models.py:660 +#: core/models.py:668 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:671 core/models.py:689 +#: core/models.py:679 core/models.py:697 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attribute" -#: core/models.py:677 +#: core/models.py:685 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 +1759,19 @@ msgstr "" " links the 'attribute' to a unique 'value', allowing better organization and" " dynamic representation of product characteristics." -#: core/models.py:688 +#: core/models.py:696 msgid "attribute of this value" msgstr "Attribute of this value" -#: core/models.py:696 +#: core/models.py:704 msgid "the specific product associated with this attribute's value" msgstr "The specific product associated with this attribute's value" -#: core/models.py:702 +#: core/models.py:710 msgid "the specific value for this attribute" msgstr "The specific value for this attribute" -#: core/models.py:715 +#: core/models.py:723 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 +1785,39 @@ msgstr "" "determining their display order. It also includes an accessibility feature " "with alternative text for the images." -#: core/models.py:726 +#: core/models.py:734 msgid "provide alternative text for the image for accessibility" msgstr "Provide alternative text for the image for accessibility" -#: core/models.py:727 +#: core/models.py:735 msgid "image alt text" msgstr "Image alt text" -#: core/models.py:730 +#: core/models.py:738 msgid "upload the image file for this product" msgstr "Upload the image file for this product" -#: core/models.py:731 core/models.py:756 +#: core/models.py:739 core/models.py:764 msgid "product image" msgstr "Product image" -#: core/models.py:737 +#: core/models.py:745 msgid "determines the order in which images are displayed" msgstr "Determines the order in which images are displayed" -#: core/models.py:738 +#: core/models.py:746 msgid "display priority" msgstr "Display priority" -#: core/models.py:743 +#: core/models.py:751 msgid "the product that this image represents" msgstr "The product that this image represents" -#: core/models.py:757 +#: core/models.py:765 msgid "product images" msgstr "Product images" -#: core/models.py:762 +#: core/models.py:770 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 +1833,39 @@ msgstr "" "applicable products. It integrates with the product catalog to determine the" " affected items in the campaign." -#: core/models.py:774 +#: core/models.py:782 msgid "percentage discount for the selected products" msgstr "Percentage discount for the selected products" -#: core/models.py:775 +#: core/models.py:783 msgid "discount percentage" msgstr "Discount percentage" -#: core/models.py:780 +#: core/models.py:788 msgid "provide a unique name for this promotion" msgstr "Provide a unique name for this promotion" -#: core/models.py:781 +#: core/models.py:789 msgid "promotion name" msgstr "Promotion name" -#: core/models.py:787 +#: core/models.py:795 msgid "promotion description" msgstr "Promotion description" -#: core/models.py:792 +#: core/models.py:800 msgid "select which products are included in this promotion" msgstr "Select which products are included in this promotion" -#: core/models.py:793 +#: core/models.py:801 msgid "included products" msgstr "Included products" -#: core/models.py:797 +#: core/models.py:805 msgid "promotion" msgstr "Promotion" -#: core/models.py:808 +#: core/models.py:816 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 +1877,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:820 +#: core/models.py:828 msgid "products that the user has marked as wanted" msgstr "Products that the user has marked as wanted" -#: core/models.py:828 +#: core/models.py:836 msgid "user who owns this wishlist" msgstr "User who owns this wishlist" -#: core/models.py:829 +#: core/models.py:837 msgid "wishlist owner" msgstr "Wishlist's Owner" -#: core/models.py:837 +#: core/models.py:845 msgid "wishlist" msgstr "Wishlist" -#: core/models.py:879 +#: core/models.py:887 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1897,19 +1909,19 @@ msgstr "" "files. It extends functionality from specific mixins and provides additional" " custom features." -#: core/models.py:892 +#: core/models.py:900 msgid "documentary" msgstr "Documentary" -#: core/models.py:893 +#: core/models.py:901 msgid "documentaries" msgstr "Documentaries" -#: core/models.py:903 +#: core/models.py:911 msgid "unresolved" msgstr "Unresolved" -#: core/models.py:908 +#: core/models.py:916 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1929,59 +1941,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:923 +#: core/models.py:931 msgid "address line for the customer" msgstr "Address line for the customer" -#: core/models.py:924 +#: core/models.py:932 msgid "address line" msgstr "Address line" -#: core/models.py:926 +#: core/models.py:934 msgid "street" msgstr "Street" -#: core/models.py:927 +#: core/models.py:935 msgid "district" msgstr "District" -#: core/models.py:928 +#: core/models.py:936 msgid "city" msgstr "City" -#: core/models.py:929 +#: core/models.py:937 msgid "region" msgstr "Region" -#: core/models.py:930 +#: core/models.py:938 msgid "postal code" msgstr "Postal code" -#: core/models.py:931 +#: core/models.py:939 msgid "country" msgstr "Country" -#: core/models.py:938 +#: core/models.py:946 msgid "geolocation point: (longitude, latitude)" msgstr "Geolocation Point(Longitude, Latitude)" -#: core/models.py:941 +#: core/models.py:949 msgid "full JSON response from geocoder for this address" msgstr "Full JSON response from geocoder for this address" -#: core/models.py:946 +#: core/models.py:954 msgid "stored JSON response from the geocoding service" msgstr "Stored JSON response from the geocoding service" -#: core/models.py:954 +#: core/models.py:962 msgid "address" msgstr "Address" -#: core/models.py:955 +#: core/models.py:963 msgid "addresses" msgstr "Adresses" -#: core/models.py:967 +#: core/models.py:975 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 +2009,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:981 +#: core/models.py:989 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:982 +#: core/models.py:990 msgid "promo code identifier" msgstr "Promo code identifier" -#: core/models.py:989 +#: core/models.py:997 msgid "fixed discount amount applied if percent is not used" msgstr "Fixed discount amount applied if percent is not used" -#: core/models.py:990 +#: core/models.py:998 msgid "fixed discount amount" msgstr "Fixed discount amount" -#: core/models.py:996 +#: core/models.py:1004 msgid "percentage discount applied if fixed amount is not used" msgstr "Percentage discount applied if fixed amount is not used" -#: core/models.py:997 +#: core/models.py:1005 msgid "percentage discount" msgstr "Percentage discount" -#: core/models.py:1002 +#: core/models.py:1010 msgid "timestamp when the promocode expires" msgstr "Timestamp when the promocode expires" -#: core/models.py:1003 +#: core/models.py:1011 msgid "end validity time" msgstr "End validity time" -#: core/models.py:1008 +#: core/models.py:1016 msgid "timestamp from which this promocode is valid" msgstr "Timestamp from which this promocode is valid" -#: core/models.py:1009 +#: core/models.py:1017 msgid "start validity time" msgstr "Start validity time" -#: core/models.py:1014 +#: core/models.py:1022 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:1015 +#: core/models.py:1023 msgid "usage timestamp" msgstr "Usage timestamp" -#: core/models.py:1020 +#: core/models.py:1028 msgid "user assigned to this promocode if applicable" msgstr "User assigned to this promocode if applicable" -#: core/models.py:1021 +#: core/models.py:1029 msgid "assigned user" msgstr "Assigned user" -#: core/models.py:1028 +#: core/models.py:1036 msgid "promo code" msgstr "Promo code" -#: core/models.py:1029 +#: core/models.py:1037 msgid "promo codes" msgstr "Promo codes" -#: core/models.py:1044 +#: core/models.py:1052 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2069,16 +2081,16 @@ msgstr "" "Only one type of discount should be defined (amount or percent), but not " "both or neither." -#: core/models.py:1065 +#: core/models.py:1073 msgid "promocode already used" msgstr "Promocode has been used already" -#: core/models.py:1081 +#: core/models.py:1089 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Invalid discount type for promocode {self.uuid}!" -#: core/models.py:1090 +#: core/models.py:1098 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 +2106,135 @@ msgstr "" "set, and shipping or billing details updated. Equally, functionality " "supports managing the products in the order lifecycle." -#: core/models.py:1107 +#: core/models.py:1115 msgid "the billing address used for this order" msgstr "The billing address used for this order" -#: core/models.py:1115 +#: core/models.py:1123 msgid "optional promo code applied to this order" msgstr "Optional promo code applied to this order" -#: core/models.py:1116 +#: core/models.py:1124 msgid "applied promo code" msgstr "Applied promo code" -#: core/models.py:1124 +#: core/models.py:1132 msgid "the shipping address used for this order" msgstr "The shipping address used for this order" -#: core/models.py:1125 +#: core/models.py:1133 msgid "shipping address" msgstr "Shipping address" -#: core/models.py:1131 +#: core/models.py:1139 msgid "current status of the order in its lifecycle" msgstr "Current status of the order in its lifecycle" -#: core/models.py:1132 +#: core/models.py:1140 msgid "order status" msgstr "Order status" -#: core/models.py:1137 core/models.py:1618 +#: core/models.py:1145 core/models.py:1626 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:1143 +#: core/models.py:1151 msgid "json representation of order attributes for this order" msgstr "JSON representation of order attributes for this order" -#: core/models.py:1149 +#: core/models.py:1157 msgid "the user who placed the order" msgstr "The user who placed the order" -#: core/models.py:1150 +#: core/models.py:1158 msgid "user" msgstr "User" -#: core/models.py:1156 +#: core/models.py:1164 msgid "the timestamp when the order was finalized" msgstr "The timestamp when the order was finalized" -#: core/models.py:1157 +#: core/models.py:1165 msgid "buy time" msgstr "Buy time" -#: core/models.py:1164 +#: core/models.py:1172 msgid "a human-readable identifier for the order" msgstr "A human-readable identifier for the order" -#: core/models.py:1165 +#: core/models.py:1173 msgid "human readable id" msgstr "human-readable ID" -#: core/models.py:1171 +#: core/models.py:1179 msgid "order" msgstr "Order" -#: core/models.py:1209 +#: core/models.py:1217 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:1249 +#: core/models.py:1257 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:1254 +#: core/models.py:1262 msgid "you cannot add inactive products to order" msgstr "You cannot add inactive products to order" -#: core/models.py:1271 +#: core/models.py:1279 msgid "you cannot add more products than available in stock" msgstr "You cannot add more products than available in stock" -#: core/models.py:1293 core/models.py:1318 core/models.py:1326 +#: core/models.py:1301 core/models.py:1326 core/models.py:1334 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:1314 +#: core/models.py:1322 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} does not exist with query <{query}>!" -#: core/models.py:1346 +#: core/models.py:1354 msgid "promocode does not exist" msgstr "Promocode does not exist" -#: core/models.py:1352 +#: core/models.py:1360 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:1371 +#: core/models.py:1379 msgid "address does not exist" msgstr "Address does not exist" -#: core/models.py:1392 core/models.py:1461 +#: core/models.py:1400 core/models.py:1469 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:1395 core/models.py:1457 +#: core/models.py:1403 core/models.py:1465 msgid "invalid force value" msgstr "Invalid force value" -#: core/models.py:1401 core/models.py:1464 +#: core/models.py:1409 core/models.py:1472 msgid "you cannot purchase an empty order!" msgstr "You cannot purchase an empty order!" -#: core/models.py:1420 +#: core/models.py:1428 msgid "you cannot buy an order without a user" msgstr "You cannot buy an order without a user!" -#: core/models.py:1434 +#: core/models.py:1442 msgid "a user without a balance cannot buy with balance" msgstr "A user without a balance cannot buy with balance!" -#: core/models.py:1439 +#: core/models.py:1447 msgid "insufficient funds to complete the order" msgstr "Insufficient funds to complete the order" -#: core/models.py:1473 +#: core/models.py:1481 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2230,14 +2242,14 @@ msgstr "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" -#: core/models.py:1482 +#: core/models.py:1490 #, 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:1591 +#: core/models.py:1599 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2259,108 +2271,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:1606 +#: core/models.py:1614 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:1607 +#: core/models.py:1615 msgid "purchase price at order time" msgstr "Purchase price at order time" -#: core/models.py:1612 +#: core/models.py:1620 msgid "internal comments for admins about this ordered product" msgstr "Internal comments for admins about this ordered product" -#: core/models.py:1613 +#: core/models.py:1621 msgid "internal comments" msgstr "Internal comments" -#: core/models.py:1619 +#: core/models.py:1627 msgid "user notifications" msgstr "User notifications" -#: core/models.py:1624 +#: core/models.py:1632 msgid "json representation of this item's attributes" msgstr "JSON representation of this item's attributes" -#: core/models.py:1625 +#: core/models.py:1633 msgid "ordered product attributes" msgstr "Ordered product attributes" -#: core/models.py:1630 +#: core/models.py:1638 msgid "reference to the parent order that contains this product" msgstr "Reference to the parent order that contains this product" -#: core/models.py:1631 +#: core/models.py:1639 msgid "parent order" msgstr "Parent order" -#: core/models.py:1640 +#: core/models.py:1648 msgid "the specific product associated with this order line" msgstr "The specific product associated with this order line" -#: core/models.py:1647 +#: core/models.py:1655 msgid "quantity of this specific product in the order" msgstr "Quantity of this specific product in the order" -#: core/models.py:1648 +#: core/models.py:1656 msgid "product quantity" msgstr "Product quantity" -#: core/models.py:1655 +#: core/models.py:1663 msgid "current status of this product in the order" msgstr "Current status of this product in the order" -#: core/models.py:1656 +#: core/models.py:1664 msgid "product line status" msgstr "Product line status" -#: core/models.py:1719 +#: core/models.py:1727 msgid "order product must have an order" msgstr "Orderproduct must have an associated order!" -#: core/models.py:1721 +#: core/models.py:1729 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Wrong action specified for feedback: {action}!" -#: core/models.py:1735 +#: core/models.py:1743 msgid "you cannot feedback an order which is not received" msgstr "you cannot feedback an order which is not received" -#: core/models.py:1741 +#: core/models.py:1749 msgid "name" msgstr "Name" -#: core/models.py:1742 +#: core/models.py:1750 msgid "URL of the integration" msgstr "URL of the integration" -#: core/models.py:1743 +#: core/models.py:1751 msgid "authentication credentials" msgstr "Authentication credentials" -#: core/models.py:1765 +#: core/models.py:1773 msgid "you can only have one default CRM provider" msgstr "You can only have one default CRM provider" -#: core/models.py:1775 +#: core/models.py:1783 msgid "CRM" msgstr "CRM" -#: core/models.py:1776 +#: core/models.py:1784 msgid "CRMs" msgstr "CRMs" -#: core/models.py:1788 +#: core/models.py:1796 msgid "order CRM link" msgstr "Order's CRM link" -#: core/models.py:1789 +#: core/models.py:1797 msgid "orders CRM links" msgstr "Orders' CRM links" -#: core/models.py:1794 +#: core/models.py:1802 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2376,15 +2388,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:1808 +#: core/models.py:1816 msgid "download" msgstr "Download" -#: core/models.py:1809 +#: core/models.py:1817 msgid "downloads" msgstr "Downloads" -#: core/models.py:1823 +#: core/models.py:1831 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 +2410,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:1835 +#: core/models.py:1843 msgid "user-provided comments about their experience with the product" msgstr "User-provided comments about their experience with the product" -#: core/models.py:1836 +#: core/models.py:1844 msgid "feedback comments" msgstr "Feedback comments" -#: core/models.py:1843 +#: core/models.py:1851 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:1844 +#: core/models.py:1852 msgid "related order product" msgstr "Related order product" -#: core/models.py:1849 +#: core/models.py:1857 msgid "user-assigned rating for the product" msgstr "User-assigned rating for the product" -#: core/models.py:1850 +#: core/models.py:1858 msgid "product rating" msgstr "Product rating" @@ -2636,22 +2648,22 @@ msgstr "Both data and timeout are required" msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "Invalid timeout value, it must be between 0 and 216000 seconds" -#: core/utils/emailing.py:25 +#: core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | contact us initiated" -#: core/utils/emailing.py:74 +#: core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Order Confirmation" -#: core/utils/emailing.py:109 +#: core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Order Delivered" -#: core/utils/emailing.py:197 +#: core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | promocode granted" @@ -2896,7 +2908,7 @@ msgstr "" " accessible Feedback objects. It extends the base `EvibesViewSet` and makes " "use of Django's filtering system for querying data." -#: core/viewsets.py:593 +#: core/viewsets.py:594 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2914,7 +2926,7 @@ msgstr "" " uses multiple serializers based on the specific action being performed and " "enforces permissions accordingly while interacting with order data." -#: core/viewsets.py:782 +#: core/viewsets.py:784 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2928,11 +2940,11 @@ msgstr "" " requested action. Additionally, it provides a detailed action for handling " "feedback on OrderProduct instances" -#: core/viewsets.py:833 +#: core/viewsets.py:835 msgid "Manages operations related to Product images in the application. " msgstr "Manages operations related to Product images in the application." -#: core/viewsets.py:845 +#: core/viewsets.py:847 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -2940,15 +2952,15 @@ msgstr "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." -#: core/viewsets.py:866 +#: core/viewsets.py:868 msgid "Represents a view set for managing promotions. " msgstr "Represents a view set for managing promotions." -#: core/viewsets.py:878 +#: core/viewsets.py:880 msgid "Handles operations related to Stock data in the system." msgstr "Handles operations related to Stock data in the system." -#: core/viewsets.py:892 +#: core/viewsets.py:894 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -2966,7 +2978,7 @@ msgstr "" "that users can only manage their own wishlists unless explicit permissions " "are granted." -#: core/viewsets.py:1007 +#: core/viewsets.py:1009 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -2980,12 +2992,12 @@ msgstr "" "different HTTP methods, serializer overrides, and permission handling based " "on the request context." -#: core/viewsets.py:1074 +#: core/viewsets.py:1076 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Geocoding error: {e}" -#: core/viewsets.py:1081 +#: core/viewsets.py:1083 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/en_US/LC_MESSAGES/django.mo b/core/locale/en_US/LC_MESSAGES/django.mo index ea1ce8a6..92c7108f 100644 Binary files a/core/locale/en_US/LC_MESSAGES/django.mo and b/core/locale/en_US/LC_MESSAGES/django.mo differ diff --git a/core/locale/en_US/LC_MESSAGES/django.po b/core/locale/en_US/LC_MESSAGES/django.po index 1a82841e..74bfb5c3 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -49,82 +49,86 @@ msgstr "Modified" msgid "when the object was last modified" msgstr "When the object was last edited" -#: core/admin.py:63 +#: core/admin.py:68 msgid "translations" msgstr "Translations" -#: core/admin.py:67 +#: core/admin.py:72 msgid "general" msgstr "General" -#: core/admin.py:69 +#: core/admin.py:74 msgid "relations" msgstr "Relations" -#: core/admin.py:87 +#: core/admin.py:76 +msgid "additional info" +msgstr "additional info" + +#: core/admin.py:94 msgid "metadata" msgstr "Metadata" -#: core/admin.py:94 +#: core/admin.py:101 msgid "timestamps" msgstr "Timestamps" -#: core/admin.py:109 +#: core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Activate selected %(verbose_name_plural)s" -#: core/admin.py:114 +#: core/admin.py:121 msgid "selected items have been activated." msgstr "Selected items have been activated!" -#: core/admin.py:120 +#: core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Deactivate selected %(verbose_name_plural)s" -#: core/admin.py:125 +#: core/admin.py:132 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:701 core/models.py:709 +#: core/admin.py:144 core/graphene/object_types.py:609 +#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 msgid "attribute value" msgstr "Attribute Value" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 +#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718 msgid "attribute values" msgstr "Attribute Values" -#: core/admin.py:146 +#: core/admin.py:153 msgid "image" msgstr "Image" -#: core/admin.py:147 core/graphene/object_types.py:501 +#: core/admin.py:154 core/graphene/object_types.py:501 msgid "images" msgstr "Images" -#: core/admin.py:155 core/models.py:459 +#: core/admin.py:162 core/models.py:467 msgid "stock" msgstr "Stock" -#: core/admin.py:156 core/graphene/object_types.py:663 +#: core/admin.py:163 core/graphene/object_types.py:663 msgid "stocks" msgstr "Stocks" -#: core/admin.py:166 core/models.py:1667 +#: core/admin.py:173 core/models.py:1675 msgid "order product" msgstr "Order Product" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 msgid "order products" msgstr "Order Products" -#: core/admin.py:180 core/admin.py:181 +#: core/admin.py:187 core/admin.py:188 msgid "children" msgstr "Children" -#: core/admin.py:566 +#: core/admin.py:940 msgid "Config" msgstr "Config" @@ -708,23 +712,23 @@ 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:118 core/elasticsearch/__init__.py:498 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 msgid "no search term provided." msgstr "No search term provided." -#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +#: core/filters.py:65 core/filters.py:399 core/filters.py:526 msgid "Search" msgstr "Search" -#: core/filters.py:66 core/filters.py:554 core/filters.py:583 +#: core/filters.py:66 core/filters.py:556 core/filters.py:585 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:399 core/filters.py:526 +#: core/filters.py:67 core/filters.py:401 core/filters.py:528 msgid "Name" msgstr "Name" -#: core/filters.py:68 core/filters.py:528 +#: core/filters.py:68 core/filters.py:530 msgid "Categories" msgstr "Categories" @@ -732,7 +736,7 @@ msgstr "Categories" msgid "Categories Slugs" msgstr "Categories Slugs" -#: core/filters.py:71 core/filters.py:407 +#: core/filters.py:71 core/filters.py:409 msgid "Tags" msgstr "Tags" @@ -760,8 +764,8 @@ msgstr "Attributes" msgid "Quantity" msgstr "Quantity" -#: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:301 core/models.py:383 core/models.py:536 +#: core/filters.py:78 core/filters.py:403 core/filters.py:529 +#: core/models.py:309 core/models.py:391 core/models.py:544 msgid "Slug" msgstr "Slug" @@ -777,7 +781,7 @@ msgstr "Include sub-categories" msgid "Include personal ordered" msgstr "Include personal ordered products" -#: core/filters.py:85 core/models.py:540 +#: core/filters.py:85 core/models.py:548 msgid "SKU" msgstr "SKU" @@ -785,48 +789,48 @@ msgstr "SKU" 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:324 +#: core/filters.py:326 msgid "Search (ID, product name or part number)" msgstr "Search (ID, product name or part number)" -#: core/filters.py:327 +#: core/filters.py:329 msgid "Bought after (inclusive)" msgstr "Bought after (inclusive)" -#: core/filters.py:328 +#: core/filters.py:330 msgid "Bought before (inclusive)" msgstr "Bought before (inclusive)" -#: core/filters.py:331 core/filters.py:378 core/filters.py:585 +#: core/filters.py:333 core/filters.py:380 core/filters.py:587 msgid "User email" msgstr "User email" -#: core/filters.py:332 core/filters.py:379 core/filters.py:563 -#: core/filters.py:584 +#: core/filters.py:334 core/filters.py:381 core/filters.py:565 +#: core/filters.py:586 msgid "User UUID" msgstr "User UUID" -#: core/filters.py:333 +#: core/filters.py:335 msgid "Status" msgstr "Status" -#: core/filters.py:337 +#: core/filters.py:339 msgid "Human Readable ID" msgstr "Human Readable ID" -#: core/filters.py:400 +#: core/filters.py:402 msgid "Parent" msgstr "Parent" -#: core/filters.py:404 +#: core/filters.py:406 msgid "Whole category(has at least 1 product or not)" msgstr "Whole category(has at least 1 product or not)" -#: core/filters.py:408 +#: core/filters.py:410 msgid "Level" msgstr "Level" -#: core/filters.py:558 +#: core/filters.py:560 msgid "Product UUID" msgstr "Product UUID" @@ -881,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:679 +#: core/graphene/mutations.py:527 core/viewsets.py:680 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Wrong type came from order.buy() method: {type(instance)!s}" @@ -957,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:849 core/models.py:862 -#: core/models.py:1281 core/models.py:1310 core/models.py:1335 -#: core/viewsets.py:682 +#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 +#: core/models.py:1289 core/models.py:1318 core/models.py:1343 +#: core/viewsets.py:683 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} does not exist: {uuid}!" @@ -973,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:672 core/models.py:1144 -#: core/models.py:1744 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 +#: core/models.py:1752 msgid "attributes" msgstr "Attributes" @@ -987,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:326 core/models.py:626 +#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 msgid "categories" msgstr "Categories" -#: core/graphene/object_types.py:124 core/models.py:397 +#: core/graphene/object_types.py:124 core/models.py:405 msgid "brands" msgstr "Brands" @@ -1000,7 +1004,7 @@ msgid "category image url" msgstr "Categories" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:263 +#: core/models.py:271 msgid "markup percentage" msgstr "Markup Percentage" @@ -1022,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:169 +#: core/graphene/object_types.py:351 core/models.py:177 msgid "vendors" msgstr "Vendors" @@ -1047,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:1138 +#: core/models.py:1146 msgid "notifications" msgstr "Notifications" @@ -1055,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:1860 +#: core/graphene/object_types.py:400 core/models.py:1868 msgid "feedback" msgstr "Feedback" @@ -1063,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:1108 +#: core/graphene/object_types.py:436 core/models.py:1116 msgid "billing address" msgstr "Billing address" @@ -1091,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:1172 +#: core/graphene/object_types.py:465 core/models.py:1180 msgid "orders" msgstr "Orders" @@ -1103,19 +1107,19 @@ msgstr "Image URL" msgid "product's images" msgstr "Product's images" -#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 +#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 msgid "category" msgstr "Category" -#: core/graphene/object_types.py:502 core/models.py:1861 +#: core/graphene/object_types.py:502 core/models.py:1869 msgid "feedbacks" msgstr "Feedbacks" -#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 +#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 msgid "brand" msgstr "Brand" -#: core/graphene/object_types.py:504 core/models.py:101 +#: core/graphene/object_types.py:504 core/models.py:102 msgid "attribute groups" msgstr "Attribute groups" @@ -1143,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:550 +#: core/graphene/object_types.py:534 core/models.py:558 msgid "products" msgstr "Products" @@ -1155,15 +1159,15 @@ msgstr "Promocodes" msgid "products on sale" msgstr "Products on sale" -#: core/graphene/object_types.py:651 core/models.py:798 +#: core/graphene/object_types.py:651 core/models.py:806 msgid "promotions" msgstr "Promotions" -#: core/graphene/object_types.py:655 core/models.py:168 +#: core/graphene/object_types.py:655 core/models.py:176 msgid "vendor" msgstr "Vendor" -#: core/graphene/object_types.py:656 core/models.py:549 +#: core/graphene/object_types.py:656 core/models.py:557 #: 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 +1175,11 @@ msgstr "Vendor" msgid "product" msgstr "Product" -#: core/graphene/object_types.py:667 core/models.py:821 +#: core/graphene/object_types.py:667 core/models.py:829 msgid "wishlisted products" msgstr "Wishlisted products" -#: core/graphene/object_types.py:673 core/models.py:838 +#: core/graphene/object_types.py:673 core/models.py:846 msgid "wishlists" msgstr "Wishlists" @@ -1183,7 +1187,7 @@ msgstr "Wishlists" msgid "tagged products" msgstr "Tagged products" -#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 +#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 msgid "product tags" msgstr "Product tags" @@ -1268,7 +1272,7 @@ msgstr "Products search results" msgid "posts search results" msgstr "Products search results" -#: core/models.py:70 +#: core/models.py:71 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1280,23 +1284,23 @@ msgstr "" "parent group, forming a hierarchical structure. This can be useful for " "categorizing and managing attributes more effectively in acomplex system." -#: core/models.py:86 +#: core/models.py:87 msgid "parent of this group" msgstr "Parent of this group" -#: core/models.py:87 +#: core/models.py:88 msgid "parent attribute group" msgstr "Parent attribute group" -#: core/models.py:91 core/models.py:92 +#: core/models.py:92 core/models.py:93 msgid "attribute group's name" msgstr "Attribute group's name" -#: core/models.py:100 core/models.py:634 +#: core/models.py:101 core/models.py:642 msgid "attribute group" msgstr "Attribute group" -#: core/models.py:106 +#: core/models.py:107 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1314,32 +1318,40 @@ msgstr "" "also maintains additional metadata and constraints, making it suitable for " "use in systems that interact with third-party vendors." -#: core/models.py:119 +#: core/models.py:120 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Stores credentials and endpoints required for vendor's API communication" -#: core/models.py:120 +#: core/models.py:121 msgid "authentication info" msgstr "Authentication info" -#: core/models.py:125 +#: core/models.py:126 msgid "define the markup for products retrieved from this vendor" msgstr "Define the markup for products retrieved from this vendor" -#: core/models.py:126 +#: core/models.py:127 msgid "vendor markup percentage" msgstr "Vendor markup percentage" -#: core/models.py:130 +#: core/models.py:131 msgid "name of this vendor" msgstr "Name of this vendor" -#: core/models.py:131 +#: core/models.py:132 msgid "vendor name" msgstr "Vendor name" -#: core/models.py:177 +#: core/models.py:143 +msgid "response file" +msgstr "response file" + +#: core/models.py:144 +msgid "vendor's last processing response" +msgstr "vendor's last processing response" + +#: core/models.py:185 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1353,27 +1365,27 @@ msgstr "" "display name. It supports operations exported through mixins and provides " "metadata customization for administrative purposes." -#: core/models.py:189 core/models.py:220 +#: core/models.py:197 core/models.py:228 msgid "internal tag identifier for the product tag" msgstr "Internal tag identifier for the product tag" -#: core/models.py:190 core/models.py:221 +#: core/models.py:198 core/models.py:229 msgid "tag name" msgstr "Tag name" -#: core/models.py:194 core/models.py:225 +#: core/models.py:202 core/models.py:233 msgid "user-friendly name for the product tag" msgstr "User-friendly name for the product tag" -#: core/models.py:195 core/models.py:226 +#: core/models.py:203 core/models.py:234 msgid "tag display name" msgstr "Tag display name" -#: core/models.py:203 +#: core/models.py:211 msgid "product tag" msgstr "Product tag" -#: core/models.py:209 +#: core/models.py:217 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 +1395,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:234 +#: core/models.py:242 msgid "category tag" msgstr "category tag" -#: core/models.py:235 core/models.py:307 +#: core/models.py:243 core/models.py:315 msgid "category tags" msgstr "category tags" -#: core/models.py:240 +#: core/models.py:248 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1413,51 +1425,51 @@ msgstr "" "hierarchy of categories, as well as assign attributes like images, tags, or " "priority." -#: core/models.py:254 +#: core/models.py:262 msgid "upload an image representing this category" msgstr "Upload an image representing this category" -#: core/models.py:257 +#: core/models.py:265 msgid "category image" msgstr "Category image" -#: core/models.py:262 +#: core/models.py:270 msgid "define a markup percentage for products in this category" msgstr "Define a markup percentage for products in this category" -#: core/models.py:271 +#: core/models.py:279 msgid "parent of this category to form a hierarchical structure" msgstr "Parent of this category to form a hierarchical structure" -#: core/models.py:272 +#: core/models.py:280 msgid "parent category" msgstr "Parent category" -#: core/models.py:277 +#: core/models.py:285 msgid "category name" msgstr "Category name" -#: core/models.py:278 +#: core/models.py:286 msgid "provide a name for this category" msgstr "Provide a name for this category" -#: core/models.py:285 +#: core/models.py:293 msgid "add a detailed description for this category" msgstr "Add a detailed description for this category" -#: core/models.py:286 +#: core/models.py:294 msgid "category description" msgstr "Category description" -#: core/models.py:306 +#: core/models.py:314 msgid "tags that help describe or group this category" msgstr "tags that help describe or group this category" -#: core/models.py:313 core/models.py:389 +#: core/models.py:321 core/models.py:397 msgid "priority" msgstr "Priority" -#: core/models.py:332 +#: core/models.py:340 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 +1483,47 @@ msgstr "" "organization and representation of brand-related data within the " "application." -#: core/models.py:342 +#: core/models.py:350 msgid "name of this brand" msgstr "Name of this brand" -#: core/models.py:343 +#: core/models.py:351 msgid "brand name" msgstr "Brand name" -#: core/models.py:350 +#: core/models.py:358 msgid "upload a logo representing this brand" msgstr "Upload a logo representing this brand" -#: core/models.py:352 +#: core/models.py:360 msgid "brand small image" msgstr "Brand small image" -#: core/models.py:358 +#: core/models.py:366 msgid "upload a big logo representing this brand" msgstr "Upload a big logo representing this brand" -#: core/models.py:360 +#: core/models.py:368 msgid "brand big image" msgstr "Brand big image" -#: core/models.py:365 +#: core/models.py:373 msgid "add a detailed description of the brand" msgstr "Add a detailed description of the brand" -#: core/models.py:366 +#: core/models.py:374 msgid "brand description" msgstr "Brand description" -#: core/models.py:371 +#: core/models.py:379 msgid "optional categories that this brand is associated with" msgstr "Optional categories that this brand is associated with" -#: core/models.py:372 +#: core/models.py:380 msgid "associated categories" msgstr "Categories" -#: core/models.py:402 +#: core/models.py:410 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 +1539,68 @@ msgstr "" "management system to allow tracking and evaluation of products available " "from various vendors." -#: core/models.py:414 +#: core/models.py:422 msgid "the vendor supplying this product stock" msgstr "The vendor supplying this product stock" -#: core/models.py:415 +#: core/models.py:423 msgid "associated vendor" msgstr "Associated vendor" -#: core/models.py:419 +#: core/models.py:427 msgid "final price to the customer after markups" msgstr "Final price to the customer after markups" -#: core/models.py:420 +#: core/models.py:428 msgid "selling price" msgstr "Selling price" -#: core/models.py:425 +#: core/models.py:433 msgid "the product associated with this stock entry" msgstr "The product associated with this stock entry" -#: core/models.py:426 core/models.py:697 core/models.py:744 -#: core/models.py:1641 +#: core/models.py:434 core/models.py:705 core/models.py:752 +#: core/models.py:1649 msgid "associated product" msgstr "Associated product" -#: core/models.py:433 +#: core/models.py:441 msgid "the price paid to the vendor for this product" msgstr "The price paid to the vendor for this product" -#: core/models.py:434 +#: core/models.py:442 msgid "vendor purchase price" msgstr "Vendor purchase price" -#: core/models.py:438 +#: core/models.py:446 msgid "available quantity of the product in stock" msgstr "Available quantity of the product in stock" -#: core/models.py:439 +#: core/models.py:447 msgid "quantity in stock" msgstr "Quantity in stock" -#: core/models.py:443 +#: core/models.py:451 msgid "vendor-assigned SKU for identifying the product" msgstr "Vendor-assigned SKU for identifying the product" -#: core/models.py:444 +#: core/models.py:452 msgid "vendor sku" msgstr "Vendor's SKU" -#: core/models.py:450 +#: core/models.py:458 msgid "digital file associated with this stock if applicable" msgstr "Digital file associated with this stock if applicable" -#: core/models.py:451 +#: core/models.py:459 msgid "digital file" msgstr "Digital file" -#: core/models.py:460 +#: core/models.py:468 msgid "stock entries" msgstr "Stock entries" -#: core/models.py:465 +#: core/models.py:473 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1608,55 +1620,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:478 +#: core/models.py:486 msgid "category this product belongs to" msgstr "Category this product belongs to" -#: core/models.py:487 +#: core/models.py:495 msgid "optionally associate this product with a brand" msgstr "Optionally associate this product with a brand" -#: core/models.py:493 +#: core/models.py:501 msgid "tags that help describe or group this product" msgstr "Tags that help describe or group this product" -#: core/models.py:498 +#: core/models.py:506 msgid "indicates whether this product is digitally delivered" msgstr "Indicates whether this product is digitally delivered" -#: core/models.py:499 +#: core/models.py:507 msgid "is product digital" msgstr "Is product digital" -#: core/models.py:505 +#: core/models.py:513 msgid "provide a clear identifying name for the product" msgstr "Provide a clear identifying name for the product" -#: core/models.py:506 +#: core/models.py:514 msgid "product name" msgstr "Product name" -#: core/models.py:511 core/models.py:786 +#: core/models.py:519 core/models.py:794 msgid "add a detailed description of the product" msgstr "Add a detailed description of the product" -#: core/models.py:512 +#: core/models.py:520 msgid "product description" msgstr "Product description" -#: core/models.py:519 +#: core/models.py:527 msgid "part number for this product" msgstr "Part number for this product" -#: core/models.py:520 +#: core/models.py:528 msgid "part number" msgstr "Part number" -#: core/models.py:539 +#: core/models.py:547 msgid "stock keeping unit for this product" msgstr "Stock Keeping Unit for this product" -#: core/models.py:613 +#: core/models.py:621 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 +1684,68 @@ msgstr "" " including string, integer, float, boolean, array, and object. This allows " "for dynamic and flexible data structuring." -#: core/models.py:625 +#: core/models.py:633 msgid "category of this attribute" msgstr "Category of this attribute" -#: core/models.py:633 +#: core/models.py:641 msgid "group of this attribute" msgstr "Group of this attribute" -#: core/models.py:639 +#: core/models.py:647 msgid "string" msgstr "String" -#: core/models.py:640 +#: core/models.py:648 msgid "integer" msgstr "Integer" -#: core/models.py:641 +#: core/models.py:649 msgid "float" msgstr "Float" -#: core/models.py:642 +#: core/models.py:650 msgid "boolean" msgstr "Boolean" -#: core/models.py:643 +#: core/models.py:651 msgid "array" msgstr "Array" -#: core/models.py:644 +#: core/models.py:652 msgid "object" msgstr "Object" -#: core/models.py:646 +#: core/models.py:654 msgid "type of the attribute's value" msgstr "Type of the attribute's value" -#: core/models.py:647 +#: core/models.py:655 msgid "value type" msgstr "Value type" -#: core/models.py:652 +#: core/models.py:660 msgid "name of this attribute" msgstr "Name of this attribute" -#: core/models.py:653 +#: core/models.py:661 msgid "attribute's name" msgstr "Attribute's name" -#: core/models.py:659 +#: core/models.py:667 msgid "is filterable" msgstr "is filterable" -#: core/models.py:660 +#: core/models.py:668 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:671 core/models.py:689 +#: core/models.py:679 core/models.py:697 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attribute" -#: core/models.py:677 +#: core/models.py:685 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 +1755,19 @@ msgstr "" " links the 'attribute' to a unique 'value', allowing better organization and" " dynamic representation of product characteristics." -#: core/models.py:688 +#: core/models.py:696 msgid "attribute of this value" msgstr "Attribute of this value" -#: core/models.py:696 +#: core/models.py:704 msgid "the specific product associated with this attribute's value" msgstr "The specific product associated with this attribute's value" -#: core/models.py:702 +#: core/models.py:710 msgid "the specific value for this attribute" msgstr "The specific value for this attribute" -#: core/models.py:715 +#: core/models.py:723 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 +1781,39 @@ msgstr "" "determining their display order. It also includes an accessibility feature " "with alternative text for the images." -#: core/models.py:726 +#: core/models.py:734 msgid "provide alternative text for the image for accessibility" msgstr "Provide alternative text for the image for accessibility" -#: core/models.py:727 +#: core/models.py:735 msgid "image alt text" msgstr "Image alt text" -#: core/models.py:730 +#: core/models.py:738 msgid "upload the image file for this product" msgstr "Upload the image file for this product" -#: core/models.py:731 core/models.py:756 +#: core/models.py:739 core/models.py:764 msgid "product image" msgstr "Product image" -#: core/models.py:737 +#: core/models.py:745 msgid "determines the order in which images are displayed" msgstr "Determines the order in which images are displayed" -#: core/models.py:738 +#: core/models.py:746 msgid "display priority" msgstr "Display priority" -#: core/models.py:743 +#: core/models.py:751 msgid "the product that this image represents" msgstr "The product that this image represents" -#: core/models.py:757 +#: core/models.py:765 msgid "product images" msgstr "Product images" -#: core/models.py:762 +#: core/models.py:770 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 +1829,39 @@ msgstr "" "applicable products. It integrates with the product catalog to determine the" " affected items in the campaign." -#: core/models.py:774 +#: core/models.py:782 msgid "percentage discount for the selected products" msgstr "Percentage discount for the selected products" -#: core/models.py:775 +#: core/models.py:783 msgid "discount percentage" msgstr "Discount percentage" -#: core/models.py:780 +#: core/models.py:788 msgid "provide a unique name for this promotion" msgstr "Provide a unique name for this promotion" -#: core/models.py:781 +#: core/models.py:789 msgid "promotion name" msgstr "Promotion name" -#: core/models.py:787 +#: core/models.py:795 msgid "promotion description" msgstr "Promotion description" -#: core/models.py:792 +#: core/models.py:800 msgid "select which products are included in this promotion" msgstr "Select which products are included in this promotion" -#: core/models.py:793 +#: core/models.py:801 msgid "included products" msgstr "Included products" -#: core/models.py:797 +#: core/models.py:805 msgid "promotion" msgstr "Promotion" -#: core/models.py:808 +#: core/models.py:816 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 +1873,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:820 +#: core/models.py:828 msgid "products that the user has marked as wanted" msgstr "Products that the user has marked as wanted" -#: core/models.py:828 +#: core/models.py:836 msgid "user who owns this wishlist" msgstr "User who owns this wishlist" -#: core/models.py:829 +#: core/models.py:837 msgid "wishlist owner" msgstr "Wishlist's Owner" -#: core/models.py:837 +#: core/models.py:845 msgid "wishlist" msgstr "Wishlist" -#: core/models.py:879 +#: core/models.py:887 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1893,19 +1905,19 @@ msgstr "" "files. It extends functionality from specific mixins and provides additional" " custom features." -#: core/models.py:892 +#: core/models.py:900 msgid "documentary" msgstr "Documentary" -#: core/models.py:893 +#: core/models.py:901 msgid "documentaries" msgstr "Documentaries" -#: core/models.py:903 +#: core/models.py:911 msgid "unresolved" msgstr "Unresolved" -#: core/models.py:908 +#: core/models.py:916 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1925,59 +1937,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:923 +#: core/models.py:931 msgid "address line for the customer" msgstr "Address line for the customer" -#: core/models.py:924 +#: core/models.py:932 msgid "address line" msgstr "Address line" -#: core/models.py:926 +#: core/models.py:934 msgid "street" msgstr "Street" -#: core/models.py:927 +#: core/models.py:935 msgid "district" msgstr "District" -#: core/models.py:928 +#: core/models.py:936 msgid "city" msgstr "City" -#: core/models.py:929 +#: core/models.py:937 msgid "region" msgstr "Region" -#: core/models.py:930 +#: core/models.py:938 msgid "postal code" msgstr "Postal code" -#: core/models.py:931 +#: core/models.py:939 msgid "country" msgstr "Country" -#: core/models.py:938 +#: core/models.py:946 msgid "geolocation point: (longitude, latitude)" msgstr "Geolocation Point(Longitude, Latitude)" -#: core/models.py:941 +#: core/models.py:949 msgid "full JSON response from geocoder for this address" msgstr "Full JSON response from geocoder for this address" -#: core/models.py:946 +#: core/models.py:954 msgid "stored JSON response from the geocoding service" msgstr "Stored JSON response from the geocoding service" -#: core/models.py:954 +#: core/models.py:962 msgid "address" msgstr "Address" -#: core/models.py:955 +#: core/models.py:963 msgid "addresses" msgstr "Adresses" -#: core/models.py:967 +#: core/models.py:975 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 +2005,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:981 +#: core/models.py:989 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:982 +#: core/models.py:990 msgid "promo code identifier" msgstr "Promo code identifier" -#: core/models.py:989 +#: core/models.py:997 msgid "fixed discount amount applied if percent is not used" msgstr "Fixed discount amount applied if percent is not used" -#: core/models.py:990 +#: core/models.py:998 msgid "fixed discount amount" msgstr "Fixed discount amount" -#: core/models.py:996 +#: core/models.py:1004 msgid "percentage discount applied if fixed amount is not used" msgstr "Percentage discount applied if fixed amount is not used" -#: core/models.py:997 +#: core/models.py:1005 msgid "percentage discount" msgstr "Percentage discount" -#: core/models.py:1002 +#: core/models.py:1010 msgid "timestamp when the promocode expires" msgstr "Timestamp when the promocode expires" -#: core/models.py:1003 +#: core/models.py:1011 msgid "end validity time" msgstr "End validity time" -#: core/models.py:1008 +#: core/models.py:1016 msgid "timestamp from which this promocode is valid" msgstr "Timestamp from which this promocode is valid" -#: core/models.py:1009 +#: core/models.py:1017 msgid "start validity time" msgstr "Start validity time" -#: core/models.py:1014 +#: core/models.py:1022 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:1015 +#: core/models.py:1023 msgid "usage timestamp" msgstr "Usage timestamp" -#: core/models.py:1020 +#: core/models.py:1028 msgid "user assigned to this promocode if applicable" msgstr "User assigned to this promocode if applicable" -#: core/models.py:1021 +#: core/models.py:1029 msgid "assigned user" msgstr "Assigned user" -#: core/models.py:1028 +#: core/models.py:1036 msgid "promo code" msgstr "Promo code" -#: core/models.py:1029 +#: core/models.py:1037 msgid "promo codes" msgstr "Promo codes" -#: core/models.py:1044 +#: core/models.py:1052 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2065,16 +2077,16 @@ msgstr "" "Only one type of discount should be defined (amount or percent), but not " "both or neither." -#: core/models.py:1065 +#: core/models.py:1073 msgid "promocode already used" msgstr "Promocode has been used already" -#: core/models.py:1081 +#: core/models.py:1089 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Invalid discount type for promocode {self.uuid}!" -#: core/models.py:1090 +#: core/models.py:1098 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 +2102,135 @@ msgstr "" "set, and shipping or billing details updated. Equally, functionality " "supports managing the products in the order lifecycle." -#: core/models.py:1107 +#: core/models.py:1115 msgid "the billing address used for this order" msgstr "The billing address used for this order" -#: core/models.py:1115 +#: core/models.py:1123 msgid "optional promo code applied to this order" msgstr "Optional promo code applied to this order" -#: core/models.py:1116 +#: core/models.py:1124 msgid "applied promo code" msgstr "Applied promo code" -#: core/models.py:1124 +#: core/models.py:1132 msgid "the shipping address used for this order" msgstr "The shipping address used for this order" -#: core/models.py:1125 +#: core/models.py:1133 msgid "shipping address" msgstr "Shipping address" -#: core/models.py:1131 +#: core/models.py:1139 msgid "current status of the order in its lifecycle" msgstr "Current status of the order in its lifecycle" -#: core/models.py:1132 +#: core/models.py:1140 msgid "order status" msgstr "Order status" -#: core/models.py:1137 core/models.py:1618 +#: core/models.py:1145 core/models.py:1626 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:1143 +#: core/models.py:1151 msgid "json representation of order attributes for this order" msgstr "JSON representation of order attributes for this order" -#: core/models.py:1149 +#: core/models.py:1157 msgid "the user who placed the order" msgstr "The user who placed the order" -#: core/models.py:1150 +#: core/models.py:1158 msgid "user" msgstr "User" -#: core/models.py:1156 +#: core/models.py:1164 msgid "the timestamp when the order was finalized" msgstr "The timestamp when the order was finalized" -#: core/models.py:1157 +#: core/models.py:1165 msgid "buy time" msgstr "Buy time" -#: core/models.py:1164 +#: core/models.py:1172 msgid "a human-readable identifier for the order" msgstr "A human-readable identifier for the order" -#: core/models.py:1165 +#: core/models.py:1173 msgid "human readable id" msgstr "human-readable ID" -#: core/models.py:1171 +#: core/models.py:1179 msgid "order" msgstr "Order" -#: core/models.py:1209 +#: core/models.py:1217 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:1249 +#: core/models.py:1257 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:1254 +#: core/models.py:1262 msgid "you cannot add inactive products to order" msgstr "You cannot add inactive products to order" -#: core/models.py:1271 +#: core/models.py:1279 msgid "you cannot add more products than available in stock" msgstr "You cannot add more products than available in stock" -#: core/models.py:1293 core/models.py:1318 core/models.py:1326 +#: core/models.py:1301 core/models.py:1326 core/models.py:1334 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:1314 +#: core/models.py:1322 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} does not exist with query <{query}>!" -#: core/models.py:1346 +#: core/models.py:1354 msgid "promocode does not exist" msgstr "Promocode does not exist" -#: core/models.py:1352 +#: core/models.py:1360 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:1371 +#: core/models.py:1379 msgid "address does not exist" msgstr "Address does not exist" -#: core/models.py:1392 core/models.py:1461 +#: core/models.py:1400 core/models.py:1469 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:1395 core/models.py:1457 +#: core/models.py:1403 core/models.py:1465 msgid "invalid force value" msgstr "Invalid force value" -#: core/models.py:1401 core/models.py:1464 +#: core/models.py:1409 core/models.py:1472 msgid "you cannot purchase an empty order!" msgstr "You cannot purchase an empty order!" -#: core/models.py:1420 +#: core/models.py:1428 msgid "you cannot buy an order without a user" msgstr "You cannot buy an order without a user!" -#: core/models.py:1434 +#: core/models.py:1442 msgid "a user without a balance cannot buy with balance" msgstr "A user without a balance cannot buy with balance!" -#: core/models.py:1439 +#: core/models.py:1447 msgid "insufficient funds to complete the order" msgstr "Insufficient funds to complete the order" -#: core/models.py:1473 +#: core/models.py:1481 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2226,14 +2238,14 @@ msgstr "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" -#: core/models.py:1482 +#: core/models.py:1490 #, 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:1591 +#: core/models.py:1599 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2255,108 +2267,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:1606 +#: core/models.py:1614 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:1607 +#: core/models.py:1615 msgid "purchase price at order time" msgstr "Purchase price at order time" -#: core/models.py:1612 +#: core/models.py:1620 msgid "internal comments for admins about this ordered product" msgstr "Internal comments for admins about this ordered product" -#: core/models.py:1613 +#: core/models.py:1621 msgid "internal comments" msgstr "Internal comments" -#: core/models.py:1619 +#: core/models.py:1627 msgid "user notifications" msgstr "User notifications" -#: core/models.py:1624 +#: core/models.py:1632 msgid "json representation of this item's attributes" msgstr "JSON representation of this item's attributes" -#: core/models.py:1625 +#: core/models.py:1633 msgid "ordered product attributes" msgstr "Ordered product attributes" -#: core/models.py:1630 +#: core/models.py:1638 msgid "reference to the parent order that contains this product" msgstr "Reference to the parent order that contains this product" -#: core/models.py:1631 +#: core/models.py:1639 msgid "parent order" msgstr "Parent order" -#: core/models.py:1640 +#: core/models.py:1648 msgid "the specific product associated with this order line" msgstr "The specific product associated with this order line" -#: core/models.py:1647 +#: core/models.py:1655 msgid "quantity of this specific product in the order" msgstr "Quantity of this specific product in the order" -#: core/models.py:1648 +#: core/models.py:1656 msgid "product quantity" msgstr "Product quantity" -#: core/models.py:1655 +#: core/models.py:1663 msgid "current status of this product in the order" msgstr "Current status of this product in the order" -#: core/models.py:1656 +#: core/models.py:1664 msgid "product line status" msgstr "Product line status" -#: core/models.py:1719 +#: core/models.py:1727 msgid "order product must have an order" msgstr "Orderproduct must have an associated order!" -#: core/models.py:1721 +#: core/models.py:1729 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Wrong action specified for feedback: {action}!" -#: core/models.py:1735 +#: core/models.py:1743 msgid "you cannot feedback an order which is not received" msgstr "you cannot feedback an order which is not received" -#: core/models.py:1741 +#: core/models.py:1749 msgid "name" msgstr "Name" -#: core/models.py:1742 +#: core/models.py:1750 msgid "URL of the integration" msgstr "URL of the integration" -#: core/models.py:1743 +#: core/models.py:1751 msgid "authentication credentials" msgstr "Authentication credentials" -#: core/models.py:1765 +#: core/models.py:1773 msgid "you can only have one default CRM provider" msgstr "You can only have one default CRM provider" -#: core/models.py:1775 +#: core/models.py:1783 msgid "CRM" msgstr "CRM" -#: core/models.py:1776 +#: core/models.py:1784 msgid "CRMs" msgstr "CRMs" -#: core/models.py:1788 +#: core/models.py:1796 msgid "order CRM link" msgstr "Order's CRM link" -#: core/models.py:1789 +#: core/models.py:1797 msgid "orders CRM links" msgstr "Orders' CRM links" -#: core/models.py:1794 +#: core/models.py:1802 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2372,15 +2384,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:1808 +#: core/models.py:1816 msgid "download" msgstr "Download" -#: core/models.py:1809 +#: core/models.py:1817 msgid "downloads" msgstr "Downloads" -#: core/models.py:1823 +#: core/models.py:1831 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2394,29 +2406,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:1835 +#: core/models.py:1843 msgid "user-provided comments about their experience with the product" msgstr "User-provided comments about their experience with the product" -#: core/models.py:1836 +#: core/models.py:1844 msgid "feedback comments" msgstr "Feedback comments" -#: core/models.py:1843 +#: core/models.py:1851 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:1844 +#: core/models.py:1852 msgid "related order product" msgstr "Related order product" -#: core/models.py:1849 +#: core/models.py:1857 msgid "user-assigned rating for the product" msgstr "User-assigned rating for the product" -#: core/models.py:1850 +#: core/models.py:1858 msgid "product rating" msgstr "Product rating" @@ -2632,22 +2644,22 @@ msgstr "Both data and timeout are required" msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "Invalid timeout value, it must be between 0 and 216000 seconds" -#: core/utils/emailing.py:25 +#: core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | contact us initiated" -#: core/utils/emailing.py:74 +#: core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Order Confirmation" -#: core/utils/emailing.py:109 +#: core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Order Delivered" -#: core/utils/emailing.py:197 +#: core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | promocode granted" @@ -2892,7 +2904,7 @@ msgstr "" " accessible Feedback objects. It extends the base `EvibesViewSet` and makes " "use of Django's filtering system for querying data." -#: core/viewsets.py:593 +#: core/viewsets.py:594 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2910,7 +2922,7 @@ msgstr "" " uses multiple serializers based on the specific action being performed and " "enforces permissions accordingly while interacting with order data." -#: core/viewsets.py:782 +#: core/viewsets.py:784 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2924,11 +2936,11 @@ msgstr "" " requested action. Additionally, it provides a detailed action for handling " "feedback on OrderProduct instances" -#: core/viewsets.py:833 +#: core/viewsets.py:835 msgid "Manages operations related to Product images in the application. " msgstr "Manages operations related to Product images in the application." -#: core/viewsets.py:845 +#: core/viewsets.py:847 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -2936,15 +2948,15 @@ msgstr "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." -#: core/viewsets.py:866 +#: core/viewsets.py:868 msgid "Represents a view set for managing promotions. " msgstr "Represents a view set for managing promotions." -#: core/viewsets.py:878 +#: core/viewsets.py:880 msgid "Handles operations related to Stock data in the system." msgstr "Handles operations related to Stock data in the system." -#: core/viewsets.py:892 +#: core/viewsets.py:894 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -2962,7 +2974,7 @@ msgstr "" "that users can only manage their own wishlists unless explicit permissions " "are granted." -#: core/viewsets.py:1007 +#: core/viewsets.py:1009 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -2976,12 +2988,12 @@ msgstr "" "different HTTP methods, serializer overrides, and permission handling based " "on the request context." -#: core/viewsets.py:1074 +#: core/viewsets.py:1076 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Geocoding error: {e}" -#: core/viewsets.py:1081 +#: core/viewsets.py:1083 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/es_ES/LC_MESSAGES/django.mo b/core/locale/es_ES/LC_MESSAGES/django.mo index 5a078f57..76f76c8a 100644 Binary files a/core/locale/es_ES/LC_MESSAGES/django.mo and b/core/locale/es_ES/LC_MESSAGES/django.mo differ diff --git a/core/locale/es_ES/LC_MESSAGES/django.po b/core/locale/es_ES/LC_MESSAGES/django.po index e2d6d769..212a1ad9 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -51,82 +51,86 @@ msgstr "Modificado" msgid "when the object was last modified" msgstr "Cuándo se editó el objeto por última vez" -#: core/admin.py:63 +#: core/admin.py:68 msgid "translations" msgstr "Traducciones" -#: core/admin.py:67 +#: core/admin.py:72 msgid "general" msgstr "General" -#: core/admin.py:69 +#: core/admin.py:74 msgid "relations" msgstr "Relaciones" -#: core/admin.py:87 +#: core/admin.py:76 +msgid "additional info" +msgstr "información adicional" + +#: core/admin.py:94 msgid "metadata" msgstr "Metadatos" -#: core/admin.py:94 +#: core/admin.py:101 msgid "timestamps" msgstr "Marcas de tiempo" -#: core/admin.py:109 +#: core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Activar %(verbose_name_plural)s seleccionado" -#: core/admin.py:114 +#: core/admin.py:121 msgid "selected items have been activated." msgstr "Los artículos seleccionados se han activado." -#: core/admin.py:120 +#: core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Desactivar %(verbose_name_plural)s seleccionado" -#: core/admin.py:125 +#: core/admin.py:132 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:701 core/models.py:709 +#: core/admin.py:144 core/graphene/object_types.py:609 +#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 msgid "attribute value" msgstr "Atributo Valor" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 +#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718 msgid "attribute values" msgstr "Valores de los atributos" -#: core/admin.py:146 +#: core/admin.py:153 msgid "image" msgstr "Imagen" -#: core/admin.py:147 core/graphene/object_types.py:501 +#: core/admin.py:154 core/graphene/object_types.py:501 msgid "images" msgstr "Imágenes" -#: core/admin.py:155 core/models.py:459 +#: core/admin.py:162 core/models.py:467 msgid "stock" msgstr "Stock" -#: core/admin.py:156 core/graphene/object_types.py:663 +#: core/admin.py:163 core/graphene/object_types.py:663 msgid "stocks" msgstr "Acciones" -#: core/admin.py:166 core/models.py:1667 +#: core/admin.py:173 core/models.py:1675 msgid "order product" msgstr "Pedir un producto" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 msgid "order products" msgstr "Pedir productos" -#: core/admin.py:180 core/admin.py:181 +#: core/admin.py:187 core/admin.py:188 msgid "children" msgstr "Niños" -#: core/admin.py:566 +#: core/admin.py:940 msgid "Config" msgstr "Configurar" @@ -742,23 +746,23 @@ 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:118 core/elasticsearch/__init__.py:498 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 msgid "no search term provided." msgstr "No se proporciona ningún término de búsqueda." -#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +#: core/filters.py:65 core/filters.py:399 core/filters.py:526 msgid "Search" msgstr "Buscar en" -#: core/filters.py:66 core/filters.py:554 core/filters.py:583 +#: core/filters.py:66 core/filters.py:556 core/filters.py:585 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:399 core/filters.py:526 +#: core/filters.py:67 core/filters.py:401 core/filters.py:528 msgid "Name" msgstr "Nombre" -#: core/filters.py:68 core/filters.py:528 +#: core/filters.py:68 core/filters.py:530 msgid "Categories" msgstr "Categorías" @@ -766,7 +770,7 @@ msgstr "Categorías" msgid "Categories Slugs" msgstr "Categorías Babosas" -#: core/filters.py:71 core/filters.py:407 +#: core/filters.py:71 core/filters.py:409 msgid "Tags" msgstr "Etiquetas" @@ -794,8 +798,8 @@ msgstr "Atributos" msgid "Quantity" msgstr "Cantidad" -#: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:301 core/models.py:383 core/models.py:536 +#: core/filters.py:78 core/filters.py:403 core/filters.py:529 +#: core/models.py:309 core/models.py:391 core/models.py:544 msgid "Slug" msgstr "Babosa" @@ -811,7 +815,7 @@ msgstr "Incluir subcategorías" msgid "Include personal ordered" msgstr "Incluir productos personales solicitados" -#: core/filters.py:85 core/models.py:540 +#: core/filters.py:85 core/models.py:548 msgid "SKU" msgstr "SKU" @@ -820,48 +824,48 @@ 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:324 +#: core/filters.py:326 msgid "Search (ID, product name or part number)" msgstr "Búsqueda (ID, nombre del producto o número de pieza)" -#: core/filters.py:327 +#: core/filters.py:329 msgid "Bought after (inclusive)" msgstr "Comprado después (inclusive)" -#: core/filters.py:328 +#: core/filters.py:330 msgid "Bought before (inclusive)" msgstr "Comprado antes (inclusive)" -#: core/filters.py:331 core/filters.py:378 core/filters.py:585 +#: core/filters.py:333 core/filters.py:380 core/filters.py:587 msgid "User email" msgstr "Correo electrónico del usuario" -#: core/filters.py:332 core/filters.py:379 core/filters.py:563 -#: core/filters.py:584 +#: core/filters.py:334 core/filters.py:381 core/filters.py:565 +#: core/filters.py:586 msgid "User UUID" msgstr "UUID de usuario" -#: core/filters.py:333 +#: core/filters.py:335 msgid "Status" msgstr "Estado" -#: core/filters.py:337 +#: core/filters.py:339 msgid "Human Readable ID" msgstr "Identificación legible" -#: core/filters.py:400 +#: core/filters.py:402 msgid "Parent" msgstr "Padres" -#: core/filters.py:404 +#: core/filters.py:406 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:408 +#: core/filters.py:410 msgid "Level" msgstr "Nivel" -#: core/filters.py:558 +#: core/filters.py:560 msgid "Product UUID" msgstr "UUID del producto" @@ -916,7 +920,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:679 +#: core/graphene/mutations.py:527 core/viewsets.py:680 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 +997,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:849 core/models.py:862 -#: core/models.py:1281 core/models.py:1310 core/models.py:1335 -#: core/viewsets.py:682 +#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 +#: core/models.py:1289 core/models.py:1318 core/models.py:1343 +#: core/viewsets.py:683 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} no existe: ¡{uuid}!" @@ -1009,8 +1013,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:672 core/models.py:1144 -#: core/models.py:1744 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 +#: core/models.py:1752 msgid "attributes" msgstr "Atributos" @@ -1023,11 +1027,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:326 core/models.py:626 +#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 msgid "categories" msgstr "Categorías" -#: core/graphene/object_types.py:124 core/models.py:397 +#: core/graphene/object_types.py:124 core/models.py:405 msgid "brands" msgstr "Marcas" @@ -1036,7 +1040,7 @@ msgid "category image url" msgstr "Categorías" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:263 +#: core/models.py:271 msgid "markup percentage" msgstr "Porcentaje de recargo" @@ -1060,7 +1064,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:169 +#: core/graphene/object_types.py:351 core/models.py:177 msgid "vendors" msgstr "Vendedores" @@ -1087,7 +1091,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:1138 +#: core/models.py:1146 msgid "notifications" msgstr "Notificaciones" @@ -1095,7 +1099,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:1860 +#: core/graphene/object_types.py:400 core/models.py:1868 msgid "feedback" msgstr "Comentarios" @@ -1103,7 +1107,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:1108 +#: core/graphene/object_types.py:436 core/models.py:1116 msgid "billing address" msgstr "Dirección de facturación" @@ -1131,7 +1135,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:1172 +#: core/graphene/object_types.py:465 core/models.py:1180 msgid "orders" msgstr "Pedidos" @@ -1143,19 +1147,19 @@ msgstr "URL de la imagen" msgid "product's images" msgstr "Imágenes del producto" -#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 +#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 msgid "category" msgstr "Categoría" -#: core/graphene/object_types.py:502 core/models.py:1861 +#: core/graphene/object_types.py:502 core/models.py:1869 msgid "feedbacks" msgstr "Comentarios" -#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 +#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 msgid "brand" msgstr "Marca" -#: core/graphene/object_types.py:504 core/models.py:101 +#: core/graphene/object_types.py:504 core/models.py:102 msgid "attribute groups" msgstr "Grupos de atributos" @@ -1183,7 +1187,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:550 +#: core/graphene/object_types.py:534 core/models.py:558 msgid "products" msgstr "Productos" @@ -1195,15 +1199,15 @@ msgstr "Códigos promocionales" msgid "products on sale" msgstr "Productos a la venta" -#: core/graphene/object_types.py:651 core/models.py:798 +#: core/graphene/object_types.py:651 core/models.py:806 msgid "promotions" msgstr "Promociones" -#: core/graphene/object_types.py:655 core/models.py:168 +#: core/graphene/object_types.py:655 core/models.py:176 msgid "vendor" msgstr "Vendedor" -#: core/graphene/object_types.py:656 core/models.py:549 +#: core/graphene/object_types.py:656 core/models.py:557 #: 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 +1215,11 @@ msgstr "Vendedor" msgid "product" msgstr "Producto" -#: core/graphene/object_types.py:667 core/models.py:821 +#: core/graphene/object_types.py:667 core/models.py:829 msgid "wishlisted products" msgstr "Productos deseados" -#: core/graphene/object_types.py:673 core/models.py:838 +#: core/graphene/object_types.py:673 core/models.py:846 msgid "wishlists" msgstr "Listas de deseos" @@ -1223,7 +1227,7 @@ msgstr "Listas de deseos" msgid "tagged products" msgstr "Productos con etiqueta" -#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 +#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 msgid "product tags" msgstr "Etiquetas del producto" @@ -1309,7 +1313,7 @@ msgstr "Resultados de la búsqueda de productos" msgid "posts search results" msgstr "Resultados de la búsqueda de productos" -#: core/models.py:70 +#: core/models.py:71 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1322,23 +1326,23 @@ msgstr "" "Esto puede ser útil para categorizar y gestionar los atributos de manera más" " eficaz en un sistema complejo." -#: core/models.py:86 +#: core/models.py:87 msgid "parent of this group" msgstr "Padre de este grupo" -#: core/models.py:87 +#: core/models.py:88 msgid "parent attribute group" msgstr "Grupo de atributos padre" -#: core/models.py:91 core/models.py:92 +#: core/models.py:92 core/models.py:93 msgid "attribute group's name" msgstr "Nombre del grupo de atributos" -#: core/models.py:100 core/models.py:634 +#: core/models.py:101 core/models.py:642 msgid "attribute group" msgstr "Grupo de atributos" -#: core/models.py:106 +#: core/models.py:107 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1357,35 +1361,43 @@ msgstr "" " restricciones adicionales, lo que lo hace adecuado para su uso en sistemas " "que interactúan con proveedores externos." -#: core/models.py:119 +#: core/models.py:120 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Almacena las credenciales y los puntos finales necesarios para la " "comunicación API del proveedor" -#: core/models.py:120 +#: core/models.py:121 msgid "authentication info" msgstr "Información de autenticación" -#: core/models.py:125 +#: core/models.py:126 msgid "define the markup for products retrieved from this vendor" msgstr "" "Definir el margen de beneficio para los productos recuperados de este " "proveedor" -#: core/models.py:126 +#: core/models.py:127 msgid "vendor markup percentage" msgstr "Porcentaje de margen del vendedor" -#: core/models.py:130 +#: core/models.py:131 msgid "name of this vendor" msgstr "Nombre de este vendedor" -#: core/models.py:131 +#: core/models.py:132 msgid "vendor name" msgstr "Nombre del vendedor" -#: core/models.py:177 +#: core/models.py:143 +msgid "response file" +msgstr "archivo de respuesta" + +#: core/models.py:144 +msgid "vendor's last processing response" +msgstr "última respuesta de procesamiento del proveedor" + +#: core/models.py:185 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1400,27 +1412,27 @@ msgstr "" "operaciones exportadas a través de mixins y proporciona personalización de " "metadatos con fines administrativos." -#: core/models.py:189 core/models.py:220 +#: core/models.py:197 core/models.py:228 msgid "internal tag identifier for the product tag" msgstr "Identificador interno de la etiqueta del producto" -#: core/models.py:190 core/models.py:221 +#: core/models.py:198 core/models.py:229 msgid "tag name" msgstr "Nombre de la etiqueta" -#: core/models.py:194 core/models.py:225 +#: core/models.py:202 core/models.py:233 msgid "user-friendly name for the product tag" msgstr "Nombre fácil de usar para la etiqueta del producto" -#: core/models.py:195 core/models.py:226 +#: core/models.py:203 core/models.py:234 msgid "tag display name" msgstr "Nombre de la etiqueta" -#: core/models.py:203 +#: core/models.py:211 msgid "product tag" msgstr "Etiqueta del producto" -#: core/models.py:209 +#: core/models.py:217 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 +1443,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:234 +#: core/models.py:242 msgid "category tag" msgstr "etiqueta de categoría" -#: core/models.py:235 core/models.py:307 +#: core/models.py:243 core/models.py:315 msgid "category tags" msgstr "etiquetas de categoría" -#: core/models.py:240 +#: core/models.py:248 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1462,51 +1474,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:254 +#: core/models.py:262 msgid "upload an image representing this category" msgstr "Cargar una imagen que represente esta categoría" -#: core/models.py:257 +#: core/models.py:265 msgid "category image" msgstr "Categoría imagen" -#: core/models.py:262 +#: core/models.py:270 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:271 +#: core/models.py:279 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:272 +#: core/models.py:280 msgid "parent category" msgstr "Categoría de padres" -#: core/models.py:277 +#: core/models.py:285 msgid "category name" msgstr "Nombre de la categoría" -#: core/models.py:278 +#: core/models.py:286 msgid "provide a name for this category" msgstr "Indique un nombre para esta categoría" -#: core/models.py:285 +#: core/models.py:293 msgid "add a detailed description for this category" msgstr "Añadir una descripción detallada para esta categoría" -#: core/models.py:286 +#: core/models.py:294 msgid "category description" msgstr "Descripción de la categoría" -#: core/models.py:306 +#: core/models.py:314 msgid "tags that help describe or group this category" msgstr "etiquetas que ayudan a describir o agrupar esta categoría" -#: core/models.py:313 core/models.py:389 +#: core/models.py:321 core/models.py:397 msgid "priority" msgstr "Prioridad" -#: core/models.py:332 +#: core/models.py:340 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 +1532,47 @@ msgstr "" "Permite organizar y representar los datos relacionados con la marca dentro " "de la aplicación." -#: core/models.py:342 +#: core/models.py:350 msgid "name of this brand" msgstr "Nombre de esta marca" -#: core/models.py:343 +#: core/models.py:351 msgid "brand name" msgstr "Marca" -#: core/models.py:350 +#: core/models.py:358 msgid "upload a logo representing this brand" msgstr "Cargar un logotipo que represente a esta marca" -#: core/models.py:352 +#: core/models.py:360 msgid "brand small image" msgstr "Marca pequeña imagen" -#: core/models.py:358 +#: core/models.py:366 msgid "upload a big logo representing this brand" msgstr "Sube un logotipo grande que represente a esta marca" -#: core/models.py:360 +#: core/models.py:368 msgid "brand big image" msgstr "Gran imagen de marca" -#: core/models.py:365 +#: core/models.py:373 msgid "add a detailed description of the brand" msgstr "Añadir una descripción detallada de la marca" -#: core/models.py:366 +#: core/models.py:374 msgid "brand description" msgstr "Descripción de la marca" -#: core/models.py:371 +#: core/models.py:379 msgid "optional categories that this brand is associated with" msgstr "Categorías opcionales a las que se asocia esta marca" -#: core/models.py:372 +#: core/models.py:380 msgid "associated categories" msgstr "Categorías" -#: core/models.py:402 +#: core/models.py:410 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 +1589,68 @@ msgstr "" "seguimiento y la evaluación de los productos disponibles de varios " "vendedores." -#: core/models.py:414 +#: core/models.py:422 msgid "the vendor supplying this product stock" msgstr "El vendedor que suministra este producto dispone de" -#: core/models.py:415 +#: core/models.py:423 msgid "associated vendor" msgstr "Proveedor asociado" -#: core/models.py:419 +#: core/models.py:427 msgid "final price to the customer after markups" msgstr "Precio final al cliente después de márgenes" -#: core/models.py:420 +#: core/models.py:428 msgid "selling price" msgstr "Precio de venta" -#: core/models.py:425 +#: core/models.py:433 msgid "the product associated with this stock entry" msgstr "El producto asociado a esta entrada en stock" -#: core/models.py:426 core/models.py:697 core/models.py:744 -#: core/models.py:1641 +#: core/models.py:434 core/models.py:705 core/models.py:752 +#: core/models.py:1649 msgid "associated product" msgstr "Producto asociado" -#: core/models.py:433 +#: core/models.py:441 msgid "the price paid to the vendor for this product" msgstr "El precio pagado al vendedor por este producto" -#: core/models.py:434 +#: core/models.py:442 msgid "vendor purchase price" msgstr "Precio de compra al vendedor" -#: core/models.py:438 +#: core/models.py:446 msgid "available quantity of the product in stock" msgstr "Cantidad disponible del producto en stock" -#: core/models.py:439 +#: core/models.py:447 msgid "quantity in stock" msgstr "Cantidad en stock" -#: core/models.py:443 +#: core/models.py:451 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU asignada por el proveedor para identificar el producto" -#: core/models.py:444 +#: core/models.py:452 msgid "vendor sku" msgstr "SKU del vendedor" -#: core/models.py:450 +#: core/models.py:458 msgid "digital file associated with this stock if applicable" msgstr "Archivo digital asociado a esta acción, si procede" -#: core/models.py:451 +#: core/models.py:459 msgid "digital file" msgstr "Archivo digital" -#: core/models.py:460 +#: core/models.py:468 msgid "stock entries" msgstr "Entradas en existencias" -#: core/models.py:465 +#: core/models.py:473 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1660,55 +1672,55 @@ msgstr "" "para definir y manipular datos de productos y su información asociada dentro" " de una aplicación." -#: core/models.py:478 +#: core/models.py:486 msgid "category this product belongs to" msgstr "Categoría a la que pertenece este producto" -#: core/models.py:487 +#: core/models.py:495 msgid "optionally associate this product with a brand" msgstr "Si lo desea, puede asociar este producto a una marca" -#: core/models.py:493 +#: core/models.py:501 msgid "tags that help describe or group this product" msgstr "Etiquetas que ayudan a describir o agrupar este producto" -#: core/models.py:498 +#: core/models.py:506 msgid "indicates whether this product is digitally delivered" msgstr "Indica si este producto se entrega digitalmente" -#: core/models.py:499 +#: core/models.py:507 msgid "is product digital" msgstr "¿Es digital el producto?" -#: core/models.py:505 +#: core/models.py:513 msgid "provide a clear identifying name for the product" msgstr "Proporcionar un nombre que identifique claramente el producto" -#: core/models.py:506 +#: core/models.py:514 msgid "product name" msgstr "Nombre del producto" -#: core/models.py:511 core/models.py:786 +#: core/models.py:519 core/models.py:794 msgid "add a detailed description of the product" msgstr "Añada una descripción detallada del producto" -#: core/models.py:512 +#: core/models.py:520 msgid "product description" msgstr "Descripción del producto" -#: core/models.py:519 +#: core/models.py:527 msgid "part number for this product" msgstr "Número de pieza de este producto" -#: core/models.py:520 +#: core/models.py:528 msgid "part number" msgstr "Número de pieza" -#: core/models.py:539 +#: core/models.py:547 msgid "stock keeping unit for this product" msgstr "Unidad de Mantenimiento de Existencias para este producto" -#: core/models.py:613 +#: core/models.py:621 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 +1736,69 @@ msgstr "" "enteros, flotantes, booleanos, matrices y objetos. Esto permite una " "estructuración dinámica y flexible de los datos." -#: core/models.py:625 +#: core/models.py:633 msgid "category of this attribute" msgstr "Categoría de este atributo" -#: core/models.py:633 +#: core/models.py:641 msgid "group of this attribute" msgstr "Grupo de este atributo" -#: core/models.py:639 +#: core/models.py:647 msgid "string" msgstr "Cadena" -#: core/models.py:640 +#: core/models.py:648 msgid "integer" msgstr "Entero" -#: core/models.py:641 +#: core/models.py:649 msgid "float" msgstr "Flotador" -#: core/models.py:642 +#: core/models.py:650 msgid "boolean" msgstr "Booleano" -#: core/models.py:643 +#: core/models.py:651 msgid "array" msgstr "Matriz" -#: core/models.py:644 +#: core/models.py:652 msgid "object" msgstr "Objeto" -#: core/models.py:646 +#: core/models.py:654 msgid "type of the attribute's value" msgstr "Tipo del valor del atributo" -#: core/models.py:647 +#: core/models.py:655 msgid "value type" msgstr "Tipo de valor" -#: core/models.py:652 +#: core/models.py:660 msgid "name of this attribute" msgstr "Nombre de este atributo" -#: core/models.py:653 +#: core/models.py:661 msgid "attribute's name" msgstr "Nombre del atributo" -#: core/models.py:659 +#: core/models.py:667 msgid "is filterable" msgstr "es filtrable" -#: core/models.py:660 +#: core/models.py:668 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:671 core/models.py:689 +#: core/models.py:679 core/models.py:697 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Atributo" -#: core/models.py:677 +#: core/models.py:685 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 +1808,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:688 +#: core/models.py:696 msgid "attribute of this value" msgstr "Atributo de este valor" -#: core/models.py:696 +#: core/models.py:704 msgid "the specific product associated with this attribute's value" msgstr "El producto específico asociado al valor de este atributo" -#: core/models.py:702 +#: core/models.py:710 msgid "the specific value for this attribute" msgstr "El valor específico de este atributo" -#: core/models.py:715 +#: core/models.py:723 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 +1834,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:726 +#: core/models.py:734 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:727 +#: core/models.py:735 msgid "image alt text" msgstr "Texto alternativo de la imagen" -#: core/models.py:730 +#: core/models.py:738 msgid "upload the image file for this product" msgstr "Cargar el archivo de imagen para este producto" -#: core/models.py:731 core/models.py:756 +#: core/models.py:739 core/models.py:764 msgid "product image" msgstr "Imagen del producto" -#: core/models.py:737 +#: core/models.py:745 msgid "determines the order in which images are displayed" msgstr "Determina el orden de visualización de las imágenes" -#: core/models.py:738 +#: core/models.py:746 msgid "display priority" msgstr "Prioridad de visualización" -#: core/models.py:743 +#: core/models.py:751 msgid "the product that this image represents" msgstr "El producto que representa esta imagen" -#: core/models.py:757 +#: core/models.py:765 msgid "product images" msgstr "Imágenes de productos" -#: core/models.py:762 +#: core/models.py:770 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 +1883,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:774 +#: core/models.py:782 msgid "percentage discount for the selected products" msgstr "Porcentaje de descuento para los productos seleccionados" -#: core/models.py:775 +#: core/models.py:783 msgid "discount percentage" msgstr "Porcentaje de descuento" -#: core/models.py:780 +#: core/models.py:788 msgid "provide a unique name for this promotion" msgstr "Proporcione un nombre único para esta promoción" -#: core/models.py:781 +#: core/models.py:789 msgid "promotion name" msgstr "Nombre de la promoción" -#: core/models.py:787 +#: core/models.py:795 msgid "promotion description" msgstr "Descripción de la promoción" -#: core/models.py:792 +#: core/models.py:800 msgid "select which products are included in this promotion" msgstr "Seleccione los productos incluidos en esta promoción" -#: core/models.py:793 +#: core/models.py:801 msgid "included products" msgstr "Productos incluidos" -#: core/models.py:797 +#: core/models.py:805 msgid "promotion" msgstr "Promoción" -#: core/models.py:808 +#: core/models.py:816 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 +1928,23 @@ msgstr "" "productos, así como soportar operaciones para añadir y eliminar múltiples " "productos a la vez." -#: core/models.py:820 +#: core/models.py:828 msgid "products that the user has marked as wanted" msgstr "Productos que el usuario ha marcado como deseados" -#: core/models.py:828 +#: core/models.py:836 msgid "user who owns this wishlist" msgstr "Usuario propietario de esta lista de deseos" -#: core/models.py:829 +#: core/models.py:837 msgid "wishlist owner" msgstr "Propietario de Wishlist" -#: core/models.py:837 +#: core/models.py:845 msgid "wishlist" msgstr "Lista de deseos" -#: core/models.py:879 +#: core/models.py:887 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1948,19 +1960,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:892 +#: core/models.py:900 msgid "documentary" msgstr "Documental" -#: core/models.py:893 +#: core/models.py:901 msgid "documentaries" msgstr "Documentaries" -#: core/models.py:903 +#: core/models.py:911 msgid "unresolved" msgstr "Sin resolver" -#: core/models.py:908 +#: core/models.py:916 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1982,59 +1994,59 @@ msgstr "" " clase también permite asociar una dirección a un usuario, facilitando el " "manejo personalizado de los datos." -#: core/models.py:923 +#: core/models.py:931 msgid "address line for the customer" msgstr "Dirección del cliente" -#: core/models.py:924 +#: core/models.py:932 msgid "address line" msgstr "Dirección" -#: core/models.py:926 +#: core/models.py:934 msgid "street" msgstr "Calle" -#: core/models.py:927 +#: core/models.py:935 msgid "district" msgstr "Distrito" -#: core/models.py:928 +#: core/models.py:936 msgid "city" msgstr "Ciudad" -#: core/models.py:929 +#: core/models.py:937 msgid "region" msgstr "Región" -#: core/models.py:930 +#: core/models.py:938 msgid "postal code" msgstr "Promo code" -#: core/models.py:931 +#: core/models.py:939 msgid "country" msgstr "País" -#: core/models.py:938 +#: core/models.py:946 msgid "geolocation point: (longitude, latitude)" msgstr "Geolocalización Punto(Longitud, Latitud)" -#: core/models.py:941 +#: core/models.py:949 msgid "full JSON response from geocoder for this address" msgstr "Respuesta JSON completa del geocodificador para esta dirección" -#: core/models.py:946 +#: core/models.py:954 msgid "stored JSON response from the geocoding service" msgstr "Respuesta JSON almacenada del servicio de geocodificación" -#: core/models.py:954 +#: core/models.py:962 msgid "address" msgstr "Dirección" -#: core/models.py:955 +#: core/models.py:963 msgid "addresses" msgstr "Direcciones" -#: core/models.py:967 +#: core/models.py:975 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 +2063,72 @@ msgstr "" "para validar y aplicar el código promocional a un pedido garantizando el " "cumplimiento de las restricciones." -#: core/models.py:981 +#: core/models.py:989 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:982 +#: core/models.py:990 msgid "promo code identifier" msgstr "Promo code identifier" -#: core/models.py:989 +#: core/models.py:997 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:990 +#: core/models.py:998 msgid "fixed discount amount" msgstr "Importe fijo del descuento" -#: core/models.py:996 +#: core/models.py:1004 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:997 +#: core/models.py:1005 msgid "percentage discount" msgstr "Porcentaje de descuento" -#: core/models.py:1002 +#: core/models.py:1010 msgid "timestamp when the promocode expires" msgstr "Fecha de caducidad del promocode" -#: core/models.py:1003 +#: core/models.py:1011 msgid "end validity time" msgstr "Hora de fin de validez" -#: core/models.py:1008 +#: core/models.py:1016 msgid "timestamp from which this promocode is valid" msgstr "Fecha a partir de la cual es válido este promocode" -#: core/models.py:1009 +#: core/models.py:1017 msgid "start validity time" msgstr "Hora de inicio de validez" -#: core/models.py:1014 +#: core/models.py:1022 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:1015 +#: core/models.py:1023 msgid "usage timestamp" msgstr "Marca de tiempo de uso" -#: core/models.py:1020 +#: core/models.py:1028 msgid "user assigned to this promocode if applicable" msgstr "Usuario asignado a este promocode si procede" -#: core/models.py:1021 +#: core/models.py:1029 msgid "assigned user" msgstr "Usuario asignado" -#: core/models.py:1028 +#: core/models.py:1036 msgid "promo code" msgstr "Promo code" -#: core/models.py:1029 +#: core/models.py:1037 msgid "promo codes" msgstr "Promo codes" -#: core/models.py:1044 +#: core/models.py:1052 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2124,16 +2136,16 @@ msgstr "" "Sólo debe definirse un tipo de descuento (importe o porcentaje), pero no " "ambos ni ninguno." -#: core/models.py:1065 +#: core/models.py:1073 msgid "promocode already used" msgstr "El código promocional ya ha sido utilizado" -#: core/models.py:1081 +#: core/models.py:1089 #, 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:1090 +#: core/models.py:1098 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 +2162,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:1107 +#: core/models.py:1115 msgid "the billing address used for this order" msgstr "La dirección de facturación utilizada para este pedido" -#: core/models.py:1115 +#: core/models.py:1123 msgid "optional promo code applied to this order" msgstr "Código promocional opcional aplicado a este pedido" -#: core/models.py:1116 +#: core/models.py:1124 msgid "applied promo code" msgstr "Código promocional aplicado" -#: core/models.py:1124 +#: core/models.py:1132 msgid "the shipping address used for this order" msgstr "La dirección de envío utilizada para este pedido" -#: core/models.py:1125 +#: core/models.py:1133 msgid "shipping address" msgstr "Dirección de envío" -#: core/models.py:1131 +#: core/models.py:1139 msgid "current status of the order in its lifecycle" msgstr "Estado actual del pedido en su ciclo de vida" -#: core/models.py:1132 +#: core/models.py:1140 msgid "order status" msgstr "Estado del pedido" -#: core/models.py:1137 core/models.py:1618 +#: core/models.py:1145 core/models.py:1626 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:1143 +#: core/models.py:1151 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:1149 +#: core/models.py:1157 msgid "the user who placed the order" msgstr "El usuario que realizó el pedido" -#: core/models.py:1150 +#: core/models.py:1158 msgid "user" msgstr "Usuario" -#: core/models.py:1156 +#: core/models.py:1164 msgid "the timestamp when the order was finalized" msgstr "Fecha de finalización de la orden" -#: core/models.py:1157 +#: core/models.py:1165 msgid "buy time" msgstr "Comprar tiempo" -#: core/models.py:1164 +#: core/models.py:1172 msgid "a human-readable identifier for the order" msgstr "Un identificador legible por el ser humano para la orden" -#: core/models.py:1165 +#: core/models.py:1173 msgid "human readable id" msgstr "ID legible por humanos" -#: core/models.py:1171 +#: core/models.py:1179 msgid "order" msgstr "Pida" -#: core/models.py:1209 +#: core/models.py:1217 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:1249 +#: core/models.py:1257 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:1254 +#: core/models.py:1262 msgid "you cannot add inactive products to order" msgstr "No se pueden añadir productos inactivos al pedido" -#: core/models.py:1271 +#: core/models.py:1279 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:1293 core/models.py:1318 core/models.py:1326 +#: core/models.py:1301 core/models.py:1326 core/models.py:1334 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:1314 +#: core/models.py:1322 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} ¡no existe con la consulta <{query}>!" -#: core/models.py:1346 +#: core/models.py:1354 msgid "promocode does not exist" msgstr "Promocode no existe" -#: core/models.py:1352 +#: core/models.py:1360 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:1371 +#: core/models.py:1379 msgid "address does not exist" msgstr "La dirección no existe" -#: core/models.py:1392 core/models.py:1461 +#: core/models.py:1400 core/models.py:1469 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:1395 core/models.py:1457 +#: core/models.py:1403 core/models.py:1465 msgid "invalid force value" msgstr "Valor de fuerza no válido" -#: core/models.py:1401 core/models.py:1464 +#: core/models.py:1409 core/models.py:1472 msgid "you cannot purchase an empty order!" msgstr "No se puede comprar un pedido vacío." -#: core/models.py:1420 +#: core/models.py:1428 msgid "you cannot buy an order without a user" msgstr "No se puede comprar un pedido sin un usuario." -#: core/models.py:1434 +#: core/models.py:1442 msgid "a user without a balance cannot buy with balance" msgstr "¡Un usuario sin saldo no puede comprar con saldo!" -#: core/models.py:1439 +#: core/models.py:1447 msgid "insufficient funds to complete the order" msgstr "Fondos insuficientes para completar el pedido" -#: core/models.py:1473 +#: core/models.py:1481 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2288,14 +2300,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:1482 +#: core/models.py:1490 #, 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:1591 +#: core/models.py:1599 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2318,110 +2330,110 @@ msgstr "" "productos digitales. El modelo se integra con los modelos Pedido y Producto " "y almacena una referencia a ellos." -#: core/models.py:1606 +#: core/models.py:1614 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:1607 +#: core/models.py:1615 msgid "purchase price at order time" msgstr "Precio de compra en el momento del pedido" -#: core/models.py:1612 +#: core/models.py:1620 msgid "internal comments for admins about this ordered product" msgstr "" "Comentarios internos para los administradores sobre este producto solicitado" -#: core/models.py:1613 +#: core/models.py:1621 msgid "internal comments" msgstr "Comentarios internos" -#: core/models.py:1619 +#: core/models.py:1627 msgid "user notifications" msgstr "Notificaciones a los usuarios" -#: core/models.py:1624 +#: core/models.py:1632 msgid "json representation of this item's attributes" msgstr "Representación JSON de los atributos de este elemento" -#: core/models.py:1625 +#: core/models.py:1633 msgid "ordered product attributes" msgstr "Atributos ordenados del producto" -#: core/models.py:1630 +#: core/models.py:1638 msgid "reference to the parent order that contains this product" msgstr "Referencia al pedido principal que contiene este producto" -#: core/models.py:1631 +#: core/models.py:1639 msgid "parent order" msgstr "Orden de los padres" -#: core/models.py:1640 +#: core/models.py:1648 msgid "the specific product associated with this order line" msgstr "El producto específico asociado a esta línea de pedido" -#: core/models.py:1647 +#: core/models.py:1655 msgid "quantity of this specific product in the order" msgstr "Cantidad de este producto específico en el pedido" -#: core/models.py:1648 +#: core/models.py:1656 msgid "product quantity" msgstr "Cantidad de productos" -#: core/models.py:1655 +#: core/models.py:1663 msgid "current status of this product in the order" msgstr "Estado actual de este producto en el pedido" -#: core/models.py:1656 +#: core/models.py:1664 msgid "product line status" msgstr "Estado de la línea de productos" -#: core/models.py:1719 +#: core/models.py:1727 msgid "order product must have an order" msgstr "El pedido-producto debe tener un pedido asociado." -#: core/models.py:1721 +#: core/models.py:1729 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Acción incorrecta especificada para la retroalimentación: ¡{action}!" -#: core/models.py:1735 +#: core/models.py:1743 msgid "you cannot feedback an order which is not received" msgstr "no se puede comentar un pedido no recibido" -#: core/models.py:1741 +#: core/models.py:1749 msgid "name" msgstr "Nombre" -#: core/models.py:1742 +#: core/models.py:1750 msgid "URL of the integration" msgstr "URL de la integración" -#: core/models.py:1743 +#: core/models.py:1751 msgid "authentication credentials" msgstr "Credenciales de autenticación" -#: core/models.py:1765 +#: core/models.py:1773 msgid "you can only have one default CRM provider" msgstr "Sólo puede tener un proveedor de CRM por defecto" -#: core/models.py:1775 +#: core/models.py:1783 msgid "CRM" msgstr "CRM" -#: core/models.py:1776 +#: core/models.py:1784 msgid "CRMs" msgstr "CRMs" -#: core/models.py:1788 +#: core/models.py:1796 msgid "order CRM link" msgstr "Enlace CRM del pedido" -#: core/models.py:1789 +#: core/models.py:1797 msgid "orders CRM links" msgstr "Enlaces CRM de los pedidos" -#: core/models.py:1794 +#: core/models.py:1802 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2438,15 +2450,15 @@ msgstr "" " para descargar el activo cuando el pedido asociado está en estado " "completado." -#: core/models.py:1808 +#: core/models.py:1816 msgid "download" msgstr "Descargar" -#: core/models.py:1809 +#: core/models.py:1817 msgid "downloads" msgstr "Descargas" -#: core/models.py:1823 +#: core/models.py:1831 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2462,30 +2474,30 @@ msgstr "" "clase utiliza campos de base de datos para modelar y gestionar eficazmente " "los datos de los comentarios." -#: core/models.py:1835 +#: core/models.py:1843 msgid "user-provided comments about their experience with the product" msgstr "Comentarios de los usuarios sobre su experiencia con el producto" -#: core/models.py:1836 +#: core/models.py:1844 msgid "feedback comments" msgstr "Comentarios" -#: core/models.py:1843 +#: core/models.py:1851 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:1844 +#: core/models.py:1852 msgid "related order product" msgstr "Producto relacionado con el pedido" -#: core/models.py:1849 +#: core/models.py:1857 msgid "user-assigned rating for the product" msgstr "Valoración del producto asignada por el usuario" -#: core/models.py:1850 +#: core/models.py:1858 msgid "product rating" msgstr "Valoración del producto" @@ -2703,22 +2715,22 @@ msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "" "Valor de tiempo de espera no válido, debe estar entre 0 y 216000 segundos." -#: core/utils/emailing.py:25 +#: core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | contacto iniciado" -#: core/utils/emailing.py:74 +#: core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Confirmación de pedido" -#: core/utils/emailing.py:109 +#: core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Pedido entregado" -#: core/utils/emailing.py:197 +#: core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | promocode granted" @@ -2972,7 +2984,7 @@ msgstr "" "objetos Feedback accesibles. Extiende la base `EvibesViewSet` y hace uso del" " sistema de filtrado de Django para la consulta de datos." -#: core/viewsets.py:593 +#: core/viewsets.py:594 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2991,7 +3003,7 @@ msgstr "" "acción específica que se esté realizando y aplica los permisos " "correspondientes al interactuar con los datos del pedido." -#: core/viewsets.py:782 +#: core/viewsets.py:784 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3006,13 +3018,13 @@ msgstr "" "Además, proporciona una acción detallada para gestionar los comentarios " "sobre las instancias de OrderProduct." -#: core/viewsets.py:833 +#: core/viewsets.py:835 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 +#: core/viewsets.py:847 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3020,16 +3032,16 @@ msgstr "" "Gestiona la recuperación y el manejo de instancias de PromoCode a través de " "varias acciones de la API." -#: core/viewsets.py:866 +#: core/viewsets.py:868 msgid "Represents a view set for managing promotions. " msgstr "Representa un conjunto de vistas para gestionar promociones." -#: core/viewsets.py:878 +#: core/viewsets.py:880 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 +#: core/viewsets.py:894 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3048,7 +3060,7 @@ msgstr "" "integrados para garantizar que los usuarios sólo puedan gestionar sus " "propias listas de deseos a menos que se concedan permisos explícitos." -#: core/viewsets.py:1007 +#: core/viewsets.py:1009 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3062,12 +3074,12 @@ msgstr "" "comportamientos especializados para diferentes métodos HTTP, anulaciones del" " serializador y gestión de permisos basada en el contexto de la solicitud." -#: core/viewsets.py:1074 +#: core/viewsets.py:1076 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Error de geocodificación: {e}" -#: core/viewsets.py:1081 +#: core/viewsets.py:1083 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/fa_IR/LC_MESSAGES/django.po b/core/locale/fa_IR/LC_MESSAGES/django.po index aeb64f8c..5e5fbc61 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -49,82 +49,86 @@ msgstr "" msgid "when the object was last modified" msgstr "" -#: core/admin.py:63 +#: core/admin.py:68 msgid "translations" msgstr "" -#: core/admin.py:67 +#: core/admin.py:72 msgid "general" msgstr "" -#: core/admin.py:69 +#: core/admin.py:74 msgid "relations" msgstr "" -#: core/admin.py:87 -msgid "metadata" +#: core/admin.py:76 +msgid "additional info" msgstr "" #: core/admin.py:94 +msgid "metadata" +msgstr "" + +#: core/admin.py:101 msgid "timestamps" msgstr "" -#: core/admin.py:109 +#: core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "" -#: core/admin.py:114 +#: core/admin.py:121 msgid "selected items have been activated." msgstr "" -#: core/admin.py:120 +#: core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "" -#: core/admin.py:125 +#: core/admin.py:132 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:701 core/models.py:709 +#: core/admin.py:144 core/graphene/object_types.py:609 +#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 msgid "attribute value" msgstr "" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 +#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718 msgid "attribute values" msgstr "" -#: core/admin.py:146 +#: core/admin.py:153 msgid "image" msgstr "" -#: core/admin.py:147 core/graphene/object_types.py:501 +#: core/admin.py:154 core/graphene/object_types.py:501 msgid "images" msgstr "" -#: core/admin.py:155 core/models.py:459 +#: core/admin.py:162 core/models.py:467 msgid "stock" msgstr "" -#: core/admin.py:156 core/graphene/object_types.py:663 +#: core/admin.py:163 core/graphene/object_types.py:663 msgid "stocks" msgstr "" -#: core/admin.py:166 core/models.py:1667 +#: core/admin.py:173 core/models.py:1675 msgid "order product" msgstr "" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 msgid "order products" msgstr "" -#: core/admin.py:180 core/admin.py:181 +#: core/admin.py:187 core/admin.py:188 msgid "children" msgstr "" -#: core/admin.py:566 +#: core/admin.py:940 msgid "Config" msgstr "" @@ -678,23 +682,23 @@ msgstr "" msgid "add or remove feedback on an order–product relation" msgstr "" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 msgid "no search term provided." msgstr "" -#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +#: core/filters.py:65 core/filters.py:399 core/filters.py:526 msgid "Search" msgstr "" -#: core/filters.py:66 core/filters.py:554 core/filters.py:583 +#: core/filters.py:66 core/filters.py:556 core/filters.py:585 msgid "UUID" msgstr "" -#: core/filters.py:67 core/filters.py:399 core/filters.py:526 +#: core/filters.py:67 core/filters.py:401 core/filters.py:528 msgid "Name" msgstr "" -#: core/filters.py:68 core/filters.py:528 +#: core/filters.py:68 core/filters.py:530 msgid "Categories" msgstr "" @@ -702,7 +706,7 @@ msgstr "" msgid "Categories Slugs" msgstr "" -#: core/filters.py:71 core/filters.py:407 +#: core/filters.py:71 core/filters.py:409 msgid "Tags" msgstr "" @@ -730,8 +734,8 @@ msgstr "" msgid "Quantity" msgstr "" -#: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:301 core/models.py:383 core/models.py:536 +#: core/filters.py:78 core/filters.py:403 core/filters.py:529 +#: core/models.py:309 core/models.py:391 core/models.py:544 msgid "Slug" msgstr "" @@ -747,7 +751,7 @@ msgstr "" msgid "Include personal ordered" msgstr "" -#: core/filters.py:85 core/models.py:540 +#: core/filters.py:85 core/models.py:548 msgid "SKU" msgstr "" @@ -755,48 +759,48 @@ msgstr "" msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" -#: core/filters.py:324 +#: core/filters.py:326 msgid "Search (ID, product name or part number)" msgstr "" -#: core/filters.py:327 +#: core/filters.py:329 msgid "Bought after (inclusive)" msgstr "" -#: core/filters.py:328 +#: core/filters.py:330 msgid "Bought before (inclusive)" msgstr "" -#: core/filters.py:331 core/filters.py:378 core/filters.py:585 +#: core/filters.py:333 core/filters.py:380 core/filters.py:587 msgid "User email" msgstr "" -#: core/filters.py:332 core/filters.py:379 core/filters.py:563 -#: core/filters.py:584 +#: core/filters.py:334 core/filters.py:381 core/filters.py:565 +#: core/filters.py:586 msgid "User UUID" msgstr "" -#: core/filters.py:333 +#: core/filters.py:335 msgid "Status" msgstr "" -#: core/filters.py:337 +#: core/filters.py:339 msgid "Human Readable ID" msgstr "" -#: core/filters.py:400 +#: core/filters.py:402 msgid "Parent" msgstr "" -#: core/filters.py:404 +#: core/filters.py:406 msgid "Whole category(has at least 1 product or not)" msgstr "" -#: core/filters.py:408 +#: core/filters.py:410 msgid "Level" msgstr "" -#: core/filters.py:558 +#: core/filters.py:560 msgid "Product UUID" msgstr "" @@ -851,7 +855,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:679 +#: core/graphene/mutations.py:527 core/viewsets.py:680 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" @@ -925,9 +929,9 @@ msgstr "" msgid "original address string provided by the user" msgstr "" -#: 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 +#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 +#: core/models.py:1289 core/models.py:1318 core/models.py:1343 +#: core/viewsets.py:683 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" @@ -941,8 +945,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:672 core/models.py:1144 -#: core/models.py:1744 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 +#: core/models.py:1752 msgid "attributes" msgstr "" @@ -955,11 +959,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:326 core/models.py:626 +#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 msgid "categories" msgstr "" -#: core/graphene/object_types.py:124 core/models.py:397 +#: core/graphene/object_types.py:124 core/models.py:405 msgid "brands" msgstr "" @@ -968,7 +972,7 @@ msgid "category image url" msgstr "" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:263 +#: core/models.py:271 msgid "markup percentage" msgstr "" @@ -988,7 +992,7 @@ msgstr "" msgid "products in this category" msgstr "" -#: core/graphene/object_types.py:351 core/models.py:169 +#: core/graphene/object_types.py:351 core/models.py:177 msgid "vendors" msgstr "" @@ -1013,7 +1017,7 @@ msgid "represents feedback from a user." msgstr "" #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1138 +#: core/models.py:1146 msgid "notifications" msgstr "" @@ -1021,7 +1025,7 @@ msgstr "" msgid "download url for this order product if applicable" msgstr "" -#: core/graphene/object_types.py:400 core/models.py:1860 +#: core/graphene/object_types.py:400 core/models.py:1868 msgid "feedback" msgstr "" @@ -1029,7 +1033,7 @@ msgstr "" msgid "a list of order products in this order" msgstr "" -#: core/graphene/object_types.py:436 core/models.py:1108 +#: core/graphene/object_types.py:436 core/models.py:1116 msgid "billing address" msgstr "" @@ -1055,7 +1059,7 @@ msgstr "" msgid "transactions for this order" msgstr "" -#: core/graphene/object_types.py:465 core/models.py:1172 +#: core/graphene/object_types.py:465 core/models.py:1180 msgid "orders" msgstr "" @@ -1067,19 +1071,19 @@ msgstr "" msgid "product's images" msgstr "" -#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 +#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 msgid "category" msgstr "" -#: core/graphene/object_types.py:502 core/models.py:1861 +#: core/graphene/object_types.py:502 core/models.py:1869 msgid "feedbacks" msgstr "" -#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 +#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 msgid "brand" msgstr "" -#: core/graphene/object_types.py:504 core/models.py:101 +#: core/graphene/object_types.py:504 core/models.py:102 msgid "attribute groups" msgstr "" @@ -1107,7 +1111,7 @@ msgstr "" msgid "only available for personal orders" msgstr "" -#: core/graphene/object_types.py:534 core/models.py:550 +#: core/graphene/object_types.py:534 core/models.py:558 msgid "products" msgstr "" @@ -1119,15 +1123,15 @@ msgstr "" msgid "products on sale" msgstr "" -#: core/graphene/object_types.py:651 core/models.py:798 +#: core/graphene/object_types.py:651 core/models.py:806 msgid "promotions" msgstr "" -#: core/graphene/object_types.py:655 core/models.py:168 +#: core/graphene/object_types.py:655 core/models.py:176 msgid "vendor" msgstr "" -#: core/graphene/object_types.py:656 core/models.py:549 +#: core/graphene/object_types.py:656 core/models.py:557 #: 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 +1139,11 @@ msgstr "" msgid "product" msgstr "" -#: core/graphene/object_types.py:667 core/models.py:821 +#: core/graphene/object_types.py:667 core/models.py:829 msgid "wishlisted products" msgstr "" -#: core/graphene/object_types.py:673 core/models.py:838 +#: core/graphene/object_types.py:673 core/models.py:846 msgid "wishlists" msgstr "" @@ -1147,7 +1151,7 @@ msgstr "" msgid "tagged products" msgstr "" -#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 +#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 msgid "product tags" msgstr "" @@ -1232,7 +1236,7 @@ msgstr "" msgid "posts search results" msgstr "" -#: core/models.py:70 +#: core/models.py:71 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1240,23 +1244,23 @@ msgid "" "categorizing and managing attributes more effectively in acomplex system." msgstr "" -#: core/models.py:86 +#: core/models.py:87 msgid "parent of this group" msgstr "" -#: core/models.py:87 +#: core/models.py:88 msgid "parent attribute group" msgstr "" -#: core/models.py:91 core/models.py:92 +#: core/models.py:92 core/models.py:93 msgid "attribute group's name" msgstr "" -#: core/models.py:100 core/models.py:634 +#: core/models.py:101 core/models.py:642 msgid "attribute group" msgstr "" -#: core/models.py:106 +#: core/models.py:107 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1267,31 +1271,39 @@ msgid "" "use in systems that interact with third-party vendors." msgstr "" -#: core/models.py:119 +#: core/models.py:120 msgid "stores credentials and endpoints required for vendor communication" msgstr "" -#: core/models.py:120 +#: core/models.py:121 msgid "authentication info" msgstr "" -#: core/models.py:125 +#: core/models.py:126 msgid "define the markup for products retrieved from this vendor" msgstr "" -#: core/models.py:126 +#: core/models.py:127 msgid "vendor markup percentage" msgstr "" -#: core/models.py:130 +#: core/models.py:131 msgid "name of this vendor" msgstr "" -#: core/models.py:131 +#: core/models.py:132 msgid "vendor name" msgstr "" -#: core/models.py:177 +#: core/models.py:143 +msgid "response file" +msgstr "" + +#: core/models.py:144 +msgid "vendor's last processing response" +msgstr "" + +#: core/models.py:185 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1300,42 +1312,42 @@ msgid "" "metadata customization for administrative purposes." msgstr "" -#: core/models.py:189 core/models.py:220 +#: core/models.py:197 core/models.py:228 msgid "internal tag identifier for the product tag" msgstr "" -#: core/models.py:190 core/models.py:221 +#: core/models.py:198 core/models.py:229 msgid "tag name" msgstr "" -#: core/models.py:194 core/models.py:225 +#: core/models.py:202 core/models.py:233 msgid "user-friendly name for the product tag" msgstr "" -#: core/models.py:195 core/models.py:226 +#: core/models.py:203 core/models.py:234 msgid "tag display name" msgstr "" -#: core/models.py:203 +#: core/models.py:211 msgid "product tag" msgstr "" -#: core/models.py:209 +#: core/models.py:217 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:234 +#: core/models.py:242 msgid "category tag" msgstr "" -#: core/models.py:235 core/models.py:307 +#: core/models.py:243 core/models.py:315 msgid "category tags" msgstr "" -#: core/models.py:240 +#: core/models.py:248 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1348,51 +1360,51 @@ msgid "" "priority." msgstr "" -#: core/models.py:254 +#: core/models.py:262 msgid "upload an image representing this category" msgstr "" -#: core/models.py:257 +#: core/models.py:265 msgid "category image" msgstr "" -#: core/models.py:262 +#: core/models.py:270 msgid "define a markup percentage for products in this category" msgstr "" -#: core/models.py:271 +#: core/models.py:279 msgid "parent of this category to form a hierarchical structure" msgstr "" -#: core/models.py:272 +#: core/models.py:280 msgid "parent category" msgstr "" -#: core/models.py:277 +#: core/models.py:285 msgid "category name" msgstr "" -#: core/models.py:278 +#: core/models.py:286 msgid "provide a name for this category" msgstr "" -#: core/models.py:285 +#: core/models.py:293 msgid "add a detailed description for this category" msgstr "" -#: core/models.py:286 +#: core/models.py:294 msgid "category description" msgstr "" -#: core/models.py:306 +#: core/models.py:314 msgid "tags that help describe or group this category" msgstr "" -#: core/models.py:313 core/models.py:389 +#: core/models.py:321 core/models.py:397 msgid "priority" msgstr "" -#: core/models.py:332 +#: core/models.py:340 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 +1412,47 @@ msgid "" "organization and representation of brand-related data within the application." msgstr "" -#: core/models.py:342 +#: core/models.py:350 msgid "name of this brand" msgstr "" -#: core/models.py:343 +#: core/models.py:351 msgid "brand name" msgstr "" -#: core/models.py:350 +#: core/models.py:358 msgid "upload a logo representing this brand" msgstr "" -#: core/models.py:352 +#: core/models.py:360 msgid "brand small image" msgstr "" -#: core/models.py:358 +#: core/models.py:366 msgid "upload a big logo representing this brand" msgstr "" -#: core/models.py:360 +#: core/models.py:368 msgid "brand big image" msgstr "" -#: core/models.py:365 +#: core/models.py:373 msgid "add a detailed description of the brand" msgstr "" -#: core/models.py:366 +#: core/models.py:374 msgid "brand description" msgstr "" -#: core/models.py:371 +#: core/models.py:379 msgid "optional categories that this brand is associated with" msgstr "" -#: core/models.py:372 +#: core/models.py:380 msgid "associated categories" msgstr "" -#: core/models.py:402 +#: core/models.py:410 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 +1462,67 @@ msgid "" "from various vendors." msgstr "" -#: core/models.py:414 +#: core/models.py:422 msgid "the vendor supplying this product stock" msgstr "" -#: core/models.py:415 +#: core/models.py:423 msgid "associated vendor" msgstr "" -#: core/models.py:419 +#: core/models.py:427 msgid "final price to the customer after markups" msgstr "" -#: core/models.py:420 +#: core/models.py:428 msgid "selling price" msgstr "" -#: core/models.py:425 +#: core/models.py:433 msgid "the product associated with this stock entry" msgstr "" -#: core/models.py:426 core/models.py:697 core/models.py:744 core/models.py:1641 +#: core/models.py:434 core/models.py:705 core/models.py:752 core/models.py:1649 msgid "associated product" msgstr "" -#: core/models.py:433 +#: core/models.py:441 msgid "the price paid to the vendor for this product" msgstr "" -#: core/models.py:434 +#: core/models.py:442 msgid "vendor purchase price" msgstr "" -#: core/models.py:438 +#: core/models.py:446 msgid "available quantity of the product in stock" msgstr "" -#: core/models.py:439 +#: core/models.py:447 msgid "quantity in stock" msgstr "" -#: core/models.py:443 +#: core/models.py:451 msgid "vendor-assigned SKU for identifying the product" msgstr "" -#: core/models.py:444 +#: core/models.py:452 msgid "vendor sku" msgstr "" -#: core/models.py:450 +#: core/models.py:458 msgid "digital file associated with this stock if applicable" msgstr "" -#: core/models.py:451 +#: core/models.py:459 msgid "digital file" msgstr "" -#: core/models.py:460 +#: core/models.py:468 msgid "stock entries" msgstr "" -#: core/models.py:465 +#: core/models.py:473 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1522,55 +1534,55 @@ msgid "" "product data and its associated information within an application." msgstr "" -#: core/models.py:478 +#: core/models.py:486 msgid "category this product belongs to" msgstr "" -#: core/models.py:487 +#: core/models.py:495 msgid "optionally associate this product with a brand" msgstr "" -#: core/models.py:493 +#: core/models.py:501 msgid "tags that help describe or group this product" msgstr "" -#: core/models.py:498 +#: core/models.py:506 msgid "indicates whether this product is digitally delivered" msgstr "" -#: core/models.py:499 +#: core/models.py:507 msgid "is product digital" msgstr "" -#: core/models.py:505 +#: core/models.py:513 msgid "provide a clear identifying name for the product" msgstr "" -#: core/models.py:506 +#: core/models.py:514 msgid "product name" msgstr "" -#: core/models.py:511 core/models.py:786 +#: core/models.py:519 core/models.py:794 msgid "add a detailed description of the product" msgstr "" -#: core/models.py:512 +#: core/models.py:520 msgid "product description" msgstr "" -#: core/models.py:519 +#: core/models.py:527 msgid "part number for this product" msgstr "" -#: core/models.py:520 +#: core/models.py:528 msgid "part number" msgstr "" -#: core/models.py:539 +#: core/models.py:547 msgid "stock keeping unit for this product" msgstr "" -#: core/models.py:613 +#: core/models.py:621 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 +1592,87 @@ msgid "" "for dynamic and flexible data structuring." msgstr "" -#: core/models.py:625 +#: core/models.py:633 msgid "category of this attribute" msgstr "" -#: core/models.py:633 +#: core/models.py:641 msgid "group of this attribute" msgstr "" -#: core/models.py:639 +#: core/models.py:647 msgid "string" msgstr "" -#: core/models.py:640 +#: core/models.py:648 msgid "integer" msgstr "" -#: core/models.py:641 +#: core/models.py:649 msgid "float" msgstr "" -#: core/models.py:642 +#: core/models.py:650 msgid "boolean" msgstr "" -#: core/models.py:643 +#: core/models.py:651 msgid "array" msgstr "" -#: core/models.py:644 +#: core/models.py:652 msgid "object" msgstr "" -#: core/models.py:646 +#: core/models.py:654 msgid "type of the attribute's value" msgstr "" -#: core/models.py:647 +#: core/models.py:655 msgid "value type" msgstr "" -#: core/models.py:652 +#: core/models.py:660 msgid "name of this attribute" msgstr "" -#: core/models.py:653 +#: core/models.py:661 msgid "attribute's name" msgstr "" -#: core/models.py:659 +#: core/models.py:667 msgid "is filterable" msgstr "" -#: core/models.py:660 +#: core/models.py:668 msgid "designates whether this attribute can be used for filtering or not" msgstr "" -#: core/models.py:671 core/models.py:689 +#: core/models.py:679 core/models.py:697 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "" -#: core/models.py:677 +#: core/models.py:685 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:688 +#: core/models.py:696 msgid "attribute of this value" msgstr "" -#: core/models.py:696 +#: core/models.py:704 msgid "the specific product associated with this attribute's value" msgstr "" -#: core/models.py:702 +#: core/models.py:710 msgid "the specific value for this attribute" msgstr "" -#: core/models.py:715 +#: core/models.py:723 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 +1681,39 @@ msgid "" "with alternative text for the images." msgstr "" -#: core/models.py:726 +#: core/models.py:734 msgid "provide alternative text for the image for accessibility" msgstr "" -#: core/models.py:727 +#: core/models.py:735 msgid "image alt text" msgstr "" -#: core/models.py:730 +#: core/models.py:738 msgid "upload the image file for this product" msgstr "" -#: core/models.py:731 core/models.py:756 +#: core/models.py:739 core/models.py:764 msgid "product image" msgstr "" -#: core/models.py:737 +#: core/models.py:745 msgid "determines the order in which images are displayed" msgstr "" -#: core/models.py:738 +#: core/models.py:746 msgid "display priority" msgstr "" -#: core/models.py:743 +#: core/models.py:751 msgid "the product that this image represents" msgstr "" -#: core/models.py:757 +#: core/models.py:765 msgid "product images" msgstr "" -#: core/models.py:762 +#: core/models.py:770 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 +1723,39 @@ msgid "" "affected items in the campaign." msgstr "" -#: core/models.py:774 +#: core/models.py:782 msgid "percentage discount for the selected products" msgstr "" -#: core/models.py:775 +#: core/models.py:783 msgid "discount percentage" msgstr "" -#: core/models.py:780 +#: core/models.py:788 msgid "provide a unique name for this promotion" msgstr "" -#: core/models.py:781 +#: core/models.py:789 msgid "promotion name" msgstr "" -#: core/models.py:787 +#: core/models.py:795 msgid "promotion description" msgstr "" -#: core/models.py:792 +#: core/models.py:800 msgid "select which products are included in this promotion" msgstr "" -#: core/models.py:793 +#: core/models.py:801 msgid "included products" msgstr "" -#: core/models.py:797 +#: core/models.py:805 msgid "promotion" msgstr "" -#: core/models.py:808 +#: core/models.py:816 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 +1763,23 @@ msgid "" "operations for adding and removing multiple products at once." msgstr "" -#: core/models.py:820 +#: core/models.py:828 msgid "products that the user has marked as wanted" msgstr "" -#: core/models.py:828 +#: core/models.py:836 msgid "user who owns this wishlist" msgstr "" -#: core/models.py:829 +#: core/models.py:837 msgid "wishlist owner" msgstr "" -#: core/models.py:837 +#: core/models.py:845 msgid "wishlist" msgstr "" -#: core/models.py:879 +#: core/models.py:887 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1777,19 +1789,19 @@ msgid "" "custom features." msgstr "" -#: core/models.py:892 +#: core/models.py:900 msgid "documentary" msgstr "" -#: core/models.py:893 +#: core/models.py:901 msgid "documentaries" msgstr "" -#: core/models.py:903 +#: core/models.py:911 msgid "unresolved" msgstr "" -#: core/models.py:908 +#: core/models.py:916 msgid "" "Represents an address entity that includes location details and associations " "with a user. Provides functionality for geographic and address data storage, " @@ -1801,59 +1813,59 @@ msgid "" "address with a user, facilitating personalized data handling." msgstr "" -#: core/models.py:923 +#: core/models.py:931 msgid "address line for the customer" msgstr "" -#: core/models.py:924 +#: core/models.py:932 msgid "address line" msgstr "" -#: core/models.py:926 +#: core/models.py:934 msgid "street" msgstr "" -#: core/models.py:927 +#: core/models.py:935 msgid "district" msgstr "" -#: core/models.py:928 +#: core/models.py:936 msgid "city" msgstr "" -#: core/models.py:929 +#: core/models.py:937 msgid "region" msgstr "" -#: core/models.py:930 +#: core/models.py:938 msgid "postal code" msgstr "" -#: core/models.py:931 +#: core/models.py:939 msgid "country" msgstr "" -#: core/models.py:938 +#: core/models.py:946 msgid "geolocation point: (longitude, latitude)" msgstr "" -#: core/models.py:941 +#: core/models.py:949 msgid "full JSON response from geocoder for this address" msgstr "" -#: core/models.py:946 +#: core/models.py:954 msgid "stored JSON response from the geocoding service" msgstr "" -#: core/models.py:954 +#: core/models.py:962 msgid "address" msgstr "" -#: core/models.py:955 +#: core/models.py:963 msgid "addresses" msgstr "" -#: core/models.py:967 +#: core/models.py:975 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 +1875,86 @@ msgid "" "apply the promo code to an order while ensuring constraints are met." msgstr "" -#: core/models.py:981 +#: core/models.py:989 msgid "unique code used by a user to redeem a discount" msgstr "" -#: core/models.py:982 +#: core/models.py:990 msgid "promo code identifier" msgstr "" -#: core/models.py:989 +#: core/models.py:997 msgid "fixed discount amount applied if percent is not used" msgstr "" -#: core/models.py:990 +#: core/models.py:998 msgid "fixed discount amount" msgstr "" -#: core/models.py:996 +#: core/models.py:1004 msgid "percentage discount applied if fixed amount is not used" msgstr "" -#: core/models.py:997 +#: core/models.py:1005 msgid "percentage discount" msgstr "" -#: core/models.py:1002 +#: core/models.py:1010 msgid "timestamp when the promocode expires" msgstr "" -#: core/models.py:1003 +#: core/models.py:1011 msgid "end validity time" msgstr "" -#: core/models.py:1008 +#: core/models.py:1016 msgid "timestamp from which this promocode is valid" msgstr "" -#: core/models.py:1009 +#: core/models.py:1017 msgid "start validity time" msgstr "" -#: core/models.py:1014 +#: core/models.py:1022 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" -#: core/models.py:1015 +#: core/models.py:1023 msgid "usage timestamp" msgstr "" -#: core/models.py:1020 +#: core/models.py:1028 msgid "user assigned to this promocode if applicable" msgstr "" -#: core/models.py:1021 +#: core/models.py:1029 msgid "assigned user" msgstr "" -#: core/models.py:1028 +#: core/models.py:1036 msgid "promo code" msgstr "" -#: core/models.py:1029 +#: core/models.py:1037 msgid "promo codes" msgstr "" -#: core/models.py:1044 +#: core/models.py:1052 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "" -#: core/models.py:1065 +#: core/models.py:1073 msgid "promocode already used" msgstr "" -#: core/models.py:1081 +#: core/models.py:1089 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "" -#: core/models.py:1090 +#: core/models.py:1098 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 +1964,144 @@ msgid "" "supports managing the products in the order lifecycle." msgstr "" -#: core/models.py:1107 +#: core/models.py:1115 msgid "the billing address used for this order" msgstr "" -#: core/models.py:1115 +#: core/models.py:1123 msgid "optional promo code applied to this order" msgstr "" -#: core/models.py:1116 +#: core/models.py:1124 msgid "applied promo code" msgstr "" -#: core/models.py:1124 +#: core/models.py:1132 msgid "the shipping address used for this order" msgstr "" -#: core/models.py:1125 +#: core/models.py:1133 msgid "shipping address" msgstr "" -#: core/models.py:1131 +#: core/models.py:1139 msgid "current status of the order in its lifecycle" msgstr "" -#: core/models.py:1132 +#: core/models.py:1140 msgid "order status" msgstr "" -#: core/models.py:1137 core/models.py:1618 +#: core/models.py:1145 core/models.py:1626 msgid "json structure of notifications to display to users" msgstr "" -#: core/models.py:1143 +#: core/models.py:1151 msgid "json representation of order attributes for this order" msgstr "" -#: core/models.py:1149 +#: core/models.py:1157 msgid "the user who placed the order" msgstr "" -#: core/models.py:1150 +#: core/models.py:1158 msgid "user" msgstr "" -#: core/models.py:1156 +#: core/models.py:1164 msgid "the timestamp when the order was finalized" msgstr "" -#: core/models.py:1157 +#: core/models.py:1165 msgid "buy time" msgstr "" -#: core/models.py:1164 +#: core/models.py:1172 msgid "a human-readable identifier for the order" msgstr "" -#: core/models.py:1165 +#: core/models.py:1173 msgid "human readable id" msgstr "" -#: core/models.py:1171 +#: core/models.py:1179 msgid "order" msgstr "" -#: core/models.py:1209 +#: core/models.py:1217 msgid "a user must have only one pending order at a time" msgstr "" -#: core/models.py:1249 +#: core/models.py:1257 msgid "you cannot add products to an order that is not a pending one" msgstr "" -#: core/models.py:1254 +#: core/models.py:1262 msgid "you cannot add inactive products to order" msgstr "" -#: core/models.py:1271 +#: core/models.py:1279 msgid "you cannot add more products than available in stock" msgstr "" -#: core/models.py:1293 core/models.py:1318 core/models.py:1326 +#: core/models.py:1301 core/models.py:1326 core/models.py:1334 msgid "you cannot remove products from an order that is not a pending one" msgstr "" -#: core/models.py:1314 +#: core/models.py:1322 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "" -#: core/models.py:1346 +#: core/models.py:1354 msgid "promocode does not exist" msgstr "" -#: core/models.py:1352 +#: core/models.py:1360 msgid "you can only buy physical products with shipping address specified" msgstr "" -#: core/models.py:1371 +#: core/models.py:1379 msgid "address does not exist" msgstr "" -#: core/models.py:1392 core/models.py:1461 +#: core/models.py:1400 core/models.py:1469 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" -#: core/models.py:1395 core/models.py:1457 +#: core/models.py:1403 core/models.py:1465 msgid "invalid force value" msgstr "" -#: core/models.py:1401 core/models.py:1464 +#: core/models.py:1409 core/models.py:1472 msgid "you cannot purchase an empty order!" msgstr "" -#: core/models.py:1420 +#: core/models.py:1428 msgid "you cannot buy an order without a user" msgstr "" -#: core/models.py:1434 +#: core/models.py:1442 msgid "a user without a balance cannot buy with balance" msgstr "" -#: core/models.py:1439 +#: core/models.py:1447 msgid "insufficient funds to complete the order" msgstr "" -#: core/models.py:1473 +#: core/models.py:1481 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "" -#: core/models.py:1482 +#: core/models.py:1490 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" -#: core/models.py:1591 +#: core/models.py:1599 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2102,108 +2114,108 @@ msgid "" "Product models and stores a reference to them." msgstr "" -#: core/models.py:1606 +#: core/models.py:1614 msgid "the price paid by the customer for this product at purchase time" msgstr "" -#: core/models.py:1607 +#: core/models.py:1615 msgid "purchase price at order time" msgstr "" -#: core/models.py:1612 +#: core/models.py:1620 msgid "internal comments for admins about this ordered product" msgstr "" -#: core/models.py:1613 +#: core/models.py:1621 msgid "internal comments" msgstr "" -#: core/models.py:1619 +#: core/models.py:1627 msgid "user notifications" msgstr "" -#: core/models.py:1624 +#: core/models.py:1632 msgid "json representation of this item's attributes" msgstr "" -#: core/models.py:1625 +#: core/models.py:1633 msgid "ordered product attributes" msgstr "" -#: core/models.py:1630 +#: core/models.py:1638 msgid "reference to the parent order that contains this product" msgstr "" -#: core/models.py:1631 +#: core/models.py:1639 msgid "parent order" msgstr "" -#: core/models.py:1640 +#: core/models.py:1648 msgid "the specific product associated with this order line" msgstr "" -#: core/models.py:1647 +#: core/models.py:1655 msgid "quantity of this specific product in the order" msgstr "" -#: core/models.py:1648 +#: core/models.py:1656 msgid "product quantity" msgstr "" -#: core/models.py:1655 +#: core/models.py:1663 msgid "current status of this product in the order" msgstr "" -#: core/models.py:1656 +#: core/models.py:1664 msgid "product line status" msgstr "" -#: core/models.py:1719 +#: core/models.py:1727 msgid "order product must have an order" msgstr "" -#: core/models.py:1721 +#: core/models.py:1729 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "" -#: core/models.py:1735 +#: core/models.py:1743 msgid "you cannot feedback an order which is not received" msgstr "" -#: core/models.py:1741 +#: core/models.py:1749 msgid "name" msgstr "" -#: core/models.py:1742 +#: core/models.py:1750 msgid "URL of the integration" msgstr "" -#: core/models.py:1743 +#: core/models.py:1751 msgid "authentication credentials" msgstr "" -#: core/models.py:1765 +#: core/models.py:1773 msgid "you can only have one default CRM provider" msgstr "" -#: core/models.py:1775 +#: core/models.py:1783 msgid "CRM" msgstr "" -#: core/models.py:1776 +#: core/models.py:1784 msgid "CRMs" msgstr "" -#: core/models.py:1788 +#: core/models.py:1796 msgid "order CRM link" msgstr "" -#: core/models.py:1789 +#: core/models.py:1797 msgid "orders CRM links" msgstr "" -#: core/models.py:1794 +#: core/models.py:1802 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2213,15 +2225,15 @@ msgid "" "the asset when the associated order is in a completed status." msgstr "" -#: core/models.py:1808 +#: core/models.py:1816 msgid "download" msgstr "" -#: core/models.py:1809 +#: core/models.py:1817 msgid "downloads" msgstr "" -#: core/models.py:1823 +#: core/models.py:1831 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2230,27 +2242,27 @@ msgid "" "fields to effectively model and manage feedback data." msgstr "" -#: core/models.py:1835 +#: core/models.py:1843 msgid "user-provided comments about their experience with the product" msgstr "" -#: core/models.py:1836 +#: core/models.py:1844 msgid "feedback comments" msgstr "" -#: core/models.py:1843 +#: core/models.py:1851 msgid "references the specific product in an order that this feedback is about" msgstr "" -#: core/models.py:1844 +#: core/models.py:1852 msgid "related order product" msgstr "" -#: core/models.py:1849 +#: core/models.py:1857 msgid "user-assigned rating for the product" msgstr "" -#: core/models.py:1850 +#: core/models.py:1858 msgid "product rating" msgstr "" @@ -2451,22 +2463,22 @@ msgstr "" msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "" -#: core/utils/emailing.py:25 +#: core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "" -#: core/utils/emailing.py:74 +#: core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "" -#: core/utils/emailing.py:109 +#: core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "" -#: core/utils/emailing.py:197 +#: core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "" @@ -2648,7 +2660,7 @@ msgid "" "use of Django's filtering system for querying data." msgstr "" -#: core/viewsets.py:593 +#: core/viewsets.py:594 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2659,7 +2671,7 @@ msgid "" "enforces permissions accordingly while interacting with order data." msgstr "" -#: core/viewsets.py:782 +#: core/viewsets.py:784 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2668,25 +2680,25 @@ msgid "" "feedback on OrderProduct instances" msgstr "" -#: core/viewsets.py:833 +#: core/viewsets.py:835 msgid "Manages operations related to Product images in the application. " msgstr "" -#: core/viewsets.py:845 +#: core/viewsets.py:847 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "" -#: core/viewsets.py:866 +#: core/viewsets.py:868 msgid "Represents a view set for managing promotions. " msgstr "" -#: core/viewsets.py:878 +#: core/viewsets.py:880 msgid "Handles operations related to Stock data in the system." msgstr "" -#: core/viewsets.py:892 +#: core/viewsets.py:894 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -2697,7 +2709,7 @@ msgid "" "are granted." msgstr "" -#: core/viewsets.py:1007 +#: core/viewsets.py:1009 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -2706,12 +2718,12 @@ msgid "" "on the request context." msgstr "" -#: core/viewsets.py:1074 +#: core/viewsets.py:1076 #, python-brace-format msgid "Geocoding error: {e}" msgstr "" -#: core/viewsets.py:1081 +#: core/viewsets.py:1083 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/fr_FR/LC_MESSAGES/django.mo b/core/locale/fr_FR/LC_MESSAGES/django.mo index 752765ad..fdba5980 100644 Binary files a/core/locale/fr_FR/LC_MESSAGES/django.mo and b/core/locale/fr_FR/LC_MESSAGES/django.mo differ diff --git a/core/locale/fr_FR/LC_MESSAGES/django.po b/core/locale/fr_FR/LC_MESSAGES/django.po index c79bc3d1..5f2a898e 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -51,82 +51,86 @@ msgstr "Modifié" msgid "when the object was last modified" msgstr "Date de la dernière modification de l'objet" -#: core/admin.py:63 +#: core/admin.py:68 msgid "translations" msgstr "Traductions" -#: core/admin.py:67 +#: core/admin.py:72 msgid "general" msgstr "Général" -#: core/admin.py:69 +#: core/admin.py:74 msgid "relations" msgstr "Relations" -#: core/admin.py:87 +#: core/admin.py:76 +msgid "additional info" +msgstr "Informations complémentaires" + +#: core/admin.py:94 msgid "metadata" msgstr "Métadonnées" -#: core/admin.py:94 +#: core/admin.py:101 msgid "timestamps" msgstr "Horodatage" -#: core/admin.py:109 +#: core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Activer la %(verbose_name_plural)s sélectionnée" -#: core/admin.py:114 +#: core/admin.py:121 msgid "selected items have been activated." msgstr "Les articles sélectionnés ont été activés !" -#: core/admin.py:120 +#: core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Désactiver la %(verbose_name_plural)s sélectionnée" -#: core/admin.py:125 +#: core/admin.py:132 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:701 core/models.py:709 +#: core/admin.py:144 core/graphene/object_types.py:609 +#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 msgid "attribute value" msgstr "Valeur de l'attribut" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 +#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718 msgid "attribute values" msgstr "Valeurs des attributs" -#: core/admin.py:146 +#: core/admin.py:153 msgid "image" msgstr "Image" -#: core/admin.py:147 core/graphene/object_types.py:501 +#: core/admin.py:154 core/graphene/object_types.py:501 msgid "images" msgstr "Images" -#: core/admin.py:155 core/models.py:459 +#: core/admin.py:162 core/models.py:467 msgid "stock" msgstr "Stock" -#: core/admin.py:156 core/graphene/object_types.py:663 +#: core/admin.py:163 core/graphene/object_types.py:663 msgid "stocks" msgstr "Stocks" -#: core/admin.py:166 core/models.py:1667 +#: core/admin.py:173 core/models.py:1675 msgid "order product" msgstr "Commander un produit" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 msgid "order products" msgstr "Commander des produits" -#: core/admin.py:180 core/admin.py:181 +#: core/admin.py:187 core/admin.py:188 msgid "children" msgstr "Les enfants" -#: core/admin.py:566 +#: core/admin.py:940 msgid "Config" msgstr "Config" @@ -754,23 +758,23 @@ msgstr "" "ajouter ou supprimer un retour d'information sur une relation commande-" "produit" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 msgid "no search term provided." msgstr "Aucun terme de recherche n'est fourni." -#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +#: core/filters.py:65 core/filters.py:399 core/filters.py:526 msgid "Search" msgstr "Recherche" -#: core/filters.py:66 core/filters.py:554 core/filters.py:583 +#: core/filters.py:66 core/filters.py:556 core/filters.py:585 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:399 core/filters.py:526 +#: core/filters.py:67 core/filters.py:401 core/filters.py:528 msgid "Name" msgstr "Nom" -#: core/filters.py:68 core/filters.py:528 +#: core/filters.py:68 core/filters.py:530 msgid "Categories" msgstr "Catégories" @@ -778,7 +782,7 @@ msgstr "Catégories" msgid "Categories Slugs" msgstr "Catégories Limaces" -#: core/filters.py:71 core/filters.py:407 +#: core/filters.py:71 core/filters.py:409 msgid "Tags" msgstr "Tags" @@ -806,8 +810,8 @@ msgstr "Attributs" msgid "Quantity" msgstr "Quantité" -#: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:301 core/models.py:383 core/models.py:536 +#: core/filters.py:78 core/filters.py:403 core/filters.py:529 +#: core/models.py:309 core/models.py:391 core/models.py:544 msgid "Slug" msgstr "Limace" @@ -823,7 +827,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:540 +#: core/filters.py:85 core/models.py:548 msgid "SKU" msgstr "SKU" @@ -833,48 +837,48 @@ msgstr "" "Il doit y avoir un category_uuid pour utiliser le drapeau " "include_subcategories" -#: core/filters.py:324 +#: core/filters.py:326 msgid "Search (ID, product name or part number)" msgstr "Recherche (ID, nom du produit ou numéro de pièce)" -#: core/filters.py:327 +#: core/filters.py:329 msgid "Bought after (inclusive)" msgstr "Acheté après (inclus)" -#: core/filters.py:328 +#: core/filters.py:330 msgid "Bought before (inclusive)" msgstr "Acheté avant (inclus)" -#: core/filters.py:331 core/filters.py:378 core/filters.py:585 +#: core/filters.py:333 core/filters.py:380 core/filters.py:587 msgid "User email" msgstr "Courriel de l'utilisateur" -#: core/filters.py:332 core/filters.py:379 core/filters.py:563 -#: core/filters.py:584 +#: core/filters.py:334 core/filters.py:381 core/filters.py:565 +#: core/filters.py:586 msgid "User UUID" msgstr "UUID de l'utilisateur" -#: core/filters.py:333 +#: core/filters.py:335 msgid "Status" msgstr "Statut" -#: core/filters.py:337 +#: core/filters.py:339 msgid "Human Readable ID" msgstr "ID lisible par l'homme" -#: core/filters.py:400 +#: core/filters.py:402 msgid "Parent" msgstr "Parent" -#: core/filters.py:404 +#: core/filters.py:406 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:408 +#: core/filters.py:410 msgid "Level" msgstr "Niveau" -#: core/filters.py:558 +#: core/filters.py:560 msgid "Product UUID" msgstr "UUID du produit" @@ -931,7 +935,7 @@ msgstr "" "mutuellement !" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:679 +#: core/graphene/mutations.py:527 core/viewsets.py:680 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 +1015,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:849 core/models.py:862 -#: core/models.py:1281 core/models.py:1310 core/models.py:1335 -#: core/viewsets.py:682 +#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 +#: core/models.py:1289 core/models.py:1318 core/models.py:1343 +#: core/viewsets.py:683 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} n'existe pas : {uuid} !" @@ -1027,8 +1031,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:672 core/models.py:1144 -#: core/models.py:1744 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 +#: core/models.py:1752 msgid "attributes" msgstr "Attributs" @@ -1041,11 +1045,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:326 core/models.py:626 +#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 msgid "categories" msgstr "Catégories" -#: core/graphene/object_types.py:124 core/models.py:397 +#: core/graphene/object_types.py:124 core/models.py:405 msgid "brands" msgstr "Marques" @@ -1054,7 +1058,7 @@ msgid "category image url" msgstr "Catégories" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:263 +#: core/models.py:271 msgid "markup percentage" msgstr "Markup Percentage" @@ -1079,7 +1083,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:169 +#: core/graphene/object_types.py:351 core/models.py:177 msgid "vendors" msgstr "Vendeurs" @@ -1104,7 +1108,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:1138 +#: core/models.py:1146 msgid "notifications" msgstr "Notifications" @@ -1112,7 +1116,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:1860 +#: core/graphene/object_types.py:400 core/models.py:1868 msgid "feedback" msgstr "Retour d'information" @@ -1120,7 +1124,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:1108 +#: core/graphene/object_types.py:436 core/models.py:1116 msgid "billing address" msgstr "Adresse de facturation" @@ -1148,7 +1152,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:1172 +#: core/graphene/object_types.py:465 core/models.py:1180 msgid "orders" msgstr "Commandes" @@ -1160,19 +1164,19 @@ msgstr "Image URL" msgid "product's images" msgstr "Images du produit" -#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 +#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 msgid "category" msgstr "Catégorie" -#: core/graphene/object_types.py:502 core/models.py:1861 +#: core/graphene/object_types.py:502 core/models.py:1869 msgid "feedbacks" msgstr "Retour d'information" -#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 +#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 msgid "brand" msgstr "Marque" -#: core/graphene/object_types.py:504 core/models.py:101 +#: core/graphene/object_types.py:504 core/models.py:102 msgid "attribute groups" msgstr "Groupes d'attributs" @@ -1200,7 +1204,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:550 +#: core/graphene/object_types.py:534 core/models.py:558 msgid "products" msgstr "Produits" @@ -1212,15 +1216,15 @@ msgstr "Promocodes" msgid "products on sale" msgstr "Produits en vente" -#: core/graphene/object_types.py:651 core/models.py:798 +#: core/graphene/object_types.py:651 core/models.py:806 msgid "promotions" msgstr "Promotions" -#: core/graphene/object_types.py:655 core/models.py:168 +#: core/graphene/object_types.py:655 core/models.py:176 msgid "vendor" msgstr "Vendeur" -#: core/graphene/object_types.py:656 core/models.py:549 +#: core/graphene/object_types.py:656 core/models.py:557 #: 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 +1232,11 @@ msgstr "Vendeur" msgid "product" msgstr "Produit" -#: core/graphene/object_types.py:667 core/models.py:821 +#: core/graphene/object_types.py:667 core/models.py:829 msgid "wishlisted products" msgstr "Produits en liste de souhaits" -#: core/graphene/object_types.py:673 core/models.py:838 +#: core/graphene/object_types.py:673 core/models.py:846 msgid "wishlists" msgstr "Liste de souhaits" @@ -1240,7 +1244,7 @@ msgstr "Liste de souhaits" msgid "tagged products" msgstr "Produits marqués" -#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 +#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 msgid "product tags" msgstr "Étiquettes du produit" @@ -1327,7 +1331,7 @@ msgstr "Résultats de la recherche de produits" msgid "posts search results" msgstr "Résultats de la recherche de produits" -#: core/models.py:70 +#: core/models.py:71 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1340,23 +1344,23 @@ msgstr "" "hiérarchique. Cela peut être utile pour catégoriser et gérer les attributs " "plus efficacement dans un système complexe." -#: core/models.py:86 +#: core/models.py:87 msgid "parent of this group" msgstr "Parent de ce groupe" -#: core/models.py:87 +#: core/models.py:88 msgid "parent attribute group" msgstr "Groupe d'attributs parent" -#: core/models.py:91 core/models.py:92 +#: core/models.py:92 core/models.py:93 msgid "attribute group's name" msgstr "Nom du groupe d'attributs" -#: core/models.py:100 core/models.py:634 +#: core/models.py:101 core/models.py:642 msgid "attribute group" msgstr "Groupe d'attributs" -#: core/models.py:106 +#: core/models.py:107 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1376,34 +1380,42 @@ msgstr "" "permet de l'utiliser dans des systèmes qui interagissent avec des vendeurs " "tiers." -#: core/models.py:119 +#: core/models.py:120 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Stocke les informations d'identification et les points d'extrémité " "nécessaires à la communication avec l'API du fournisseur." -#: core/models.py:120 +#: core/models.py:121 msgid "authentication info" msgstr "Informations sur l'authentification" -#: core/models.py:125 +#: core/models.py:126 msgid "define the markup for products retrieved from this vendor" msgstr "" "Définir la majoration pour les produits récupérés auprès de ce fournisseur" -#: core/models.py:126 +#: core/models.py:127 msgid "vendor markup percentage" msgstr "Pourcentage de marge du vendeur" -#: core/models.py:130 +#: core/models.py:131 msgid "name of this vendor" msgstr "Nom de ce vendeur" -#: core/models.py:131 +#: core/models.py:132 msgid "vendor name" msgstr "Nom du vendeur" -#: core/models.py:177 +#: core/models.py:143 +msgid "response file" +msgstr "dossier de réponse" + +#: core/models.py:144 +msgid "vendor's last processing response" +msgstr "la dernière réponse du vendeur en matière de traitement" + +#: core/models.py:185 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1418,27 +1430,27 @@ msgstr "" "biais de mixins et permet de personnaliser les métadonnées à des fins " "administratives." -#: core/models.py:189 core/models.py:220 +#: core/models.py:197 core/models.py:228 msgid "internal tag identifier for the product tag" msgstr "Identifiant interne de l'étiquette du produit" -#: core/models.py:190 core/models.py:221 +#: core/models.py:198 core/models.py:229 msgid "tag name" msgstr "Nom du jour" -#: core/models.py:194 core/models.py:225 +#: core/models.py:202 core/models.py:233 msgid "user-friendly name for the product tag" msgstr "Nom convivial pour l'étiquette du produit" -#: core/models.py:195 core/models.py:226 +#: core/models.py:203 core/models.py:234 msgid "tag display name" msgstr "Nom d'affichage de l'étiquette" -#: core/models.py:203 +#: core/models.py:211 msgid "product tag" msgstr "Étiquette du produit" -#: core/models.py:209 +#: core/models.py:217 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 +1461,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:234 +#: core/models.py:242 msgid "category tag" msgstr "étiquette de catégorie" -#: core/models.py:235 core/models.py:307 +#: core/models.py:243 core/models.py:315 msgid "category tags" msgstr "balises de catégorie" -#: core/models.py:240 +#: core/models.py:248 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1481,52 +1493,52 @@ msgstr "" "catégories, ainsi que d'attribuer des attributs tels que des images, des " "balises ou une priorité." -#: core/models.py:254 +#: core/models.py:262 msgid "upload an image representing this category" msgstr "Télécharger une image représentant cette catégorie" -#: core/models.py:257 +#: core/models.py:265 msgid "category image" msgstr "Image de catégorie" -#: core/models.py:262 +#: core/models.py:270 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:271 +#: core/models.py:279 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:272 +#: core/models.py:280 msgid "parent category" msgstr "Catégorie de parents" -#: core/models.py:277 +#: core/models.py:285 msgid "category name" msgstr "Nom de la catégorie" -#: core/models.py:278 +#: core/models.py:286 msgid "provide a name for this category" msgstr "Donnez un nom à cette catégorie" -#: core/models.py:285 +#: core/models.py:293 msgid "add a detailed description for this category" msgstr "Ajouter une description détaillée pour cette catégorie" -#: core/models.py:286 +#: core/models.py:294 msgid "category description" msgstr "Description de la catégorie" -#: core/models.py:306 +#: core/models.py:314 msgid "tags that help describe or group this category" msgstr "les étiquettes qui aident à décrire ou à regrouper cette catégorie" -#: core/models.py:313 core/models.py:389 +#: core/models.py:321 core/models.py:397 msgid "priority" msgstr "Priorité" -#: core/models.py:332 +#: core/models.py:340 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 +1552,47 @@ msgstr "" "de priorité. Elle permet d'organiser et de représenter les données relatives" " à la marque dans l'application." -#: core/models.py:342 +#: core/models.py:350 msgid "name of this brand" msgstr "Nom de cette marque" -#: core/models.py:343 +#: core/models.py:351 msgid "brand name" msgstr "Nom de marque" -#: core/models.py:350 +#: core/models.py:358 msgid "upload a logo representing this brand" msgstr "Télécharger un logo représentant cette marque" -#: core/models.py:352 +#: core/models.py:360 msgid "brand small image" msgstr "Petite image de marque" -#: core/models.py:358 +#: core/models.py:366 msgid "upload a big logo representing this brand" msgstr "Télécharger un grand logo représentant cette marque" -#: core/models.py:360 +#: core/models.py:368 msgid "brand big image" msgstr "Une grande image de marque" -#: core/models.py:365 +#: core/models.py:373 msgid "add a detailed description of the brand" msgstr "Ajouter une description détaillée de la marque" -#: core/models.py:366 +#: core/models.py:374 msgid "brand description" msgstr "Description de la marque" -#: core/models.py:371 +#: core/models.py:379 msgid "optional categories that this brand is associated with" msgstr "Catégories facultatives auxquelles cette marque est associée" -#: core/models.py:372 +#: core/models.py:380 msgid "associated categories" msgstr "Catégories" -#: core/models.py:402 +#: core/models.py:410 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 +1608,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:414 +#: core/models.py:422 msgid "the vendor supplying this product stock" msgstr "Le vendeur qui fournit ce stock de produits" -#: core/models.py:415 +#: core/models.py:423 msgid "associated vendor" msgstr "Vendeur associé" -#: core/models.py:419 +#: core/models.py:427 msgid "final price to the customer after markups" msgstr "Prix final pour le client après majoration" -#: core/models.py:420 +#: core/models.py:428 msgid "selling price" msgstr "Prix de vente" -#: core/models.py:425 +#: core/models.py:433 msgid "the product associated with this stock entry" msgstr "Le produit associé à cette entrée de stock" -#: core/models.py:426 core/models.py:697 core/models.py:744 -#: core/models.py:1641 +#: core/models.py:434 core/models.py:705 core/models.py:752 +#: core/models.py:1649 msgid "associated product" msgstr "Produit associé" -#: core/models.py:433 +#: core/models.py:441 msgid "the price paid to the vendor for this product" msgstr "Le prix payé au vendeur pour ce produit" -#: core/models.py:434 +#: core/models.py:442 msgid "vendor purchase price" msgstr "Prix d'achat du vendeur" -#: core/models.py:438 +#: core/models.py:446 msgid "available quantity of the product in stock" msgstr "Quantité disponible du produit en stock" -#: core/models.py:439 +#: core/models.py:447 msgid "quantity in stock" msgstr "Quantité en stock" -#: core/models.py:443 +#: core/models.py:451 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU attribué par le fournisseur pour identifier le produit" -#: core/models.py:444 +#: core/models.py:452 msgid "vendor sku" msgstr "UGS du vendeur" -#: core/models.py:450 +#: core/models.py:458 msgid "digital file associated with this stock if applicable" msgstr "Fichier numérique associé à ce stock, le cas échéant" -#: core/models.py:451 +#: core/models.py:459 msgid "digital file" msgstr "Fichier numérique" -#: core/models.py:460 +#: core/models.py:468 msgid "stock entries" msgstr "Entrées de stock" -#: core/models.py:465 +#: core/models.py:473 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1679,55 +1691,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:478 +#: core/models.py:486 msgid "category this product belongs to" msgstr "Catégorie à laquelle appartient ce produit" -#: core/models.py:487 +#: core/models.py:495 msgid "optionally associate this product with a brand" msgstr "Possibilité d'associer ce produit à une marque" -#: core/models.py:493 +#: core/models.py:501 msgid "tags that help describe or group this product" msgstr "Étiquettes permettant de décrire ou de regrouper ce produit" -#: core/models.py:498 +#: core/models.py:506 msgid "indicates whether this product is digitally delivered" msgstr "Indique si ce produit est livré numériquement" -#: core/models.py:499 +#: core/models.py:507 msgid "is product digital" msgstr "Le produit est-il numérique ?" -#: core/models.py:505 +#: core/models.py:513 msgid "provide a clear identifying name for the product" msgstr "Fournir un nom d'identification clair pour le produit" -#: core/models.py:506 +#: core/models.py:514 msgid "product name" msgstr "Nom du produit" -#: core/models.py:511 core/models.py:786 +#: core/models.py:519 core/models.py:794 msgid "add a detailed description of the product" msgstr "Ajouter une description détaillée du produit" -#: core/models.py:512 +#: core/models.py:520 msgid "product description" msgstr "Description du produit" -#: core/models.py:519 +#: core/models.py:527 msgid "part number for this product" msgstr "Numéro de pièce pour ce produit" -#: core/models.py:520 +#: core/models.py:528 msgid "part number" msgstr "Numéro de pièce" -#: core/models.py:539 +#: core/models.py:547 msgid "stock keeping unit for this product" msgstr "Unité de gestion des stocks pour ce produit" -#: core/models.py:613 +#: core/models.py:621 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 +1756,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:625 +#: core/models.py:633 msgid "category of this attribute" msgstr "Catégorie de cet attribut" -#: core/models.py:633 +#: core/models.py:641 msgid "group of this attribute" msgstr "Groupe de cet attribut" -#: core/models.py:639 +#: core/models.py:647 msgid "string" msgstr "Chaîne" -#: core/models.py:640 +#: core/models.py:648 msgid "integer" msgstr "Entier" -#: core/models.py:641 +#: core/models.py:649 msgid "float" msgstr "Flotteur" -#: core/models.py:642 +#: core/models.py:650 msgid "boolean" msgstr "Booléen" -#: core/models.py:643 +#: core/models.py:651 msgid "array" msgstr "Tableau" -#: core/models.py:644 +#: core/models.py:652 msgid "object" msgstr "Objet" -#: core/models.py:646 +#: core/models.py:654 msgid "type of the attribute's value" msgstr "Type de la valeur de l'attribut" -#: core/models.py:647 +#: core/models.py:655 msgid "value type" msgstr "Type de valeur" -#: core/models.py:652 +#: core/models.py:660 msgid "name of this attribute" msgstr "Nom de cet attribut" -#: core/models.py:653 +#: core/models.py:661 msgid "attribute's name" msgstr "Nom de l'attribut" -#: core/models.py:659 +#: core/models.py:667 msgid "is filterable" msgstr "est filtrable" -#: core/models.py:660 +#: core/models.py:668 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:671 core/models.py:689 +#: core/models.py:679 core/models.py:697 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attribut" -#: core/models.py:677 +#: core/models.py:685 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 +1830,19 @@ msgstr "" "organisation et une représentation dynamique des caractéristiques du " "produit." -#: core/models.py:688 +#: core/models.py:696 msgid "attribute of this value" msgstr "Attribut de cette valeur" -#: core/models.py:696 +#: core/models.py:704 msgid "the specific product associated with this attribute's value" msgstr "Le produit spécifique associé à la valeur de cet attribut" -#: core/models.py:702 +#: core/models.py:710 msgid "the specific value for this attribute" msgstr "La valeur spécifique de cet attribut" -#: core/models.py:715 +#: core/models.py:723 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 +1857,39 @@ msgstr "" " comprend également une fonction d'accessibilité avec un texte alternatif " "pour les images." -#: core/models.py:726 +#: core/models.py:734 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:727 +#: core/models.py:735 msgid "image alt text" msgstr "Texte alt de l'image" -#: core/models.py:730 +#: core/models.py:738 msgid "upload the image file for this product" msgstr "Télécharger le fichier image pour ce produit" -#: core/models.py:731 core/models.py:756 +#: core/models.py:739 core/models.py:764 msgid "product image" msgstr "Image du produit" -#: core/models.py:737 +#: core/models.py:745 msgid "determines the order in which images are displayed" msgstr "Détermine l'ordre d'affichage des images" -#: core/models.py:738 +#: core/models.py:746 msgid "display priority" msgstr "Priorité à l'affichage" -#: core/models.py:743 +#: core/models.py:751 msgid "the product that this image represents" msgstr "Le produit que cette image représente" -#: core/models.py:757 +#: core/models.py:765 msgid "product images" msgstr "Images du produit" -#: core/models.py:762 +#: core/models.py:770 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 +1906,39 @@ msgstr "" "Elle s'intègre au catalogue de produits pour déterminer les articles " "concernés par la campagne." -#: core/models.py:774 +#: core/models.py:782 msgid "percentage discount for the selected products" msgstr "Pourcentage de réduction pour les produits sélectionnés" -#: core/models.py:775 +#: core/models.py:783 msgid "discount percentage" msgstr "Pourcentage de réduction" -#: core/models.py:780 +#: core/models.py:788 msgid "provide a unique name for this promotion" msgstr "Donnez un nom unique à cette promotion" -#: core/models.py:781 +#: core/models.py:789 msgid "promotion name" msgstr "Nom de la promotion" -#: core/models.py:787 +#: core/models.py:795 msgid "promotion description" msgstr "Promotion description" -#: core/models.py:792 +#: core/models.py:800 msgid "select which products are included in this promotion" msgstr "Sélectionnez les produits inclus dans cette promotion" -#: core/models.py:793 +#: core/models.py:801 msgid "included products" msgstr "Produits inclus" -#: core/models.py:797 +#: core/models.py:805 msgid "promotion" msgstr "Promotion" -#: core/models.py:808 +#: core/models.py:816 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 +1952,23 @@ msgstr "" "opérations permettant d'ajouter et de supprimer plusieurs produits à la " "fois." -#: core/models.py:820 +#: core/models.py:828 msgid "products that the user has marked as wanted" msgstr "Produits que l'utilisateur a marqués comme souhaités" -#: core/models.py:828 +#: core/models.py:836 msgid "user who owns this wishlist" msgstr "Utilisateur qui possède cette liste de souhaits" -#: core/models.py:829 +#: core/models.py:837 msgid "wishlist owner" msgstr "Propriétaire de la liste de souhaits" -#: core/models.py:837 +#: core/models.py:845 msgid "wishlist" msgstr "Liste de souhaits" -#: core/models.py:879 +#: core/models.py:887 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1973,19 +1985,19 @@ msgstr "" "documentaires. Elle étend les fonctionnalités de mixins spécifiques et " "fournit des fonctionnalités personnalisées supplémentaires." -#: core/models.py:892 +#: core/models.py:900 msgid "documentary" msgstr "Documentaire" -#: core/models.py:893 +#: core/models.py:901 msgid "documentaries" msgstr "Documentaires" -#: core/models.py:903 +#: core/models.py:911 msgid "unresolved" msgstr "Non résolu" -#: core/models.py:908 +#: core/models.py:916 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2008,59 +2020,59 @@ msgstr "" "adresse à un utilisateur, ce qui facilite le traitement personnalisé des " "données." -#: core/models.py:923 +#: core/models.py:931 msgid "address line for the customer" msgstr "Ligne d'adresse du client" -#: core/models.py:924 +#: core/models.py:932 msgid "address line" msgstr "Ligne d'adresse" -#: core/models.py:926 +#: core/models.py:934 msgid "street" msgstr "Rue" -#: core/models.py:927 +#: core/models.py:935 msgid "district" msgstr "District" -#: core/models.py:928 +#: core/models.py:936 msgid "city" msgstr "Ville" -#: core/models.py:929 +#: core/models.py:937 msgid "region" msgstr "Région" -#: core/models.py:930 +#: core/models.py:938 msgid "postal code" msgstr "Code postal" -#: core/models.py:931 +#: core/models.py:939 msgid "country" msgstr "Pays" -#: core/models.py:938 +#: core/models.py:946 msgid "geolocation point: (longitude, latitude)" msgstr "Point de géolocalisation (longitude, latitude)" -#: core/models.py:941 +#: core/models.py:949 msgid "full JSON response from geocoder for this address" msgstr "Réponse JSON complète du géocodeur pour cette adresse" -#: core/models.py:946 +#: core/models.py:954 msgid "stored JSON response from the geocoding service" msgstr "Réponse JSON stockée du service de géocodage" -#: core/models.py:954 +#: core/models.py:962 msgid "address" msgstr "Adresse" -#: core/models.py:955 +#: core/models.py:963 msgid "addresses" msgstr "Adresses" -#: core/models.py:967 +#: core/models.py:975 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 +2090,76 @@ msgstr "" "d'appliquer le code promotionnel à une commande tout en veillant à ce que " "les contraintes soient respectées." -#: core/models.py:981 +#: core/models.py:989 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:982 +#: core/models.py:990 msgid "promo code identifier" msgstr "Identifiant du code promotionnel" -#: core/models.py:989 +#: core/models.py:997 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:990 +#: core/models.py:998 msgid "fixed discount amount" msgstr "Montant de l'escompte fixe" -#: core/models.py:996 +#: core/models.py:1004 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:997 +#: core/models.py:1005 msgid "percentage discount" msgstr "Pourcentage de réduction" -#: core/models.py:1002 +#: core/models.py:1010 msgid "timestamp when the promocode expires" msgstr "Date d'expiration du code promotionnel" -#: core/models.py:1003 +#: core/models.py:1011 msgid "end validity time" msgstr "Heure de fin de validité" -#: core/models.py:1008 +#: core/models.py:1016 msgid "timestamp from which this promocode is valid" msgstr "Date à partir de laquelle ce code promotionnel est valable" -#: core/models.py:1009 +#: core/models.py:1017 msgid "start validity time" msgstr "Heure de début de validité" -#: core/models.py:1014 +#: core/models.py:1022 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:1015 +#: core/models.py:1023 msgid "usage timestamp" msgstr "Horodatage de l'utilisation" -#: core/models.py:1020 +#: core/models.py:1028 msgid "user assigned to this promocode if applicable" msgstr "Utilisateur assigné à ce code promo, le cas échéant" -#: core/models.py:1021 +#: core/models.py:1029 msgid "assigned user" msgstr "Utilisateur assigné" -#: core/models.py:1028 +#: core/models.py:1036 msgid "promo code" msgstr "Code promo" -#: core/models.py:1029 +#: core/models.py:1037 msgid "promo codes" msgstr "Codes promotionnels" -#: core/models.py:1044 +#: core/models.py:1052 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2155,16 +2167,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:1065 +#: core/models.py:1073 msgid "promocode already used" msgstr "Le code promotionnel a déjà été utilisé" -#: core/models.py:1081 +#: core/models.py:1089 #, 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:1090 +#: core/models.py:1098 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 +2194,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:1107 +#: core/models.py:1115 msgid "the billing address used for this order" msgstr "L'adresse de facturation utilisée pour cette commande" -#: core/models.py:1115 +#: core/models.py:1123 msgid "optional promo code applied to this order" msgstr "Code promo optionnel appliqué à cette commande" -#: core/models.py:1116 +#: core/models.py:1124 msgid "applied promo code" msgstr "Code promo appliqué" -#: core/models.py:1124 +#: core/models.py:1132 msgid "the shipping address used for this order" msgstr "L'adresse de livraison utilisée pour cette commande" -#: core/models.py:1125 +#: core/models.py:1133 msgid "shipping address" msgstr "Adresse de livraison" -#: core/models.py:1131 +#: core/models.py:1139 msgid "current status of the order in its lifecycle" msgstr "Statut actuel de la commande dans son cycle de vie" -#: core/models.py:1132 +#: core/models.py:1140 msgid "order status" msgstr "Statut de la commande" -#: core/models.py:1137 core/models.py:1618 +#: core/models.py:1145 core/models.py:1626 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:1143 +#: core/models.py:1151 msgid "json representation of order attributes for this order" msgstr "Représentation JSON des attributs de cette commande" -#: core/models.py:1149 +#: core/models.py:1157 msgid "the user who placed the order" msgstr "L'utilisateur qui a passé la commande" -#: core/models.py:1150 +#: core/models.py:1158 msgid "user" msgstr "Utilisateur" -#: core/models.py:1156 +#: core/models.py:1164 msgid "the timestamp when the order was finalized" msgstr "L'heure à laquelle la commande a été finalisée." -#: core/models.py:1157 +#: core/models.py:1165 msgid "buy time" msgstr "Temps d'achat" -#: core/models.py:1164 +#: core/models.py:1172 msgid "a human-readable identifier for the order" msgstr "Un identifiant lisible par l'homme pour la commande" -#: core/models.py:1165 +#: core/models.py:1173 msgid "human readable id" msgstr "ID lisible par l'homme" -#: core/models.py:1171 +#: core/models.py:1179 msgid "order" msgstr "Commande" -#: core/models.py:1209 +#: core/models.py:1217 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:1249 +#: core/models.py:1257 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:1254 +#: core/models.py:1262 msgid "you cannot add inactive products to order" msgstr "Vous ne pouvez pas ajouter des produits inactifs à la commande" -#: core/models.py:1271 +#: core/models.py:1279 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:1293 core/models.py:1318 core/models.py:1326 +#: core/models.py:1301 core/models.py:1326 core/models.py:1334 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:1314 +#: core/models.py:1322 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} n'existe pas avec la requête <{query}> !" -#: core/models.py:1346 +#: core/models.py:1354 msgid "promocode does not exist" msgstr "Le code promotionnel n'existe pas" -#: core/models.py:1352 +#: core/models.py:1360 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:1371 +#: core/models.py:1379 msgid "address does not exist" msgstr "L'adresse n'existe pas" -#: core/models.py:1392 core/models.py:1461 +#: core/models.py:1400 core/models.py:1469 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:1395 core/models.py:1457 +#: core/models.py:1403 core/models.py:1465 msgid "invalid force value" msgstr "Valeur de force non valide" -#: core/models.py:1401 core/models.py:1464 +#: core/models.py:1409 core/models.py:1472 msgid "you cannot purchase an empty order!" msgstr "Vous ne pouvez pas acheter une commande vide !" -#: core/models.py:1420 +#: core/models.py:1428 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:1434 +#: core/models.py:1442 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:1439 +#: core/models.py:1447 msgid "insufficient funds to complete the order" msgstr "Insuffisance de fonds pour compléter la commande" -#: core/models.py:1473 +#: core/models.py:1481 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2329,7 +2341,7 @@ msgstr "" "informations suivantes : nom du client, courriel du client, numéro de " "téléphone du client" -#: core/models.py:1482 +#: core/models.py:1490 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2337,7 +2349,7 @@ msgstr "" "Méthode de paiement non valide : {payment_method} de " "{available_payment_methods} !" -#: core/models.py:1591 +#: core/models.py:1599 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2361,111 +2373,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:1606 +#: core/models.py:1614 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:1607 +#: core/models.py:1615 msgid "purchase price at order time" msgstr "Prix d'achat au moment de la commande" -#: core/models.py:1612 +#: core/models.py:1620 msgid "internal comments for admins about this ordered product" msgstr "" "Commentaires internes pour les administrateurs sur ce produit commandé" -#: core/models.py:1613 +#: core/models.py:1621 msgid "internal comments" msgstr "Commentaires internes" -#: core/models.py:1619 +#: core/models.py:1627 msgid "user notifications" msgstr "Notifications aux utilisateurs" -#: core/models.py:1624 +#: core/models.py:1632 msgid "json representation of this item's attributes" msgstr "Représentation JSON des attributs de cet élément" -#: core/models.py:1625 +#: core/models.py:1633 msgid "ordered product attributes" msgstr "Attributs du produit ordonnés" -#: core/models.py:1630 +#: core/models.py:1638 msgid "reference to the parent order that contains this product" msgstr "Référence à l'ordre parent qui contient ce produit" -#: core/models.py:1631 +#: core/models.py:1639 msgid "parent order" msgstr "Ordonnance parentale" -#: core/models.py:1640 +#: core/models.py:1648 msgid "the specific product associated with this order line" msgstr "Le produit spécifique associé à cette ligne de commande" -#: core/models.py:1647 +#: core/models.py:1655 msgid "quantity of this specific product in the order" msgstr "Quantité de ce produit spécifique dans la commande" -#: core/models.py:1648 +#: core/models.py:1656 msgid "product quantity" msgstr "Quantité de produits" -#: core/models.py:1655 +#: core/models.py:1663 msgid "current status of this product in the order" msgstr "Statut actuel de ce produit dans la commande" -#: core/models.py:1656 +#: core/models.py:1664 msgid "product line status" msgstr "Statut de la ligne de produits" -#: core/models.py:1719 +#: core/models.py:1727 msgid "order product must have an order" msgstr "Le produit doit être associé à une commande !" -#: core/models.py:1721 +#: core/models.py:1729 #, 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:1735 +#: core/models.py:1743 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:1741 +#: core/models.py:1749 msgid "name" msgstr "Nom" -#: core/models.py:1742 +#: core/models.py:1750 msgid "URL of the integration" msgstr "URL de l'intégration" -#: core/models.py:1743 +#: core/models.py:1751 msgid "authentication credentials" msgstr "Références d'authentification" -#: core/models.py:1765 +#: core/models.py:1773 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:1775 +#: core/models.py:1783 msgid "CRM" msgstr "CRM" -#: core/models.py:1776 +#: core/models.py:1784 msgid "CRMs" msgstr "CRM" -#: core/models.py:1788 +#: core/models.py:1796 msgid "order CRM link" msgstr "Lien CRM de la commande" -#: core/models.py:1789 +#: core/models.py:1797 msgid "orders CRM links" msgstr "Liens CRM des commandes" -#: core/models.py:1794 +#: core/models.py:1802 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2482,15 +2494,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:1808 +#: core/models.py:1816 msgid "download" msgstr "Télécharger" -#: core/models.py:1809 +#: core/models.py:1817 msgid "downloads" msgstr "Téléchargements" -#: core/models.py:1823 +#: core/models.py:1831 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2506,30 +2518,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:1835 +#: core/models.py:1843 msgid "user-provided comments about their experience with the product" msgstr "Commentaires des utilisateurs sur leur expérience du produit" -#: core/models.py:1836 +#: core/models.py:1844 msgid "feedback comments" msgstr "Commentaires" -#: core/models.py:1843 +#: core/models.py:1851 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:1844 +#: core/models.py:1852 msgid "related order product" msgstr "Produit de commande apparenté" -#: core/models.py:1849 +#: core/models.py:1857 msgid "user-assigned rating for the product" msgstr "Note attribuée par l'utilisateur au produit" -#: core/models.py:1850 +#: core/models.py:1858 msgid "product rating" msgstr "Evaluation du produit" @@ -2750,22 +2762,22 @@ msgstr "" "La valeur du délai d'attente n'est pas valide, elle doit être comprise entre" " 0 et 216000 secondes." -#: core/utils/emailing.py:25 +#: core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | nous contacter initié" -#: core/utils/emailing.py:74 +#: core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Confirmation de commande" -#: core/utils/emailing.py:109 +#: core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Commande livrée" -#: core/utils/emailing.py:197 +#: core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | promocode accordé" @@ -3022,7 +3034,7 @@ msgstr "" "la classe de base `EvibesViewSet` et utilise le système de filtrage de " "Django pour l'interrogation des données." -#: core/viewsets.py:593 +#: core/viewsets.py:594 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3042,7 +3054,7 @@ msgstr "" "autorisations en conséquence lors de l'interaction avec les données de la " "commande." -#: core/viewsets.py:782 +#: core/viewsets.py:784 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3057,11 +3069,11 @@ msgstr "" " En outre, il fournit une action détaillée pour gérer le retour " "d'informations sur les instances OrderProduct." -#: core/viewsets.py:833 +#: core/viewsets.py:835 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 +#: core/viewsets.py:847 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3069,15 +3081,15 @@ msgstr "" "Gère la récupération et le traitement des instances de PromoCode par le " "biais de diverses actions API." -#: core/viewsets.py:866 +#: core/viewsets.py:868 msgid "Represents a view set for managing promotions. " msgstr "Représente un jeu de vues pour la gestion des promotions." -#: core/viewsets.py:878 +#: core/viewsets.py:880 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 +#: core/viewsets.py:894 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3097,7 +3109,7 @@ msgstr "" "ne peuvent gérer que leur propre liste de souhaits, sauf si des permissions " "explicites sont accordées." -#: core/viewsets.py:1007 +#: core/viewsets.py:1009 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3112,12 +3124,12 @@ msgstr "" " HTTP, des dérogations au sérialiseur et une gestion des autorisations basée" " sur le contexte de la demande." -#: core/viewsets.py:1074 +#: core/viewsets.py:1076 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Erreur de géocodage : {e}" -#: core/viewsets.py:1081 +#: core/viewsets.py:1083 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/he_IL/LC_MESSAGES/django.mo b/core/locale/he_IL/LC_MESSAGES/django.mo index 887e42e8..9987a4a4 100644 Binary files a/core/locale/he_IL/LC_MESSAGES/django.mo and b/core/locale/he_IL/LC_MESSAGES/django.mo differ diff --git a/core/locale/he_IL/LC_MESSAGES/django.po b/core/locale/he_IL/LC_MESSAGES/django.po index 27ca6463..c63acef1 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -47,82 +47,86 @@ msgstr "משונה" msgid "when the object was last modified" msgstr "מתי האובייקט נערך לאחרונה" -#: core/admin.py:63 +#: core/admin.py:68 msgid "translations" msgstr "תרגומים" -#: core/admin.py:67 +#: core/admin.py:72 msgid "general" msgstr "כללי" -#: core/admin.py:69 +#: core/admin.py:74 msgid "relations" msgstr "יחסים" -#: core/admin.py:87 +#: core/admin.py:76 +msgid "additional info" +msgstr "מידע נוסף" + +#: core/admin.py:94 msgid "metadata" msgstr "מטא-נתונים" -#: core/admin.py:94 +#: core/admin.py:101 msgid "timestamps" msgstr "חותמות זמן" -#: core/admin.py:109 +#: core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "הפעל את %(verbose_name_plural)s שנבחר" -#: core/admin.py:114 +#: core/admin.py:121 msgid "selected items have been activated." msgstr "הפריטים שנבחרו הופעלו!" -#: core/admin.py:120 +#: core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "השבת את %(verbose_name_plural)s שנבחר" -#: core/admin.py:125 +#: core/admin.py:132 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:701 core/models.py:709 +#: core/admin.py:144 core/graphene/object_types.py:609 +#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 msgid "attribute value" msgstr "ערך התכונה" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 +#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718 msgid "attribute values" msgstr "ערכי תכונות" -#: core/admin.py:146 +#: core/admin.py:153 msgid "image" msgstr "תמונה" -#: core/admin.py:147 core/graphene/object_types.py:501 +#: core/admin.py:154 core/graphene/object_types.py:501 msgid "images" msgstr "תמונות" -#: core/admin.py:155 core/models.py:459 +#: core/admin.py:162 core/models.py:467 msgid "stock" msgstr "מלאי" -#: core/admin.py:156 core/graphene/object_types.py:663 +#: core/admin.py:163 core/graphene/object_types.py:663 msgid "stocks" msgstr "מניות" -#: core/admin.py:166 core/models.py:1667 +#: core/admin.py:173 core/models.py:1675 msgid "order product" msgstr "הזמן מוצר" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 msgid "order products" msgstr "הזמנת מוצרים" -#: core/admin.py:180 core/admin.py:181 +#: core/admin.py:187 core/admin.py:188 msgid "children" msgstr "ילדים" -#: core/admin.py:566 +#: core/admin.py:940 msgid "Config" msgstr "תצורה" @@ -693,23 +697,23 @@ msgstr "מחיקת קשר בין הזמנה למוצר" msgid "add or remove feedback on an order–product relation" msgstr "הוספה או הסרה של משוב על קשר בין הזמנה למוצר" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 msgid "no search term provided." msgstr "לא צויין מונח חיפוש." -#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +#: core/filters.py:65 core/filters.py:399 core/filters.py:526 msgid "Search" msgstr "חיפוש" -#: core/filters.py:66 core/filters.py:554 core/filters.py:583 +#: core/filters.py:66 core/filters.py:556 core/filters.py:585 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:399 core/filters.py:526 +#: core/filters.py:67 core/filters.py:401 core/filters.py:528 msgid "Name" msgstr "שם" -#: core/filters.py:68 core/filters.py:528 +#: core/filters.py:68 core/filters.py:530 msgid "Categories" msgstr "קטגוריות" @@ -717,7 +721,7 @@ msgstr "קטגוריות" msgid "Categories Slugs" msgstr "קטגוריות שבלולים" -#: core/filters.py:71 core/filters.py:407 +#: core/filters.py:71 core/filters.py:409 msgid "Tags" msgstr "תגיות" @@ -745,8 +749,8 @@ msgstr "תכונות" msgid "Quantity" msgstr "כמות" -#: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:301 core/models.py:383 core/models.py:536 +#: core/filters.py:78 core/filters.py:403 core/filters.py:529 +#: core/models.py:309 core/models.py:391 core/models.py:544 msgid "Slug" msgstr "שבלול" @@ -762,7 +766,7 @@ msgstr "כלול תת-קטגוריות" msgid "Include personal ordered" msgstr "כלול מוצרים שהוזמנו באופן אישי" -#: core/filters.py:85 core/models.py:540 +#: core/filters.py:85 core/models.py:548 msgid "SKU" msgstr "מספר קטלוגי" @@ -770,48 +774,48 @@ msgstr "מספר קטלוגי" msgid "there must be a category_uuid to use include_subcategories flag" msgstr "חייב להיות category_uuid כדי להשתמש בדגל include_subcategories" -#: core/filters.py:324 +#: core/filters.py:326 msgid "Search (ID, product name or part number)" msgstr "חיפוש (מזהה, שם מוצר או מספר חלק)" -#: core/filters.py:327 +#: core/filters.py:329 msgid "Bought after (inclusive)" msgstr "נקנה לאחר (כולל)" -#: core/filters.py:328 +#: core/filters.py:330 msgid "Bought before (inclusive)" msgstr "נקנה לפני כן (כולל)" -#: core/filters.py:331 core/filters.py:378 core/filters.py:585 +#: core/filters.py:333 core/filters.py:380 core/filters.py:587 msgid "User email" msgstr "דוא\"ל המשתמש" -#: core/filters.py:332 core/filters.py:379 core/filters.py:563 -#: core/filters.py:584 +#: core/filters.py:334 core/filters.py:381 core/filters.py:565 +#: core/filters.py:586 msgid "User UUID" msgstr "UUID של המשתמש" -#: core/filters.py:333 +#: core/filters.py:335 msgid "Status" msgstr "סטטוס" -#: core/filters.py:337 +#: core/filters.py:339 msgid "Human Readable ID" msgstr "מזהה קריא על ידי בני אדם" -#: core/filters.py:400 +#: core/filters.py:402 msgid "Parent" msgstr "הורה" -#: core/filters.py:404 +#: core/filters.py:406 msgid "Whole category(has at least 1 product or not)" msgstr "קטגוריה שלמה (יש לפחות מוצר אחד או לא)" -#: core/filters.py:408 +#: core/filters.py:410 msgid "Level" msgstr "רמה" -#: core/filters.py:558 +#: core/filters.py:560 msgid "Product UUID" msgstr "UUID של המוצר" @@ -866,7 +870,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:679 +#: core/graphene/mutations.py:527 core/viewsets.py:680 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "סוג שגוי הגיע משיטת order.buy(): {type(instance)!s}" @@ -940,9 +944,9 @@ msgstr "המוצר {order_product_uuid} לא נמצא!" msgid "original address string provided by the user" msgstr "מחרוזת הכתובת המקורית שסופקה על ידי המשתמש" -#: 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 +#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 +#: core/models.py:1289 core/models.py:1318 core/models.py:1343 +#: core/viewsets.py:683 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} אינו קיים: {uuid}!" @@ -956,8 +960,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:672 core/models.py:1144 -#: core/models.py:1744 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 +#: core/models.py:1752 msgid "attributes" msgstr "תכונות" @@ -970,11 +974,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:326 core/models.py:626 +#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 msgid "categories" msgstr "קטגוריות" -#: core/graphene/object_types.py:124 core/models.py:397 +#: core/graphene/object_types.py:124 core/models.py:405 msgid "brands" msgstr "מותגים" @@ -983,7 +987,7 @@ msgid "category image url" msgstr "קטגוריות" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:263 +#: core/models.py:271 msgid "markup percentage" msgstr "אחוז הסימון" @@ -1004,7 +1008,7 @@ msgstr "תגיות עבור קטגוריה זו" msgid "products in this category" msgstr "מוצרים בקטגוריה זו" -#: core/graphene/object_types.py:351 core/models.py:169 +#: core/graphene/object_types.py:351 core/models.py:177 msgid "vendors" msgstr "ספקים" @@ -1029,7 +1033,7 @@ msgid "represents feedback from a user." msgstr "מייצג משוב ממשתמש." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1138 +#: core/models.py:1146 msgid "notifications" msgstr "הודעות" @@ -1037,7 +1041,7 @@ msgstr "הודעות" msgid "download url for this order product if applicable" msgstr "כתובת URL להורדת המוצר שהוזמן, אם רלוונטי" -#: core/graphene/object_types.py:400 core/models.py:1860 +#: core/graphene/object_types.py:400 core/models.py:1868 msgid "feedback" msgstr "משוב" @@ -1045,7 +1049,7 @@ msgstr "משוב" msgid "a list of order products in this order" msgstr "רשימת המוצרים בהזמנה זו" -#: core/graphene/object_types.py:436 core/models.py:1108 +#: core/graphene/object_types.py:436 core/models.py:1116 msgid "billing address" msgstr "כתובת לחיוב" @@ -1072,7 +1076,7 @@ msgstr "האם כל המוצרים בהזמנה הם דיגיטליים?" msgid "transactions for this order" msgstr "עסקאות עבור הזמנה זו" -#: core/graphene/object_types.py:465 core/models.py:1172 +#: core/graphene/object_types.py:465 core/models.py:1180 msgid "orders" msgstr "הזמנות" @@ -1084,19 +1088,19 @@ msgstr "כתובת URL של התמונה" msgid "product's images" msgstr "תמונות המוצר" -#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 +#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 msgid "category" msgstr "קטגוריה" -#: core/graphene/object_types.py:502 core/models.py:1861 +#: core/graphene/object_types.py:502 core/models.py:1869 msgid "feedbacks" msgstr "משובים" -#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 +#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 msgid "brand" msgstr "מותג" -#: core/graphene/object_types.py:504 core/models.py:101 +#: core/graphene/object_types.py:504 core/models.py:102 msgid "attribute groups" msgstr "קבוצות תכונות" @@ -1124,7 +1128,7 @@ msgstr "מספר המשובים" msgid "only available for personal orders" msgstr "מוצרים זמינים רק להזמנות אישיות" -#: core/graphene/object_types.py:534 core/models.py:550 +#: core/graphene/object_types.py:534 core/models.py:558 msgid "products" msgstr "מוצרים" @@ -1136,15 +1140,15 @@ msgstr "קודי קידום מכירות" msgid "products on sale" msgstr "מוצרים במבצע" -#: core/graphene/object_types.py:651 core/models.py:798 +#: core/graphene/object_types.py:651 core/models.py:806 msgid "promotions" msgstr "מבצעים" -#: core/graphene/object_types.py:655 core/models.py:168 +#: core/graphene/object_types.py:655 core/models.py:176 msgid "vendor" msgstr "ספק" -#: core/graphene/object_types.py:656 core/models.py:549 +#: core/graphene/object_types.py:656 core/models.py:557 #: 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 +1156,11 @@ msgstr "ספק" msgid "product" msgstr "מוצר" -#: core/graphene/object_types.py:667 core/models.py:821 +#: core/graphene/object_types.py:667 core/models.py:829 msgid "wishlisted products" msgstr "מוצרים ברשימת המשאלות" -#: core/graphene/object_types.py:673 core/models.py:838 +#: core/graphene/object_types.py:673 core/models.py:846 msgid "wishlists" msgstr "רשימות משאלות" @@ -1164,7 +1168,7 @@ msgstr "רשימות משאלות" msgid "tagged products" msgstr "מוצרים מתויגים" -#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 +#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 msgid "product tags" msgstr "תגיות מוצר" @@ -1249,7 +1253,7 @@ msgstr "תוצאות חיפוש מוצרים" msgid "posts search results" msgstr "תוצאות חיפוש מוצרים" -#: core/models.py:70 +#: core/models.py:71 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1260,23 +1264,23 @@ msgstr "" "קבוצות תכונות. לקבוצת תכונות יכולה להיות קבוצת אב, היוצרת מבנה היררכי. זה " "יכול להיות שימושי לסיווג וניהול תכונות בצורה יעילה יותר במערכת מורכבת." -#: core/models.py:86 +#: core/models.py:87 msgid "parent of this group" msgstr "הורה של קבוצה זו" -#: core/models.py:87 +#: core/models.py:88 msgid "parent attribute group" msgstr "קבוצת תכונות הורה" -#: core/models.py:91 core/models.py:92 +#: core/models.py:92 core/models.py:93 msgid "attribute group's name" msgstr "שם קבוצת התכונות" -#: core/models.py:100 core/models.py:634 +#: core/models.py:101 core/models.py:642 msgid "attribute group" msgstr "קבוצת תכונות" -#: core/models.py:106 +#: core/models.py:107 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1292,31 +1296,39 @@ msgstr "" "הנרכשים מהספק. מודל זה גם מתחזק מטא-נתונים ואילוצים נוספים, מה שהופך אותו " "מתאים לשימוש במערכות המקיימות אינטראקציה עם ספקים צד שלישי." -#: core/models.py:119 +#: core/models.py:120 msgid "stores credentials and endpoints required for vendor communication" msgstr "מאחסן את פרטי ההזדהות ונקודות הקצה הנדרשים לתקשורת API של הספק" -#: core/models.py:120 +#: core/models.py:121 msgid "authentication info" msgstr "מידע אימות" -#: core/models.py:125 +#: core/models.py:126 msgid "define the markup for products retrieved from this vendor" msgstr "הגדר את הסימון עבור מוצרים שנרכשו מספק זה" -#: core/models.py:126 +#: core/models.py:127 msgid "vendor markup percentage" msgstr "אחוז תוספת הספק" -#: core/models.py:130 +#: core/models.py:131 msgid "name of this vendor" msgstr "שם הספק הזה" -#: core/models.py:131 +#: core/models.py:132 msgid "vendor name" msgstr "שם הספק" -#: core/models.py:177 +#: core/models.py:143 +msgid "response file" +msgstr "קובץ תגובה" + +#: core/models.py:144 +msgid "vendor's last processing response" +msgstr "תגובת העיבוד האחרונה של הספק" + +#: core/models.py:185 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1329,27 +1341,27 @@ msgstr "" "ידידותי למשתמש. היא תומכת בפעולות המיוצאות באמצעות mixins ומספקת התאמה אישית" " של מטא-נתונים למטרות ניהוליות." -#: core/models.py:189 core/models.py:220 +#: core/models.py:197 core/models.py:228 msgid "internal tag identifier for the product tag" msgstr "מזהה תווית פנימי עבור תווית המוצר" -#: core/models.py:190 core/models.py:221 +#: core/models.py:198 core/models.py:229 msgid "tag name" msgstr "שם היום" -#: core/models.py:194 core/models.py:225 +#: core/models.py:202 core/models.py:233 msgid "user-friendly name for the product tag" msgstr "שם ידידותי למשתמש עבור תווית המוצר" -#: core/models.py:195 core/models.py:226 +#: core/models.py:203 core/models.py:234 msgid "tag display name" msgstr "שם תצוגה של התג" -#: core/models.py:203 +#: core/models.py:211 msgid "product tag" msgstr "תגית מוצר" -#: core/models.py:209 +#: core/models.py:217 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 +1371,15 @@ msgstr "" "להשתמש בה כדי לקשר ולסווג מוצרים. היא כוללת תכונות עבור מזהה תווית פנימי ושם" " תצוגה ידידותי למשתמש." -#: core/models.py:234 +#: core/models.py:242 msgid "category tag" msgstr "תגית קטגוריה" -#: core/models.py:235 core/models.py:307 +#: core/models.py:243 core/models.py:315 msgid "category tags" msgstr "תגיות קטגוריה" -#: core/models.py:240 +#: core/models.py:248 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1386,51 +1398,51 @@ msgstr "" "דומות אחרות בתוך יישום, ומאפשרת למשתמשים או למנהלים לציין את השם, התיאור " "וההיררכיה של הקטגוריות, וכן להקצות תכונות כגון תמונות, תגיות או עדיפות." -#: core/models.py:254 +#: core/models.py:262 msgid "upload an image representing this category" msgstr "העלה תמונה המייצגת קטגוריה זו" -#: core/models.py:257 +#: core/models.py:265 msgid "category image" msgstr "תמונה בקטגוריה" -#: core/models.py:262 +#: core/models.py:270 msgid "define a markup percentage for products in this category" msgstr "הגדר אחוז תוספת מחיר עבור מוצרים בקטגוריה זו" -#: core/models.py:271 +#: core/models.py:279 msgid "parent of this category to form a hierarchical structure" msgstr "הורה של קטגוריה זו כדי ליצור מבנה היררכי" -#: core/models.py:272 +#: core/models.py:280 msgid "parent category" msgstr "קטגוריה ראשית" -#: core/models.py:277 +#: core/models.py:285 msgid "category name" msgstr "שם הקטגוריה" -#: core/models.py:278 +#: core/models.py:286 msgid "provide a name for this category" msgstr "ציין שם לקטגוריה זו" -#: core/models.py:285 +#: core/models.py:293 msgid "add a detailed description for this category" msgstr "הוסף תיאור מפורט לקטגוריה זו" -#: core/models.py:286 +#: core/models.py:294 msgid "category description" msgstr "תיאור הקטגוריה" -#: core/models.py:306 +#: core/models.py:314 msgid "tags that help describe or group this category" msgstr "תגיות המסייעות לתאר או לקבץ קטגוריה זו" -#: core/models.py:313 core/models.py:389 +#: core/models.py:321 core/models.py:397 msgid "priority" msgstr "עדיפות" -#: core/models.py:332 +#: core/models.py:340 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 +1454,47 @@ msgstr "" " שמו, לוגואים, תיאור, קטגוריות קשורות, סלוגן ייחודי וסדר עדיפות. היא מאפשרת " "ארגון וייצוג של נתונים הקשורים למותג בתוך היישום." -#: core/models.py:342 +#: core/models.py:350 msgid "name of this brand" msgstr "שם המותג" -#: core/models.py:343 +#: core/models.py:351 msgid "brand name" msgstr "שם המותג" -#: core/models.py:350 +#: core/models.py:358 msgid "upload a logo representing this brand" msgstr "העלה לוגו המייצג את המותג הזה" -#: core/models.py:352 +#: core/models.py:360 msgid "brand small image" msgstr "תמונה קטנה של המותג" -#: core/models.py:358 +#: core/models.py:366 msgid "upload a big logo representing this brand" msgstr "העלה לוגו גדול המייצג את המותג הזה" -#: core/models.py:360 +#: core/models.py:368 msgid "brand big image" msgstr "תמונה גדולה של המותג" -#: core/models.py:365 +#: core/models.py:373 msgid "add a detailed description of the brand" msgstr "הוסף תיאור מפורט של המותג" -#: core/models.py:366 +#: core/models.py:374 msgid "brand description" msgstr "תיאור המותג" -#: core/models.py:371 +#: core/models.py:379 msgid "optional categories that this brand is associated with" msgstr "קטגוריות אופציונליות שהמותג הזה קשור אליהן" -#: core/models.py:372 +#: core/models.py:380 msgid "associated categories" msgstr "קטגוריות" -#: core/models.py:402 +#: core/models.py:410 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 +1508,68 @@ msgstr "" "רכישה, כמות, SKU ונכסים דיגיטליים. היא מהווה חלק ממערכת ניהול המלאי ומאפשרת " "מעקב והערכה של מוצרים הזמינים מספקים שונים." -#: core/models.py:414 +#: core/models.py:422 msgid "the vendor supplying this product stock" msgstr "הספק המספק את מלאי המוצר הזה" -#: core/models.py:415 +#: core/models.py:423 msgid "associated vendor" msgstr "ספק נלווה" -#: core/models.py:419 +#: core/models.py:427 msgid "final price to the customer after markups" msgstr "המחיר הסופי ללקוח לאחר תוספות" -#: core/models.py:420 +#: core/models.py:428 msgid "selling price" msgstr "מחיר המכירה" -#: core/models.py:425 +#: core/models.py:433 msgid "the product associated with this stock entry" msgstr "המוצר הקשור לרישום המלאי הזה" -#: core/models.py:426 core/models.py:697 core/models.py:744 -#: core/models.py:1641 +#: core/models.py:434 core/models.py:705 core/models.py:752 +#: core/models.py:1649 msgid "associated product" msgstr "מוצר נלווה" -#: core/models.py:433 +#: core/models.py:441 msgid "the price paid to the vendor for this product" msgstr "המחיר ששולם למוכר עבור מוצר זה" -#: core/models.py:434 +#: core/models.py:442 msgid "vendor purchase price" msgstr "מחיר הרכישה של הספק" -#: core/models.py:438 +#: core/models.py:446 msgid "available quantity of the product in stock" msgstr "כמות המוצר הזמינה במלאי" -#: core/models.py:439 +#: core/models.py:447 msgid "quantity in stock" msgstr "כמות במלאי" -#: core/models.py:443 +#: core/models.py:451 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU שהוקצה על ידי הספק לזיהוי המוצר" -#: core/models.py:444 +#: core/models.py:452 msgid "vendor sku" msgstr "מק\"ט הספק" -#: core/models.py:450 +#: core/models.py:458 msgid "digital file associated with this stock if applicable" msgstr "קובץ דיגיטלי הקשור למלאי זה, אם רלוונטי" -#: core/models.py:451 +#: core/models.py:459 msgid "digital file" msgstr "קובץ דיגיטלי" -#: core/models.py:460 +#: core/models.py:468 msgid "stock entries" msgstr "רישומים במלאי" -#: core/models.py:465 +#: core/models.py:473 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1575,55 +1587,55 @@ msgstr "" "ומנהלת את המטמון עבור תכונות הנגישות בתדירות גבוהה כדי לשפר את הביצועים. הוא" " משמש להגדרה ולעיבוד נתוני מוצר והמידע הקשור אליו בתוך יישום." -#: core/models.py:478 +#: core/models.py:486 msgid "category this product belongs to" msgstr "הקטגוריה אליה שייך מוצר זה" -#: core/models.py:487 +#: core/models.py:495 msgid "optionally associate this product with a brand" msgstr "באופן אופציונלי, ניתן לשייך מוצר זה למותג" -#: core/models.py:493 +#: core/models.py:501 msgid "tags that help describe or group this product" msgstr "תגיות המסייעות לתאר או לקבץ מוצר זה" -#: core/models.py:498 +#: core/models.py:506 msgid "indicates whether this product is digitally delivered" msgstr "מציין אם מוצר זה נמסר באופן דיגיטלי" -#: core/models.py:499 +#: core/models.py:507 msgid "is product digital" msgstr "האם המוצר הוא דיגיטלי?" -#: core/models.py:505 +#: core/models.py:513 msgid "provide a clear identifying name for the product" msgstr "ספק שם מזהה ברור למוצר" -#: core/models.py:506 +#: core/models.py:514 msgid "product name" msgstr "שם המוצר" -#: core/models.py:511 core/models.py:786 +#: core/models.py:519 core/models.py:794 msgid "add a detailed description of the product" msgstr "הוסף תיאור מפורט של המוצר" -#: core/models.py:512 +#: core/models.py:520 msgid "product description" msgstr "תיאור המוצר" -#: core/models.py:519 +#: core/models.py:527 msgid "part number for this product" msgstr "מספר חלק עבור מוצר זה" -#: core/models.py:520 +#: core/models.py:528 msgid "part number" msgstr "מספר חלק" -#: core/models.py:539 +#: core/models.py:547 msgid "stock keeping unit for this product" msgstr "יחידת אחסון מלאי עבור מוצר זה" -#: core/models.py:613 +#: core/models.py:621 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 +1650,68 @@ msgstr "" "מספר שלם, מספר צף, בוליאני, מערך ואובייקט. הדבר מאפשר בניית נתונים דינמית " "וגמישה." -#: core/models.py:625 +#: core/models.py:633 msgid "category of this attribute" msgstr "קטגוריה של תכונה זו" -#: core/models.py:633 +#: core/models.py:641 msgid "group of this attribute" msgstr "קבוצה של תכונה זו" -#: core/models.py:639 +#: core/models.py:647 msgid "string" msgstr "מחרוזת" -#: core/models.py:640 +#: core/models.py:648 msgid "integer" msgstr "יושרה" -#: core/models.py:641 +#: core/models.py:649 msgid "float" msgstr "צף" -#: core/models.py:642 +#: core/models.py:650 msgid "boolean" msgstr "בוליאני" -#: core/models.py:643 +#: core/models.py:651 msgid "array" msgstr "מערך" -#: core/models.py:644 +#: core/models.py:652 msgid "object" msgstr "אובייקט" -#: core/models.py:646 +#: core/models.py:654 msgid "type of the attribute's value" msgstr "סוג ערך התכונה" -#: core/models.py:647 +#: core/models.py:655 msgid "value type" msgstr "סוג ערך" -#: core/models.py:652 +#: core/models.py:660 msgid "name of this attribute" msgstr "שם התכונה הזו" -#: core/models.py:653 +#: core/models.py:661 msgid "attribute's name" msgstr "שם התכונה" -#: core/models.py:659 +#: core/models.py:667 msgid "is filterable" msgstr "ניתן לסינון" -#: core/models.py:660 +#: core/models.py:668 msgid "designates whether this attribute can be used for filtering or not" msgstr "מציין אם ניתן להשתמש בתכונה זו לצורך סינון או לא" -#: core/models.py:671 core/models.py:689 +#: core/models.py:679 core/models.py:697 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "תכונה" -#: core/models.py:677 +#: core/models.py:685 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 +1720,19 @@ msgstr "" "מייצג ערך ספציפי עבור תכונה המקושרת למוצר. הוא מקשר את ה\"תכונה\" ל\"ערך\" " "ייחודי, ומאפשר ארגון טוב יותר וייצוג דינמי של מאפייני המוצר." -#: core/models.py:688 +#: core/models.py:696 msgid "attribute of this value" msgstr "תכונה של ערך זה" -#: core/models.py:696 +#: core/models.py:704 msgid "the specific product associated with this attribute's value" msgstr "המוצר הספציפי הקשור לערך של תכונה זו" -#: core/models.py:702 +#: core/models.py:710 msgid "the specific value for this attribute" msgstr "הערך הספציפי עבור תכונה זו" -#: core/models.py:715 +#: core/models.py:723 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 +1744,39 @@ msgstr "" "כולל פונקציונליות להעלאת קבצי תמונה, שיוכם למוצרים ספציפיים וקביעת סדר " "התצוגה שלהם. היא כוללת גם תכונת נגישות עם טקסט חלופי לתמונות." -#: core/models.py:726 +#: core/models.py:734 msgid "provide alternative text for the image for accessibility" msgstr "ספק טקסט חלופי לתמונה לצורך נגישות" -#: core/models.py:727 +#: core/models.py:735 msgid "image alt text" msgstr "טקסט חלופי לתמונה" -#: core/models.py:730 +#: core/models.py:738 msgid "upload the image file for this product" msgstr "העלה את קובץ התמונה עבור מוצר זה" -#: core/models.py:731 core/models.py:756 +#: core/models.py:739 core/models.py:764 msgid "product image" msgstr "תמונת מוצר" -#: core/models.py:737 +#: core/models.py:745 msgid "determines the order in which images are displayed" msgstr "קובע את סדר הצגת התמונות" -#: core/models.py:738 +#: core/models.py:746 msgid "display priority" msgstr "עדיפות תצוגה" -#: core/models.py:743 +#: core/models.py:751 msgid "the product that this image represents" msgstr "המוצר שהדימוי הזה מייצג" -#: core/models.py:757 +#: core/models.py:765 msgid "product images" msgstr "תמונות מוצרים" -#: core/models.py:762 +#: core/models.py:770 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 +1790,39 @@ msgstr "" "להגדרת שיעור ההנחה, מתן פרטים על המבצע וקישורו למוצרים הרלוונטיים. היא " "משתלבת בקטלוג המוצרים כדי לקבוע את הפריטים המושפעים בקמפיין." -#: core/models.py:774 +#: core/models.py:782 msgid "percentage discount for the selected products" msgstr "אחוז ההנחה עבור המוצרים שנבחרו" -#: core/models.py:775 +#: core/models.py:783 msgid "discount percentage" msgstr "אחוז ההנחה" -#: core/models.py:780 +#: core/models.py:788 msgid "provide a unique name for this promotion" msgstr "ציין שם ייחודי לקידום מכירות זה" -#: core/models.py:781 +#: core/models.py:789 msgid "promotion name" msgstr "שם המבצע" -#: core/models.py:787 +#: core/models.py:795 msgid "promotion description" msgstr "תיאור המבצע" -#: core/models.py:792 +#: core/models.py:800 msgid "select which products are included in this promotion" msgstr "בחר אילו מוצרים כלולים במבצע זה" -#: core/models.py:793 +#: core/models.py:801 msgid "included products" msgstr "מוצרים כלולים" -#: core/models.py:797 +#: core/models.py:805 msgid "promotion" msgstr "קידום" -#: core/models.py:808 +#: core/models.py:816 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 +1833,23 @@ msgstr "" "פונקציונליות לניהול אוסף מוצרים, תומכת בפעולות כגון הוספה והסרה של מוצרים, " "וכן תומכת בפעולות להוספה והסרה של מספר מוצרים בבת אחת." -#: core/models.py:820 +#: core/models.py:828 msgid "products that the user has marked as wanted" msgstr "מוצרים שהמשתמש סימן כנחשקים" -#: core/models.py:828 +#: core/models.py:836 msgid "user who owns this wishlist" msgstr "המשתמש שבבעלותו רשימת המשאלות הזו" -#: core/models.py:829 +#: core/models.py:837 msgid "wishlist owner" msgstr "בעל רשימת המשאלות" -#: core/models.py:837 +#: core/models.py:845 msgid "wishlist" msgstr "רשימת משאלות" -#: core/models.py:879 +#: core/models.py:887 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1851,19 +1863,19 @@ msgstr "" "בסוג הקובץ ובנתיב האחסון של קבצי התיעוד. היא מרחיבה את הפונקציונליות של " "מיקסים ספציפיים ומספקת תכונות מותאמות אישית נוספות." -#: core/models.py:892 +#: core/models.py:900 msgid "documentary" msgstr "סרט תיעודי" -#: core/models.py:893 +#: core/models.py:901 msgid "documentaries" msgstr "סרטים תיעודיים" -#: core/models.py:903 +#: core/models.py:911 msgid "unresolved" msgstr "לא פתור" -#: core/models.py:908 +#: core/models.py:916 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1882,59 +1894,59 @@ msgstr "" "נוספים. הסוג גם מאפשר לקשר כתובת למשתמש, מה שמקל על טיפול בנתונים מותאמים " "אישית." -#: core/models.py:923 +#: core/models.py:931 msgid "address line for the customer" msgstr "שורת כתובת עבור הלקוח" -#: core/models.py:924 +#: core/models.py:932 msgid "address line" msgstr "שורת כתובת" -#: core/models.py:926 +#: core/models.py:934 msgid "street" msgstr "רחוב" -#: core/models.py:927 +#: core/models.py:935 msgid "district" msgstr "מחוז" -#: core/models.py:928 +#: core/models.py:936 msgid "city" msgstr "עיר" -#: core/models.py:929 +#: core/models.py:937 msgid "region" msgstr "אזור" -#: core/models.py:930 +#: core/models.py:938 msgid "postal code" msgstr "מיקוד" -#: core/models.py:931 +#: core/models.py:939 msgid "country" msgstr "מדינה" -#: core/models.py:938 +#: core/models.py:946 msgid "geolocation point: (longitude, latitude)" msgstr "נקודת מיקום גיאוגרפי (אורך, רוחב)" -#: core/models.py:941 +#: core/models.py:949 msgid "full JSON response from geocoder for this address" msgstr "תגובה JSON מלאה מ-geocoder עבור כתובת זו" -#: core/models.py:946 +#: core/models.py:954 msgid "stored JSON response from the geocoding service" msgstr "תגובת JSON שמורה משירות הגיאו-קידוד" -#: core/models.py:954 +#: core/models.py:962 msgid "address" msgstr "כתובת" -#: core/models.py:955 +#: core/models.py:963 msgid "addresses" msgstr "כתובות" -#: core/models.py:967 +#: core/models.py:975 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 +1961,87 @@ msgstr "" "יש) ומצב השימוש בו. היא כוללת פונקציונליות לאימות והחלת קוד הקידום על הזמנה," " תוך הקפדה על עמידה באילוצים." -#: core/models.py:981 +#: core/models.py:989 msgid "unique code used by a user to redeem a discount" msgstr "קוד ייחודי המשמש את המשתמש למימוש הנחה" -#: core/models.py:982 +#: core/models.py:990 msgid "promo code identifier" msgstr "מזהה קוד קידום מכירות" -#: core/models.py:989 +#: core/models.py:997 msgid "fixed discount amount applied if percent is not used" msgstr "סכום הנחה קבוע המוחל אם לא נעשה שימוש באחוזים" -#: core/models.py:990 +#: core/models.py:998 msgid "fixed discount amount" msgstr "סכום הנחה קבוע" -#: core/models.py:996 +#: core/models.py:1004 msgid "percentage discount applied if fixed amount is not used" msgstr "אחוז ההנחה שיחול אם לא ייעשה שימוש בסכום הקבוע" -#: core/models.py:997 +#: core/models.py:1005 msgid "percentage discount" msgstr "אחוז ההנחה" -#: core/models.py:1002 +#: core/models.py:1010 msgid "timestamp when the promocode expires" msgstr "חותמת זמן לתוקף הקוד המקדם מכירות" -#: core/models.py:1003 +#: core/models.py:1011 msgid "end validity time" msgstr "תוקף הסוף" -#: core/models.py:1008 +#: core/models.py:1016 msgid "timestamp from which this promocode is valid" msgstr "תאריך התחילה של תוקף קוד המבצע" -#: core/models.py:1009 +#: core/models.py:1017 msgid "start validity time" msgstr "תחילת תוקף" -#: core/models.py:1014 +#: core/models.py:1022 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "חותמת זמן שבה נעשה שימוש בקוד המבצע, ריק אם טרם נעשה בו שימוש" -#: core/models.py:1015 +#: core/models.py:1023 msgid "usage timestamp" msgstr "חותמת זמן שימוש" -#: core/models.py:1020 +#: core/models.py:1028 msgid "user assigned to this promocode if applicable" msgstr "משתמש שהוקצה לקוד קידום מכירות זה, אם רלוונטי" -#: core/models.py:1021 +#: core/models.py:1029 msgid "assigned user" msgstr "משתמש שהוקצה" -#: core/models.py:1028 +#: core/models.py:1036 msgid "promo code" msgstr "קוד קידום מכירות" -#: core/models.py:1029 +#: core/models.py:1037 msgid "promo codes" msgstr "קודי קידום מכירות" -#: core/models.py:1044 +#: core/models.py:1052 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "" "יש להגדיר סוג הנחה אחד בלבד (סכום או אחוז), אך לא את שניהם או אף אחד מהם." -#: core/models.py:1065 +#: core/models.py:1073 msgid "promocode already used" msgstr "קוד המבצע כבר נוצל" -#: core/models.py:1081 +#: core/models.py:1089 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "סוג הנחה לא חוקי עבור קוד קידום מכירות {self.uuid}!" -#: core/models.py:1090 +#: core/models.py:1098 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 +2056,134 @@ msgstr "" "כתובות ולעדכן פרטי משלוח או חיוב. כמו כן, הפונקציונליות תומכת בניהול המוצרים" " במחזור החיים של ההזמנה." -#: core/models.py:1107 +#: core/models.py:1115 msgid "the billing address used for this order" msgstr "כתובת החיוב המשמשת להזמנה זו" -#: core/models.py:1115 +#: core/models.py:1123 msgid "optional promo code applied to this order" msgstr "קוד קידום מכירות אופציונלי שהוחל על הזמנה זו" -#: core/models.py:1116 +#: core/models.py:1124 msgid "applied promo code" msgstr "קוד קידום מכירות שהוחל" -#: core/models.py:1124 +#: core/models.py:1132 msgid "the shipping address used for this order" msgstr "כתובת המשלוח המשמשת להזמנה זו" -#: core/models.py:1125 +#: core/models.py:1133 msgid "shipping address" msgstr "כתובת למשלוח" -#: core/models.py:1131 +#: core/models.py:1139 msgid "current status of the order in its lifecycle" msgstr "הסטטוס הנוכחי של ההזמנה במחזור החיים שלה" -#: core/models.py:1132 +#: core/models.py:1140 msgid "order status" msgstr "סטטוס ההזמנה" -#: core/models.py:1137 core/models.py:1618 +#: core/models.py:1145 core/models.py:1626 msgid "json structure of notifications to display to users" msgstr "" "מבנה JSON של הודעות שיוצגו למשתמשים, בממשק המשתמש המנהלי נעשה שימוש בתצוגת " "טבלה." -#: core/models.py:1143 +#: core/models.py:1151 msgid "json representation of order attributes for this order" msgstr "ייצוג JSON של תכונות ההזמנה עבור הזמנה זו" -#: core/models.py:1149 +#: core/models.py:1157 msgid "the user who placed the order" msgstr "המשתמש שהזמין את ההזמנה" -#: core/models.py:1150 +#: core/models.py:1158 msgid "user" msgstr "משתמש" -#: core/models.py:1156 +#: core/models.py:1164 msgid "the timestamp when the order was finalized" msgstr "החותמת הזמן שבה הושלמה ההזמנה" -#: core/models.py:1157 +#: core/models.py:1165 msgid "buy time" msgstr "לקנות זמן" -#: core/models.py:1164 +#: core/models.py:1172 msgid "a human-readable identifier for the order" msgstr "מזהה קריא לאדם עבור ההזמנה" -#: core/models.py:1165 +#: core/models.py:1173 msgid "human readable id" msgstr "מזהה קריא על ידי בני אדם" -#: core/models.py:1171 +#: core/models.py:1179 msgid "order" msgstr "הזמנה" -#: core/models.py:1209 +#: core/models.py:1217 msgid "a user must have only one pending order at a time" msgstr "למשתמש יכול להיות רק הזמנה אחת בהמתנה בכל פעם!" -#: core/models.py:1249 +#: core/models.py:1257 msgid "you cannot add products to an order that is not a pending one" msgstr "לא ניתן להוסיף מוצרים להזמנה שאינה בהמתנה." -#: core/models.py:1254 +#: core/models.py:1262 msgid "you cannot add inactive products to order" msgstr "לא ניתן להוסיף מוצרים לא פעילים להזמנה" -#: core/models.py:1271 +#: core/models.py:1279 msgid "you cannot add more products than available in stock" msgstr "לא ניתן להוסיף מוצרים מעבר למלאי הזמין" -#: core/models.py:1293 core/models.py:1318 core/models.py:1326 +#: core/models.py:1301 core/models.py:1326 core/models.py:1334 msgid "you cannot remove products from an order that is not a pending one" msgstr "לא ניתן להסיר מוצרים מהזמנה שאינה בהמתנה." -#: core/models.py:1314 +#: core/models.py:1322 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} אינו קיים בשאילתה <{query}>!" -#: core/models.py:1346 +#: core/models.py:1354 msgid "promocode does not exist" msgstr "קוד קידום מכירות אינו קיים" -#: core/models.py:1352 +#: core/models.py:1360 msgid "you can only buy physical products with shipping address specified" msgstr "ניתן לרכוש מוצרים פיזיים רק עם ציון כתובת משלוח!" -#: core/models.py:1371 +#: core/models.py:1379 msgid "address does not exist" msgstr "הכתובת אינה קיימת" -#: core/models.py:1392 core/models.py:1461 +#: core/models.py:1400 core/models.py:1469 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "לא ניתן לבצע רכישה כרגע, אנא נסה שוב בעוד מספר דקות." -#: core/models.py:1395 core/models.py:1457 +#: core/models.py:1403 core/models.py:1465 msgid "invalid force value" msgstr "ערך כוח לא חוקי" -#: core/models.py:1401 core/models.py:1464 +#: core/models.py:1409 core/models.py:1472 msgid "you cannot purchase an empty order!" msgstr "אי אפשר לרכוש הזמנה ריקה!" -#: core/models.py:1420 +#: core/models.py:1428 msgid "you cannot buy an order without a user" msgstr "אי אפשר לקנות הזמנה בלי משתמש!" -#: core/models.py:1434 +#: core/models.py:1442 msgid "a user without a balance cannot buy with balance" msgstr "משתמש ללא יתרה לא יכול לקנות עם יתרה!" -#: core/models.py:1439 +#: core/models.py:1447 msgid "insufficient funds to complete the order" msgstr "אין מספיק כסף כדי להשלים את ההזמנה" -#: core/models.py:1473 +#: core/models.py:1481 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2179,13 +2191,13 @@ msgstr "" "אינך יכול לרכוש ללא רישום, אנא ספק את הפרטים הבאים: שם הלקוח, דוא\"ל הלקוח, " "מספר הטלפון של הלקוח" -#: core/models.py:1482 +#: core/models.py:1490 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "אמצעי תשלום לא חוקי: {payment_method} מ-{available_payment_methods}!" -#: core/models.py:1591 +#: core/models.py:1599 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2204,108 +2216,108 @@ msgstr "" "הכולל או יצירת כתובת URL להורדה עבור מוצרים דיגיטליים. המודל משתלב עם מודלי " "Order ו-Product ומאחסן הפניה אליהם." -#: core/models.py:1606 +#: core/models.py:1614 msgid "the price paid by the customer for this product at purchase time" msgstr "המחיר ששילם הלקוח עבור מוצר זה בעת הרכישה" -#: core/models.py:1607 +#: core/models.py:1615 msgid "purchase price at order time" msgstr "מחיר הרכישה בעת ההזמנה" -#: core/models.py:1612 +#: core/models.py:1620 msgid "internal comments for admins about this ordered product" msgstr "הערות פנימיות למנהלים אודות מוצר זה שהוזמן" -#: core/models.py:1613 +#: core/models.py:1621 msgid "internal comments" msgstr "הערות פנימיות" -#: core/models.py:1619 +#: core/models.py:1627 msgid "user notifications" msgstr "הודעות למשתמשים" -#: core/models.py:1624 +#: core/models.py:1632 msgid "json representation of this item's attributes" msgstr "ייצוג JSON של תכונות פריט זה" -#: core/models.py:1625 +#: core/models.py:1633 msgid "ordered product attributes" msgstr "תכונות המוצר שהוזמן" -#: core/models.py:1630 +#: core/models.py:1638 msgid "reference to the parent order that contains this product" msgstr "הפניה להזמנה הראשית המכילה מוצר זה" -#: core/models.py:1631 +#: core/models.py:1639 msgid "parent order" msgstr "הזמנת הורים" -#: core/models.py:1640 +#: core/models.py:1648 msgid "the specific product associated with this order line" msgstr "המוצר הספציפי הקשור לשורת הזמנה זו" -#: core/models.py:1647 +#: core/models.py:1655 msgid "quantity of this specific product in the order" msgstr "כמות המוצר הספציפי הזה בהזמנה" -#: core/models.py:1648 +#: core/models.py:1656 msgid "product quantity" msgstr "כמות המוצר" -#: core/models.py:1655 +#: core/models.py:1663 msgid "current status of this product in the order" msgstr "הסטטוס הנוכחי של מוצר זה בהזמנה" -#: core/models.py:1656 +#: core/models.py:1664 msgid "product line status" msgstr "סטטוס קו המוצרים" -#: core/models.py:1719 +#: core/models.py:1727 msgid "order product must have an order" msgstr "המוצר בהזמנה חייב להיות קשור להזמנה!" -#: core/models.py:1721 +#: core/models.py:1729 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "פעולה שגויה שצוינה עבור משוב: {action}!" -#: core/models.py:1735 +#: core/models.py:1743 msgid "you cannot feedback an order which is not received" msgstr "אינך יכול להחזיר הזמנה שלא התקבלה" -#: core/models.py:1741 +#: core/models.py:1749 msgid "name" msgstr "שם" -#: core/models.py:1742 +#: core/models.py:1750 msgid "URL of the integration" msgstr "כתובת ה-URL של האינטגרציה" -#: core/models.py:1743 +#: core/models.py:1751 msgid "authentication credentials" msgstr "אישורי אימות" -#: core/models.py:1765 +#: core/models.py:1773 msgid "you can only have one default CRM provider" msgstr "ניתן להגדיר ספק CRM ברירת מחדל אחד בלבד" -#: core/models.py:1775 +#: core/models.py:1783 msgid "CRM" msgstr "CRM" -#: core/models.py:1776 +#: core/models.py:1784 msgid "CRMs" msgstr "CRM" -#: core/models.py:1788 +#: core/models.py:1796 msgid "order CRM link" msgstr "קישור CRM של ההזמנה" -#: core/models.py:1789 +#: core/models.py:1797 msgid "orders CRM links" msgstr "קישורי CRM של הזמנות" -#: core/models.py:1794 +#: core/models.py:1802 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2320,15 +2332,15 @@ msgstr "" " היא כוללת שיטה ליצירת כתובת URL להורדת הנכס כאשר ההזמנה הקשורה נמצאת במצב " "'הושלמה'." -#: core/models.py:1808 +#: core/models.py:1816 msgid "download" msgstr "הורדה" -#: core/models.py:1809 +#: core/models.py:1817 msgid "downloads" msgstr "הורדות" -#: core/models.py:1823 +#: core/models.py:1831 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2341,28 +2353,28 @@ msgstr "" "הקשור בהזמנה ודירוג שהוקצה על ידי המשתמש. המחלקה משתמשת בשדות מסד נתונים כדי" " למדל ולנהל ביעילות נתוני משוב." -#: core/models.py:1835 +#: core/models.py:1843 msgid "user-provided comments about their experience with the product" msgstr "הערות שסיפקו המשתמשים על חווייתם עם המוצר" -#: core/models.py:1836 +#: core/models.py:1844 msgid "feedback comments" msgstr "הערות משוב" -#: core/models.py:1843 +#: core/models.py:1851 msgid "" "references the specific product in an order that this feedback is about" msgstr "מתייחס למוצר הספציפי בהזמנה שעליה מתייחס משוב זה." -#: core/models.py:1844 +#: core/models.py:1852 msgid "related order product" msgstr "מוצר בהזמנה קשורה" -#: core/models.py:1849 +#: core/models.py:1857 msgid "user-assigned rating for the product" msgstr "דירוג שהוקצה על ידי המשתמש למוצר" -#: core/models.py:1850 +#: core/models.py:1858 msgid "product rating" msgstr "דירוג מוצר" @@ -2564,22 +2576,22 @@ msgstr "נדרשים הן הנתונים והן זמן ההמתנה" msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "ערך זמן המתנה לא חוקי, הוא חייב להיות בין 0 ל-216000 שניות" -#: core/utils/emailing.py:25 +#: core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | צור קשר יוזם" -#: core/utils/emailing.py:74 +#: core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | אישור הזמנה" -#: core/utils/emailing.py:109 +#: core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | הזמנה נמסרה" -#: core/utils/emailing.py:197 +#: core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | קוד קידום מכירות מוענק" @@ -2809,7 +2821,7 @@ msgstr "" " היא מרחיבה את `EvibesViewSet` הבסיסי ומשתמשת במערכת הסינון של Django " "לשאילתת נתונים." -#: core/viewsets.py:593 +#: core/viewsets.py:594 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2826,7 +2838,7 @@ msgstr "" "בהתאם לפעולה הספציפית המתבצעת ומאכוף הרשאות בהתאם בעת אינטראקציה עם נתוני " "הזמנה." -#: core/viewsets.py:782 +#: core/viewsets.py:784 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2839,25 +2851,25 @@ msgstr "" "הרשאות והחלפת סריאלייזר בהתאם לפעולה המבוקשת. בנוסף, הוא מספק פעולה מפורטת " "לטיפול במשוב על מופעים של OrderProduct." -#: core/viewsets.py:833 +#: core/viewsets.py:835 msgid "Manages operations related to Product images in the application. " msgstr "מנהל פעולות הקשורות לתמונות מוצרים ביישום." -#: core/viewsets.py:845 +#: core/viewsets.py:847 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "מנהל את אחזור וטיפול במקרי PromoCode באמצעות פעולות API שונות." -#: core/viewsets.py:866 +#: core/viewsets.py:868 msgid "Represents a view set for managing promotions. " msgstr "מייצג קבוצת תצוגות לניהול מבצעים." -#: core/viewsets.py:878 +#: core/viewsets.py:880 msgid "Handles operations related to Stock data in the system." msgstr "מטפל בפעולות הקשורות לנתוני המלאי במערכת." -#: core/viewsets.py:892 +#: core/viewsets.py:894 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -2874,7 +2886,7 @@ msgstr "" "שמשתמשים יוכלו לנהל רק את רשימות המשאלות שלהם, אלא אם כן ניתנו הרשאות " "מפורשות." -#: core/viewsets.py:1007 +#: core/viewsets.py:1009 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -2887,12 +2899,12 @@ msgstr "" "לישויות כתובת. היא כוללת התנהגויות מיוחדות עבור שיטות HTTP שונות, עקיפת " "סריאלייזר וטיפול בהרשאות בהתבסס על הקשר הבקשה." -#: core/viewsets.py:1074 +#: core/viewsets.py:1076 #, python-brace-format msgid "Geocoding error: {e}" msgstr "שגיאת קידוד גיאוגרפי: {e}" -#: core/viewsets.py:1081 +#: core/viewsets.py:1083 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/hi_IN/LC_MESSAGES/django.po b/core/locale/hi_IN/LC_MESSAGES/django.po index ea8f005f..ef29e6ec 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -49,82 +49,86 @@ msgstr "" msgid "when the object was last modified" msgstr "" -#: core/admin.py:63 +#: core/admin.py:68 msgid "translations" msgstr "" -#: core/admin.py:67 +#: core/admin.py:72 msgid "general" msgstr "" -#: core/admin.py:69 +#: core/admin.py:74 msgid "relations" msgstr "" -#: core/admin.py:87 -msgid "metadata" +#: core/admin.py:76 +msgid "additional info" msgstr "" #: core/admin.py:94 +msgid "metadata" +msgstr "" + +#: core/admin.py:101 msgid "timestamps" msgstr "" -#: core/admin.py:109 +#: core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "" -#: core/admin.py:114 +#: core/admin.py:121 msgid "selected items have been activated." msgstr "" -#: core/admin.py:120 +#: core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "" -#: core/admin.py:125 +#: core/admin.py:132 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:701 core/models.py:709 +#: core/admin.py:144 core/graphene/object_types.py:609 +#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 msgid "attribute value" msgstr "" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 +#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718 msgid "attribute values" msgstr "" -#: core/admin.py:146 +#: core/admin.py:153 msgid "image" msgstr "" -#: core/admin.py:147 core/graphene/object_types.py:501 +#: core/admin.py:154 core/graphene/object_types.py:501 msgid "images" msgstr "" -#: core/admin.py:155 core/models.py:459 +#: core/admin.py:162 core/models.py:467 msgid "stock" msgstr "" -#: core/admin.py:156 core/graphene/object_types.py:663 +#: core/admin.py:163 core/graphene/object_types.py:663 msgid "stocks" msgstr "" -#: core/admin.py:166 core/models.py:1667 +#: core/admin.py:173 core/models.py:1675 msgid "order product" msgstr "" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 msgid "order products" msgstr "" -#: core/admin.py:180 core/admin.py:181 +#: core/admin.py:187 core/admin.py:188 msgid "children" msgstr "" -#: core/admin.py:566 +#: core/admin.py:940 msgid "Config" msgstr "" @@ -678,23 +682,23 @@ msgstr "" msgid "add or remove feedback on an order–product relation" msgstr "" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 msgid "no search term provided." msgstr "" -#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +#: core/filters.py:65 core/filters.py:399 core/filters.py:526 msgid "Search" msgstr "" -#: core/filters.py:66 core/filters.py:554 core/filters.py:583 +#: core/filters.py:66 core/filters.py:556 core/filters.py:585 msgid "UUID" msgstr "" -#: core/filters.py:67 core/filters.py:399 core/filters.py:526 +#: core/filters.py:67 core/filters.py:401 core/filters.py:528 msgid "Name" msgstr "" -#: core/filters.py:68 core/filters.py:528 +#: core/filters.py:68 core/filters.py:530 msgid "Categories" msgstr "" @@ -702,7 +706,7 @@ msgstr "" msgid "Categories Slugs" msgstr "" -#: core/filters.py:71 core/filters.py:407 +#: core/filters.py:71 core/filters.py:409 msgid "Tags" msgstr "" @@ -730,8 +734,8 @@ msgstr "" msgid "Quantity" msgstr "" -#: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:301 core/models.py:383 core/models.py:536 +#: core/filters.py:78 core/filters.py:403 core/filters.py:529 +#: core/models.py:309 core/models.py:391 core/models.py:544 msgid "Slug" msgstr "" @@ -747,7 +751,7 @@ msgstr "" msgid "Include personal ordered" msgstr "" -#: core/filters.py:85 core/models.py:540 +#: core/filters.py:85 core/models.py:548 msgid "SKU" msgstr "" @@ -755,48 +759,48 @@ msgstr "" msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" -#: core/filters.py:324 +#: core/filters.py:326 msgid "Search (ID, product name or part number)" msgstr "" -#: core/filters.py:327 +#: core/filters.py:329 msgid "Bought after (inclusive)" msgstr "" -#: core/filters.py:328 +#: core/filters.py:330 msgid "Bought before (inclusive)" msgstr "" -#: core/filters.py:331 core/filters.py:378 core/filters.py:585 +#: core/filters.py:333 core/filters.py:380 core/filters.py:587 msgid "User email" msgstr "" -#: core/filters.py:332 core/filters.py:379 core/filters.py:563 -#: core/filters.py:584 +#: core/filters.py:334 core/filters.py:381 core/filters.py:565 +#: core/filters.py:586 msgid "User UUID" msgstr "" -#: core/filters.py:333 +#: core/filters.py:335 msgid "Status" msgstr "" -#: core/filters.py:337 +#: core/filters.py:339 msgid "Human Readable ID" msgstr "" -#: core/filters.py:400 +#: core/filters.py:402 msgid "Parent" msgstr "" -#: core/filters.py:404 +#: core/filters.py:406 msgid "Whole category(has at least 1 product or not)" msgstr "" -#: core/filters.py:408 +#: core/filters.py:410 msgid "Level" msgstr "" -#: core/filters.py:558 +#: core/filters.py:560 msgid "Product UUID" msgstr "" @@ -851,7 +855,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:679 +#: core/graphene/mutations.py:527 core/viewsets.py:680 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" @@ -925,9 +929,9 @@ msgstr "" msgid "original address string provided by the user" msgstr "" -#: 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 +#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 +#: core/models.py:1289 core/models.py:1318 core/models.py:1343 +#: core/viewsets.py:683 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" @@ -941,8 +945,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:672 core/models.py:1144 -#: core/models.py:1744 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 +#: core/models.py:1752 msgid "attributes" msgstr "" @@ -955,11 +959,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:326 core/models.py:626 +#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 msgid "categories" msgstr "" -#: core/graphene/object_types.py:124 core/models.py:397 +#: core/graphene/object_types.py:124 core/models.py:405 msgid "brands" msgstr "" @@ -968,7 +972,7 @@ msgid "category image url" msgstr "" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:263 +#: core/models.py:271 msgid "markup percentage" msgstr "" @@ -988,7 +992,7 @@ msgstr "" msgid "products in this category" msgstr "" -#: core/graphene/object_types.py:351 core/models.py:169 +#: core/graphene/object_types.py:351 core/models.py:177 msgid "vendors" msgstr "" @@ -1013,7 +1017,7 @@ msgid "represents feedback from a user." msgstr "" #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1138 +#: core/models.py:1146 msgid "notifications" msgstr "" @@ -1021,7 +1025,7 @@ msgstr "" msgid "download url for this order product if applicable" msgstr "" -#: core/graphene/object_types.py:400 core/models.py:1860 +#: core/graphene/object_types.py:400 core/models.py:1868 msgid "feedback" msgstr "" @@ -1029,7 +1033,7 @@ msgstr "" msgid "a list of order products in this order" msgstr "" -#: core/graphene/object_types.py:436 core/models.py:1108 +#: core/graphene/object_types.py:436 core/models.py:1116 msgid "billing address" msgstr "" @@ -1055,7 +1059,7 @@ msgstr "" msgid "transactions for this order" msgstr "" -#: core/graphene/object_types.py:465 core/models.py:1172 +#: core/graphene/object_types.py:465 core/models.py:1180 msgid "orders" msgstr "" @@ -1067,19 +1071,19 @@ msgstr "" msgid "product's images" msgstr "" -#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 +#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 msgid "category" msgstr "" -#: core/graphene/object_types.py:502 core/models.py:1861 +#: core/graphene/object_types.py:502 core/models.py:1869 msgid "feedbacks" msgstr "" -#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 +#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 msgid "brand" msgstr "" -#: core/graphene/object_types.py:504 core/models.py:101 +#: core/graphene/object_types.py:504 core/models.py:102 msgid "attribute groups" msgstr "" @@ -1107,7 +1111,7 @@ msgstr "" msgid "only available for personal orders" msgstr "" -#: core/graphene/object_types.py:534 core/models.py:550 +#: core/graphene/object_types.py:534 core/models.py:558 msgid "products" msgstr "" @@ -1119,15 +1123,15 @@ msgstr "" msgid "products on sale" msgstr "" -#: core/graphene/object_types.py:651 core/models.py:798 +#: core/graphene/object_types.py:651 core/models.py:806 msgid "promotions" msgstr "" -#: core/graphene/object_types.py:655 core/models.py:168 +#: core/graphene/object_types.py:655 core/models.py:176 msgid "vendor" msgstr "" -#: core/graphene/object_types.py:656 core/models.py:549 +#: core/graphene/object_types.py:656 core/models.py:557 #: 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 +1139,11 @@ msgstr "" msgid "product" msgstr "" -#: core/graphene/object_types.py:667 core/models.py:821 +#: core/graphene/object_types.py:667 core/models.py:829 msgid "wishlisted products" msgstr "" -#: core/graphene/object_types.py:673 core/models.py:838 +#: core/graphene/object_types.py:673 core/models.py:846 msgid "wishlists" msgstr "" @@ -1147,7 +1151,7 @@ msgstr "" msgid "tagged products" msgstr "" -#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 +#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 msgid "product tags" msgstr "" @@ -1232,7 +1236,7 @@ msgstr "" msgid "posts search results" msgstr "" -#: core/models.py:70 +#: core/models.py:71 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1240,23 +1244,23 @@ msgid "" "categorizing and managing attributes more effectively in acomplex system." msgstr "" -#: core/models.py:86 +#: core/models.py:87 msgid "parent of this group" msgstr "" -#: core/models.py:87 +#: core/models.py:88 msgid "parent attribute group" msgstr "" -#: core/models.py:91 core/models.py:92 +#: core/models.py:92 core/models.py:93 msgid "attribute group's name" msgstr "" -#: core/models.py:100 core/models.py:634 +#: core/models.py:101 core/models.py:642 msgid "attribute group" msgstr "" -#: core/models.py:106 +#: core/models.py:107 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1267,31 +1271,39 @@ msgid "" "use in systems that interact with third-party vendors." msgstr "" -#: core/models.py:119 +#: core/models.py:120 msgid "stores credentials and endpoints required for vendor communication" msgstr "" -#: core/models.py:120 +#: core/models.py:121 msgid "authentication info" msgstr "" -#: core/models.py:125 +#: core/models.py:126 msgid "define the markup for products retrieved from this vendor" msgstr "" -#: core/models.py:126 +#: core/models.py:127 msgid "vendor markup percentage" msgstr "" -#: core/models.py:130 +#: core/models.py:131 msgid "name of this vendor" msgstr "" -#: core/models.py:131 +#: core/models.py:132 msgid "vendor name" msgstr "" -#: core/models.py:177 +#: core/models.py:143 +msgid "response file" +msgstr "" + +#: core/models.py:144 +msgid "vendor's last processing response" +msgstr "" + +#: core/models.py:185 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1300,42 +1312,42 @@ msgid "" "metadata customization for administrative purposes." msgstr "" -#: core/models.py:189 core/models.py:220 +#: core/models.py:197 core/models.py:228 msgid "internal tag identifier for the product tag" msgstr "" -#: core/models.py:190 core/models.py:221 +#: core/models.py:198 core/models.py:229 msgid "tag name" msgstr "" -#: core/models.py:194 core/models.py:225 +#: core/models.py:202 core/models.py:233 msgid "user-friendly name for the product tag" msgstr "" -#: core/models.py:195 core/models.py:226 +#: core/models.py:203 core/models.py:234 msgid "tag display name" msgstr "" -#: core/models.py:203 +#: core/models.py:211 msgid "product tag" msgstr "" -#: core/models.py:209 +#: core/models.py:217 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:234 +#: core/models.py:242 msgid "category tag" msgstr "" -#: core/models.py:235 core/models.py:307 +#: core/models.py:243 core/models.py:315 msgid "category tags" msgstr "" -#: core/models.py:240 +#: core/models.py:248 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1348,51 +1360,51 @@ msgid "" "priority." msgstr "" -#: core/models.py:254 +#: core/models.py:262 msgid "upload an image representing this category" msgstr "" -#: core/models.py:257 +#: core/models.py:265 msgid "category image" msgstr "" -#: core/models.py:262 +#: core/models.py:270 msgid "define a markup percentage for products in this category" msgstr "" -#: core/models.py:271 +#: core/models.py:279 msgid "parent of this category to form a hierarchical structure" msgstr "" -#: core/models.py:272 +#: core/models.py:280 msgid "parent category" msgstr "" -#: core/models.py:277 +#: core/models.py:285 msgid "category name" msgstr "" -#: core/models.py:278 +#: core/models.py:286 msgid "provide a name for this category" msgstr "" -#: core/models.py:285 +#: core/models.py:293 msgid "add a detailed description for this category" msgstr "" -#: core/models.py:286 +#: core/models.py:294 msgid "category description" msgstr "" -#: core/models.py:306 +#: core/models.py:314 msgid "tags that help describe or group this category" msgstr "" -#: core/models.py:313 core/models.py:389 +#: core/models.py:321 core/models.py:397 msgid "priority" msgstr "" -#: core/models.py:332 +#: core/models.py:340 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 +1412,47 @@ msgid "" "organization and representation of brand-related data within the application." msgstr "" -#: core/models.py:342 +#: core/models.py:350 msgid "name of this brand" msgstr "" -#: core/models.py:343 +#: core/models.py:351 msgid "brand name" msgstr "" -#: core/models.py:350 +#: core/models.py:358 msgid "upload a logo representing this brand" msgstr "" -#: core/models.py:352 +#: core/models.py:360 msgid "brand small image" msgstr "" -#: core/models.py:358 +#: core/models.py:366 msgid "upload a big logo representing this brand" msgstr "" -#: core/models.py:360 +#: core/models.py:368 msgid "brand big image" msgstr "" -#: core/models.py:365 +#: core/models.py:373 msgid "add a detailed description of the brand" msgstr "" -#: core/models.py:366 +#: core/models.py:374 msgid "brand description" msgstr "" -#: core/models.py:371 +#: core/models.py:379 msgid "optional categories that this brand is associated with" msgstr "" -#: core/models.py:372 +#: core/models.py:380 msgid "associated categories" msgstr "" -#: core/models.py:402 +#: core/models.py:410 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 +1462,67 @@ msgid "" "from various vendors." msgstr "" -#: core/models.py:414 +#: core/models.py:422 msgid "the vendor supplying this product stock" msgstr "" -#: core/models.py:415 +#: core/models.py:423 msgid "associated vendor" msgstr "" -#: core/models.py:419 +#: core/models.py:427 msgid "final price to the customer after markups" msgstr "" -#: core/models.py:420 +#: core/models.py:428 msgid "selling price" msgstr "" -#: core/models.py:425 +#: core/models.py:433 msgid "the product associated with this stock entry" msgstr "" -#: core/models.py:426 core/models.py:697 core/models.py:744 core/models.py:1641 +#: core/models.py:434 core/models.py:705 core/models.py:752 core/models.py:1649 msgid "associated product" msgstr "" -#: core/models.py:433 +#: core/models.py:441 msgid "the price paid to the vendor for this product" msgstr "" -#: core/models.py:434 +#: core/models.py:442 msgid "vendor purchase price" msgstr "" -#: core/models.py:438 +#: core/models.py:446 msgid "available quantity of the product in stock" msgstr "" -#: core/models.py:439 +#: core/models.py:447 msgid "quantity in stock" msgstr "" -#: core/models.py:443 +#: core/models.py:451 msgid "vendor-assigned SKU for identifying the product" msgstr "" -#: core/models.py:444 +#: core/models.py:452 msgid "vendor sku" msgstr "" -#: core/models.py:450 +#: core/models.py:458 msgid "digital file associated with this stock if applicable" msgstr "" -#: core/models.py:451 +#: core/models.py:459 msgid "digital file" msgstr "" -#: core/models.py:460 +#: core/models.py:468 msgid "stock entries" msgstr "" -#: core/models.py:465 +#: core/models.py:473 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1522,55 +1534,55 @@ msgid "" "product data and its associated information within an application." msgstr "" -#: core/models.py:478 +#: core/models.py:486 msgid "category this product belongs to" msgstr "" -#: core/models.py:487 +#: core/models.py:495 msgid "optionally associate this product with a brand" msgstr "" -#: core/models.py:493 +#: core/models.py:501 msgid "tags that help describe or group this product" msgstr "" -#: core/models.py:498 +#: core/models.py:506 msgid "indicates whether this product is digitally delivered" msgstr "" -#: core/models.py:499 +#: core/models.py:507 msgid "is product digital" msgstr "" -#: core/models.py:505 +#: core/models.py:513 msgid "provide a clear identifying name for the product" msgstr "" -#: core/models.py:506 +#: core/models.py:514 msgid "product name" msgstr "" -#: core/models.py:511 core/models.py:786 +#: core/models.py:519 core/models.py:794 msgid "add a detailed description of the product" msgstr "" -#: core/models.py:512 +#: core/models.py:520 msgid "product description" msgstr "" -#: core/models.py:519 +#: core/models.py:527 msgid "part number for this product" msgstr "" -#: core/models.py:520 +#: core/models.py:528 msgid "part number" msgstr "" -#: core/models.py:539 +#: core/models.py:547 msgid "stock keeping unit for this product" msgstr "" -#: core/models.py:613 +#: core/models.py:621 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 +1592,87 @@ msgid "" "for dynamic and flexible data structuring." msgstr "" -#: core/models.py:625 +#: core/models.py:633 msgid "category of this attribute" msgstr "" -#: core/models.py:633 +#: core/models.py:641 msgid "group of this attribute" msgstr "" -#: core/models.py:639 +#: core/models.py:647 msgid "string" msgstr "" -#: core/models.py:640 +#: core/models.py:648 msgid "integer" msgstr "" -#: core/models.py:641 +#: core/models.py:649 msgid "float" msgstr "" -#: core/models.py:642 +#: core/models.py:650 msgid "boolean" msgstr "" -#: core/models.py:643 +#: core/models.py:651 msgid "array" msgstr "" -#: core/models.py:644 +#: core/models.py:652 msgid "object" msgstr "" -#: core/models.py:646 +#: core/models.py:654 msgid "type of the attribute's value" msgstr "" -#: core/models.py:647 +#: core/models.py:655 msgid "value type" msgstr "" -#: core/models.py:652 +#: core/models.py:660 msgid "name of this attribute" msgstr "" -#: core/models.py:653 +#: core/models.py:661 msgid "attribute's name" msgstr "" -#: core/models.py:659 +#: core/models.py:667 msgid "is filterable" msgstr "" -#: core/models.py:660 +#: core/models.py:668 msgid "designates whether this attribute can be used for filtering or not" msgstr "" -#: core/models.py:671 core/models.py:689 +#: core/models.py:679 core/models.py:697 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "" -#: core/models.py:677 +#: core/models.py:685 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:688 +#: core/models.py:696 msgid "attribute of this value" msgstr "" -#: core/models.py:696 +#: core/models.py:704 msgid "the specific product associated with this attribute's value" msgstr "" -#: core/models.py:702 +#: core/models.py:710 msgid "the specific value for this attribute" msgstr "" -#: core/models.py:715 +#: core/models.py:723 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 +1681,39 @@ msgid "" "with alternative text for the images." msgstr "" -#: core/models.py:726 +#: core/models.py:734 msgid "provide alternative text for the image for accessibility" msgstr "" -#: core/models.py:727 +#: core/models.py:735 msgid "image alt text" msgstr "" -#: core/models.py:730 +#: core/models.py:738 msgid "upload the image file for this product" msgstr "" -#: core/models.py:731 core/models.py:756 +#: core/models.py:739 core/models.py:764 msgid "product image" msgstr "" -#: core/models.py:737 +#: core/models.py:745 msgid "determines the order in which images are displayed" msgstr "" -#: core/models.py:738 +#: core/models.py:746 msgid "display priority" msgstr "" -#: core/models.py:743 +#: core/models.py:751 msgid "the product that this image represents" msgstr "" -#: core/models.py:757 +#: core/models.py:765 msgid "product images" msgstr "" -#: core/models.py:762 +#: core/models.py:770 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 +1723,39 @@ msgid "" "affected items in the campaign." msgstr "" -#: core/models.py:774 +#: core/models.py:782 msgid "percentage discount for the selected products" msgstr "" -#: core/models.py:775 +#: core/models.py:783 msgid "discount percentage" msgstr "" -#: core/models.py:780 +#: core/models.py:788 msgid "provide a unique name for this promotion" msgstr "" -#: core/models.py:781 +#: core/models.py:789 msgid "promotion name" msgstr "" -#: core/models.py:787 +#: core/models.py:795 msgid "promotion description" msgstr "" -#: core/models.py:792 +#: core/models.py:800 msgid "select which products are included in this promotion" msgstr "" -#: core/models.py:793 +#: core/models.py:801 msgid "included products" msgstr "" -#: core/models.py:797 +#: core/models.py:805 msgid "promotion" msgstr "" -#: core/models.py:808 +#: core/models.py:816 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 +1763,23 @@ msgid "" "operations for adding and removing multiple products at once." msgstr "" -#: core/models.py:820 +#: core/models.py:828 msgid "products that the user has marked as wanted" msgstr "" -#: core/models.py:828 +#: core/models.py:836 msgid "user who owns this wishlist" msgstr "" -#: core/models.py:829 +#: core/models.py:837 msgid "wishlist owner" msgstr "" -#: core/models.py:837 +#: core/models.py:845 msgid "wishlist" msgstr "" -#: core/models.py:879 +#: core/models.py:887 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1777,19 +1789,19 @@ msgid "" "custom features." msgstr "" -#: core/models.py:892 +#: core/models.py:900 msgid "documentary" msgstr "" -#: core/models.py:893 +#: core/models.py:901 msgid "documentaries" msgstr "" -#: core/models.py:903 +#: core/models.py:911 msgid "unresolved" msgstr "" -#: core/models.py:908 +#: core/models.py:916 msgid "" "Represents an address entity that includes location details and associations " "with a user. Provides functionality for geographic and address data storage, " @@ -1801,59 +1813,59 @@ msgid "" "address with a user, facilitating personalized data handling." msgstr "" -#: core/models.py:923 +#: core/models.py:931 msgid "address line for the customer" msgstr "" -#: core/models.py:924 +#: core/models.py:932 msgid "address line" msgstr "" -#: core/models.py:926 +#: core/models.py:934 msgid "street" msgstr "" -#: core/models.py:927 +#: core/models.py:935 msgid "district" msgstr "" -#: core/models.py:928 +#: core/models.py:936 msgid "city" msgstr "" -#: core/models.py:929 +#: core/models.py:937 msgid "region" msgstr "" -#: core/models.py:930 +#: core/models.py:938 msgid "postal code" msgstr "" -#: core/models.py:931 +#: core/models.py:939 msgid "country" msgstr "" -#: core/models.py:938 +#: core/models.py:946 msgid "geolocation point: (longitude, latitude)" msgstr "" -#: core/models.py:941 +#: core/models.py:949 msgid "full JSON response from geocoder for this address" msgstr "" -#: core/models.py:946 +#: core/models.py:954 msgid "stored JSON response from the geocoding service" msgstr "" -#: core/models.py:954 +#: core/models.py:962 msgid "address" msgstr "" -#: core/models.py:955 +#: core/models.py:963 msgid "addresses" msgstr "" -#: core/models.py:967 +#: core/models.py:975 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 +1875,86 @@ msgid "" "apply the promo code to an order while ensuring constraints are met." msgstr "" -#: core/models.py:981 +#: core/models.py:989 msgid "unique code used by a user to redeem a discount" msgstr "" -#: core/models.py:982 +#: core/models.py:990 msgid "promo code identifier" msgstr "" -#: core/models.py:989 +#: core/models.py:997 msgid "fixed discount amount applied if percent is not used" msgstr "" -#: core/models.py:990 +#: core/models.py:998 msgid "fixed discount amount" msgstr "" -#: core/models.py:996 +#: core/models.py:1004 msgid "percentage discount applied if fixed amount is not used" msgstr "" -#: core/models.py:997 +#: core/models.py:1005 msgid "percentage discount" msgstr "" -#: core/models.py:1002 +#: core/models.py:1010 msgid "timestamp when the promocode expires" msgstr "" -#: core/models.py:1003 +#: core/models.py:1011 msgid "end validity time" msgstr "" -#: core/models.py:1008 +#: core/models.py:1016 msgid "timestamp from which this promocode is valid" msgstr "" -#: core/models.py:1009 +#: core/models.py:1017 msgid "start validity time" msgstr "" -#: core/models.py:1014 +#: core/models.py:1022 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" -#: core/models.py:1015 +#: core/models.py:1023 msgid "usage timestamp" msgstr "" -#: core/models.py:1020 +#: core/models.py:1028 msgid "user assigned to this promocode if applicable" msgstr "" -#: core/models.py:1021 +#: core/models.py:1029 msgid "assigned user" msgstr "" -#: core/models.py:1028 +#: core/models.py:1036 msgid "promo code" msgstr "" -#: core/models.py:1029 +#: core/models.py:1037 msgid "promo codes" msgstr "" -#: core/models.py:1044 +#: core/models.py:1052 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "" -#: core/models.py:1065 +#: core/models.py:1073 msgid "promocode already used" msgstr "" -#: core/models.py:1081 +#: core/models.py:1089 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "" -#: core/models.py:1090 +#: core/models.py:1098 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 +1964,144 @@ msgid "" "supports managing the products in the order lifecycle." msgstr "" -#: core/models.py:1107 +#: core/models.py:1115 msgid "the billing address used for this order" msgstr "" -#: core/models.py:1115 +#: core/models.py:1123 msgid "optional promo code applied to this order" msgstr "" -#: core/models.py:1116 +#: core/models.py:1124 msgid "applied promo code" msgstr "" -#: core/models.py:1124 +#: core/models.py:1132 msgid "the shipping address used for this order" msgstr "" -#: core/models.py:1125 +#: core/models.py:1133 msgid "shipping address" msgstr "" -#: core/models.py:1131 +#: core/models.py:1139 msgid "current status of the order in its lifecycle" msgstr "" -#: core/models.py:1132 +#: core/models.py:1140 msgid "order status" msgstr "" -#: core/models.py:1137 core/models.py:1618 +#: core/models.py:1145 core/models.py:1626 msgid "json structure of notifications to display to users" msgstr "" -#: core/models.py:1143 +#: core/models.py:1151 msgid "json representation of order attributes for this order" msgstr "" -#: core/models.py:1149 +#: core/models.py:1157 msgid "the user who placed the order" msgstr "" -#: core/models.py:1150 +#: core/models.py:1158 msgid "user" msgstr "" -#: core/models.py:1156 +#: core/models.py:1164 msgid "the timestamp when the order was finalized" msgstr "" -#: core/models.py:1157 +#: core/models.py:1165 msgid "buy time" msgstr "" -#: core/models.py:1164 +#: core/models.py:1172 msgid "a human-readable identifier for the order" msgstr "" -#: core/models.py:1165 +#: core/models.py:1173 msgid "human readable id" msgstr "" -#: core/models.py:1171 +#: core/models.py:1179 msgid "order" msgstr "" -#: core/models.py:1209 +#: core/models.py:1217 msgid "a user must have only one pending order at a time" msgstr "" -#: core/models.py:1249 +#: core/models.py:1257 msgid "you cannot add products to an order that is not a pending one" msgstr "" -#: core/models.py:1254 +#: core/models.py:1262 msgid "you cannot add inactive products to order" msgstr "" -#: core/models.py:1271 +#: core/models.py:1279 msgid "you cannot add more products than available in stock" msgstr "" -#: core/models.py:1293 core/models.py:1318 core/models.py:1326 +#: core/models.py:1301 core/models.py:1326 core/models.py:1334 msgid "you cannot remove products from an order that is not a pending one" msgstr "" -#: core/models.py:1314 +#: core/models.py:1322 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "" -#: core/models.py:1346 +#: core/models.py:1354 msgid "promocode does not exist" msgstr "" -#: core/models.py:1352 +#: core/models.py:1360 msgid "you can only buy physical products with shipping address specified" msgstr "" -#: core/models.py:1371 +#: core/models.py:1379 msgid "address does not exist" msgstr "" -#: core/models.py:1392 core/models.py:1461 +#: core/models.py:1400 core/models.py:1469 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" -#: core/models.py:1395 core/models.py:1457 +#: core/models.py:1403 core/models.py:1465 msgid "invalid force value" msgstr "" -#: core/models.py:1401 core/models.py:1464 +#: core/models.py:1409 core/models.py:1472 msgid "you cannot purchase an empty order!" msgstr "" -#: core/models.py:1420 +#: core/models.py:1428 msgid "you cannot buy an order without a user" msgstr "" -#: core/models.py:1434 +#: core/models.py:1442 msgid "a user without a balance cannot buy with balance" msgstr "" -#: core/models.py:1439 +#: core/models.py:1447 msgid "insufficient funds to complete the order" msgstr "" -#: core/models.py:1473 +#: core/models.py:1481 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "" -#: core/models.py:1482 +#: core/models.py:1490 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" -#: core/models.py:1591 +#: core/models.py:1599 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2102,108 +2114,108 @@ msgid "" "Product models and stores a reference to them." msgstr "" -#: core/models.py:1606 +#: core/models.py:1614 msgid "the price paid by the customer for this product at purchase time" msgstr "" -#: core/models.py:1607 +#: core/models.py:1615 msgid "purchase price at order time" msgstr "" -#: core/models.py:1612 +#: core/models.py:1620 msgid "internal comments for admins about this ordered product" msgstr "" -#: core/models.py:1613 +#: core/models.py:1621 msgid "internal comments" msgstr "" -#: core/models.py:1619 +#: core/models.py:1627 msgid "user notifications" msgstr "" -#: core/models.py:1624 +#: core/models.py:1632 msgid "json representation of this item's attributes" msgstr "" -#: core/models.py:1625 +#: core/models.py:1633 msgid "ordered product attributes" msgstr "" -#: core/models.py:1630 +#: core/models.py:1638 msgid "reference to the parent order that contains this product" msgstr "" -#: core/models.py:1631 +#: core/models.py:1639 msgid "parent order" msgstr "" -#: core/models.py:1640 +#: core/models.py:1648 msgid "the specific product associated with this order line" msgstr "" -#: core/models.py:1647 +#: core/models.py:1655 msgid "quantity of this specific product in the order" msgstr "" -#: core/models.py:1648 +#: core/models.py:1656 msgid "product quantity" msgstr "" -#: core/models.py:1655 +#: core/models.py:1663 msgid "current status of this product in the order" msgstr "" -#: core/models.py:1656 +#: core/models.py:1664 msgid "product line status" msgstr "" -#: core/models.py:1719 +#: core/models.py:1727 msgid "order product must have an order" msgstr "" -#: core/models.py:1721 +#: core/models.py:1729 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "" -#: core/models.py:1735 +#: core/models.py:1743 msgid "you cannot feedback an order which is not received" msgstr "" -#: core/models.py:1741 +#: core/models.py:1749 msgid "name" msgstr "" -#: core/models.py:1742 +#: core/models.py:1750 msgid "URL of the integration" msgstr "" -#: core/models.py:1743 +#: core/models.py:1751 msgid "authentication credentials" msgstr "" -#: core/models.py:1765 +#: core/models.py:1773 msgid "you can only have one default CRM provider" msgstr "" -#: core/models.py:1775 +#: core/models.py:1783 msgid "CRM" msgstr "" -#: core/models.py:1776 +#: core/models.py:1784 msgid "CRMs" msgstr "" -#: core/models.py:1788 +#: core/models.py:1796 msgid "order CRM link" msgstr "" -#: core/models.py:1789 +#: core/models.py:1797 msgid "orders CRM links" msgstr "" -#: core/models.py:1794 +#: core/models.py:1802 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2213,15 +2225,15 @@ msgid "" "the asset when the associated order is in a completed status." msgstr "" -#: core/models.py:1808 +#: core/models.py:1816 msgid "download" msgstr "" -#: core/models.py:1809 +#: core/models.py:1817 msgid "downloads" msgstr "" -#: core/models.py:1823 +#: core/models.py:1831 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2230,27 +2242,27 @@ msgid "" "fields to effectively model and manage feedback data." msgstr "" -#: core/models.py:1835 +#: core/models.py:1843 msgid "user-provided comments about their experience with the product" msgstr "" -#: core/models.py:1836 +#: core/models.py:1844 msgid "feedback comments" msgstr "" -#: core/models.py:1843 +#: core/models.py:1851 msgid "references the specific product in an order that this feedback is about" msgstr "" -#: core/models.py:1844 +#: core/models.py:1852 msgid "related order product" msgstr "" -#: core/models.py:1849 +#: core/models.py:1857 msgid "user-assigned rating for the product" msgstr "" -#: core/models.py:1850 +#: core/models.py:1858 msgid "product rating" msgstr "" @@ -2451,22 +2463,22 @@ msgstr "" msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "" -#: core/utils/emailing.py:25 +#: core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "" -#: core/utils/emailing.py:74 +#: core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "" -#: core/utils/emailing.py:109 +#: core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "" -#: core/utils/emailing.py:197 +#: core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "" @@ -2648,7 +2660,7 @@ msgid "" "use of Django's filtering system for querying data." msgstr "" -#: core/viewsets.py:593 +#: core/viewsets.py:594 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2659,7 +2671,7 @@ msgid "" "enforces permissions accordingly while interacting with order data." msgstr "" -#: core/viewsets.py:782 +#: core/viewsets.py:784 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2668,25 +2680,25 @@ msgid "" "feedback on OrderProduct instances" msgstr "" -#: core/viewsets.py:833 +#: core/viewsets.py:835 msgid "Manages operations related to Product images in the application. " msgstr "" -#: core/viewsets.py:845 +#: core/viewsets.py:847 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "" -#: core/viewsets.py:866 +#: core/viewsets.py:868 msgid "Represents a view set for managing promotions. " msgstr "" -#: core/viewsets.py:878 +#: core/viewsets.py:880 msgid "Handles operations related to Stock data in the system." msgstr "" -#: core/viewsets.py:892 +#: core/viewsets.py:894 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -2697,7 +2709,7 @@ msgid "" "are granted." msgstr "" -#: core/viewsets.py:1007 +#: core/viewsets.py:1009 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -2706,12 +2718,12 @@ msgid "" "on the request context." msgstr "" -#: core/viewsets.py:1074 +#: core/viewsets.py:1076 #, python-brace-format msgid "Geocoding error: {e}" msgstr "" -#: core/viewsets.py:1081 +#: core/viewsets.py:1083 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/hr_HR/LC_MESSAGES/django.po b/core/locale/hr_HR/LC_MESSAGES/django.po index aeb64f8c..5e5fbc61 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -49,82 +49,86 @@ msgstr "" msgid "when the object was last modified" msgstr "" -#: core/admin.py:63 +#: core/admin.py:68 msgid "translations" msgstr "" -#: core/admin.py:67 +#: core/admin.py:72 msgid "general" msgstr "" -#: core/admin.py:69 +#: core/admin.py:74 msgid "relations" msgstr "" -#: core/admin.py:87 -msgid "metadata" +#: core/admin.py:76 +msgid "additional info" msgstr "" #: core/admin.py:94 +msgid "metadata" +msgstr "" + +#: core/admin.py:101 msgid "timestamps" msgstr "" -#: core/admin.py:109 +#: core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "" -#: core/admin.py:114 +#: core/admin.py:121 msgid "selected items have been activated." msgstr "" -#: core/admin.py:120 +#: core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "" -#: core/admin.py:125 +#: core/admin.py:132 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:701 core/models.py:709 +#: core/admin.py:144 core/graphene/object_types.py:609 +#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 msgid "attribute value" msgstr "" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 +#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718 msgid "attribute values" msgstr "" -#: core/admin.py:146 +#: core/admin.py:153 msgid "image" msgstr "" -#: core/admin.py:147 core/graphene/object_types.py:501 +#: core/admin.py:154 core/graphene/object_types.py:501 msgid "images" msgstr "" -#: core/admin.py:155 core/models.py:459 +#: core/admin.py:162 core/models.py:467 msgid "stock" msgstr "" -#: core/admin.py:156 core/graphene/object_types.py:663 +#: core/admin.py:163 core/graphene/object_types.py:663 msgid "stocks" msgstr "" -#: core/admin.py:166 core/models.py:1667 +#: core/admin.py:173 core/models.py:1675 msgid "order product" msgstr "" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 msgid "order products" msgstr "" -#: core/admin.py:180 core/admin.py:181 +#: core/admin.py:187 core/admin.py:188 msgid "children" msgstr "" -#: core/admin.py:566 +#: core/admin.py:940 msgid "Config" msgstr "" @@ -678,23 +682,23 @@ msgstr "" msgid "add or remove feedback on an order–product relation" msgstr "" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 msgid "no search term provided." msgstr "" -#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +#: core/filters.py:65 core/filters.py:399 core/filters.py:526 msgid "Search" msgstr "" -#: core/filters.py:66 core/filters.py:554 core/filters.py:583 +#: core/filters.py:66 core/filters.py:556 core/filters.py:585 msgid "UUID" msgstr "" -#: core/filters.py:67 core/filters.py:399 core/filters.py:526 +#: core/filters.py:67 core/filters.py:401 core/filters.py:528 msgid "Name" msgstr "" -#: core/filters.py:68 core/filters.py:528 +#: core/filters.py:68 core/filters.py:530 msgid "Categories" msgstr "" @@ -702,7 +706,7 @@ msgstr "" msgid "Categories Slugs" msgstr "" -#: core/filters.py:71 core/filters.py:407 +#: core/filters.py:71 core/filters.py:409 msgid "Tags" msgstr "" @@ -730,8 +734,8 @@ msgstr "" msgid "Quantity" msgstr "" -#: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:301 core/models.py:383 core/models.py:536 +#: core/filters.py:78 core/filters.py:403 core/filters.py:529 +#: core/models.py:309 core/models.py:391 core/models.py:544 msgid "Slug" msgstr "" @@ -747,7 +751,7 @@ msgstr "" msgid "Include personal ordered" msgstr "" -#: core/filters.py:85 core/models.py:540 +#: core/filters.py:85 core/models.py:548 msgid "SKU" msgstr "" @@ -755,48 +759,48 @@ msgstr "" msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" -#: core/filters.py:324 +#: core/filters.py:326 msgid "Search (ID, product name or part number)" msgstr "" -#: core/filters.py:327 +#: core/filters.py:329 msgid "Bought after (inclusive)" msgstr "" -#: core/filters.py:328 +#: core/filters.py:330 msgid "Bought before (inclusive)" msgstr "" -#: core/filters.py:331 core/filters.py:378 core/filters.py:585 +#: core/filters.py:333 core/filters.py:380 core/filters.py:587 msgid "User email" msgstr "" -#: core/filters.py:332 core/filters.py:379 core/filters.py:563 -#: core/filters.py:584 +#: core/filters.py:334 core/filters.py:381 core/filters.py:565 +#: core/filters.py:586 msgid "User UUID" msgstr "" -#: core/filters.py:333 +#: core/filters.py:335 msgid "Status" msgstr "" -#: core/filters.py:337 +#: core/filters.py:339 msgid "Human Readable ID" msgstr "" -#: core/filters.py:400 +#: core/filters.py:402 msgid "Parent" msgstr "" -#: core/filters.py:404 +#: core/filters.py:406 msgid "Whole category(has at least 1 product or not)" msgstr "" -#: core/filters.py:408 +#: core/filters.py:410 msgid "Level" msgstr "" -#: core/filters.py:558 +#: core/filters.py:560 msgid "Product UUID" msgstr "" @@ -851,7 +855,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:679 +#: core/graphene/mutations.py:527 core/viewsets.py:680 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" @@ -925,9 +929,9 @@ msgstr "" msgid "original address string provided by the user" msgstr "" -#: 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 +#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 +#: core/models.py:1289 core/models.py:1318 core/models.py:1343 +#: core/viewsets.py:683 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" @@ -941,8 +945,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:672 core/models.py:1144 -#: core/models.py:1744 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 +#: core/models.py:1752 msgid "attributes" msgstr "" @@ -955,11 +959,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:326 core/models.py:626 +#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 msgid "categories" msgstr "" -#: core/graphene/object_types.py:124 core/models.py:397 +#: core/graphene/object_types.py:124 core/models.py:405 msgid "brands" msgstr "" @@ -968,7 +972,7 @@ msgid "category image url" msgstr "" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:263 +#: core/models.py:271 msgid "markup percentage" msgstr "" @@ -988,7 +992,7 @@ msgstr "" msgid "products in this category" msgstr "" -#: core/graphene/object_types.py:351 core/models.py:169 +#: core/graphene/object_types.py:351 core/models.py:177 msgid "vendors" msgstr "" @@ -1013,7 +1017,7 @@ msgid "represents feedback from a user." msgstr "" #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1138 +#: core/models.py:1146 msgid "notifications" msgstr "" @@ -1021,7 +1025,7 @@ msgstr "" msgid "download url for this order product if applicable" msgstr "" -#: core/graphene/object_types.py:400 core/models.py:1860 +#: core/graphene/object_types.py:400 core/models.py:1868 msgid "feedback" msgstr "" @@ -1029,7 +1033,7 @@ msgstr "" msgid "a list of order products in this order" msgstr "" -#: core/graphene/object_types.py:436 core/models.py:1108 +#: core/graphene/object_types.py:436 core/models.py:1116 msgid "billing address" msgstr "" @@ -1055,7 +1059,7 @@ msgstr "" msgid "transactions for this order" msgstr "" -#: core/graphene/object_types.py:465 core/models.py:1172 +#: core/graphene/object_types.py:465 core/models.py:1180 msgid "orders" msgstr "" @@ -1067,19 +1071,19 @@ msgstr "" msgid "product's images" msgstr "" -#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 +#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 msgid "category" msgstr "" -#: core/graphene/object_types.py:502 core/models.py:1861 +#: core/graphene/object_types.py:502 core/models.py:1869 msgid "feedbacks" msgstr "" -#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 +#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 msgid "brand" msgstr "" -#: core/graphene/object_types.py:504 core/models.py:101 +#: core/graphene/object_types.py:504 core/models.py:102 msgid "attribute groups" msgstr "" @@ -1107,7 +1111,7 @@ msgstr "" msgid "only available for personal orders" msgstr "" -#: core/graphene/object_types.py:534 core/models.py:550 +#: core/graphene/object_types.py:534 core/models.py:558 msgid "products" msgstr "" @@ -1119,15 +1123,15 @@ msgstr "" msgid "products on sale" msgstr "" -#: core/graphene/object_types.py:651 core/models.py:798 +#: core/graphene/object_types.py:651 core/models.py:806 msgid "promotions" msgstr "" -#: core/graphene/object_types.py:655 core/models.py:168 +#: core/graphene/object_types.py:655 core/models.py:176 msgid "vendor" msgstr "" -#: core/graphene/object_types.py:656 core/models.py:549 +#: core/graphene/object_types.py:656 core/models.py:557 #: 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 +1139,11 @@ msgstr "" msgid "product" msgstr "" -#: core/graphene/object_types.py:667 core/models.py:821 +#: core/graphene/object_types.py:667 core/models.py:829 msgid "wishlisted products" msgstr "" -#: core/graphene/object_types.py:673 core/models.py:838 +#: core/graphene/object_types.py:673 core/models.py:846 msgid "wishlists" msgstr "" @@ -1147,7 +1151,7 @@ msgstr "" msgid "tagged products" msgstr "" -#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 +#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 msgid "product tags" msgstr "" @@ -1232,7 +1236,7 @@ msgstr "" msgid "posts search results" msgstr "" -#: core/models.py:70 +#: core/models.py:71 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1240,23 +1244,23 @@ msgid "" "categorizing and managing attributes more effectively in acomplex system." msgstr "" -#: core/models.py:86 +#: core/models.py:87 msgid "parent of this group" msgstr "" -#: core/models.py:87 +#: core/models.py:88 msgid "parent attribute group" msgstr "" -#: core/models.py:91 core/models.py:92 +#: core/models.py:92 core/models.py:93 msgid "attribute group's name" msgstr "" -#: core/models.py:100 core/models.py:634 +#: core/models.py:101 core/models.py:642 msgid "attribute group" msgstr "" -#: core/models.py:106 +#: core/models.py:107 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1267,31 +1271,39 @@ msgid "" "use in systems that interact with third-party vendors." msgstr "" -#: core/models.py:119 +#: core/models.py:120 msgid "stores credentials and endpoints required for vendor communication" msgstr "" -#: core/models.py:120 +#: core/models.py:121 msgid "authentication info" msgstr "" -#: core/models.py:125 +#: core/models.py:126 msgid "define the markup for products retrieved from this vendor" msgstr "" -#: core/models.py:126 +#: core/models.py:127 msgid "vendor markup percentage" msgstr "" -#: core/models.py:130 +#: core/models.py:131 msgid "name of this vendor" msgstr "" -#: core/models.py:131 +#: core/models.py:132 msgid "vendor name" msgstr "" -#: core/models.py:177 +#: core/models.py:143 +msgid "response file" +msgstr "" + +#: core/models.py:144 +msgid "vendor's last processing response" +msgstr "" + +#: core/models.py:185 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1300,42 +1312,42 @@ msgid "" "metadata customization for administrative purposes." msgstr "" -#: core/models.py:189 core/models.py:220 +#: core/models.py:197 core/models.py:228 msgid "internal tag identifier for the product tag" msgstr "" -#: core/models.py:190 core/models.py:221 +#: core/models.py:198 core/models.py:229 msgid "tag name" msgstr "" -#: core/models.py:194 core/models.py:225 +#: core/models.py:202 core/models.py:233 msgid "user-friendly name for the product tag" msgstr "" -#: core/models.py:195 core/models.py:226 +#: core/models.py:203 core/models.py:234 msgid "tag display name" msgstr "" -#: core/models.py:203 +#: core/models.py:211 msgid "product tag" msgstr "" -#: core/models.py:209 +#: core/models.py:217 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:234 +#: core/models.py:242 msgid "category tag" msgstr "" -#: core/models.py:235 core/models.py:307 +#: core/models.py:243 core/models.py:315 msgid "category tags" msgstr "" -#: core/models.py:240 +#: core/models.py:248 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1348,51 +1360,51 @@ msgid "" "priority." msgstr "" -#: core/models.py:254 +#: core/models.py:262 msgid "upload an image representing this category" msgstr "" -#: core/models.py:257 +#: core/models.py:265 msgid "category image" msgstr "" -#: core/models.py:262 +#: core/models.py:270 msgid "define a markup percentage for products in this category" msgstr "" -#: core/models.py:271 +#: core/models.py:279 msgid "parent of this category to form a hierarchical structure" msgstr "" -#: core/models.py:272 +#: core/models.py:280 msgid "parent category" msgstr "" -#: core/models.py:277 +#: core/models.py:285 msgid "category name" msgstr "" -#: core/models.py:278 +#: core/models.py:286 msgid "provide a name for this category" msgstr "" -#: core/models.py:285 +#: core/models.py:293 msgid "add a detailed description for this category" msgstr "" -#: core/models.py:286 +#: core/models.py:294 msgid "category description" msgstr "" -#: core/models.py:306 +#: core/models.py:314 msgid "tags that help describe or group this category" msgstr "" -#: core/models.py:313 core/models.py:389 +#: core/models.py:321 core/models.py:397 msgid "priority" msgstr "" -#: core/models.py:332 +#: core/models.py:340 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 +1412,47 @@ msgid "" "organization and representation of brand-related data within the application." msgstr "" -#: core/models.py:342 +#: core/models.py:350 msgid "name of this brand" msgstr "" -#: core/models.py:343 +#: core/models.py:351 msgid "brand name" msgstr "" -#: core/models.py:350 +#: core/models.py:358 msgid "upload a logo representing this brand" msgstr "" -#: core/models.py:352 +#: core/models.py:360 msgid "brand small image" msgstr "" -#: core/models.py:358 +#: core/models.py:366 msgid "upload a big logo representing this brand" msgstr "" -#: core/models.py:360 +#: core/models.py:368 msgid "brand big image" msgstr "" -#: core/models.py:365 +#: core/models.py:373 msgid "add a detailed description of the brand" msgstr "" -#: core/models.py:366 +#: core/models.py:374 msgid "brand description" msgstr "" -#: core/models.py:371 +#: core/models.py:379 msgid "optional categories that this brand is associated with" msgstr "" -#: core/models.py:372 +#: core/models.py:380 msgid "associated categories" msgstr "" -#: core/models.py:402 +#: core/models.py:410 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 +1462,67 @@ msgid "" "from various vendors." msgstr "" -#: core/models.py:414 +#: core/models.py:422 msgid "the vendor supplying this product stock" msgstr "" -#: core/models.py:415 +#: core/models.py:423 msgid "associated vendor" msgstr "" -#: core/models.py:419 +#: core/models.py:427 msgid "final price to the customer after markups" msgstr "" -#: core/models.py:420 +#: core/models.py:428 msgid "selling price" msgstr "" -#: core/models.py:425 +#: core/models.py:433 msgid "the product associated with this stock entry" msgstr "" -#: core/models.py:426 core/models.py:697 core/models.py:744 core/models.py:1641 +#: core/models.py:434 core/models.py:705 core/models.py:752 core/models.py:1649 msgid "associated product" msgstr "" -#: core/models.py:433 +#: core/models.py:441 msgid "the price paid to the vendor for this product" msgstr "" -#: core/models.py:434 +#: core/models.py:442 msgid "vendor purchase price" msgstr "" -#: core/models.py:438 +#: core/models.py:446 msgid "available quantity of the product in stock" msgstr "" -#: core/models.py:439 +#: core/models.py:447 msgid "quantity in stock" msgstr "" -#: core/models.py:443 +#: core/models.py:451 msgid "vendor-assigned SKU for identifying the product" msgstr "" -#: core/models.py:444 +#: core/models.py:452 msgid "vendor sku" msgstr "" -#: core/models.py:450 +#: core/models.py:458 msgid "digital file associated with this stock if applicable" msgstr "" -#: core/models.py:451 +#: core/models.py:459 msgid "digital file" msgstr "" -#: core/models.py:460 +#: core/models.py:468 msgid "stock entries" msgstr "" -#: core/models.py:465 +#: core/models.py:473 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1522,55 +1534,55 @@ msgid "" "product data and its associated information within an application." msgstr "" -#: core/models.py:478 +#: core/models.py:486 msgid "category this product belongs to" msgstr "" -#: core/models.py:487 +#: core/models.py:495 msgid "optionally associate this product with a brand" msgstr "" -#: core/models.py:493 +#: core/models.py:501 msgid "tags that help describe or group this product" msgstr "" -#: core/models.py:498 +#: core/models.py:506 msgid "indicates whether this product is digitally delivered" msgstr "" -#: core/models.py:499 +#: core/models.py:507 msgid "is product digital" msgstr "" -#: core/models.py:505 +#: core/models.py:513 msgid "provide a clear identifying name for the product" msgstr "" -#: core/models.py:506 +#: core/models.py:514 msgid "product name" msgstr "" -#: core/models.py:511 core/models.py:786 +#: core/models.py:519 core/models.py:794 msgid "add a detailed description of the product" msgstr "" -#: core/models.py:512 +#: core/models.py:520 msgid "product description" msgstr "" -#: core/models.py:519 +#: core/models.py:527 msgid "part number for this product" msgstr "" -#: core/models.py:520 +#: core/models.py:528 msgid "part number" msgstr "" -#: core/models.py:539 +#: core/models.py:547 msgid "stock keeping unit for this product" msgstr "" -#: core/models.py:613 +#: core/models.py:621 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 +1592,87 @@ msgid "" "for dynamic and flexible data structuring." msgstr "" -#: core/models.py:625 +#: core/models.py:633 msgid "category of this attribute" msgstr "" -#: core/models.py:633 +#: core/models.py:641 msgid "group of this attribute" msgstr "" -#: core/models.py:639 +#: core/models.py:647 msgid "string" msgstr "" -#: core/models.py:640 +#: core/models.py:648 msgid "integer" msgstr "" -#: core/models.py:641 +#: core/models.py:649 msgid "float" msgstr "" -#: core/models.py:642 +#: core/models.py:650 msgid "boolean" msgstr "" -#: core/models.py:643 +#: core/models.py:651 msgid "array" msgstr "" -#: core/models.py:644 +#: core/models.py:652 msgid "object" msgstr "" -#: core/models.py:646 +#: core/models.py:654 msgid "type of the attribute's value" msgstr "" -#: core/models.py:647 +#: core/models.py:655 msgid "value type" msgstr "" -#: core/models.py:652 +#: core/models.py:660 msgid "name of this attribute" msgstr "" -#: core/models.py:653 +#: core/models.py:661 msgid "attribute's name" msgstr "" -#: core/models.py:659 +#: core/models.py:667 msgid "is filterable" msgstr "" -#: core/models.py:660 +#: core/models.py:668 msgid "designates whether this attribute can be used for filtering or not" msgstr "" -#: core/models.py:671 core/models.py:689 +#: core/models.py:679 core/models.py:697 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "" -#: core/models.py:677 +#: core/models.py:685 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:688 +#: core/models.py:696 msgid "attribute of this value" msgstr "" -#: core/models.py:696 +#: core/models.py:704 msgid "the specific product associated with this attribute's value" msgstr "" -#: core/models.py:702 +#: core/models.py:710 msgid "the specific value for this attribute" msgstr "" -#: core/models.py:715 +#: core/models.py:723 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 +1681,39 @@ msgid "" "with alternative text for the images." msgstr "" -#: core/models.py:726 +#: core/models.py:734 msgid "provide alternative text for the image for accessibility" msgstr "" -#: core/models.py:727 +#: core/models.py:735 msgid "image alt text" msgstr "" -#: core/models.py:730 +#: core/models.py:738 msgid "upload the image file for this product" msgstr "" -#: core/models.py:731 core/models.py:756 +#: core/models.py:739 core/models.py:764 msgid "product image" msgstr "" -#: core/models.py:737 +#: core/models.py:745 msgid "determines the order in which images are displayed" msgstr "" -#: core/models.py:738 +#: core/models.py:746 msgid "display priority" msgstr "" -#: core/models.py:743 +#: core/models.py:751 msgid "the product that this image represents" msgstr "" -#: core/models.py:757 +#: core/models.py:765 msgid "product images" msgstr "" -#: core/models.py:762 +#: core/models.py:770 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 +1723,39 @@ msgid "" "affected items in the campaign." msgstr "" -#: core/models.py:774 +#: core/models.py:782 msgid "percentage discount for the selected products" msgstr "" -#: core/models.py:775 +#: core/models.py:783 msgid "discount percentage" msgstr "" -#: core/models.py:780 +#: core/models.py:788 msgid "provide a unique name for this promotion" msgstr "" -#: core/models.py:781 +#: core/models.py:789 msgid "promotion name" msgstr "" -#: core/models.py:787 +#: core/models.py:795 msgid "promotion description" msgstr "" -#: core/models.py:792 +#: core/models.py:800 msgid "select which products are included in this promotion" msgstr "" -#: core/models.py:793 +#: core/models.py:801 msgid "included products" msgstr "" -#: core/models.py:797 +#: core/models.py:805 msgid "promotion" msgstr "" -#: core/models.py:808 +#: core/models.py:816 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 +1763,23 @@ msgid "" "operations for adding and removing multiple products at once." msgstr "" -#: core/models.py:820 +#: core/models.py:828 msgid "products that the user has marked as wanted" msgstr "" -#: core/models.py:828 +#: core/models.py:836 msgid "user who owns this wishlist" msgstr "" -#: core/models.py:829 +#: core/models.py:837 msgid "wishlist owner" msgstr "" -#: core/models.py:837 +#: core/models.py:845 msgid "wishlist" msgstr "" -#: core/models.py:879 +#: core/models.py:887 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1777,19 +1789,19 @@ msgid "" "custom features." msgstr "" -#: core/models.py:892 +#: core/models.py:900 msgid "documentary" msgstr "" -#: core/models.py:893 +#: core/models.py:901 msgid "documentaries" msgstr "" -#: core/models.py:903 +#: core/models.py:911 msgid "unresolved" msgstr "" -#: core/models.py:908 +#: core/models.py:916 msgid "" "Represents an address entity that includes location details and associations " "with a user. Provides functionality for geographic and address data storage, " @@ -1801,59 +1813,59 @@ msgid "" "address with a user, facilitating personalized data handling." msgstr "" -#: core/models.py:923 +#: core/models.py:931 msgid "address line for the customer" msgstr "" -#: core/models.py:924 +#: core/models.py:932 msgid "address line" msgstr "" -#: core/models.py:926 +#: core/models.py:934 msgid "street" msgstr "" -#: core/models.py:927 +#: core/models.py:935 msgid "district" msgstr "" -#: core/models.py:928 +#: core/models.py:936 msgid "city" msgstr "" -#: core/models.py:929 +#: core/models.py:937 msgid "region" msgstr "" -#: core/models.py:930 +#: core/models.py:938 msgid "postal code" msgstr "" -#: core/models.py:931 +#: core/models.py:939 msgid "country" msgstr "" -#: core/models.py:938 +#: core/models.py:946 msgid "geolocation point: (longitude, latitude)" msgstr "" -#: core/models.py:941 +#: core/models.py:949 msgid "full JSON response from geocoder for this address" msgstr "" -#: core/models.py:946 +#: core/models.py:954 msgid "stored JSON response from the geocoding service" msgstr "" -#: core/models.py:954 +#: core/models.py:962 msgid "address" msgstr "" -#: core/models.py:955 +#: core/models.py:963 msgid "addresses" msgstr "" -#: core/models.py:967 +#: core/models.py:975 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 +1875,86 @@ msgid "" "apply the promo code to an order while ensuring constraints are met." msgstr "" -#: core/models.py:981 +#: core/models.py:989 msgid "unique code used by a user to redeem a discount" msgstr "" -#: core/models.py:982 +#: core/models.py:990 msgid "promo code identifier" msgstr "" -#: core/models.py:989 +#: core/models.py:997 msgid "fixed discount amount applied if percent is not used" msgstr "" -#: core/models.py:990 +#: core/models.py:998 msgid "fixed discount amount" msgstr "" -#: core/models.py:996 +#: core/models.py:1004 msgid "percentage discount applied if fixed amount is not used" msgstr "" -#: core/models.py:997 +#: core/models.py:1005 msgid "percentage discount" msgstr "" -#: core/models.py:1002 +#: core/models.py:1010 msgid "timestamp when the promocode expires" msgstr "" -#: core/models.py:1003 +#: core/models.py:1011 msgid "end validity time" msgstr "" -#: core/models.py:1008 +#: core/models.py:1016 msgid "timestamp from which this promocode is valid" msgstr "" -#: core/models.py:1009 +#: core/models.py:1017 msgid "start validity time" msgstr "" -#: core/models.py:1014 +#: core/models.py:1022 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" -#: core/models.py:1015 +#: core/models.py:1023 msgid "usage timestamp" msgstr "" -#: core/models.py:1020 +#: core/models.py:1028 msgid "user assigned to this promocode if applicable" msgstr "" -#: core/models.py:1021 +#: core/models.py:1029 msgid "assigned user" msgstr "" -#: core/models.py:1028 +#: core/models.py:1036 msgid "promo code" msgstr "" -#: core/models.py:1029 +#: core/models.py:1037 msgid "promo codes" msgstr "" -#: core/models.py:1044 +#: core/models.py:1052 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "" -#: core/models.py:1065 +#: core/models.py:1073 msgid "promocode already used" msgstr "" -#: core/models.py:1081 +#: core/models.py:1089 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "" -#: core/models.py:1090 +#: core/models.py:1098 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 +1964,144 @@ msgid "" "supports managing the products in the order lifecycle." msgstr "" -#: core/models.py:1107 +#: core/models.py:1115 msgid "the billing address used for this order" msgstr "" -#: core/models.py:1115 +#: core/models.py:1123 msgid "optional promo code applied to this order" msgstr "" -#: core/models.py:1116 +#: core/models.py:1124 msgid "applied promo code" msgstr "" -#: core/models.py:1124 +#: core/models.py:1132 msgid "the shipping address used for this order" msgstr "" -#: core/models.py:1125 +#: core/models.py:1133 msgid "shipping address" msgstr "" -#: core/models.py:1131 +#: core/models.py:1139 msgid "current status of the order in its lifecycle" msgstr "" -#: core/models.py:1132 +#: core/models.py:1140 msgid "order status" msgstr "" -#: core/models.py:1137 core/models.py:1618 +#: core/models.py:1145 core/models.py:1626 msgid "json structure of notifications to display to users" msgstr "" -#: core/models.py:1143 +#: core/models.py:1151 msgid "json representation of order attributes for this order" msgstr "" -#: core/models.py:1149 +#: core/models.py:1157 msgid "the user who placed the order" msgstr "" -#: core/models.py:1150 +#: core/models.py:1158 msgid "user" msgstr "" -#: core/models.py:1156 +#: core/models.py:1164 msgid "the timestamp when the order was finalized" msgstr "" -#: core/models.py:1157 +#: core/models.py:1165 msgid "buy time" msgstr "" -#: core/models.py:1164 +#: core/models.py:1172 msgid "a human-readable identifier for the order" msgstr "" -#: core/models.py:1165 +#: core/models.py:1173 msgid "human readable id" msgstr "" -#: core/models.py:1171 +#: core/models.py:1179 msgid "order" msgstr "" -#: core/models.py:1209 +#: core/models.py:1217 msgid "a user must have only one pending order at a time" msgstr "" -#: core/models.py:1249 +#: core/models.py:1257 msgid "you cannot add products to an order that is not a pending one" msgstr "" -#: core/models.py:1254 +#: core/models.py:1262 msgid "you cannot add inactive products to order" msgstr "" -#: core/models.py:1271 +#: core/models.py:1279 msgid "you cannot add more products than available in stock" msgstr "" -#: core/models.py:1293 core/models.py:1318 core/models.py:1326 +#: core/models.py:1301 core/models.py:1326 core/models.py:1334 msgid "you cannot remove products from an order that is not a pending one" msgstr "" -#: core/models.py:1314 +#: core/models.py:1322 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "" -#: core/models.py:1346 +#: core/models.py:1354 msgid "promocode does not exist" msgstr "" -#: core/models.py:1352 +#: core/models.py:1360 msgid "you can only buy physical products with shipping address specified" msgstr "" -#: core/models.py:1371 +#: core/models.py:1379 msgid "address does not exist" msgstr "" -#: core/models.py:1392 core/models.py:1461 +#: core/models.py:1400 core/models.py:1469 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" -#: core/models.py:1395 core/models.py:1457 +#: core/models.py:1403 core/models.py:1465 msgid "invalid force value" msgstr "" -#: core/models.py:1401 core/models.py:1464 +#: core/models.py:1409 core/models.py:1472 msgid "you cannot purchase an empty order!" msgstr "" -#: core/models.py:1420 +#: core/models.py:1428 msgid "you cannot buy an order without a user" msgstr "" -#: core/models.py:1434 +#: core/models.py:1442 msgid "a user without a balance cannot buy with balance" msgstr "" -#: core/models.py:1439 +#: core/models.py:1447 msgid "insufficient funds to complete the order" msgstr "" -#: core/models.py:1473 +#: core/models.py:1481 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "" -#: core/models.py:1482 +#: core/models.py:1490 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" -#: core/models.py:1591 +#: core/models.py:1599 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2102,108 +2114,108 @@ msgid "" "Product models and stores a reference to them." msgstr "" -#: core/models.py:1606 +#: core/models.py:1614 msgid "the price paid by the customer for this product at purchase time" msgstr "" -#: core/models.py:1607 +#: core/models.py:1615 msgid "purchase price at order time" msgstr "" -#: core/models.py:1612 +#: core/models.py:1620 msgid "internal comments for admins about this ordered product" msgstr "" -#: core/models.py:1613 +#: core/models.py:1621 msgid "internal comments" msgstr "" -#: core/models.py:1619 +#: core/models.py:1627 msgid "user notifications" msgstr "" -#: core/models.py:1624 +#: core/models.py:1632 msgid "json representation of this item's attributes" msgstr "" -#: core/models.py:1625 +#: core/models.py:1633 msgid "ordered product attributes" msgstr "" -#: core/models.py:1630 +#: core/models.py:1638 msgid "reference to the parent order that contains this product" msgstr "" -#: core/models.py:1631 +#: core/models.py:1639 msgid "parent order" msgstr "" -#: core/models.py:1640 +#: core/models.py:1648 msgid "the specific product associated with this order line" msgstr "" -#: core/models.py:1647 +#: core/models.py:1655 msgid "quantity of this specific product in the order" msgstr "" -#: core/models.py:1648 +#: core/models.py:1656 msgid "product quantity" msgstr "" -#: core/models.py:1655 +#: core/models.py:1663 msgid "current status of this product in the order" msgstr "" -#: core/models.py:1656 +#: core/models.py:1664 msgid "product line status" msgstr "" -#: core/models.py:1719 +#: core/models.py:1727 msgid "order product must have an order" msgstr "" -#: core/models.py:1721 +#: core/models.py:1729 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "" -#: core/models.py:1735 +#: core/models.py:1743 msgid "you cannot feedback an order which is not received" msgstr "" -#: core/models.py:1741 +#: core/models.py:1749 msgid "name" msgstr "" -#: core/models.py:1742 +#: core/models.py:1750 msgid "URL of the integration" msgstr "" -#: core/models.py:1743 +#: core/models.py:1751 msgid "authentication credentials" msgstr "" -#: core/models.py:1765 +#: core/models.py:1773 msgid "you can only have one default CRM provider" msgstr "" -#: core/models.py:1775 +#: core/models.py:1783 msgid "CRM" msgstr "" -#: core/models.py:1776 +#: core/models.py:1784 msgid "CRMs" msgstr "" -#: core/models.py:1788 +#: core/models.py:1796 msgid "order CRM link" msgstr "" -#: core/models.py:1789 +#: core/models.py:1797 msgid "orders CRM links" msgstr "" -#: core/models.py:1794 +#: core/models.py:1802 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2213,15 +2225,15 @@ msgid "" "the asset when the associated order is in a completed status." msgstr "" -#: core/models.py:1808 +#: core/models.py:1816 msgid "download" msgstr "" -#: core/models.py:1809 +#: core/models.py:1817 msgid "downloads" msgstr "" -#: core/models.py:1823 +#: core/models.py:1831 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2230,27 +2242,27 @@ msgid "" "fields to effectively model and manage feedback data." msgstr "" -#: core/models.py:1835 +#: core/models.py:1843 msgid "user-provided comments about their experience with the product" msgstr "" -#: core/models.py:1836 +#: core/models.py:1844 msgid "feedback comments" msgstr "" -#: core/models.py:1843 +#: core/models.py:1851 msgid "references the specific product in an order that this feedback is about" msgstr "" -#: core/models.py:1844 +#: core/models.py:1852 msgid "related order product" msgstr "" -#: core/models.py:1849 +#: core/models.py:1857 msgid "user-assigned rating for the product" msgstr "" -#: core/models.py:1850 +#: core/models.py:1858 msgid "product rating" msgstr "" @@ -2451,22 +2463,22 @@ msgstr "" msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "" -#: core/utils/emailing.py:25 +#: core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "" -#: core/utils/emailing.py:74 +#: core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "" -#: core/utils/emailing.py:109 +#: core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "" -#: core/utils/emailing.py:197 +#: core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "" @@ -2648,7 +2660,7 @@ msgid "" "use of Django's filtering system for querying data." msgstr "" -#: core/viewsets.py:593 +#: core/viewsets.py:594 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2659,7 +2671,7 @@ msgid "" "enforces permissions accordingly while interacting with order data." msgstr "" -#: core/viewsets.py:782 +#: core/viewsets.py:784 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2668,25 +2680,25 @@ msgid "" "feedback on OrderProduct instances" msgstr "" -#: core/viewsets.py:833 +#: core/viewsets.py:835 msgid "Manages operations related to Product images in the application. " msgstr "" -#: core/viewsets.py:845 +#: core/viewsets.py:847 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "" -#: core/viewsets.py:866 +#: core/viewsets.py:868 msgid "Represents a view set for managing promotions. " msgstr "" -#: core/viewsets.py:878 +#: core/viewsets.py:880 msgid "Handles operations related to Stock data in the system." msgstr "" -#: core/viewsets.py:892 +#: core/viewsets.py:894 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -2697,7 +2709,7 @@ msgid "" "are granted." msgstr "" -#: core/viewsets.py:1007 +#: core/viewsets.py:1009 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -2706,12 +2718,12 @@ msgid "" "on the request context." msgstr "" -#: core/viewsets.py:1074 +#: core/viewsets.py:1076 #, python-brace-format msgid "Geocoding error: {e}" msgstr "" -#: core/viewsets.py:1081 +#: core/viewsets.py:1083 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/id_ID/LC_MESSAGES/django.mo b/core/locale/id_ID/LC_MESSAGES/django.mo index 100c9ef0..1c324bd2 100644 Binary files a/core/locale/id_ID/LC_MESSAGES/django.mo and b/core/locale/id_ID/LC_MESSAGES/django.mo differ diff --git a/core/locale/id_ID/LC_MESSAGES/django.po b/core/locale/id_ID/LC_MESSAGES/django.po index 2f1d5865..87d53546 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -50,82 +50,86 @@ msgstr "Dimodifikasi" msgid "when the object was last modified" msgstr "Kapan objek terakhir kali diedit" -#: core/admin.py:63 +#: core/admin.py:68 msgid "translations" msgstr "Terjemahan" -#: core/admin.py:67 +#: core/admin.py:72 msgid "general" msgstr "Umum" -#: core/admin.py:69 +#: core/admin.py:74 msgid "relations" msgstr "Hubungan" -#: core/admin.py:87 +#: core/admin.py:76 +msgid "additional info" +msgstr "info tambahan" + +#: core/admin.py:94 msgid "metadata" msgstr "Metadata" -#: core/admin.py:94 +#: core/admin.py:101 msgid "timestamps" msgstr "Stempel waktu" -#: core/admin.py:109 +#: core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Aktifkan %(verbose_name_plural)s yang dipilih" -#: core/admin.py:114 +#: core/admin.py:121 msgid "selected items have been activated." msgstr "Item yang dipilih telah diaktifkan!" -#: core/admin.py:120 +#: core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Menonaktifkan %(verbose_name_plural)s yang dipilih" -#: core/admin.py:125 +#: core/admin.py:132 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:701 core/models.py:709 +#: core/admin.py:144 core/graphene/object_types.py:609 +#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 msgid "attribute value" msgstr "Nilai Atribut" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 +#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718 msgid "attribute values" msgstr "Nilai Atribut" -#: core/admin.py:146 +#: core/admin.py:153 msgid "image" msgstr "Gambar" -#: core/admin.py:147 core/graphene/object_types.py:501 +#: core/admin.py:154 core/graphene/object_types.py:501 msgid "images" msgstr "Gambar" -#: core/admin.py:155 core/models.py:459 +#: core/admin.py:162 core/models.py:467 msgid "stock" msgstr "Stok" -#: core/admin.py:156 core/graphene/object_types.py:663 +#: core/admin.py:163 core/graphene/object_types.py:663 msgid "stocks" msgstr "Saham" -#: core/admin.py:166 core/models.py:1667 +#: core/admin.py:173 core/models.py:1675 msgid "order product" msgstr "Pesan Produk" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 msgid "order products" msgstr "Pesan Produk" -#: core/admin.py:180 core/admin.py:181 +#: core/admin.py:187 core/admin.py:188 msgid "children" msgstr "Anak-anak" -#: core/admin.py:566 +#: core/admin.py:940 msgid "Config" msgstr "Konfigurasi" @@ -753,23 +757,23 @@ 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:118 core/elasticsearch/__init__.py:498 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 msgid "no search term provided." msgstr "Tidak ada istilah pencarian yang disediakan." -#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +#: core/filters.py:65 core/filters.py:399 core/filters.py:526 msgid "Search" msgstr "Pencarian" -#: core/filters.py:66 core/filters.py:554 core/filters.py:583 +#: core/filters.py:66 core/filters.py:556 core/filters.py:585 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:399 core/filters.py:526 +#: core/filters.py:67 core/filters.py:401 core/filters.py:528 msgid "Name" msgstr "Nama" -#: core/filters.py:68 core/filters.py:528 +#: core/filters.py:68 core/filters.py:530 msgid "Categories" msgstr "Kategori" @@ -777,7 +781,7 @@ msgstr "Kategori" msgid "Categories Slugs" msgstr "Kategori Siput" -#: core/filters.py:71 core/filters.py:407 +#: core/filters.py:71 core/filters.py:409 msgid "Tags" msgstr "Tags" @@ -805,8 +809,8 @@ msgstr "Atribut" msgid "Quantity" msgstr "Kuantitas" -#: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:301 core/models.py:383 core/models.py:536 +#: core/filters.py:78 core/filters.py:403 core/filters.py:529 +#: core/models.py:309 core/models.py:391 core/models.py:544 msgid "Slug" msgstr "Siput" @@ -822,7 +826,7 @@ msgstr "Sertakan sub-kategori" msgid "Include personal ordered" msgstr "Menyertakan produk pesanan pribadi" -#: core/filters.py:85 core/models.py:540 +#: core/filters.py:85 core/models.py:548 msgid "SKU" msgstr "SKU" @@ -830,48 +834,48 @@ msgstr "SKU" msgid "there must be a category_uuid to use include_subcategories flag" msgstr "Harus ada category_uuid untuk menggunakan flag include_subcategories" -#: core/filters.py:324 +#: core/filters.py:326 msgid "Search (ID, product name or part number)" msgstr "Pencarian (ID, nama produk atau nomor komponen)" -#: core/filters.py:327 +#: core/filters.py:329 msgid "Bought after (inclusive)" msgstr "Dibeli setelah (inklusif)" -#: core/filters.py:328 +#: core/filters.py:330 msgid "Bought before (inclusive)" msgstr "Membeli sebelumnya (inklusif)" -#: core/filters.py:331 core/filters.py:378 core/filters.py:585 +#: core/filters.py:333 core/filters.py:380 core/filters.py:587 msgid "User email" msgstr "Email pengguna" -#: core/filters.py:332 core/filters.py:379 core/filters.py:563 -#: core/filters.py:584 +#: core/filters.py:334 core/filters.py:381 core/filters.py:565 +#: core/filters.py:586 msgid "User UUID" msgstr "UUID Pengguna" -#: core/filters.py:333 +#: core/filters.py:335 msgid "Status" msgstr "Status" -#: core/filters.py:337 +#: core/filters.py:339 msgid "Human Readable ID" msgstr "ID yang Dapat Dibaca Manusia" -#: core/filters.py:400 +#: core/filters.py:402 msgid "Parent" msgstr "Orang tua" -#: core/filters.py:404 +#: core/filters.py:406 msgid "Whole category(has at least 1 product or not)" msgstr "Seluruh kategori (memiliki setidaknya 1 produk atau tidak)" -#: core/filters.py:408 +#: core/filters.py:410 msgid "Level" msgstr "Tingkat" -#: core/filters.py:558 +#: core/filters.py:560 msgid "Product UUID" msgstr "UUID Produk" @@ -927,7 +931,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:679 +#: core/graphene/mutations.py:527 core/viewsets.py:680 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 +1006,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:849 core/models.py:862 -#: core/models.py:1281 core/models.py:1310 core/models.py:1335 -#: core/viewsets.py:682 +#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 +#: core/models.py:1289 core/models.py:1318 core/models.py:1343 +#: core/viewsets.py:683 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} tidak ada: {uuid}!" @@ -1018,8 +1022,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:672 core/models.py:1144 -#: core/models.py:1744 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 +#: core/models.py:1752 msgid "attributes" msgstr "Atribut" @@ -1032,11 +1036,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:326 core/models.py:626 +#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 msgid "categories" msgstr "Kategori" -#: core/graphene/object_types.py:124 core/models.py:397 +#: core/graphene/object_types.py:124 core/models.py:405 msgid "brands" msgstr "Merek" @@ -1045,7 +1049,7 @@ msgid "category image url" msgstr "Kategori" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:263 +#: core/models.py:271 msgid "markup percentage" msgstr "Persentase Markup" @@ -1068,7 +1072,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:169 +#: core/graphene/object_types.py:351 core/models.py:177 msgid "vendors" msgstr "Vendor" @@ -1094,7 +1098,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:1138 +#: core/models.py:1146 msgid "notifications" msgstr "Pemberitahuan" @@ -1102,7 +1106,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:1860 +#: core/graphene/object_types.py:400 core/models.py:1868 msgid "feedback" msgstr "Umpan balik" @@ -1110,7 +1114,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:1108 +#: core/graphene/object_types.py:436 core/models.py:1116 msgid "billing address" msgstr "Alamat penagihan" @@ -1138,7 +1142,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:1172 +#: core/graphene/object_types.py:465 core/models.py:1180 msgid "orders" msgstr "Pesanan" @@ -1150,19 +1154,19 @@ msgstr "URL gambar" msgid "product's images" msgstr "Gambar produk" -#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 +#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 msgid "category" msgstr "Kategori" -#: core/graphene/object_types.py:502 core/models.py:1861 +#: core/graphene/object_types.py:502 core/models.py:1869 msgid "feedbacks" msgstr "Umpan balik" -#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 +#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 msgid "brand" msgstr "Merek" -#: core/graphene/object_types.py:504 core/models.py:101 +#: core/graphene/object_types.py:504 core/models.py:102 msgid "attribute groups" msgstr "Kelompok atribut" @@ -1190,7 +1194,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:550 +#: core/graphene/object_types.py:534 core/models.py:558 msgid "products" msgstr "Produk" @@ -1202,15 +1206,15 @@ msgstr "Kode promosi" msgid "products on sale" msgstr "Produk yang dijual" -#: core/graphene/object_types.py:651 core/models.py:798 +#: core/graphene/object_types.py:651 core/models.py:806 msgid "promotions" msgstr "Promosi" -#: core/graphene/object_types.py:655 core/models.py:168 +#: core/graphene/object_types.py:655 core/models.py:176 msgid "vendor" msgstr "Vendor" -#: core/graphene/object_types.py:656 core/models.py:549 +#: core/graphene/object_types.py:656 core/models.py:557 #: 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 +1222,11 @@ msgstr "Vendor" msgid "product" msgstr "Produk" -#: core/graphene/object_types.py:667 core/models.py:821 +#: core/graphene/object_types.py:667 core/models.py:829 msgid "wishlisted products" msgstr "Produk yang diinginkan" -#: core/graphene/object_types.py:673 core/models.py:838 +#: core/graphene/object_types.py:673 core/models.py:846 msgid "wishlists" msgstr "Daftar keinginan" @@ -1230,7 +1234,7 @@ msgstr "Daftar keinginan" msgid "tagged products" msgstr "Produk yang ditandai" -#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 +#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 msgid "product tags" msgstr "Label produk" @@ -1317,7 +1321,7 @@ msgstr "Hasil pencarian produk" msgid "posts search results" msgstr "Hasil pencarian produk" -#: core/models.py:70 +#: core/models.py:71 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1330,23 +1334,23 @@ msgstr "" " mengkategorikan dan mengelola atribut secara lebih efektif dalam sistem " "yang kompleks." -#: core/models.py:86 +#: core/models.py:87 msgid "parent of this group" msgstr "Induk dari grup ini" -#: core/models.py:87 +#: core/models.py:88 msgid "parent attribute group" msgstr "Grup atribut induk" -#: core/models.py:91 core/models.py:92 +#: core/models.py:92 core/models.py:93 msgid "attribute group's name" msgstr "Nama grup atribut" -#: core/models.py:100 core/models.py:634 +#: core/models.py:101 core/models.py:642 msgid "attribute group" msgstr "Kelompok atribut" -#: core/models.py:106 +#: core/models.py:107 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1365,33 +1369,41 @@ msgstr "" "sehingga cocok untuk digunakan dalam sistem yang berinteraksi dengan vendor " "pihak ketiga." -#: core/models.py:119 +#: core/models.py:120 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Menyimpan kredensial dan titik akhir yang diperlukan untuk komunikasi API " "vendor" -#: core/models.py:120 +#: core/models.py:121 msgid "authentication info" msgstr "Info otentikasi" -#: core/models.py:125 +#: core/models.py:126 msgid "define the markup for products retrieved from this vendor" msgstr "Tentukan markup untuk produk yang diambil dari vendor ini" -#: core/models.py:126 +#: core/models.py:127 msgid "vendor markup percentage" msgstr "Persentase markup vendor" -#: core/models.py:130 +#: core/models.py:131 msgid "name of this vendor" msgstr "Nama vendor ini" -#: core/models.py:131 +#: core/models.py:132 msgid "vendor name" msgstr "Nama vendor" -#: core/models.py:177 +#: core/models.py:143 +msgid "response file" +msgstr "file tanggapan" + +#: core/models.py:144 +msgid "vendor's last processing response" +msgstr "tanggapan pemrosesan terakhir dari vendor" + +#: core/models.py:185 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1406,27 +1418,27 @@ msgstr "" " yang diekspor melalui mixin dan menyediakan penyesuaian metadata untuk " "tujuan administratif." -#: core/models.py:189 core/models.py:220 +#: core/models.py:197 core/models.py:228 msgid "internal tag identifier for the product tag" msgstr "Pengidentifikasi tag internal untuk tag produk" -#: core/models.py:190 core/models.py:221 +#: core/models.py:198 core/models.py:229 msgid "tag name" msgstr "Nama tag" -#: core/models.py:194 core/models.py:225 +#: core/models.py:202 core/models.py:233 msgid "user-friendly name for the product tag" msgstr "Nama yang mudah digunakan untuk label produk" -#: core/models.py:195 core/models.py:226 +#: core/models.py:203 core/models.py:234 msgid "tag display name" msgstr "Nama tampilan tag" -#: core/models.py:203 +#: core/models.py:211 msgid "product tag" msgstr "Label produk" -#: core/models.py:209 +#: core/models.py:217 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 +1449,15 @@ msgstr "" "produk. Kelas ini mencakup atribut untuk pengenal tag internal dan nama " "tampilan yang mudah digunakan." -#: core/models.py:234 +#: core/models.py:242 msgid "category tag" msgstr "tag kategori" -#: core/models.py:235 core/models.py:307 +#: core/models.py:243 core/models.py:315 msgid "category tags" msgstr "tag kategori" -#: core/models.py:240 +#: core/models.py:248 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1467,51 +1479,51 @@ msgstr "" "menentukan nama, deskripsi, dan hierarki kategori, serta menetapkan atribut " "seperti gambar, tag, atau prioritas." -#: core/models.py:254 +#: core/models.py:262 msgid "upload an image representing this category" msgstr "Unggah gambar yang mewakili kategori ini" -#: core/models.py:257 +#: core/models.py:265 msgid "category image" msgstr "Kategori gambar" -#: core/models.py:262 +#: core/models.py:270 msgid "define a markup percentage for products in this category" msgstr "Tentukan persentase markup untuk produk dalam kategori ini" -#: core/models.py:271 +#: core/models.py:279 msgid "parent of this category to form a hierarchical structure" msgstr "Induk dari kategori ini untuk membentuk struktur hirarki" -#: core/models.py:272 +#: core/models.py:280 msgid "parent category" msgstr "Kategori induk" -#: core/models.py:277 +#: core/models.py:285 msgid "category name" msgstr "Nama kategori" -#: core/models.py:278 +#: core/models.py:286 msgid "provide a name for this category" msgstr "Berikan nama untuk kategori ini" -#: core/models.py:285 +#: core/models.py:293 msgid "add a detailed description for this category" msgstr "Tambahkan deskripsi terperinci untuk kategori ini" -#: core/models.py:286 +#: core/models.py:294 msgid "category description" msgstr "Deskripsi kategori" -#: core/models.py:306 +#: core/models.py:314 msgid "tags that help describe or group this category" msgstr "tag yang membantu mendeskripsikan atau mengelompokkan kategori ini" -#: core/models.py:313 core/models.py:389 +#: core/models.py:321 core/models.py:397 msgid "priority" msgstr "Prioritas" -#: core/models.py:332 +#: core/models.py:340 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 +1536,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:342 +#: core/models.py:350 msgid "name of this brand" msgstr "Nama merek ini" -#: core/models.py:343 +#: core/models.py:351 msgid "brand name" msgstr "Nama merek" -#: core/models.py:350 +#: core/models.py:358 msgid "upload a logo representing this brand" msgstr "Unggah logo yang mewakili merek ini" -#: core/models.py:352 +#: core/models.py:360 msgid "brand small image" msgstr "Merek gambar kecil" -#: core/models.py:358 +#: core/models.py:366 msgid "upload a big logo representing this brand" msgstr "Unggah logo besar yang mewakili merek ini" -#: core/models.py:360 +#: core/models.py:368 msgid "brand big image" msgstr "Citra besar merek" -#: core/models.py:365 +#: core/models.py:373 msgid "add a detailed description of the brand" msgstr "Tambahkan deskripsi terperinci tentang merek" -#: core/models.py:366 +#: core/models.py:374 msgid "brand description" msgstr "Deskripsi merek" -#: core/models.py:371 +#: core/models.py:379 msgid "optional categories that this brand is associated with" msgstr "Kategori opsional yang dikaitkan dengan merek ini" -#: core/models.py:372 +#: core/models.py:380 msgid "associated categories" msgstr "Kategori" -#: core/models.py:402 +#: core/models.py:410 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 +1592,68 @@ msgstr "" "untuk memungkinkan pelacakan dan evaluasi produk yang tersedia dari berbagai" " vendor." -#: core/models.py:414 +#: core/models.py:422 msgid "the vendor supplying this product stock" msgstr "Vendor yang memasok stok produk ini" -#: core/models.py:415 +#: core/models.py:423 msgid "associated vendor" msgstr "Vendor terkait" -#: core/models.py:419 +#: core/models.py:427 msgid "final price to the customer after markups" msgstr "Harga akhir kepada pelanggan setelah markup" -#: core/models.py:420 +#: core/models.py:428 msgid "selling price" msgstr "Harga jual" -#: core/models.py:425 +#: core/models.py:433 msgid "the product associated with this stock entry" msgstr "Produk yang terkait dengan entri saham ini" -#: core/models.py:426 core/models.py:697 core/models.py:744 -#: core/models.py:1641 +#: core/models.py:434 core/models.py:705 core/models.py:752 +#: core/models.py:1649 msgid "associated product" msgstr "Produk terkait" -#: core/models.py:433 +#: core/models.py:441 msgid "the price paid to the vendor for this product" msgstr "Harga yang dibayarkan kepada vendor untuk produk ini" -#: core/models.py:434 +#: core/models.py:442 msgid "vendor purchase price" msgstr "Harga pembelian vendor" -#: core/models.py:438 +#: core/models.py:446 msgid "available quantity of the product in stock" msgstr "Jumlah produk yang tersedia dalam stok" -#: core/models.py:439 +#: core/models.py:447 msgid "quantity in stock" msgstr "Jumlah dalam stok" -#: core/models.py:443 +#: core/models.py:451 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU yang ditetapkan vendor untuk mengidentifikasi produk" -#: core/models.py:444 +#: core/models.py:452 msgid "vendor sku" msgstr "SKU Vendor" -#: core/models.py:450 +#: core/models.py:458 msgid "digital file associated with this stock if applicable" msgstr "File digital yang terkait dengan saham ini jika ada" -#: core/models.py:451 +#: core/models.py:459 msgid "digital file" msgstr "File digital" -#: core/models.py:460 +#: core/models.py:468 msgid "stock entries" msgstr "Entri saham" -#: core/models.py:465 +#: core/models.py:473 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1662,55 +1674,55 @@ msgstr "" "ini digunakan untuk mendefinisikan dan memanipulasi data produk dan " "informasi terkait di dalam aplikasi." -#: core/models.py:478 +#: core/models.py:486 msgid "category this product belongs to" msgstr "Kategori produk ini termasuk dalam" -#: core/models.py:487 +#: core/models.py:495 msgid "optionally associate this product with a brand" msgstr "Secara opsional mengaitkan produk ini dengan merek" -#: core/models.py:493 +#: core/models.py:501 msgid "tags that help describe or group this product" msgstr "Tag yang membantu mendeskripsikan atau mengelompokkan produk ini" -#: core/models.py:498 +#: core/models.py:506 msgid "indicates whether this product is digitally delivered" msgstr "Menunjukkan apakah produk ini dikirimkan secara digital" -#: core/models.py:499 +#: core/models.py:507 msgid "is product digital" msgstr "Apakah produk digital" -#: core/models.py:505 +#: core/models.py:513 msgid "provide a clear identifying name for the product" msgstr "Berikan nama pengenal yang jelas untuk produk" -#: core/models.py:506 +#: core/models.py:514 msgid "product name" msgstr "Nama produk" -#: core/models.py:511 core/models.py:786 +#: core/models.py:519 core/models.py:794 msgid "add a detailed description of the product" msgstr "Menambahkan deskripsi rinci tentang produk" -#: core/models.py:512 +#: core/models.py:520 msgid "product description" msgstr "Deskripsi produk" -#: core/models.py:519 +#: core/models.py:527 msgid "part number for this product" msgstr "Nomor komponen untuk produk ini" -#: core/models.py:520 +#: core/models.py:528 msgid "part number" msgstr "Nomor bagian" -#: core/models.py:539 +#: core/models.py:547 msgid "stock keeping unit for this product" msgstr "Unit Penyimpanan Stok untuk produk ini" -#: core/models.py:613 +#: core/models.py:621 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 +1738,69 @@ msgstr "" "termasuk string, integer, float, boolean, array, dan objek. Hal ini " "memungkinkan penataan data yang dinamis dan fleksibel." -#: core/models.py:625 +#: core/models.py:633 msgid "category of this attribute" msgstr "Kategori atribut ini" -#: core/models.py:633 +#: core/models.py:641 msgid "group of this attribute" msgstr "Kelompok atribut ini" -#: core/models.py:639 +#: core/models.py:647 msgid "string" msgstr "String" -#: core/models.py:640 +#: core/models.py:648 msgid "integer" msgstr "Bilangan bulat" -#: core/models.py:641 +#: core/models.py:649 msgid "float" msgstr "Mengapung" -#: core/models.py:642 +#: core/models.py:650 msgid "boolean" msgstr "Boolean" -#: core/models.py:643 +#: core/models.py:651 msgid "array" msgstr "Array" -#: core/models.py:644 +#: core/models.py:652 msgid "object" msgstr "Objek" -#: core/models.py:646 +#: core/models.py:654 msgid "type of the attribute's value" msgstr "Jenis nilai atribut" -#: core/models.py:647 +#: core/models.py:655 msgid "value type" msgstr "Jenis nilai" -#: core/models.py:652 +#: core/models.py:660 msgid "name of this attribute" msgstr "Nama atribut ini" -#: core/models.py:653 +#: core/models.py:661 msgid "attribute's name" msgstr "Nama atribut" -#: core/models.py:659 +#: core/models.py:667 msgid "is filterable" msgstr "dapat disaring" -#: core/models.py:660 +#: core/models.py:668 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:671 core/models.py:689 +#: core/models.py:679 core/models.py:697 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Atribut" -#: core/models.py:677 +#: core/models.py:685 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 +1810,19 @@ msgstr "" "menghubungkan 'atribut' dengan 'nilai' yang unik, memungkinkan pengaturan " "yang lebih baik dan representasi karakteristik produk yang dinamis." -#: core/models.py:688 +#: core/models.py:696 msgid "attribute of this value" msgstr "Atribut dari nilai ini" -#: core/models.py:696 +#: core/models.py:704 msgid "the specific product associated with this attribute's value" msgstr "Produk spesifik yang terkait dengan nilai atribut ini" -#: core/models.py:702 +#: core/models.py:710 msgid "the specific value for this attribute" msgstr "Nilai spesifik untuk atribut ini" -#: core/models.py:715 +#: core/models.py:723 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 +1836,39 @@ msgstr "" "menentukan urutan tampilannya. Kelas ini juga mencakup fitur aksesibilitas " "dengan teks alternatif untuk gambar." -#: core/models.py:726 +#: core/models.py:734 msgid "provide alternative text for the image for accessibility" msgstr "Menyediakan teks alternatif untuk gambar agar mudah diakses" -#: core/models.py:727 +#: core/models.py:735 msgid "image alt text" msgstr "Teks alt gambar" -#: core/models.py:730 +#: core/models.py:738 msgid "upload the image file for this product" msgstr "Unggah file gambar untuk produk ini" -#: core/models.py:731 core/models.py:756 +#: core/models.py:739 core/models.py:764 msgid "product image" msgstr "Gambar produk" -#: core/models.py:737 +#: core/models.py:745 msgid "determines the order in which images are displayed" msgstr "Menentukan urutan gambar yang ditampilkan" -#: core/models.py:738 +#: core/models.py:746 msgid "display priority" msgstr "Prioritas tampilan" -#: core/models.py:743 +#: core/models.py:751 msgid "the product that this image represents" msgstr "Produk yang diwakili oleh gambar ini" -#: core/models.py:757 +#: core/models.py:765 msgid "product images" msgstr "Gambar produk" -#: core/models.py:762 +#: core/models.py:770 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 +1884,39 @@ msgstr "" "produk yang berlaku. Kelas ini terintegrasi dengan katalog produk untuk " "menentukan item yang terpengaruh dalam kampanye." -#: core/models.py:774 +#: core/models.py:782 msgid "percentage discount for the selected products" msgstr "Persentase diskon untuk produk yang dipilih" -#: core/models.py:775 +#: core/models.py:783 msgid "discount percentage" msgstr "Persentase diskon" -#: core/models.py:780 +#: core/models.py:788 msgid "provide a unique name for this promotion" msgstr "Berikan nama unik untuk promosi ini" -#: core/models.py:781 +#: core/models.py:789 msgid "promotion name" msgstr "Nama promosi" -#: core/models.py:787 +#: core/models.py:795 msgid "promotion description" msgstr "Deskripsi promosi" -#: core/models.py:792 +#: core/models.py:800 msgid "select which products are included in this promotion" msgstr "Pilih produk mana yang termasuk dalam promosi ini" -#: core/models.py:793 +#: core/models.py:801 msgid "included products" msgstr "Produk yang disertakan" -#: core/models.py:797 +#: core/models.py:805 msgid "promotion" msgstr "Promosi" -#: core/models.py:808 +#: core/models.py:816 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 +1929,23 @@ msgstr "" "serta mendukung operasi untuk menambah dan menghapus beberapa produk " "sekaligus." -#: core/models.py:820 +#: core/models.py:828 msgid "products that the user has marked as wanted" msgstr "Produk yang telah ditandai pengguna sebagai yang diinginkan" -#: core/models.py:828 +#: core/models.py:836 msgid "user who owns this wishlist" msgstr "Pengguna yang memiliki daftar keinginan ini" -#: core/models.py:829 +#: core/models.py:837 msgid "wishlist owner" msgstr "Pemilik Wishlist" -#: core/models.py:837 +#: core/models.py:845 msgid "wishlist" msgstr "Daftar keinginan" -#: core/models.py:879 +#: core/models.py:887 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1949,19 +1961,19 @@ msgstr "" "untuk file dokumenter. Kelas ini memperluas fungsionalitas dari mixin " "tertentu dan menyediakan fitur khusus tambahan." -#: core/models.py:892 +#: core/models.py:900 msgid "documentary" msgstr "Dokumenter" -#: core/models.py:893 +#: core/models.py:901 msgid "documentaries" msgstr "Dokumenter" -#: core/models.py:903 +#: core/models.py:911 msgid "unresolved" msgstr "Belum terselesaikan" -#: core/models.py:908 +#: core/models.py:916 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1982,59 +1994,59 @@ msgstr "" "memungkinkan untuk mengasosiasikan alamat dengan pengguna, sehingga " "memudahkan penanganan data yang dipersonalisasi." -#: core/models.py:923 +#: core/models.py:931 msgid "address line for the customer" msgstr "Baris alamat untuk pelanggan" -#: core/models.py:924 +#: core/models.py:932 msgid "address line" msgstr "Baris alamat" -#: core/models.py:926 +#: core/models.py:934 msgid "street" msgstr "Jalan" -#: core/models.py:927 +#: core/models.py:935 msgid "district" msgstr "Distrik" -#: core/models.py:928 +#: core/models.py:936 msgid "city" msgstr "Kota" -#: core/models.py:929 +#: core/models.py:937 msgid "region" msgstr "Wilayah" -#: core/models.py:930 +#: core/models.py:938 msgid "postal code" msgstr "Kode pos" -#: core/models.py:931 +#: core/models.py:939 msgid "country" msgstr "Negara" -#: core/models.py:938 +#: core/models.py:946 msgid "geolocation point: (longitude, latitude)" msgstr "Titik Geolokasi (Bujur, Lintang)" -#: core/models.py:941 +#: core/models.py:949 msgid "full JSON response from geocoder for this address" msgstr "Tanggapan JSON lengkap dari geocoder untuk alamat ini" -#: core/models.py:946 +#: core/models.py:954 msgid "stored JSON response from the geocoding service" msgstr "Respons JSON yang tersimpan dari layanan geocoding" -#: core/models.py:954 +#: core/models.py:962 msgid "address" msgstr "Alamat" -#: core/models.py:955 +#: core/models.py:963 msgid "addresses" msgstr "Alamat" -#: core/models.py:967 +#: core/models.py:975 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 +2062,72 @@ msgstr "" "penggunaannya. Ini termasuk fungsionalitas untuk memvalidasi dan menerapkan " "kode promo ke pesanan sambil memastikan batasan terpenuhi." -#: core/models.py:981 +#: core/models.py:989 msgid "unique code used by a user to redeem a discount" msgstr "Kode unik yang digunakan oleh pengguna untuk menukarkan diskon" -#: core/models.py:982 +#: core/models.py:990 msgid "promo code identifier" msgstr "Pengenal kode promo" -#: core/models.py:989 +#: core/models.py:997 msgid "fixed discount amount applied if percent is not used" msgstr "Jumlah diskon tetap berlaku jika persen tidak digunakan" -#: core/models.py:990 +#: core/models.py:998 msgid "fixed discount amount" msgstr "Jumlah diskon tetap" -#: core/models.py:996 +#: core/models.py:1004 msgid "percentage discount applied if fixed amount is not used" msgstr "Persentase diskon diterapkan jika jumlah tetap tidak digunakan" -#: core/models.py:997 +#: core/models.py:1005 msgid "percentage discount" msgstr "Persentase diskon" -#: core/models.py:1002 +#: core/models.py:1010 msgid "timestamp when the promocode expires" msgstr "Cap waktu saat kode promo berakhir" -#: core/models.py:1003 +#: core/models.py:1011 msgid "end validity time" msgstr "Akhiri waktu validitas" -#: core/models.py:1008 +#: core/models.py:1016 msgid "timestamp from which this promocode is valid" msgstr "Stempel waktu dari mana kode promo ini valid" -#: core/models.py:1009 +#: core/models.py:1017 msgid "start validity time" msgstr "Mulai waktu validitas" -#: core/models.py:1014 +#: core/models.py:1022 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:1015 +#: core/models.py:1023 msgid "usage timestamp" msgstr "Cap waktu penggunaan" -#: core/models.py:1020 +#: core/models.py:1028 msgid "user assigned to this promocode if applicable" msgstr "Pengguna yang ditugaskan ke kode promo ini jika berlaku" -#: core/models.py:1021 +#: core/models.py:1029 msgid "assigned user" msgstr "Pengguna yang ditugaskan" -#: core/models.py:1028 +#: core/models.py:1036 msgid "promo code" msgstr "Kode promo" -#: core/models.py:1029 +#: core/models.py:1037 msgid "promo codes" msgstr "Kode promo" -#: core/models.py:1044 +#: core/models.py:1052 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2123,16 +2135,16 @@ msgstr "" "Hanya satu jenis diskon yang harus ditentukan (jumlah atau persen), tetapi " "tidak boleh keduanya atau tidak sama sekali." -#: core/models.py:1065 +#: core/models.py:1073 msgid "promocode already used" msgstr "Promocode telah digunakan" -#: core/models.py:1081 +#: core/models.py:1089 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Jenis diskon tidak valid untuk kode promo {self.uuid}!" -#: core/models.py:1090 +#: core/models.py:1098 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 +2161,144 @@ msgstr "" "Fungsionalitas yang sama juga mendukung pengelolaan produk dalam siklus " "hidup pesanan." -#: core/models.py:1107 +#: core/models.py:1115 msgid "the billing address used for this order" msgstr "Alamat penagihan yang digunakan untuk pesanan ini" -#: core/models.py:1115 +#: core/models.py:1123 msgid "optional promo code applied to this order" msgstr "Kode promo opsional berlaku untuk pesanan ini" -#: core/models.py:1116 +#: core/models.py:1124 msgid "applied promo code" msgstr "Kode promo yang diterapkan" -#: core/models.py:1124 +#: core/models.py:1132 msgid "the shipping address used for this order" msgstr "Alamat pengiriman yang digunakan untuk pesanan ini" -#: core/models.py:1125 +#: core/models.py:1133 msgid "shipping address" msgstr "Alamat pengiriman" -#: core/models.py:1131 +#: core/models.py:1139 msgid "current status of the order in its lifecycle" msgstr "Status pesanan saat ini dalam siklus hidupnya" -#: core/models.py:1132 +#: core/models.py:1140 msgid "order status" msgstr "Status pesanan" -#: core/models.py:1137 core/models.py:1618 +#: core/models.py:1145 core/models.py:1626 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:1143 +#: core/models.py:1151 msgid "json representation of order attributes for this order" msgstr "Representasi JSON dari atribut pesanan untuk pesanan ini" -#: core/models.py:1149 +#: core/models.py:1157 msgid "the user who placed the order" msgstr "Pengguna yang melakukan pemesanan" -#: core/models.py:1150 +#: core/models.py:1158 msgid "user" msgstr "Pengguna" -#: core/models.py:1156 +#: core/models.py:1164 msgid "the timestamp when the order was finalized" msgstr "Stempel waktu saat pesanan diselesaikan" -#: core/models.py:1157 +#: core/models.py:1165 msgid "buy time" msgstr "Beli waktu" -#: core/models.py:1164 +#: core/models.py:1172 msgid "a human-readable identifier for the order" msgstr "Pengenal yang dapat dibaca manusia untuk pesanan" -#: core/models.py:1165 +#: core/models.py:1173 msgid "human readable id" msgstr "ID yang dapat dibaca manusia" -#: core/models.py:1171 +#: core/models.py:1179 msgid "order" msgstr "Pesan" -#: core/models.py:1209 +#: core/models.py:1217 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:1249 +#: core/models.py:1257 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:1254 +#: core/models.py:1262 msgid "you cannot add inactive products to order" msgstr "Anda tidak dapat menambahkan produk yang tidak aktif ke dalam pesanan" -#: core/models.py:1271 +#: core/models.py:1279 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:1293 core/models.py:1318 core/models.py:1326 +#: core/models.py:1301 core/models.py:1326 core/models.py:1334 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:1314 +#: core/models.py:1322 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} tidak ada dengan kueri <{query}>!" -#: core/models.py:1346 +#: core/models.py:1354 msgid "promocode does not exist" msgstr "Kode promosi tidak ada" -#: core/models.py:1352 +#: core/models.py:1360 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:1371 +#: core/models.py:1379 msgid "address does not exist" msgstr "Alamat tidak ada" -#: core/models.py:1392 core/models.py:1461 +#: core/models.py:1400 core/models.py:1469 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:1395 core/models.py:1457 +#: core/models.py:1403 core/models.py:1465 msgid "invalid force value" msgstr "Nilai gaya tidak valid" -#: core/models.py:1401 core/models.py:1464 +#: core/models.py:1409 core/models.py:1472 msgid "you cannot purchase an empty order!" msgstr "Anda tidak dapat membeli pesanan kosong!" -#: core/models.py:1420 +#: core/models.py:1428 msgid "you cannot buy an order without a user" msgstr "Anda tidak dapat membeli pesanan tanpa pengguna!" -#: core/models.py:1434 +#: core/models.py:1442 msgid "a user without a balance cannot buy with balance" msgstr "Pengguna tanpa saldo tidak dapat membeli dengan saldo!" -#: core/models.py:1439 +#: core/models.py:1447 msgid "insufficient funds to complete the order" msgstr "Dana tidak mencukupi untuk menyelesaikan pesanan" -#: core/models.py:1473 +#: core/models.py:1481 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2294,7 +2306,7 @@ msgstr "" "Anda tidak dapat membeli tanpa registrasi, berikan informasi berikut: nama " "pelanggan, email pelanggan, nomor telepon pelanggan" -#: core/models.py:1482 +#: core/models.py:1490 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2302,7 +2314,7 @@ msgstr "" "Metode pembayaran tidak valid: {payment_method} dari " "{available_payment_methods}!" -#: core/models.py:1591 +#: core/models.py:1599 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2324,110 +2336,110 @@ msgstr "" "URL unduhan untuk produk digital. Model ini terintegrasi dengan model " "Pesanan dan Produk dan menyimpan referensi ke keduanya." -#: core/models.py:1606 +#: core/models.py:1614 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:1607 +#: core/models.py:1615 msgid "purchase price at order time" msgstr "Harga pembelian pada saat pemesanan" -#: core/models.py:1612 +#: core/models.py:1620 msgid "internal comments for admins about this ordered product" msgstr "Komentar internal untuk admin tentang produk yang dipesan ini" -#: core/models.py:1613 +#: core/models.py:1621 msgid "internal comments" msgstr "Komentar internal" -#: core/models.py:1619 +#: core/models.py:1627 msgid "user notifications" msgstr "Pemberitahuan pengguna" -#: core/models.py:1624 +#: core/models.py:1632 msgid "json representation of this item's attributes" msgstr "Representasi JSON dari atribut item ini" -#: core/models.py:1625 +#: core/models.py:1633 msgid "ordered product attributes" msgstr "Atribut produk yang dipesan" -#: core/models.py:1630 +#: core/models.py:1638 msgid "reference to the parent order that contains this product" msgstr "Referensi ke pesanan induk yang berisi produk ini" -#: core/models.py:1631 +#: core/models.py:1639 msgid "parent order" msgstr "Urutan induk" -#: core/models.py:1640 +#: core/models.py:1648 msgid "the specific product associated with this order line" msgstr "Produk spesifik yang terkait dengan baris pesanan ini" -#: core/models.py:1647 +#: core/models.py:1655 msgid "quantity of this specific product in the order" msgstr "Jumlah produk spesifik ini dalam pesanan" -#: core/models.py:1648 +#: core/models.py:1656 msgid "product quantity" msgstr "Kuantitas produk" -#: core/models.py:1655 +#: core/models.py:1663 msgid "current status of this product in the order" msgstr "Status saat ini dari produk ini dalam pesanan" -#: core/models.py:1656 +#: core/models.py:1664 msgid "product line status" msgstr "Status lini produk" -#: core/models.py:1719 +#: core/models.py:1727 msgid "order product must have an order" msgstr "Pesananproduk harus memiliki pesanan terkait!" -#: core/models.py:1721 +#: core/models.py:1729 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Tindakan yang salah ditentukan untuk umpan balik: {action}!" -#: core/models.py:1735 +#: core/models.py:1743 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:1741 +#: core/models.py:1749 msgid "name" msgstr "Nama" -#: core/models.py:1742 +#: core/models.py:1750 msgid "URL of the integration" msgstr "URL integrasi" -#: core/models.py:1743 +#: core/models.py:1751 msgid "authentication credentials" msgstr "Kredensial otentikasi" -#: core/models.py:1765 +#: core/models.py:1773 msgid "you can only have one default CRM provider" msgstr "Anda hanya dapat memiliki satu penyedia CRM default" -#: core/models.py:1775 +#: core/models.py:1783 msgid "CRM" msgstr "CRM" -#: core/models.py:1776 +#: core/models.py:1784 msgid "CRMs" msgstr "CRM" -#: core/models.py:1788 +#: core/models.py:1796 msgid "order CRM link" msgstr "Tautan CRM pesanan" -#: core/models.py:1789 +#: core/models.py:1797 msgid "orders CRM links" msgstr "Tautan CRM Pesanan" -#: core/models.py:1794 +#: core/models.py:1802 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2444,15 +2456,15 @@ msgstr "" "untuk menghasilkan URL untuk mengunduh aset ketika pesanan terkait dalam " "status selesai." -#: core/models.py:1808 +#: core/models.py:1816 msgid "download" msgstr "Unduh" -#: core/models.py:1809 +#: core/models.py:1817 msgid "downloads" msgstr "Unduhan" -#: core/models.py:1823 +#: core/models.py:1831 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,29 +2479,29 @@ msgstr "" "ditetapkan pengguna. Kelas ini menggunakan bidang basis data untuk " "memodelkan dan mengelola data umpan balik secara efektif." -#: core/models.py:1835 +#: core/models.py:1843 msgid "user-provided comments about their experience with the product" msgstr "" "Komentar yang diberikan pengguna tentang pengalaman mereka dengan produk" -#: core/models.py:1836 +#: core/models.py:1844 msgid "feedback comments" msgstr "Komentar umpan balik" -#: core/models.py:1843 +#: core/models.py:1851 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:1844 +#: core/models.py:1852 msgid "related order product" msgstr "Produk pesanan terkait" -#: core/models.py:1849 +#: core/models.py:1857 msgid "user-assigned rating for the product" msgstr "Peringkat yang ditetapkan pengguna untuk produk" -#: core/models.py:1850 +#: core/models.py:1858 msgid "product rating" msgstr "Peringkat produk" @@ -2707,22 +2719,22 @@ msgstr "Data dan batas waktu diperlukan" msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "Nilai batas waktu tidak valid, harus antara 0 dan 216000 detik" -#: core/utils/emailing.py:25 +#: core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | hubungi kami dimulai" -#: core/utils/emailing.py:74 +#: core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Konfirmasi Pesanan" -#: core/utils/emailing.py:109 +#: core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Pesanan Dikirim" -#: core/utils/emailing.py:197 +#: core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | kode promo diberikan" @@ -2969,7 +2981,7 @@ msgstr "" "yang dapat diakses. Kelas ini memperluas `EvibesViewSet` dasar dan " "menggunakan sistem penyaringan Django untuk meminta data." -#: core/viewsets.py:593 +#: core/viewsets.py:594 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2988,7 +3000,7 @@ msgstr "" "beberapa serializer berdasarkan tindakan spesifik yang dilakukan dan " "memberlakukan izin yang sesuai saat berinteraksi dengan data pesanan." -#: core/viewsets.py:782 +#: core/viewsets.py:784 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3002,11 +3014,11 @@ msgstr "" "serializer berdasarkan tindakan yang diminta. Selain itu, ini menyediakan " "tindakan terperinci untuk menangani umpan balik pada instance OrderProduct" -#: core/viewsets.py:833 +#: core/viewsets.py:835 msgid "Manages operations related to Product images in the application. " msgstr "Mengelola operasi yang terkait dengan gambar Produk dalam aplikasi." -#: core/viewsets.py:845 +#: core/viewsets.py:847 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3014,15 +3026,15 @@ msgstr "" "Mengelola pengambilan dan penanganan contoh PromoCode melalui berbagai " "tindakan API." -#: core/viewsets.py:866 +#: core/viewsets.py:868 msgid "Represents a view set for managing promotions. " msgstr "Merupakan set tampilan untuk mengelola promosi." -#: core/viewsets.py:878 +#: core/viewsets.py:880 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 +#: core/viewsets.py:894 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3040,7 +3052,7 @@ msgstr "" "diintegrasikan untuk memastikan bahwa pengguna hanya dapat mengelola daftar " "keinginan mereka sendiri kecuali jika izin eksplisit diberikan." -#: core/viewsets.py:1007 +#: core/viewsets.py:1009 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3054,12 +3066,12 @@ msgstr "" "khusus untuk metode HTTP yang berbeda, penggantian serializer, dan " "penanganan izin berdasarkan konteks permintaan." -#: core/viewsets.py:1074 +#: core/viewsets.py:1076 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Kesalahan pengodean geografis: {e}" -#: core/viewsets.py:1081 +#: core/viewsets.py:1083 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/it_IT/LC_MESSAGES/django.mo b/core/locale/it_IT/LC_MESSAGES/django.mo index bd3ad7da..2d1397b1 100644 Binary files a/core/locale/it_IT/LC_MESSAGES/django.mo and b/core/locale/it_IT/LC_MESSAGES/django.mo differ diff --git a/core/locale/it_IT/LC_MESSAGES/django.po b/core/locale/it_IT/LC_MESSAGES/django.po index 2d7445d7..cc9295ad 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -51,82 +51,86 @@ msgstr "Modificato" msgid "when the object was last modified" msgstr "Quando l'oggetto è stato modificato per l'ultima volta" -#: core/admin.py:63 +#: core/admin.py:68 msgid "translations" msgstr "Traduzioni" -#: core/admin.py:67 +#: core/admin.py:72 msgid "general" msgstr "Generale" -#: core/admin.py:69 +#: core/admin.py:74 msgid "relations" msgstr "Relazioni" -#: core/admin.py:87 +#: core/admin.py:76 +msgid "additional info" +msgstr "informazioni aggiuntive" + +#: core/admin.py:94 msgid "metadata" msgstr "Metadati" -#: core/admin.py:94 +#: core/admin.py:101 msgid "timestamps" msgstr "Timestamp" -#: core/admin.py:109 +#: core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Attivare il %(verbose_name_plural)s selezionato" -#: core/admin.py:114 +#: core/admin.py:121 msgid "selected items have been activated." msgstr "Gli articoli selezionati sono stati attivati!" -#: core/admin.py:120 +#: core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Disattivare il %(verbose_name_plural)s selezionato" -#: core/admin.py:125 +#: core/admin.py:132 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:701 core/models.py:709 +#: core/admin.py:144 core/graphene/object_types.py:609 +#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 msgid "attribute value" msgstr "Valore dell'attributo" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 +#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718 msgid "attribute values" msgstr "Valori degli attributi" -#: core/admin.py:146 +#: core/admin.py:153 msgid "image" msgstr "Immagine" -#: core/admin.py:147 core/graphene/object_types.py:501 +#: core/admin.py:154 core/graphene/object_types.py:501 msgid "images" msgstr "Immagini" -#: core/admin.py:155 core/models.py:459 +#: core/admin.py:162 core/models.py:467 msgid "stock" msgstr "Stock" -#: core/admin.py:156 core/graphene/object_types.py:663 +#: core/admin.py:163 core/graphene/object_types.py:663 msgid "stocks" msgstr "Le scorte" -#: core/admin.py:166 core/models.py:1667 +#: core/admin.py:173 core/models.py:1675 msgid "order product" msgstr "Ordina il prodotto" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 msgid "order products" msgstr "Ordinare i prodotti" -#: core/admin.py:180 core/admin.py:181 +#: core/admin.py:187 core/admin.py:188 msgid "children" msgstr "I bambini" -#: core/admin.py:566 +#: core/admin.py:940 msgid "Config" msgstr "Configurazione" @@ -752,23 +756,23 @@ 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:118 core/elasticsearch/__init__.py:498 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 msgid "no search term provided." msgstr "Non è stato fornito alcun termine di ricerca." -#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +#: core/filters.py:65 core/filters.py:399 core/filters.py:526 msgid "Search" msgstr "Ricerca" -#: core/filters.py:66 core/filters.py:554 core/filters.py:583 +#: core/filters.py:66 core/filters.py:556 core/filters.py:585 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:399 core/filters.py:526 +#: core/filters.py:67 core/filters.py:401 core/filters.py:528 msgid "Name" msgstr "Nome" -#: core/filters.py:68 core/filters.py:528 +#: core/filters.py:68 core/filters.py:530 msgid "Categories" msgstr "Categorie" @@ -776,7 +780,7 @@ msgstr "Categorie" msgid "Categories Slugs" msgstr "Categorie Lumache" -#: core/filters.py:71 core/filters.py:407 +#: core/filters.py:71 core/filters.py:409 msgid "Tags" msgstr "Tag" @@ -804,8 +808,8 @@ msgstr "Attributi" msgid "Quantity" msgstr "Quantità" -#: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:301 core/models.py:383 core/models.py:536 +#: core/filters.py:78 core/filters.py:403 core/filters.py:529 +#: core/models.py:309 core/models.py:391 core/models.py:544 msgid "Slug" msgstr "Lumaca" @@ -821,7 +825,7 @@ msgstr "Includere le sottocategorie" msgid "Include personal ordered" msgstr "Includere prodotti ordinati personalmente" -#: core/filters.py:85 core/models.py:540 +#: core/filters.py:85 core/models.py:548 msgid "SKU" msgstr "SKU" @@ -830,48 +834,48 @@ 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:324 +#: core/filters.py:326 msgid "Search (ID, product name or part number)" msgstr "Ricerca (ID, nome del prodotto o numero di parte)" -#: core/filters.py:327 +#: core/filters.py:329 msgid "Bought after (inclusive)" msgstr "Acquistato dopo (incluso)" -#: core/filters.py:328 +#: core/filters.py:330 msgid "Bought before (inclusive)" msgstr "Acquistato prima (compreso)" -#: core/filters.py:331 core/filters.py:378 core/filters.py:585 +#: core/filters.py:333 core/filters.py:380 core/filters.py:587 msgid "User email" msgstr "Email dell'utente" -#: core/filters.py:332 core/filters.py:379 core/filters.py:563 -#: core/filters.py:584 +#: core/filters.py:334 core/filters.py:381 core/filters.py:565 +#: core/filters.py:586 msgid "User UUID" msgstr "UUID utente" -#: core/filters.py:333 +#: core/filters.py:335 msgid "Status" msgstr "Stato" -#: core/filters.py:337 +#: core/filters.py:339 msgid "Human Readable ID" msgstr "ID leggibile dall'uomo" -#: core/filters.py:400 +#: core/filters.py:402 msgid "Parent" msgstr "Genitore" -#: core/filters.py:404 +#: core/filters.py:406 msgid "Whole category(has at least 1 product or not)" msgstr "Intera categoria (con o senza almeno 1 prodotto)" -#: core/filters.py:408 +#: core/filters.py:410 msgid "Level" msgstr "Livello" -#: core/filters.py:558 +#: core/filters.py:560 msgid "Product UUID" msgstr "UUID del prodotto" @@ -927,7 +931,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:679 +#: core/graphene/mutations.py:527 core/viewsets.py:680 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 +1008,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:849 core/models.py:862 -#: core/models.py:1281 core/models.py:1310 core/models.py:1335 -#: core/viewsets.py:682 +#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 +#: core/models.py:1289 core/models.py:1318 core/models.py:1343 +#: core/viewsets.py:683 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} non esiste: {uuid}!" @@ -1020,8 +1024,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:672 core/models.py:1144 -#: core/models.py:1744 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 +#: core/models.py:1752 msgid "attributes" msgstr "Attributi" @@ -1034,11 +1038,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:326 core/models.py:626 +#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 msgid "categories" msgstr "Categorie" -#: core/graphene/object_types.py:124 core/models.py:397 +#: core/graphene/object_types.py:124 core/models.py:405 msgid "brands" msgstr "Marche" @@ -1047,7 +1051,7 @@ msgid "category image url" msgstr "Categorie" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:263 +#: core/models.py:271 msgid "markup percentage" msgstr "Percentuale di markup" @@ -1071,7 +1075,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:169 +#: core/graphene/object_types.py:351 core/models.py:177 msgid "vendors" msgstr "Venditori" @@ -1096,7 +1100,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:1138 +#: core/models.py:1146 msgid "notifications" msgstr "Notifiche" @@ -1104,7 +1108,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:1860 +#: core/graphene/object_types.py:400 core/models.py:1868 msgid "feedback" msgstr "Feedback" @@ -1112,7 +1116,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:1108 +#: core/graphene/object_types.py:436 core/models.py:1116 msgid "billing address" msgstr "Indirizzo di fatturazione" @@ -1140,7 +1144,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:1172 +#: core/graphene/object_types.py:465 core/models.py:1180 msgid "orders" msgstr "Ordini" @@ -1152,19 +1156,19 @@ msgstr "URL immagine" msgid "product's images" msgstr "Immagini del prodotto" -#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 +#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 msgid "category" msgstr "Categoria" -#: core/graphene/object_types.py:502 core/models.py:1861 +#: core/graphene/object_types.py:502 core/models.py:1869 msgid "feedbacks" msgstr "Feedback" -#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 +#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 msgid "brand" msgstr "Marchio" -#: core/graphene/object_types.py:504 core/models.py:101 +#: core/graphene/object_types.py:504 core/models.py:102 msgid "attribute groups" msgstr "Gruppi di attributi" @@ -1192,7 +1196,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:550 +#: core/graphene/object_types.py:534 core/models.py:558 msgid "products" msgstr "Prodotti" @@ -1204,15 +1208,15 @@ msgstr "Codici promozionali" msgid "products on sale" msgstr "Prodotti in vendita" -#: core/graphene/object_types.py:651 core/models.py:798 +#: core/graphene/object_types.py:651 core/models.py:806 msgid "promotions" msgstr "Promozioni" -#: core/graphene/object_types.py:655 core/models.py:168 +#: core/graphene/object_types.py:655 core/models.py:176 msgid "vendor" msgstr "Venditore" -#: core/graphene/object_types.py:656 core/models.py:549 +#: core/graphene/object_types.py:656 core/models.py:557 #: 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 +1224,11 @@ msgstr "Venditore" msgid "product" msgstr "Prodotto" -#: core/graphene/object_types.py:667 core/models.py:821 +#: core/graphene/object_types.py:667 core/models.py:829 msgid "wishlisted products" msgstr "Prodotti desiderati" -#: core/graphene/object_types.py:673 core/models.py:838 +#: core/graphene/object_types.py:673 core/models.py:846 msgid "wishlists" msgstr "Liste dei desideri" @@ -1232,7 +1236,7 @@ msgstr "Liste dei desideri" msgid "tagged products" msgstr "Prodotti contrassegnati" -#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 +#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 msgid "product tags" msgstr "Tag del prodotto" @@ -1318,7 +1322,7 @@ msgstr "Risultati della ricerca dei prodotti" msgid "posts search results" msgstr "Risultati della ricerca dei prodotti" -#: core/models.py:70 +#: core/models.py:71 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1331,23 +1335,23 @@ msgstr "" "Questo può essere utile per categorizzare e gestire meglio gli attributi in " "un sistema complesso." -#: core/models.py:86 +#: core/models.py:87 msgid "parent of this group" msgstr "Genitore di questo gruppo" -#: core/models.py:87 +#: core/models.py:88 msgid "parent attribute group" msgstr "Gruppo di attributi padre" -#: core/models.py:91 core/models.py:92 +#: core/models.py:92 core/models.py:93 msgid "attribute group's name" msgstr "Nome del gruppo di attributi" -#: core/models.py:100 core/models.py:634 +#: core/models.py:101 core/models.py:642 msgid "attribute group" msgstr "Gruppo di attributi" -#: core/models.py:106 +#: core/models.py:107 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1366,33 +1370,41 @@ msgstr "" "anche metadati e vincoli aggiuntivi, rendendolo adatto all'uso in sistemi " "che interagiscono con venditori terzi." -#: core/models.py:119 +#: core/models.py:120 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Memorizza le credenziali e gli endpoint necessari per la comunicazione API " "del fornitore." -#: core/models.py:120 +#: core/models.py:121 msgid "authentication info" msgstr "Informazioni sull'autenticazione" -#: core/models.py:125 +#: core/models.py:126 msgid "define the markup for products retrieved from this vendor" msgstr "Definire il markup per i prodotti recuperati da questo fornitore" -#: core/models.py:126 +#: core/models.py:127 msgid "vendor markup percentage" msgstr "Percentuale di ricarico del fornitore" -#: core/models.py:130 +#: core/models.py:131 msgid "name of this vendor" msgstr "Nome del fornitore" -#: core/models.py:131 +#: core/models.py:132 msgid "vendor name" msgstr "Nome del fornitore" -#: core/models.py:177 +#: core/models.py:143 +msgid "response file" +msgstr "file di risposta" + +#: core/models.py:144 +msgid "vendor's last processing response" +msgstr "risposta del venditore all'ultima elaborazione" + +#: core/models.py:185 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1407,27 +1419,27 @@ msgstr "" "operazioni esportate attraverso i mixin e fornisce la personalizzazione dei " "metadati per scopi amministrativi." -#: core/models.py:189 core/models.py:220 +#: core/models.py:197 core/models.py:228 msgid "internal tag identifier for the product tag" msgstr "Identificatore interno dell'etichetta del prodotto" -#: core/models.py:190 core/models.py:221 +#: core/models.py:198 core/models.py:229 msgid "tag name" msgstr "Nome del tag" -#: core/models.py:194 core/models.py:225 +#: core/models.py:202 core/models.py:233 msgid "user-friendly name for the product tag" msgstr "Nome intuitivo per l'etichetta del prodotto" -#: core/models.py:195 core/models.py:226 +#: core/models.py:203 core/models.py:234 msgid "tag display name" msgstr "Nome del tag" -#: core/models.py:203 +#: core/models.py:211 msgid "product tag" msgstr "Etichetta del prodotto" -#: core/models.py:209 +#: core/models.py:217 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 +1450,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:234 +#: core/models.py:242 msgid "category tag" msgstr "tag categoria" -#: core/models.py:235 core/models.py:307 +#: core/models.py:243 core/models.py:315 msgid "category tags" msgstr "tag di categoria" -#: core/models.py:240 +#: core/models.py:248 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1469,52 +1481,52 @@ msgstr "" "specificare il nome, la descrizione e la gerarchia delle categorie, nonché " "di assegnare attributi come immagini, tag o priorità." -#: core/models.py:254 +#: core/models.py:262 msgid "upload an image representing this category" msgstr "Caricare un'immagine che rappresenti questa categoria" -#: core/models.py:257 +#: core/models.py:265 msgid "category image" msgstr "Categoria immagine" -#: core/models.py:262 +#: core/models.py:270 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:271 +#: core/models.py:279 msgid "parent of this category to form a hierarchical structure" msgstr "Genitore di questa categoria per formare una struttura gerarchica" -#: core/models.py:272 +#: core/models.py:280 msgid "parent category" msgstr "Categoria di genitori" -#: core/models.py:277 +#: core/models.py:285 msgid "category name" msgstr "Nome della categoria" -#: core/models.py:278 +#: core/models.py:286 msgid "provide a name for this category" msgstr "Indicare un nome per questa categoria" -#: core/models.py:285 +#: core/models.py:293 msgid "add a detailed description for this category" msgstr "Aggiungere una descrizione dettagliata per questa categoria" -#: core/models.py:286 +#: core/models.py:294 msgid "category description" msgstr "Descrizione della categoria" -#: core/models.py:306 +#: core/models.py:314 msgid "tags that help describe or group this category" msgstr "tag che aiutano a descrivere o raggruppare questa categoria" -#: core/models.py:313 core/models.py:389 +#: core/models.py:321 core/models.py:397 msgid "priority" msgstr "Priorità" -#: core/models.py:332 +#: core/models.py:340 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 +1540,47 @@ msgstr "" "priorità. Permette di organizzare e rappresentare i dati relativi al marchio" " all'interno dell'applicazione." -#: core/models.py:342 +#: core/models.py:350 msgid "name of this brand" msgstr "Nome del marchio" -#: core/models.py:343 +#: core/models.py:351 msgid "brand name" msgstr "Nome del marchio" -#: core/models.py:350 +#: core/models.py:358 msgid "upload a logo representing this brand" msgstr "Caricare un logo che rappresenti questo marchio" -#: core/models.py:352 +#: core/models.py:360 msgid "brand small image" msgstr "Immagine piccola del marchio" -#: core/models.py:358 +#: core/models.py:366 msgid "upload a big logo representing this brand" msgstr "Caricare un grande logo che rappresenti questo marchio" -#: core/models.py:360 +#: core/models.py:368 msgid "brand big image" msgstr "Grande immagine del marchio" -#: core/models.py:365 +#: core/models.py:373 msgid "add a detailed description of the brand" msgstr "Aggiungere una descrizione dettagliata del marchio" -#: core/models.py:366 +#: core/models.py:374 msgid "brand description" msgstr "Descrizione del marchio" -#: core/models.py:371 +#: core/models.py:379 msgid "optional categories that this brand is associated with" msgstr "Categorie opzionali a cui questo marchio è associato" -#: core/models.py:372 +#: core/models.py:380 msgid "associated categories" msgstr "Categorie" -#: core/models.py:402 +#: core/models.py:410 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 +1596,68 @@ msgstr "" "dell'inventario per consentire il monitoraggio e la valutazione dei prodotti" " disponibili presso i vari fornitori." -#: core/models.py:414 +#: core/models.py:422 msgid "the vendor supplying this product stock" msgstr "Il venditore che fornisce questo stock di prodotti" -#: core/models.py:415 +#: core/models.py:423 msgid "associated vendor" msgstr "Venditore associato" -#: core/models.py:419 +#: core/models.py:427 msgid "final price to the customer after markups" msgstr "Prezzo finale al cliente dopo i ricarichi" -#: core/models.py:420 +#: core/models.py:428 msgid "selling price" msgstr "Prezzo di vendita" -#: core/models.py:425 +#: core/models.py:433 msgid "the product associated with this stock entry" msgstr "Il prodotto associato a questa voce di magazzino" -#: core/models.py:426 core/models.py:697 core/models.py:744 -#: core/models.py:1641 +#: core/models.py:434 core/models.py:705 core/models.py:752 +#: core/models.py:1649 msgid "associated product" msgstr "Prodotto associato" -#: core/models.py:433 +#: core/models.py:441 msgid "the price paid to the vendor for this product" msgstr "Il prezzo pagato al venditore per questo prodotto" -#: core/models.py:434 +#: core/models.py:442 msgid "vendor purchase price" msgstr "Prezzo di acquisto del fornitore" -#: core/models.py:438 +#: core/models.py:446 msgid "available quantity of the product in stock" msgstr "Quantità disponibile del prodotto in magazzino" -#: core/models.py:439 +#: core/models.py:447 msgid "quantity in stock" msgstr "Quantità in magazzino" -#: core/models.py:443 +#: core/models.py:451 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU assegnato dal fornitore per identificare il prodotto" -#: core/models.py:444 +#: core/models.py:452 msgid "vendor sku" msgstr "SKU del venditore" -#: core/models.py:450 +#: core/models.py:458 msgid "digital file associated with this stock if applicable" msgstr "File digitale associato a questo stock, se applicabile" -#: core/models.py:451 +#: core/models.py:459 msgid "digital file" msgstr "File digitale" -#: core/models.py:460 +#: core/models.py:468 msgid "stock entries" msgstr "Voci di magazzino" -#: core/models.py:465 +#: core/models.py:473 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1667,55 +1679,55 @@ msgstr "" " dei prodotti e le informazioni ad essi associate all'interno di " "un'applicazione." -#: core/models.py:478 +#: core/models.py:486 msgid "category this product belongs to" msgstr "Categoria a cui appartiene questo prodotto" -#: core/models.py:487 +#: core/models.py:495 msgid "optionally associate this product with a brand" msgstr "Associare facoltativamente questo prodotto a un marchio" -#: core/models.py:493 +#: core/models.py:501 msgid "tags that help describe or group this product" msgstr "Tag che aiutano a descrivere o raggruppare questo prodotto" -#: core/models.py:498 +#: core/models.py:506 msgid "indicates whether this product is digitally delivered" msgstr "Indica se il prodotto è consegnato in formato digitale" -#: core/models.py:499 +#: core/models.py:507 msgid "is product digital" msgstr "Il prodotto è digitale" -#: core/models.py:505 +#: core/models.py:513 msgid "provide a clear identifying name for the product" msgstr "Fornire un nome identificativo chiaro per il prodotto" -#: core/models.py:506 +#: core/models.py:514 msgid "product name" msgstr "Nome del prodotto" -#: core/models.py:511 core/models.py:786 +#: core/models.py:519 core/models.py:794 msgid "add a detailed description of the product" msgstr "Aggiungere una descrizione dettagliata del prodotto" -#: core/models.py:512 +#: core/models.py:520 msgid "product description" msgstr "Descrizione del prodotto" -#: core/models.py:519 +#: core/models.py:527 msgid "part number for this product" msgstr "Numero di parte per questo prodotto" -#: core/models.py:520 +#: core/models.py:528 msgid "part number" msgstr "Numero di parte" -#: core/models.py:539 +#: core/models.py:547 msgid "stock keeping unit for this product" msgstr "Unità di mantenimento delle scorte per questo prodotto" -#: core/models.py:613 +#: core/models.py:621 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 +1743,70 @@ msgstr "" " tra cui stringa, intero, float, booleano, array e oggetto. Ciò consente una" " strutturazione dinamica e flessibile dei dati." -#: core/models.py:625 +#: core/models.py:633 msgid "category of this attribute" msgstr "Categoria di questo attributo" -#: core/models.py:633 +#: core/models.py:641 msgid "group of this attribute" msgstr "Gruppo di questo attributo" -#: core/models.py:639 +#: core/models.py:647 msgid "string" msgstr "Stringa" -#: core/models.py:640 +#: core/models.py:648 msgid "integer" msgstr "Intero" -#: core/models.py:641 +#: core/models.py:649 msgid "float" msgstr "Galleggiante" -#: core/models.py:642 +#: core/models.py:650 msgid "boolean" msgstr "Booleano" -#: core/models.py:643 +#: core/models.py:651 msgid "array" msgstr "Array" -#: core/models.py:644 +#: core/models.py:652 msgid "object" msgstr "Oggetto" -#: core/models.py:646 +#: core/models.py:654 msgid "type of the attribute's value" msgstr "Tipo di valore dell'attributo" -#: core/models.py:647 +#: core/models.py:655 msgid "value type" msgstr "Tipo di valore" -#: core/models.py:652 +#: core/models.py:660 msgid "name of this attribute" msgstr "Nome dell'attributo" -#: core/models.py:653 +#: core/models.py:661 msgid "attribute's name" msgstr "Nome dell'attributo" -#: core/models.py:659 +#: core/models.py:667 msgid "is filterable" msgstr "è filtrabile" -#: core/models.py:660 +#: core/models.py:668 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:671 core/models.py:689 +#: core/models.py:679 core/models.py:697 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attributo" -#: core/models.py:677 +#: core/models.py:685 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 +1817,19 @@ msgstr "" "organizzazione e rappresentazione dinamica delle caratteristiche del " "prodotto." -#: core/models.py:688 +#: core/models.py:696 msgid "attribute of this value" msgstr "Attributo di questo valore" -#: core/models.py:696 +#: core/models.py:704 msgid "the specific product associated with this attribute's value" msgstr "Il prodotto specifico associato al valore di questo attributo" -#: core/models.py:702 +#: core/models.py:710 msgid "the specific value for this attribute" msgstr "Il valore specifico per questo attributo" -#: core/models.py:715 +#: core/models.py:723 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 +1843,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:726 +#: core/models.py:734 msgid "provide alternative text for the image for accessibility" msgstr "" "Fornire un testo alternativo per l'immagine ai fini dell'accessibilità." -#: core/models.py:727 +#: core/models.py:735 msgid "image alt text" msgstr "Testo alt dell'immagine" -#: core/models.py:730 +#: core/models.py:738 msgid "upload the image file for this product" msgstr "Caricare il file immagine per questo prodotto" -#: core/models.py:731 core/models.py:756 +#: core/models.py:739 core/models.py:764 msgid "product image" msgstr "Immagine del prodotto" -#: core/models.py:737 +#: core/models.py:745 msgid "determines the order in which images are displayed" msgstr "Determina l'ordine di visualizzazione delle immagini" -#: core/models.py:738 +#: core/models.py:746 msgid "display priority" msgstr "Priorità del display" -#: core/models.py:743 +#: core/models.py:751 msgid "the product that this image represents" msgstr "Il prodotto che questa immagine rappresenta" -#: core/models.py:757 +#: core/models.py:765 msgid "product images" msgstr "Immagini del prodotto" -#: core/models.py:762 +#: core/models.py:770 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 +1892,39 @@ msgstr "" "collegarla ai prodotti applicabili. Si integra con il catalogo dei prodotti " "per determinare gli articoli interessati dalla campagna." -#: core/models.py:774 +#: core/models.py:782 msgid "percentage discount for the selected products" msgstr "Percentuale di sconto per i prodotti selezionati" -#: core/models.py:775 +#: core/models.py:783 msgid "discount percentage" msgstr "Percentuale di sconto" -#: core/models.py:780 +#: core/models.py:788 msgid "provide a unique name for this promotion" msgstr "Fornite un nome unico per questa promozione" -#: core/models.py:781 +#: core/models.py:789 msgid "promotion name" msgstr "Nome della promozione" -#: core/models.py:787 +#: core/models.py:795 msgid "promotion description" msgstr "Descrizione della promozione" -#: core/models.py:792 +#: core/models.py:800 msgid "select which products are included in this promotion" msgstr "Selezionare i prodotti inclusi in questa promozione" -#: core/models.py:793 +#: core/models.py:801 msgid "included products" msgstr "Prodotti inclusi" -#: core/models.py:797 +#: core/models.py:805 msgid "promotion" msgstr "Promozione" -#: core/models.py:808 +#: core/models.py:816 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 +1937,23 @@ msgstr "" "rimozione di prodotti, nonché operazioni per l'aggiunta e la rimozione di " "più prodotti contemporaneamente." -#: core/models.py:820 +#: core/models.py:828 msgid "products that the user has marked as wanted" msgstr "Prodotti che l'utente ha contrassegnato come desiderati" -#: core/models.py:828 +#: core/models.py:836 msgid "user who owns this wishlist" msgstr "Utente che possiede questa wishlist" -#: core/models.py:829 +#: core/models.py:837 msgid "wishlist owner" msgstr "Proprietario della lista dei desideri" -#: core/models.py:837 +#: core/models.py:845 msgid "wishlist" msgstr "Lista dei desideri" -#: core/models.py:879 +#: core/models.py:887 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1957,19 +1969,19 @@ msgstr "" "file documentari. Estende le funzionalità di mixin specifici e fornisce " "ulteriori caratteristiche personalizzate." -#: core/models.py:892 +#: core/models.py:900 msgid "documentary" msgstr "Documentario" -#: core/models.py:893 +#: core/models.py:901 msgid "documentaries" msgstr "Documentari" -#: core/models.py:903 +#: core/models.py:911 msgid "unresolved" msgstr "Non risolto" -#: core/models.py:908 +#: core/models.py:916 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1991,59 +2003,59 @@ msgstr "" "classe consente inoltre di associare un indirizzo a un utente, facilitando " "la gestione personalizzata dei dati." -#: core/models.py:923 +#: core/models.py:931 msgid "address line for the customer" msgstr "Indirizzo del cliente" -#: core/models.py:924 +#: core/models.py:932 msgid "address line" msgstr "Linea di indirizzo" -#: core/models.py:926 +#: core/models.py:934 msgid "street" msgstr "Via" -#: core/models.py:927 +#: core/models.py:935 msgid "district" msgstr "Distretto" -#: core/models.py:928 +#: core/models.py:936 msgid "city" msgstr "Città" -#: core/models.py:929 +#: core/models.py:937 msgid "region" msgstr "Regione" -#: core/models.py:930 +#: core/models.py:938 msgid "postal code" msgstr "Codice postale" -#: core/models.py:931 +#: core/models.py:939 msgid "country" msgstr "Paese" -#: core/models.py:938 +#: core/models.py:946 msgid "geolocation point: (longitude, latitude)" msgstr "Punto di geolocalizzazione(Longitudine, Latitudine)" -#: core/models.py:941 +#: core/models.py:949 msgid "full JSON response from geocoder for this address" msgstr "Risposta JSON completa di geocoder per questo indirizzo" -#: core/models.py:946 +#: core/models.py:954 msgid "stored JSON response from the geocoding service" msgstr "Risposta JSON memorizzata dal servizio di geocodifica" -#: core/models.py:954 +#: core/models.py:962 msgid "address" msgstr "Indirizzo" -#: core/models.py:955 +#: core/models.py:963 msgid "addresses" msgstr "Indirizzi" -#: core/models.py:967 +#: core/models.py:975 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 +2072,74 @@ msgstr "" "utilizzo. Include funzionalità per convalidare e applicare il codice " "promozionale a un ordine, assicurando il rispetto dei vincoli." -#: core/models.py:981 +#: core/models.py:989 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:982 +#: core/models.py:990 msgid "promo code identifier" msgstr "Identificatore del codice promozionale" -#: core/models.py:989 +#: core/models.py:997 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:990 +#: core/models.py:998 msgid "fixed discount amount" msgstr "Importo fisso dello sconto" -#: core/models.py:996 +#: core/models.py:1004 msgid "percentage discount applied if fixed amount is not used" msgstr "Sconto percentuale applicato se l'importo fisso non viene utilizzato" -#: core/models.py:997 +#: core/models.py:1005 msgid "percentage discount" msgstr "Sconto percentuale" -#: core/models.py:1002 +#: core/models.py:1010 msgid "timestamp when the promocode expires" msgstr "Data di scadenza del codice promozionale" -#: core/models.py:1003 +#: core/models.py:1011 msgid "end validity time" msgstr "Tempo di validità finale" -#: core/models.py:1008 +#: core/models.py:1016 msgid "timestamp from which this promocode is valid" msgstr "Data a partire dalla quale il codice promozionale è valido" -#: core/models.py:1009 +#: core/models.py:1017 msgid "start validity time" msgstr "Ora di inizio validità" -#: core/models.py:1014 +#: core/models.py:1022 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:1015 +#: core/models.py:1023 msgid "usage timestamp" msgstr "Timestamp d'uso" -#: core/models.py:1020 +#: core/models.py:1028 msgid "user assigned to this promocode if applicable" msgstr "Utente assegnato a questo codice promozionale, se applicabile" -#: core/models.py:1021 +#: core/models.py:1029 msgid "assigned user" msgstr "Utente assegnato" -#: core/models.py:1028 +#: core/models.py:1036 msgid "promo code" msgstr "Codice promozionale" -#: core/models.py:1029 +#: core/models.py:1037 msgid "promo codes" msgstr "Codici promozionali" -#: core/models.py:1044 +#: core/models.py:1052 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2135,16 +2147,16 @@ msgstr "" "È necessario definire un solo tipo di sconto (importo o percentuale), ma non" " entrambi o nessuno." -#: core/models.py:1065 +#: core/models.py:1073 msgid "promocode already used" msgstr "Il codice promozionale è già stato utilizzato" -#: core/models.py:1081 +#: core/models.py:1089 #, 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:1090 +#: core/models.py:1098 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 +2174,139 @@ msgstr "" "funzionalità supporta la gestione dei prodotti nel ciclo di vita " "dell'ordine." -#: core/models.py:1107 +#: core/models.py:1115 msgid "the billing address used for this order" msgstr "L'indirizzo di fatturazione utilizzato per questo ordine" -#: core/models.py:1115 +#: core/models.py:1123 msgid "optional promo code applied to this order" msgstr "Codice promozionale opzionale applicato a questo ordine" -#: core/models.py:1116 +#: core/models.py:1124 msgid "applied promo code" msgstr "Codice promozionale applicato" -#: core/models.py:1124 +#: core/models.py:1132 msgid "the shipping address used for this order" msgstr "L'indirizzo di spedizione utilizzato per questo ordine" -#: core/models.py:1125 +#: core/models.py:1133 msgid "shipping address" msgstr "Indirizzo di spedizione" -#: core/models.py:1131 +#: core/models.py:1139 msgid "current status of the order in its lifecycle" msgstr "Stato attuale dell'ordine nel suo ciclo di vita" -#: core/models.py:1132 +#: core/models.py:1140 msgid "order status" msgstr "Stato dell'ordine" -#: core/models.py:1137 core/models.py:1618 +#: core/models.py:1145 core/models.py:1626 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:1143 +#: core/models.py:1151 msgid "json representation of order attributes for this order" msgstr "Rappresentazione JSON degli attributi dell'ordine per questo ordine" -#: core/models.py:1149 +#: core/models.py:1157 msgid "the user who placed the order" msgstr "L'utente che ha effettuato l'ordine" -#: core/models.py:1150 +#: core/models.py:1158 msgid "user" msgstr "Utente" -#: core/models.py:1156 +#: core/models.py:1164 msgid "the timestamp when the order was finalized" msgstr "Il timestamp del momento in cui l'ordine è stato finalizzato" -#: core/models.py:1157 +#: core/models.py:1165 msgid "buy time" msgstr "Acquista tempo" -#: core/models.py:1164 +#: core/models.py:1172 msgid "a human-readable identifier for the order" msgstr "Un identificatore leggibile dall'uomo per l'ordine" -#: core/models.py:1165 +#: core/models.py:1173 msgid "human readable id" msgstr "ID leggibile dall'uomo" -#: core/models.py:1171 +#: core/models.py:1179 msgid "order" msgstr "Ordine" -#: core/models.py:1209 +#: core/models.py:1217 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:1249 +#: core/models.py:1257 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:1254 +#: core/models.py:1262 msgid "you cannot add inactive products to order" msgstr "Non è possibile aggiungere all'ordine prodotti inattivi" -#: core/models.py:1271 +#: core/models.py:1279 msgid "you cannot add more products than available in stock" msgstr "" "Non è possibile aggiungere più prodotti di quelli disponibili in magazzino" -#: core/models.py:1293 core/models.py:1318 core/models.py:1326 +#: core/models.py:1301 core/models.py:1326 core/models.py:1334 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:1314 +#: core/models.py:1322 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} non esiste con la query <{query}>!" -#: core/models.py:1346 +#: core/models.py:1354 msgid "promocode does not exist" msgstr "Il codice promozionale non esiste" -#: core/models.py:1352 +#: core/models.py:1360 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:1371 +#: core/models.py:1379 msgid "address does not exist" msgstr "L'indirizzo non esiste" -#: core/models.py:1392 core/models.py:1461 +#: core/models.py:1400 core/models.py:1469 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:1395 core/models.py:1457 +#: core/models.py:1403 core/models.py:1465 msgid "invalid force value" msgstr "Valore di forza non valido" -#: core/models.py:1401 core/models.py:1464 +#: core/models.py:1409 core/models.py:1472 msgid "you cannot purchase an empty order!" msgstr "Non è possibile acquistare un ordine vuoto!" -#: core/models.py:1420 +#: core/models.py:1428 msgid "you cannot buy an order without a user" msgstr "Non è possibile acquistare un ordine senza un utente!" -#: core/models.py:1434 +#: core/models.py:1442 msgid "a user without a balance cannot buy with balance" msgstr "Un utente senza saldo non può acquistare con il saldo!" -#: core/models.py:1439 +#: core/models.py:1447 msgid "insufficient funds to complete the order" msgstr "Fondi insufficienti per completare l'ordine" -#: core/models.py:1473 +#: core/models.py:1481 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2303,7 +2315,7 @@ msgstr "" "seguenti informazioni: nome del cliente, e-mail del cliente, numero di " "telefono del cliente" -#: core/models.py:1482 +#: core/models.py:1490 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2311,7 +2323,7 @@ msgstr "" "Metodo di pagamento non valido: {payment_method} da " "{available_payment_methods}!" -#: core/models.py:1591 +#: core/models.py:1599 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2334,109 +2346,109 @@ msgstr "" "modello si integra con i modelli Ordine e Prodotto e memorizza un " "riferimento ad essi." -#: core/models.py:1606 +#: core/models.py:1614 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:1607 +#: core/models.py:1615 msgid "purchase price at order time" msgstr "Prezzo di acquisto al momento dell'ordine" -#: core/models.py:1612 +#: core/models.py:1620 msgid "internal comments for admins about this ordered product" msgstr "Commenti interni per gli amministratori su questo prodotto ordinato" -#: core/models.py:1613 +#: core/models.py:1621 msgid "internal comments" msgstr "Commenti interni" -#: core/models.py:1619 +#: core/models.py:1627 msgid "user notifications" msgstr "Notifiche degli utenti" -#: core/models.py:1624 +#: core/models.py:1632 msgid "json representation of this item's attributes" msgstr "Rappresentazione JSON degli attributi di questo elemento" -#: core/models.py:1625 +#: core/models.py:1633 msgid "ordered product attributes" msgstr "Attributi del prodotto ordinati" -#: core/models.py:1630 +#: core/models.py:1638 msgid "reference to the parent order that contains this product" msgstr "Riferimento all'ordine padre che contiene questo prodotto" -#: core/models.py:1631 +#: core/models.py:1639 msgid "parent order" msgstr "Ordine dei genitori" -#: core/models.py:1640 +#: core/models.py:1648 msgid "the specific product associated with this order line" msgstr "Il prodotto specifico associato a questa riga d'ordine" -#: core/models.py:1647 +#: core/models.py:1655 msgid "quantity of this specific product in the order" msgstr "Quantità di questo prodotto specifico nell'ordine" -#: core/models.py:1648 +#: core/models.py:1656 msgid "product quantity" msgstr "Quantità di prodotto" -#: core/models.py:1655 +#: core/models.py:1663 msgid "current status of this product in the order" msgstr "Stato attuale di questo prodotto nell'ordine" -#: core/models.py:1656 +#: core/models.py:1664 msgid "product line status" msgstr "Stato della linea di prodotti" -#: core/models.py:1719 +#: core/models.py:1727 msgid "order product must have an order" msgstr "L'ordine-prodotto deve avere un ordine associato!" -#: core/models.py:1721 +#: core/models.py:1729 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Azione errata specificata per il feedback: {action}!" -#: core/models.py:1735 +#: core/models.py:1743 msgid "you cannot feedback an order which is not received" msgstr "non è possibile dare un riscontro a un ordine non ricevuto" -#: core/models.py:1741 +#: core/models.py:1749 msgid "name" msgstr "Nome" -#: core/models.py:1742 +#: core/models.py:1750 msgid "URL of the integration" msgstr "URL dell'integrazione" -#: core/models.py:1743 +#: core/models.py:1751 msgid "authentication credentials" msgstr "Credenziali di autenticazione" -#: core/models.py:1765 +#: core/models.py:1773 msgid "you can only have one default CRM provider" msgstr "È possibile avere un solo provider CRM predefinito" -#: core/models.py:1775 +#: core/models.py:1783 msgid "CRM" msgstr "CRM" -#: core/models.py:1776 +#: core/models.py:1784 msgid "CRMs" msgstr "CRM" -#: core/models.py:1788 +#: core/models.py:1796 msgid "order CRM link" msgstr "Link al CRM dell'ordine" -#: core/models.py:1789 +#: core/models.py:1797 msgid "orders CRM links" msgstr "Link al CRM degli ordini" -#: core/models.py:1794 +#: core/models.py:1802 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2453,15 +2465,15 @@ msgstr "" "il download della risorsa quando l'ordine associato è in uno stato " "completato." -#: core/models.py:1808 +#: core/models.py:1816 msgid "download" msgstr "Scaricare" -#: core/models.py:1809 +#: core/models.py:1817 msgid "downloads" msgstr "Scaricamento" -#: core/models.py:1823 +#: core/models.py:1831 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,29 +2488,29 @@ msgstr "" "assegnata dall'utente. La classe utilizza campi del database per modellare e" " gestire efficacemente i dati di feedback." -#: core/models.py:1835 +#: core/models.py:1843 msgid "user-provided comments about their experience with the product" msgstr "Commenti degli utenti sulla loro esperienza con il prodotto" -#: core/models.py:1836 +#: core/models.py:1844 msgid "feedback comments" msgstr "Commenti di feedback" -#: core/models.py:1843 +#: core/models.py:1851 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:1844 +#: core/models.py:1852 msgid "related order product" msgstr "Prodotto correlato all'ordine" -#: core/models.py:1849 +#: core/models.py:1857 msgid "user-assigned rating for the product" msgstr "Valutazione del prodotto assegnata dall'utente" -#: core/models.py:1850 +#: core/models.py:1858 msgid "product rating" msgstr "Valutazione del prodotto" @@ -2717,22 +2729,22 @@ msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "" "Valore di timeout non valido, deve essere compreso tra 0 e 216000 secondi." -#: core/utils/emailing.py:25 +#: core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | contattaci iniziato" -#: core/utils/emailing.py:74 +#: core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Conferma d'ordine" -#: core/utils/emailing.py:109 +#: core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Ordine consegnato" -#: core/utils/emailing.py:197 +#: core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | promocode granted" @@ -2984,7 +2996,7 @@ msgstr "" "accessibili. Estende l'insieme di base `EvibesViewSet` e fa uso del sistema " "di filtraggio di Django per interrogare i dati." -#: core/viewsets.py:593 +#: core/viewsets.py:594 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3003,7 +3015,7 @@ msgstr "" "serializzatori in base all'azione specifica da eseguire e applica le " "autorizzazioni di conseguenza durante l'interazione con i dati degli ordini." -#: core/viewsets.py:782 +#: core/viewsets.py:784 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3018,13 +3030,13 @@ msgstr "" "richiesta. Inoltre, fornisce un'azione dettagliata per gestire il feedback " "sulle istanze di OrderProduct." -#: core/viewsets.py:833 +#: core/viewsets.py:835 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 +#: core/viewsets.py:847 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3032,15 +3044,15 @@ msgstr "" "Gestisce il recupero e la gestione delle istanze di PromoCode attraverso " "varie azioni API." -#: core/viewsets.py:866 +#: core/viewsets.py:868 msgid "Represents a view set for managing promotions. " msgstr "Rappresenta un insieme di viste per la gestione delle promozioni." -#: core/viewsets.py:878 +#: core/viewsets.py:880 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 +#: core/viewsets.py:894 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3060,7 +3072,7 @@ msgstr "" "solo la propria lista dei desideri, a meno che non vengano concessi permessi" " espliciti." -#: core/viewsets.py:1007 +#: core/viewsets.py:1009 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3074,12 +3086,12 @@ msgstr "" "specializzati per diversi metodi HTTP, override del serializzatore e " "gestione dei permessi in base al contesto della richiesta." -#: core/viewsets.py:1074 +#: core/viewsets.py:1076 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Errore di geocodifica: {e}" -#: core/viewsets.py:1081 +#: core/viewsets.py:1083 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/ja_JP/LC_MESSAGES/django.mo b/core/locale/ja_JP/LC_MESSAGES/django.mo index c8e06c42..43b350d6 100644 Binary files a/core/locale/ja_JP/LC_MESSAGES/django.mo and b/core/locale/ja_JP/LC_MESSAGES/django.mo differ diff --git a/core/locale/ja_JP/LC_MESSAGES/django.po b/core/locale/ja_JP/LC_MESSAGES/django.po index 2ccdfdf7..249ca5e9 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -47,82 +47,86 @@ msgstr "変形" msgid "when the object was last modified" msgstr "オブジェクトの最終編集日時" -#: core/admin.py:63 +#: core/admin.py:68 msgid "translations" msgstr "翻訳" -#: core/admin.py:67 +#: core/admin.py:72 msgid "general" msgstr "一般" -#: core/admin.py:69 +#: core/admin.py:74 msgid "relations" msgstr "関係" -#: core/admin.py:87 +#: core/admin.py:76 +msgid "additional info" +msgstr "追加情報" + +#: core/admin.py:94 msgid "metadata" msgstr "メタデータ" -#: core/admin.py:94 +#: core/admin.py:101 msgid "timestamps" msgstr "タイムスタンプ" -#: core/admin.py:109 +#: core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "選択した%(verbose_name_plural)sをアクティブにする" -#: core/admin.py:114 +#: core/admin.py:121 msgid "selected items have been activated." msgstr "選択した項目がアクティブになりました!" -#: core/admin.py:120 +#: core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "選択された%(verbose_name_plural)sを非アクティブにする" -#: core/admin.py:125 +#: core/admin.py:132 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:701 core/models.py:709 +#: core/admin.py:144 core/graphene/object_types.py:609 +#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 msgid "attribute value" msgstr "属性値" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 +#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718 msgid "attribute values" msgstr "属性値" -#: core/admin.py:146 +#: core/admin.py:153 msgid "image" msgstr "画像" -#: core/admin.py:147 core/graphene/object_types.py:501 +#: core/admin.py:154 core/graphene/object_types.py:501 msgid "images" msgstr "画像" -#: core/admin.py:155 core/models.py:459 +#: core/admin.py:162 core/models.py:467 msgid "stock" msgstr "在庫" -#: core/admin.py:156 core/graphene/object_types.py:663 +#: core/admin.py:163 core/graphene/object_types.py:663 msgid "stocks" msgstr "株式" -#: core/admin.py:166 core/models.py:1667 +#: core/admin.py:173 core/models.py:1675 msgid "order product" msgstr "商品のご注文" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 msgid "order products" msgstr "商品のご注文" -#: core/admin.py:180 core/admin.py:181 +#: core/admin.py:187 core/admin.py:188 msgid "children" msgstr "子供たち" -#: core/admin.py:566 +#: core/admin.py:940 msgid "Config" msgstr "コンフィグ" @@ -692,23 +696,23 @@ msgstr "注文と商品の関係を削除する" msgid "add or remove feedback on an order–product relation" msgstr "注文と商品の関係に関するフィードバックを追加または削除する。" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 msgid "no search term provided." msgstr "検索語はありません。" -#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +#: core/filters.py:65 core/filters.py:399 core/filters.py:526 msgid "Search" msgstr "検索" -#: core/filters.py:66 core/filters.py:554 core/filters.py:583 +#: core/filters.py:66 core/filters.py:556 core/filters.py:585 msgid "UUID" msgstr "ユーユーアイディー" -#: core/filters.py:67 core/filters.py:399 core/filters.py:526 +#: core/filters.py:67 core/filters.py:401 core/filters.py:528 msgid "Name" msgstr "名称" -#: core/filters.py:68 core/filters.py:528 +#: core/filters.py:68 core/filters.py:530 msgid "Categories" msgstr "カテゴリー" @@ -716,7 +720,7 @@ msgstr "カテゴリー" msgid "Categories Slugs" msgstr "カテゴリー ナメクジ" -#: core/filters.py:71 core/filters.py:407 +#: core/filters.py:71 core/filters.py:409 msgid "Tags" msgstr "タグ" @@ -744,8 +748,8 @@ msgstr "属性" msgid "Quantity" msgstr "数量" -#: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:301 core/models.py:383 core/models.py:536 +#: core/filters.py:78 core/filters.py:403 core/filters.py:529 +#: core/models.py:309 core/models.py:391 core/models.py:544 msgid "Slug" msgstr "スラッグ" @@ -761,7 +765,7 @@ msgstr "サブカテゴリーを含む" msgid "Include personal ordered" msgstr "個人注文商品を含む" -#: core/filters.py:85 core/models.py:540 +#: core/filters.py:85 core/models.py:548 msgid "SKU" msgstr "SKU" @@ -769,48 +773,48 @@ msgstr "SKU" msgid "there must be a category_uuid to use include_subcategories flag" msgstr "include_subcategoriesフラグを使うには、category_uuidがなければならない。" -#: core/filters.py:324 +#: core/filters.py:326 msgid "Search (ID, product name or part number)" msgstr "検索(ID、製品名または部品番号)" -#: core/filters.py:327 +#: core/filters.py:329 msgid "Bought after (inclusive)" msgstr "購入時期" -#: core/filters.py:328 +#: core/filters.py:330 msgid "Bought before (inclusive)" msgstr "以前に購入したもの(含む)" -#: core/filters.py:331 core/filters.py:378 core/filters.py:585 +#: core/filters.py:333 core/filters.py:380 core/filters.py:587 msgid "User email" msgstr "ユーザーEメール" -#: core/filters.py:332 core/filters.py:379 core/filters.py:563 -#: core/filters.py:584 +#: core/filters.py:334 core/filters.py:381 core/filters.py:565 +#: core/filters.py:586 msgid "User UUID" msgstr "ユーザーUUID" -#: core/filters.py:333 +#: core/filters.py:335 msgid "Status" msgstr "ステータス" -#: core/filters.py:337 +#: core/filters.py:339 msgid "Human Readable ID" msgstr "人間が読めるID" -#: core/filters.py:400 +#: core/filters.py:402 msgid "Parent" msgstr "親" -#: core/filters.py:404 +#: core/filters.py:406 msgid "Whole category(has at least 1 product or not)" msgstr "カテゴリー全体(少なくとも1つの製品があるかどうか)" -#: core/filters.py:408 +#: core/filters.py:410 msgid "Level" msgstr "レベル" -#: core/filters.py:558 +#: core/filters.py:560 msgid "Product UUID" msgstr "製品UUID" @@ -865,7 +869,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:679 +#: core/graphene/mutations.py:527 core/viewsets.py:680 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "order.buy()メソッドから間違った型が来た:{type(instance)!s}。" @@ -939,9 +943,9 @@ msgstr "Orderproduct {order_product_uuid} が見つかりません!" msgid "original address string provided by the user" msgstr "ユーザーが提供したオリジナルのアドレス文字列" -#: 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 +#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 +#: core/models.py:1289 core/models.py:1318 core/models.py:1343 +#: core/viewsets.py:683 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name}は存在しません:{uuid}が存在しません!" @@ -955,8 +959,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:672 core/models.py:1144 -#: core/models.py:1744 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 +#: core/models.py:1752 msgid "attributes" msgstr "属性" @@ -969,11 +973,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:326 core/models.py:626 +#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 msgid "categories" msgstr "カテゴリー" -#: core/graphene/object_types.py:124 core/models.py:397 +#: core/graphene/object_types.py:124 core/models.py:405 msgid "brands" msgstr "ブランド" @@ -982,7 +986,7 @@ msgid "category image url" msgstr "カテゴリー" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:263 +#: core/models.py:271 msgid "markup percentage" msgstr "マークアップ率" @@ -1003,7 +1007,7 @@ msgstr "このカテゴリのタグ" msgid "products in this category" msgstr "このカテゴリの製品" -#: core/graphene/object_types.py:351 core/models.py:169 +#: core/graphene/object_types.py:351 core/models.py:177 msgid "vendors" msgstr "ベンダー" @@ -1028,7 +1032,7 @@ msgid "represents feedback from a user." msgstr "ユーザーからのフィードバックを表す。" #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1138 +#: core/models.py:1146 msgid "notifications" msgstr "お知らせ" @@ -1036,7 +1040,7 @@ msgstr "お知らせ" msgid "download url for this order product if applicable" msgstr "該当する場合は、この注文商品のダウンロードURLを入力してください。" -#: core/graphene/object_types.py:400 core/models.py:1860 +#: core/graphene/object_types.py:400 core/models.py:1868 msgid "feedback" msgstr "フィードバック" @@ -1044,7 +1048,7 @@ msgstr "フィードバック" msgid "a list of order products in this order" msgstr "注文商品のリスト" -#: core/graphene/object_types.py:436 core/models.py:1108 +#: core/graphene/object_types.py:436 core/models.py:1116 msgid "billing address" msgstr "請求先住所" @@ -1070,7 +1074,7 @@ msgstr "ご注文の商品はすべてデジタルですか?" msgid "transactions for this order" msgstr "この注文の取引" -#: core/graphene/object_types.py:465 core/models.py:1172 +#: core/graphene/object_types.py:465 core/models.py:1180 msgid "orders" msgstr "受注状況" @@ -1082,19 +1086,19 @@ msgstr "画像URL" msgid "product's images" msgstr "製品画像" -#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 +#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 msgid "category" msgstr "カテゴリー" -#: core/graphene/object_types.py:502 core/models.py:1861 +#: core/graphene/object_types.py:502 core/models.py:1869 msgid "feedbacks" msgstr "フィードバック" -#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 +#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 msgid "brand" msgstr "ブランド" -#: core/graphene/object_types.py:504 core/models.py:101 +#: core/graphene/object_types.py:504 core/models.py:102 msgid "attribute groups" msgstr "属性グループ" @@ -1122,7 +1126,7 @@ msgstr "フィードバック数" msgid "only available for personal orders" msgstr "個人注文のみの商品" -#: core/graphene/object_types.py:534 core/models.py:550 +#: core/graphene/object_types.py:534 core/models.py:558 msgid "products" msgstr "製品紹介" @@ -1134,15 +1138,15 @@ msgstr "プロモコード" msgid "products on sale" msgstr "販売商品" -#: core/graphene/object_types.py:651 core/models.py:798 +#: core/graphene/object_types.py:651 core/models.py:806 msgid "promotions" msgstr "プロモーション" -#: core/graphene/object_types.py:655 core/models.py:168 +#: core/graphene/object_types.py:655 core/models.py:176 msgid "vendor" msgstr "ベンダー" -#: core/graphene/object_types.py:656 core/models.py:549 +#: core/graphene/object_types.py:656 core/models.py:557 #: 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 +1154,11 @@ msgstr "ベンダー" msgid "product" msgstr "製品" -#: core/graphene/object_types.py:667 core/models.py:821 +#: core/graphene/object_types.py:667 core/models.py:829 msgid "wishlisted products" msgstr "ウィッシュリスト掲載商品" -#: core/graphene/object_types.py:673 core/models.py:838 +#: core/graphene/object_types.py:673 core/models.py:846 msgid "wishlists" msgstr "ウィッシュリスト" @@ -1162,7 +1166,7 @@ msgstr "ウィッシュリスト" msgid "tagged products" msgstr "タグ別アーカイブ" -#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 +#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 msgid "product tags" msgstr "商品タグ" @@ -1247,7 +1251,7 @@ msgstr "製品検索結果" msgid "posts search results" msgstr "製品検索結果" -#: core/models.py:70 +#: core/models.py:71 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1256,23 +1260,23 @@ msgid "" msgstr "" "属性グループを表し、階層化することができます。このクラスは、属性グループの管理と整理に使用します。属性グループは親グループを持つことができ、階層構造を形成します。これは、複雑なシステムで属性をより効果的に分類・管理するのに便利です。" -#: core/models.py:86 +#: core/models.py:87 msgid "parent of this group" msgstr "このグループの親" -#: core/models.py:87 +#: core/models.py:88 msgid "parent attribute group" msgstr "親属性グループ" -#: core/models.py:91 core/models.py:92 +#: core/models.py:92 core/models.py:93 msgid "attribute group's name" msgstr "属性グループ名" -#: core/models.py:100 core/models.py:634 +#: core/models.py:101 core/models.py:642 msgid "attribute group" msgstr "属性グループ" -#: core/models.py:106 +#: core/models.py:107 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1285,31 +1289,39 @@ msgstr "" "外部ベンダーとその相互作用要件に関する情報を格納できるベンダー・エンティティを表します。Vendor " "クラスは、外部ベンダーに関連する情報を定義・管理するために使用します。これは、ベンダーの名前、通信に必要な認証の詳細、ベンダーから取得した商品に適用されるパーセンテージのマークアップを格納します。このモデルは、追加のメタデータと制約も保持するため、サードパーティ・ベンダーとやり取りするシステムでの使用に適しています。" -#: core/models.py:119 +#: core/models.py:120 msgid "stores credentials and endpoints required for vendor communication" msgstr "ベンダーのAPI通信に必要な認証情報とエンドポイントを保存する。" -#: core/models.py:120 +#: core/models.py:121 msgid "authentication info" msgstr "認証情報" -#: core/models.py:125 +#: core/models.py:126 msgid "define the markup for products retrieved from this vendor" msgstr "このベンダーから取得した商品のマークアップを定義する。" -#: core/models.py:126 +#: core/models.py:127 msgid "vendor markup percentage" msgstr "ベンダーのマークアップ率" -#: core/models.py:130 +#: core/models.py:131 msgid "name of this vendor" msgstr "このベンダーの名前" -#: core/models.py:131 +#: core/models.py:132 msgid "vendor name" msgstr "ベンダー名" -#: core/models.py:177 +#: core/models.py:143 +msgid "response file" +msgstr "レスポンスファイル" + +#: core/models.py:144 +msgid "vendor's last processing response" +msgstr "ベンダーの最終処理回答" + +#: core/models.py:185 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1320,27 +1332,27 @@ msgstr "" "製品を分類または識別するために使用される製品タグを表します。ProductTag " "クラスは、内部タグ識別子とユーザーフレンドリーな表示名の組み合わせによって、製品を一意に識別および分類するように設計されています。ミキシンを通じてエクスポートされる操作をサポートし、管理目的のためにメタデータのカスタマイズを提供します。" -#: core/models.py:189 core/models.py:220 +#: core/models.py:197 core/models.py:228 msgid "internal tag identifier for the product tag" msgstr "商品タグの内部タグ識別子" -#: core/models.py:190 core/models.py:221 +#: core/models.py:198 core/models.py:229 msgid "tag name" msgstr "タグ名" -#: core/models.py:194 core/models.py:225 +#: core/models.py:202 core/models.py:233 msgid "user-friendly name for the product tag" msgstr "商品タグのユーザーフレンドリーな名前" -#: core/models.py:195 core/models.py:226 +#: core/models.py:203 core/models.py:234 msgid "tag display name" msgstr "タグ表示名" -#: core/models.py:203 +#: core/models.py:211 msgid "product tag" msgstr "商品タグ" -#: core/models.py:209 +#: core/models.py:217 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 +1360,15 @@ msgid "" msgstr "" "商品に使用されるカテゴリータグを表します。このクラスは、商品の関連付けと分類に使用できるカテゴリタグをモデル化します。内部タグ識別子とユーザーフレンドリーな表示名の属性が含まれます。" -#: core/models.py:234 +#: core/models.py:242 msgid "category tag" msgstr "カテゴリタグ" -#: core/models.py:235 core/models.py:307 +#: core/models.py:243 core/models.py:315 msgid "category tags" msgstr "カテゴリータグ" -#: core/models.py:240 +#: core/models.py:248 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1370,51 +1382,51 @@ msgid "" msgstr "" "関連するアイテムを階層構造で整理し、グループ化するためのカテゴリ・エンティティを表します。カテゴリは、親子関係をサポートする他のカテゴリとの階層関係を持つことができます。このクラスには、カテゴリ関連機能の基盤となるメタデータおよび視覚表現のためのフィールドが含まれます。このクラスは通常、アプリケーション内で商品カテゴリやその他の類似のグループ化を定義および管理するために使用され、ユーザや管理者がカテゴリの名前、説明、階層を指定したり、画像、タグ、優先度などの属性を割り当てることができます。" -#: core/models.py:254 +#: core/models.py:262 msgid "upload an image representing this category" msgstr "このカテゴリーを表す画像をアップロードする" -#: core/models.py:257 +#: core/models.py:265 msgid "category image" msgstr "カテゴリーイメージ" -#: core/models.py:262 +#: core/models.py:270 msgid "define a markup percentage for products in this category" msgstr "このカテゴリの商品のマークアップ率を定義する" -#: core/models.py:271 +#: core/models.py:279 msgid "parent of this category to form a hierarchical structure" msgstr "階層構造を形成するこのカテゴリの親" -#: core/models.py:272 +#: core/models.py:280 msgid "parent category" msgstr "親カテゴリー" -#: core/models.py:277 +#: core/models.py:285 msgid "category name" msgstr "カテゴリー名" -#: core/models.py:278 +#: core/models.py:286 msgid "provide a name for this category" msgstr "このカテゴリの名前を入力してください。" -#: core/models.py:285 +#: core/models.py:293 msgid "add a detailed description for this category" msgstr "このカテゴリの詳細説明を追加する" -#: core/models.py:286 +#: core/models.py:294 msgid "category description" msgstr "カテゴリー説明" -#: core/models.py:306 +#: core/models.py:314 msgid "tags that help describe or group this category" msgstr "このカテゴリーを説明またはグループ化するのに役立つタグ" -#: core/models.py:313 core/models.py:389 +#: core/models.py:321 core/models.py:397 msgid "priority" msgstr "優先順位" -#: core/models.py:332 +#: core/models.py:340 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 +1436,47 @@ msgid "" msgstr "" "システム内のブランド・オブジェクトを表します。このクラスは、名前、ロゴ、説明、関連カテゴリ、一意のスラッグ、および優先順位など、ブランドに関連する情報と属性を処理します。このクラスによって、アプリケーション内でブランド関連データを整理し、表現することができます。" -#: core/models.py:342 +#: core/models.py:350 msgid "name of this brand" msgstr "ブランド名" -#: core/models.py:343 +#: core/models.py:351 msgid "brand name" msgstr "ブランド名" -#: core/models.py:350 +#: core/models.py:358 msgid "upload a logo representing this brand" msgstr "このブランドを代表するロゴをアップロードする" -#: core/models.py:352 +#: core/models.py:360 msgid "brand small image" msgstr "小さなブランドイメージ" -#: core/models.py:358 +#: core/models.py:366 msgid "upload a big logo representing this brand" msgstr "このブランドを象徴する大きなロゴをアップロードする" -#: core/models.py:360 +#: core/models.py:368 msgid "brand big image" msgstr "大きなブランドイメージ" -#: core/models.py:365 +#: core/models.py:373 msgid "add a detailed description of the brand" msgstr "ブランドの詳細な説明を加える" -#: core/models.py:366 +#: core/models.py:374 msgid "brand description" msgstr "ブランド説明" -#: core/models.py:371 +#: core/models.py:379 msgid "optional categories that this brand is associated with" msgstr "このブランドが関連するオプション・カテゴリー" -#: core/models.py:372 +#: core/models.py:380 msgid "associated categories" msgstr "カテゴリー" -#: core/models.py:402 +#: core/models.py:410 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 +1487,68 @@ msgid "" msgstr "" "システムで管理されている商品の在庫を表します。このクラスは、ベンダー、商品、およびそれらの在庫情報間の関係の詳細や、価格、購入価格、数量、SKU、デジタル資産などの在庫関連プロパティを提供します。これは在庫管理システムの一部で、さまざまなベンダーから入手可能な製品の追跡と評価を可能にします。" -#: core/models.py:414 +#: core/models.py:422 msgid "the vendor supplying this product stock" msgstr "この製品の在庫を供給しているベンダー" -#: core/models.py:415 +#: core/models.py:423 msgid "associated vendor" msgstr "関連ベンダー" -#: core/models.py:419 +#: core/models.py:427 msgid "final price to the customer after markups" msgstr "マークアップ後の顧客への最終価格" -#: core/models.py:420 +#: core/models.py:428 msgid "selling price" msgstr "販売価格" -#: core/models.py:425 +#: core/models.py:433 msgid "the product associated with this stock entry" msgstr "このストックエントリーに関連する製品" -#: core/models.py:426 core/models.py:697 core/models.py:744 -#: core/models.py:1641 +#: core/models.py:434 core/models.py:705 core/models.py:752 +#: core/models.py:1649 msgid "associated product" msgstr "関連製品" -#: core/models.py:433 +#: core/models.py:441 msgid "the price paid to the vendor for this product" msgstr "この製品に対してベンダーに支払われた価格" -#: core/models.py:434 +#: core/models.py:442 msgid "vendor purchase price" msgstr "ベンダーの購入価格" -#: core/models.py:438 +#: core/models.py:446 msgid "available quantity of the product in stock" msgstr "在庫数" -#: core/models.py:439 +#: core/models.py:447 msgid "quantity in stock" msgstr "在庫数" -#: core/models.py:443 +#: core/models.py:451 msgid "vendor-assigned SKU for identifying the product" msgstr "製品を識別するためにベンダーが割り当てたSKU" -#: core/models.py:444 +#: core/models.py:452 msgid "vendor sku" msgstr "ベンダーのSKU" -#: core/models.py:450 +#: core/models.py:458 msgid "digital file associated with this stock if applicable" msgstr "この銘柄に関連するデジタルファイル(該当する場合" -#: core/models.py:451 +#: core/models.py:459 msgid "digital file" msgstr "デジタルファイル" -#: core/models.py:460 +#: core/models.py:468 msgid "stock entries" msgstr "ストックエントリー" -#: core/models.py:465 +#: core/models.py:473 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1551,55 +1563,55 @@ msgstr "" " (Category、Brand、ProductTag など) " "と相互作用し、パフォーマンスを向上させるために、頻繁にアクセスされるプロパティのキャッシュを管理します。アプリケーション内で商品データとその関連情報を定義し、操作するために使用されます。" -#: core/models.py:478 +#: core/models.py:486 msgid "category this product belongs to" msgstr "この製品が属するカテゴリ" -#: core/models.py:487 +#: core/models.py:495 msgid "optionally associate this product with a brand" msgstr "オプションでこの製品をブランドと関連付ける" -#: core/models.py:493 +#: core/models.py:501 msgid "tags that help describe or group this product" msgstr "この商品の説明やグループ分けに役立つタグ" -#: core/models.py:498 +#: core/models.py:506 msgid "indicates whether this product is digitally delivered" msgstr "この製品がデジタル配信されるかどうかを示す" -#: core/models.py:499 +#: core/models.py:507 msgid "is product digital" msgstr "製品はデジタルか" -#: core/models.py:505 +#: core/models.py:513 msgid "provide a clear identifying name for the product" msgstr "製品の明確な識別名を提供する" -#: core/models.py:506 +#: core/models.py:514 msgid "product name" msgstr "商品名" -#: core/models.py:511 core/models.py:786 +#: core/models.py:519 core/models.py:794 msgid "add a detailed description of the product" msgstr "商品の詳細説明を追加する" -#: core/models.py:512 +#: core/models.py:520 msgid "product description" msgstr "商品説明" -#: core/models.py:519 +#: core/models.py:527 msgid "part number for this product" msgstr "この製品の品番" -#: core/models.py:520 +#: core/models.py:528 msgid "part number" msgstr "品番" -#: core/models.py:539 +#: core/models.py:547 msgid "stock keeping unit for this product" msgstr "この製品の在庫管理単位" -#: core/models.py:613 +#: core/models.py:621 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 +1623,68 @@ msgstr "" "システム内の属性を表します。このクラスは、属性を定義および管理するために使用されます。属性は、他のエンティティに関連付けることができる、カスタマイズ可能なデータの部分です。属性には、関連するカテゴリ、グループ、値型、および名前があります。このモデルは、string、integer、float、boolean、array、object" " などの複数の型の値をサポートしています。これにより、動的で柔軟なデータ構造化が可能になります。" -#: core/models.py:625 +#: core/models.py:633 msgid "category of this attribute" msgstr "この属性のカテゴリー" -#: core/models.py:633 +#: core/models.py:641 msgid "group of this attribute" msgstr "この属性のグループ" -#: core/models.py:639 +#: core/models.py:647 msgid "string" msgstr "ストリング" -#: core/models.py:640 +#: core/models.py:648 msgid "integer" msgstr "整数" -#: core/models.py:641 +#: core/models.py:649 msgid "float" msgstr "フロート" -#: core/models.py:642 +#: core/models.py:650 msgid "boolean" msgstr "ブーリアン" -#: core/models.py:643 +#: core/models.py:651 msgid "array" msgstr "配列" -#: core/models.py:644 +#: core/models.py:652 msgid "object" msgstr "対象" -#: core/models.py:646 +#: core/models.py:654 msgid "type of the attribute's value" msgstr "属性値のタイプ" -#: core/models.py:647 +#: core/models.py:655 msgid "value type" msgstr "値の種類" -#: core/models.py:652 +#: core/models.py:660 msgid "name of this attribute" msgstr "この属性の名前" -#: core/models.py:653 +#: core/models.py:661 msgid "attribute's name" msgstr "属性名" -#: core/models.py:659 +#: core/models.py:667 msgid "is filterable" msgstr "フィルタリング可能" -#: core/models.py:660 +#: core/models.py:668 msgid "designates whether this attribute can be used for filtering or not" msgstr "この属性がフィルタリングに使用できるかどうかを指定する。" -#: core/models.py:671 core/models.py:689 +#: core/models.py:679 core/models.py:697 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "属性" -#: core/models.py:677 +#: core/models.py:685 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 +1692,19 @@ msgid "" msgstr "" "製品にリンクされている属性の特定の値を表します。これは、「属性」を一意の「値」にリンクし、製品特性のより良い編成と動的な表現を可能にします。" -#: core/models.py:688 +#: core/models.py:696 msgid "attribute of this value" msgstr "この値の属性" -#: core/models.py:696 +#: core/models.py:704 msgid "the specific product associated with this attribute's value" msgstr "この属性の値に関連する特定の製品" -#: core/models.py:702 +#: core/models.py:710 msgid "the specific value for this attribute" msgstr "この属性の具体的な値" -#: core/models.py:715 +#: core/models.py:723 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 +1714,39 @@ msgid "" msgstr "" "システム内の商品に関連付けられた商品画像を表します。このクラスは商品の画像を管理するために設計されており、画像ファイルのアップロード、特定の商品との関連付け、表示順の決定などの機能を提供します。また、画像の代替テキストによるアクセシビリティ機能も備えています。" -#: core/models.py:726 +#: core/models.py:734 msgid "provide alternative text for the image for accessibility" msgstr "アクセシビリティのために、画像に代替テキストを提供する。" -#: core/models.py:727 +#: core/models.py:735 msgid "image alt text" msgstr "画像のaltテキスト" -#: core/models.py:730 +#: core/models.py:738 msgid "upload the image file for this product" msgstr "この商品の画像ファイルをアップロードする" -#: core/models.py:731 core/models.py:756 +#: core/models.py:739 core/models.py:764 msgid "product image" msgstr "商品画像" -#: core/models.py:737 +#: core/models.py:745 msgid "determines the order in which images are displayed" msgstr "画像の表示順を決める" -#: core/models.py:738 +#: core/models.py:746 msgid "display priority" msgstr "表示優先度" -#: core/models.py:743 +#: core/models.py:751 msgid "the product that this image represents" msgstr "この画像が表す製品" -#: core/models.py:757 +#: core/models.py:765 msgid "product images" msgstr "商品画像" -#: core/models.py:762 +#: core/models.py:770 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 +1757,39 @@ msgid "" msgstr "" "割引を伴う商品の販促キャンペーンを表します。このクラスは、商品に対してパーセンテージベースの割引を提供する販促キャンペーンを定義および管理するために使用します。このクラスには、割引率を設定し、プロモーションの詳細を提供し、該当する商品にリンクするための属性が含まれます。商品カタログと統合して、キャンペーンの対象商品を決定します。" -#: core/models.py:774 +#: core/models.py:782 msgid "percentage discount for the selected products" msgstr "選択した商品の割引率" -#: core/models.py:775 +#: core/models.py:783 msgid "discount percentage" msgstr "割引率" -#: core/models.py:780 +#: core/models.py:788 msgid "provide a unique name for this promotion" msgstr "このプロモーションのユニークな名前を入力してください。" -#: core/models.py:781 +#: core/models.py:789 msgid "promotion name" msgstr "プロモーション名" -#: core/models.py:787 +#: core/models.py:795 msgid "promotion description" msgstr "プロモーション内容" -#: core/models.py:792 +#: core/models.py:800 msgid "select which products are included in this promotion" msgstr "キャンペーン対象商品をお選びください。" -#: core/models.py:793 +#: core/models.py:801 msgid "included products" msgstr "含まれる製品" -#: core/models.py:797 +#: core/models.py:805 msgid "promotion" msgstr "プロモーション" -#: core/models.py:808 +#: core/models.py:816 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 +1798,23 @@ msgid "" msgstr "" "希望する商品を保存・管理するためのユーザーのウィッシュリストを表します。このクラスは、商品のコレクションを管理する機能を提供し、商品の追加や削除などの操作をサポートし、複数の商品を一度に追加したり削除したりする操作をサポートします。" -#: core/models.py:820 +#: core/models.py:828 msgid "products that the user has marked as wanted" msgstr "ユーザーが欲しいとマークした商品" -#: core/models.py:828 +#: core/models.py:836 msgid "user who owns this wishlist" msgstr "このウィッシュリストを所有しているユーザー" -#: core/models.py:829 +#: core/models.py:837 msgid "wishlist owner" msgstr "ウィッシュリストのオーナー" -#: core/models.py:837 +#: core/models.py:845 msgid "wishlist" msgstr "ウィッシュリスト" -#: core/models.py:879 +#: core/models.py:887 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1813,19 +1825,19 @@ msgid "" msgstr "" "商品に関連付けられたドキュメンタリーのレコードを表します。このクラスは、ファイルのアップロードとそのメタデータを含む、特定の商品に関連するドキュメンタリーに関する情報を格納するために使用されます。ドキュメントファイルのファイルタイプと保存パスを処理するメソッドとプロパティが含まれています。特定のミックスインから機能を拡張し、追加のカスタム機能を提供します。" -#: core/models.py:892 +#: core/models.py:900 msgid "documentary" msgstr "ドキュメンタリー" -#: core/models.py:893 +#: core/models.py:901 msgid "documentaries" msgstr "ドキュメンタリー" -#: core/models.py:903 +#: core/models.py:911 msgid "unresolved" msgstr "未解決" -#: core/models.py:908 +#: core/models.py:916 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1842,59 +1854,59 @@ msgstr "" "レスポンスを保存してさらなる処理や検査を行うことができます。また、このクラスは住所とユーザを関連付けることができ、 " "パーソナライズされたデータの取り扱いを容易にします。" -#: core/models.py:923 +#: core/models.py:931 msgid "address line for the customer" msgstr "お客様の住所" -#: core/models.py:924 +#: core/models.py:932 msgid "address line" msgstr "住所" -#: core/models.py:926 +#: core/models.py:934 msgid "street" msgstr "ストリート" -#: core/models.py:927 +#: core/models.py:935 msgid "district" msgstr "地区" -#: core/models.py:928 +#: core/models.py:936 msgid "city" msgstr "都市" -#: core/models.py:929 +#: core/models.py:937 msgid "region" msgstr "地域" -#: core/models.py:930 +#: core/models.py:938 msgid "postal code" msgstr "郵便番号" -#: core/models.py:931 +#: core/models.py:939 msgid "country" msgstr "国名" -#: core/models.py:938 +#: core/models.py:946 msgid "geolocation point: (longitude, latitude)" msgstr "ジオロケーションポイント(経度、緯度)" -#: core/models.py:941 +#: core/models.py:949 msgid "full JSON response from geocoder for this address" msgstr "この住所に対するジオコーダーからの完全なJSON応答" -#: core/models.py:946 +#: core/models.py:954 msgid "stored JSON response from the geocoding service" msgstr "ジオコーディング・サービスからの保存されたJSONレスポンス" -#: core/models.py:954 +#: core/models.py:962 msgid "address" msgstr "住所" -#: core/models.py:955 +#: core/models.py:963 msgid "addresses" msgstr "住所" -#: core/models.py:967 +#: core/models.py:975 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 +1919,86 @@ msgstr "" "(金額またはパーセンテージ)、有効期間、関連するユーザ " "(もしあれば)、および使用状況など、プロモーションコードに関する詳細を格納します。これは、制約が満たされていることを保証しながら、プロモコードを検証し、注文に適用する機能を含んでいます。" -#: core/models.py:981 +#: core/models.py:989 msgid "unique code used by a user to redeem a discount" msgstr "ユーザーが割引を利用する際に使用する固有のコード" -#: core/models.py:982 +#: core/models.py:990 msgid "promo code identifier" msgstr "プロモコード識別子" -#: core/models.py:989 +#: core/models.py:997 msgid "fixed discount amount applied if percent is not used" msgstr "パーセントを使用しない場合に適用される固定割引額" -#: core/models.py:990 +#: core/models.py:998 msgid "fixed discount amount" msgstr "固定割引額" -#: core/models.py:996 +#: core/models.py:1004 msgid "percentage discount applied if fixed amount is not used" msgstr "定額を使用しない場合に適用される割引率" -#: core/models.py:997 +#: core/models.py:1005 msgid "percentage discount" msgstr "割引率" -#: core/models.py:1002 +#: core/models.py:1010 msgid "timestamp when the promocode expires" msgstr "プロモコードの有効期限が切れるタイムスタンプ" -#: core/models.py:1003 +#: core/models.py:1011 msgid "end validity time" msgstr "終了有効時間" -#: core/models.py:1008 +#: core/models.py:1016 msgid "timestamp from which this promocode is valid" msgstr "このプロモコードが有効なタイムスタンプ" -#: core/models.py:1009 +#: core/models.py:1017 msgid "start validity time" msgstr "開始有効時間" -#: core/models.py:1014 +#: core/models.py:1022 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "プロモコードが使用されたタイムスタンプ、未使用の場合は空白" -#: core/models.py:1015 +#: core/models.py:1023 msgid "usage timestamp" msgstr "使用タイムスタンプ" -#: core/models.py:1020 +#: core/models.py:1028 msgid "user assigned to this promocode if applicable" msgstr "該当する場合、このプロモコードに割り当てられたユーザー" -#: core/models.py:1021 +#: core/models.py:1029 msgid "assigned user" msgstr "担当ユーザー" -#: core/models.py:1028 +#: core/models.py:1036 msgid "promo code" msgstr "プロモコード" -#: core/models.py:1029 +#: core/models.py:1037 msgid "promo codes" msgstr "プロモコード" -#: core/models.py:1044 +#: core/models.py:1052 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "割引の種類は1つだけ(金額またはパーセント)定義されるべきで、両方またはどちらも定義してはならない。" -#: core/models.py:1065 +#: core/models.py:1073 msgid "promocode already used" msgstr "プロモコードはすでに使用されています" -#: core/models.py:1081 +#: core/models.py:1089 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "プロモコード {self.uuid} の割引タイプが無効です!" -#: core/models.py:1090 +#: core/models.py:1098 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 +2009,144 @@ msgid "" msgstr "" "ユーザーによる注文を表します。このクラスは、請求や配送情報、ステータス、関連するユーザ、通知、関連する操作などのさまざまな属性を含む、アプリケーション内の注文をモデル化します。注文は関連する商品を持つことができ、プロモーションを適用し、住所を設定し、配送または請求の詳細を更新することができます。同様に、注文のライフサイクルにおける商品の管理もサポートします。" -#: core/models.py:1107 +#: core/models.py:1115 msgid "the billing address used for this order" msgstr "この注文に使用される請求先住所" -#: core/models.py:1115 +#: core/models.py:1123 msgid "optional promo code applied to this order" msgstr "この注文に適用されるプロモコード" -#: core/models.py:1116 +#: core/models.py:1124 msgid "applied promo code" msgstr "プロモーションコード適用" -#: core/models.py:1124 +#: core/models.py:1132 msgid "the shipping address used for this order" msgstr "この注文に使用された配送先住所" -#: core/models.py:1125 +#: core/models.py:1133 msgid "shipping address" msgstr "配送先住所" -#: core/models.py:1131 +#: core/models.py:1139 msgid "current status of the order in its lifecycle" msgstr "ライフサイクルにおける現在の注文状況" -#: core/models.py:1132 +#: core/models.py:1140 msgid "order status" msgstr "注文状況" -#: core/models.py:1137 core/models.py:1618 +#: core/models.py:1145 core/models.py:1626 msgid "json structure of notifications to display to users" msgstr "ユーザーに表示する通知のJSON構造、管理UIではテーブルビューが使用されます。" -#: core/models.py:1143 +#: core/models.py:1151 msgid "json representation of order attributes for this order" msgstr "この注文の注文属性のJSON表現" -#: core/models.py:1149 +#: core/models.py:1157 msgid "the user who placed the order" msgstr "注文を行ったユーザー" -#: core/models.py:1150 +#: core/models.py:1158 msgid "user" msgstr "ユーザー" -#: core/models.py:1156 +#: core/models.py:1164 msgid "the timestamp when the order was finalized" msgstr "注文が確定したタイムスタンプ" -#: core/models.py:1157 +#: core/models.py:1165 msgid "buy time" msgstr "時間を買う" -#: core/models.py:1164 +#: core/models.py:1172 msgid "a human-readable identifier for the order" msgstr "オーダーの人間が読み取り可能な識別子。" -#: core/models.py:1165 +#: core/models.py:1173 msgid "human readable id" msgstr "人間が読めるID" -#: core/models.py:1171 +#: core/models.py:1179 msgid "order" msgstr "オーダー" -#: core/models.py:1209 +#: core/models.py:1217 msgid "a user must have only one pending order at a time" msgstr "ユーザーは一度に1つの未決注文しか持つことができません!" -#: core/models.py:1249 +#: core/models.py:1257 msgid "you cannot add products to an order that is not a pending one" msgstr "保留中の注文以外の注文に商品を追加することはできません。" -#: core/models.py:1254 +#: core/models.py:1262 msgid "you cannot add inactive products to order" msgstr "アクティブでない商品を注文に追加することはできません。" -#: core/models.py:1271 +#: core/models.py:1279 msgid "you cannot add more products than available in stock" msgstr "在庫以上の商品を追加することはできません。" -#: core/models.py:1293 core/models.py:1318 core/models.py:1326 +#: core/models.py:1301 core/models.py:1326 core/models.py:1334 msgid "you cannot remove products from an order that is not a pending one" msgstr "保留中の注文以外の注文から商品を削除することはできません。" -#: core/models.py:1314 +#: core/models.py:1322 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name}はクエリ<{query}と一緒に存在しません!" -#: core/models.py:1346 +#: core/models.py:1354 msgid "promocode does not exist" msgstr "プロモコードが存在しない" -#: core/models.py:1352 +#: core/models.py:1360 msgid "you can only buy physical products with shipping address specified" msgstr "配送先住所が指定された現物商品のみ購入可能!" -#: core/models.py:1371 +#: core/models.py:1379 msgid "address does not exist" msgstr "アドレスが存在しない" -#: core/models.py:1392 core/models.py:1461 +#: core/models.py:1400 core/models.py:1469 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "現在ご購入いただけません。数分後にもう一度お試しください。" -#: core/models.py:1395 core/models.py:1457 +#: core/models.py:1403 core/models.py:1465 msgid "invalid force value" msgstr "無効なフォース値" -#: core/models.py:1401 core/models.py:1464 +#: core/models.py:1409 core/models.py:1472 msgid "you cannot purchase an empty order!" msgstr "空注文はできません!" -#: core/models.py:1420 +#: core/models.py:1428 msgid "you cannot buy an order without a user" msgstr "ユーザーがいない注文は購入できない!" -#: core/models.py:1434 +#: core/models.py:1442 msgid "a user without a balance cannot buy with balance" msgstr "残高のないユーザーは、残高で購入することはできない!" -#: core/models.py:1439 +#: core/models.py:1447 msgid "insufficient funds to complete the order" msgstr "注文を完了するための資金不足" -#: core/models.py:1473 +#: core/models.py:1481 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "ご登録がない場合はご購入いただけませんので、以下の情報をお知らせください:お客様のお名前、お客様のEメール、お客様の電話番号" -#: core/models.py:1482 +#: core/models.py:1490 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "支払方法が無効です:{available_payment_methods}からの{payment_method}が無効です!" -#: core/models.py:1591 +#: core/models.py:1599 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2148,108 +2160,108 @@ msgid "" msgstr "" "注文に関連する商品とその属性を表す。OrderProductモデルは、購入価格、数量、商品属性、ステータスなどの詳細を含む、注文の一部である商品に関する情報を保持します。ユーザーや管理者への通知を管理し、商品残高の返却やフィードバックの追加などの操作を処理します。このモデルはまた、合計価格の計算やデジタル商品のダウンロードURLの生成など、ビジネスロジックをサポートするメソッドやプロパティも提供します。このモデルはOrderモデルとProductモデルと統合され、それらへの参照を保存します。" -#: core/models.py:1606 +#: core/models.py:1614 msgid "the price paid by the customer for this product at purchase time" msgstr "この商品の購入時に顧客が支払った価格" -#: core/models.py:1607 +#: core/models.py:1615 msgid "purchase price at order time" msgstr "注文時の購入価格" -#: core/models.py:1612 +#: core/models.py:1620 msgid "internal comments for admins about this ordered product" msgstr "この注文商品に関する管理者への内部コメント" -#: core/models.py:1613 +#: core/models.py:1621 msgid "internal comments" msgstr "社内コメント" -#: core/models.py:1619 +#: core/models.py:1627 msgid "user notifications" msgstr "ユーザー通知" -#: core/models.py:1624 +#: core/models.py:1632 msgid "json representation of this item's attributes" msgstr "このアイテムの属性のJSON表現" -#: core/models.py:1625 +#: core/models.py:1633 msgid "ordered product attributes" msgstr "製品属性の順序" -#: core/models.py:1630 +#: core/models.py:1638 msgid "reference to the parent order that contains this product" msgstr "この商品を含む親注文への参照" -#: core/models.py:1631 +#: core/models.py:1639 msgid "parent order" msgstr "親注文" -#: core/models.py:1640 +#: core/models.py:1648 msgid "the specific product associated with this order line" msgstr "この注文ラインに関連する特定の製品" -#: core/models.py:1647 +#: core/models.py:1655 msgid "quantity of this specific product in the order" msgstr "注文に含まれる特定の商品の数量" -#: core/models.py:1648 +#: core/models.py:1656 msgid "product quantity" msgstr "製品数量" -#: core/models.py:1655 +#: core/models.py:1663 msgid "current status of this product in the order" msgstr "この商品の現在のご注文状況" -#: core/models.py:1656 +#: core/models.py:1664 msgid "product line status" msgstr "製品ラインの状況" -#: core/models.py:1719 +#: core/models.py:1727 msgid "order product must have an order" msgstr "Orderproductには関連する注文がなければならない!" -#: core/models.py:1721 +#: core/models.py:1729 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "フィードバックに指定されたアクションが間違っています:{action}です!" -#: core/models.py:1735 +#: core/models.py:1743 msgid "you cannot feedback an order which is not received" msgstr "受信していない注文をフィードバックすることはできません。" -#: core/models.py:1741 +#: core/models.py:1749 msgid "name" msgstr "名称" -#: core/models.py:1742 +#: core/models.py:1750 msgid "URL of the integration" msgstr "統合のURL" -#: core/models.py:1743 +#: core/models.py:1751 msgid "authentication credentials" msgstr "認証情報" -#: core/models.py:1765 +#: core/models.py:1773 msgid "you can only have one default CRM provider" msgstr "デフォルトのCRMプロバイダーは1つだけです。" -#: core/models.py:1775 +#: core/models.py:1783 msgid "CRM" msgstr "CRM" -#: core/models.py:1776 +#: core/models.py:1784 msgid "CRMs" msgstr "CRM" -#: core/models.py:1788 +#: core/models.py:1796 msgid "order CRM link" msgstr "注文のCRMリンク" -#: core/models.py:1789 +#: core/models.py:1797 msgid "orders CRM links" msgstr "オーダーのCRMリンク" -#: core/models.py:1794 +#: core/models.py:1802 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2261,15 +2273,15 @@ msgstr "" "注文に関連するデジタル資産のダウンロード機能を表します。DigitalAssetDownloadクラスは、注文商品に関連するダウンロードを管理し、アクセスする機能を提供します。このクラスは、関連する注文商品、ダウンロード数、およびアセットが公開されているかどうかの情報を保持します。関連する注文が完了したステータスのときに、アセットをダウンロードするための" " URL を生成するメソッドも含まれています。" -#: core/models.py:1808 +#: core/models.py:1816 msgid "download" msgstr "ダウンロード" -#: core/models.py:1809 +#: core/models.py:1817 msgid "downloads" msgstr "ダウンロード" -#: core/models.py:1823 +#: core/models.py:1831 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2279,28 +2291,28 @@ msgid "" msgstr "" "製品に対するユーザのフィードバックを管理します。このクラスは、購入した特定の商品に対するユーザのフィードバックを取得し、保存するために設計されています。ユーザのコメント、注文の関連商品への参照、そしてユーザが割り当てた評価を保存する属性を含みます。このクラスは、フィードバックデータを効果的にモデル化し、管理するためにデータベースフィールドを使用します。" -#: core/models.py:1835 +#: core/models.py:1843 msgid "user-provided comments about their experience with the product" msgstr "ユーザーから寄せられた製品使用体験に関するコメント" -#: core/models.py:1836 +#: core/models.py:1844 msgid "feedback comments" msgstr "フィードバック・コメント" -#: core/models.py:1843 +#: core/models.py:1851 msgid "" "references the specific product in an order that this feedback is about" msgstr "このフィードバックが対象としている注文の特定の製品を参照する。" -#: core/models.py:1844 +#: core/models.py:1852 msgid "related order product" msgstr "関連注文商品" -#: core/models.py:1849 +#: core/models.py:1857 msgid "user-assigned rating for the product" msgstr "ユーザーによる製品の評価" -#: core/models.py:1850 +#: core/models.py:1858 msgid "product rating" msgstr "製品評価" @@ -2505,22 +2517,22 @@ msgstr "データとタイムアウトの両方が必要" msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "無効なタイムアウト値です。" -#: core/utils/emailing.py:25 +#: core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME}|コンタクト開始| お問い合わせはこちらから" -#: core/utils/emailing.py:74 +#: core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME}|注文確認| ご注文の確認" -#: core/utils/emailing.py:109 +#: core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME}|ご注文は配送されますか?" -#: core/utils/emailing.py:197 +#: core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME}|プロモコード付与" @@ -2737,7 +2749,7 @@ msgstr "" "オブジェクトのパーミッションベースの処理を実装することです。ベースとなる `EvibesViewSet` を拡張し、Django " "のフィルタリングシステムを利用してデータを取得します。" -#: core/viewsets.py:593 +#: core/viewsets.py:594 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2750,7 +2762,7 @@ msgstr "" "注文と関連する操作を管理するための " "ViewSet。このクラスは、注文オブジェクトを取得、変更、管理する機能を提供します。商品の追加や削除、登録ユーザや未登録ユーザの購入の実行、現在の認証ユーザの保留中の注文の取得など、注文操作を処理するためのさまざまなエンドポイントを含みます。ViewSetは、実行される特定のアクションに基づいて複数のシリアライザを使用し、注文データを操作している間、それに応じてパーミッションを強制します。" -#: core/viewsets.py:782 +#: core/viewsets.py:784 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2762,25 +2774,25 @@ msgstr "" "操作とカスタムアクションを可能にします。これは、要求されたアクションに基づくフィルタリング、パーミッションチェック、シリアライザーの切り替えを含みます。さらに、OrderProduct" " インスタンスに関するフィードバックを処理するための詳細なアクションを提供します。" -#: core/viewsets.py:833 +#: core/viewsets.py:835 msgid "Manages operations related to Product images in the application. " msgstr "アプリケーション内の商品画像に関する操作を管理します。" -#: core/viewsets.py:845 +#: core/viewsets.py:847 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "様々なAPIアクションによるプロモコードインスタンスの取得と処理を管理します。" -#: core/viewsets.py:866 +#: core/viewsets.py:868 msgid "Represents a view set for managing promotions. " msgstr "プロモーションを管理するためのビューセットを表します。" -#: core/viewsets.py:878 +#: core/viewsets.py:880 msgid "Handles operations related to Stock data in the system." msgstr "システム内のストックデータに関する操作を行う。" -#: core/viewsets.py:892 +#: core/viewsets.py:894 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -2792,7 +2804,7 @@ msgid "" msgstr "" "ウィッシュリスト操作を管理するためのViewSet。WishlistViewSetは、ユーザーのウィッシュリストと対話するためのエンドポイントを提供し、ウィッシュリスト内の商品の検索、変更、カスタマイズを可能にします。このViewSetは、ウィッシュリスト商品の追加、削除、一括アクションなどの機能を容易にします。明示的なパーミッションが付与されていない限り、ユーザーが自分のウィッシュリストのみを管理できるよう、パーミッションチェックが統合されています。" -#: core/viewsets.py:1007 +#: core/viewsets.py:1009 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -2804,12 +2816,12 @@ msgstr "" "クラスは、住所エンティティに関連する CRUD 操作、フィルタリング、カスタムアクションを可能にします。異なる HTTP " "メソッドに特化した振る舞いや、シリアライザのオーバーライド、 リクエストコンテキストに基づいたパーミッション処理などを含みます。" -#: core/viewsets.py:1074 +#: core/viewsets.py:1076 #, python-brace-format msgid "Geocoding error: {e}" msgstr "ジオコーディングエラー:{e}" -#: core/viewsets.py:1081 +#: core/viewsets.py:1083 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/kk_KZ/LC_MESSAGES/django.po b/core/locale/kk_KZ/LC_MESSAGES/django.po index ea8f005f..ef29e6ec 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -49,82 +49,86 @@ msgstr "" msgid "when the object was last modified" msgstr "" -#: core/admin.py:63 +#: core/admin.py:68 msgid "translations" msgstr "" -#: core/admin.py:67 +#: core/admin.py:72 msgid "general" msgstr "" -#: core/admin.py:69 +#: core/admin.py:74 msgid "relations" msgstr "" -#: core/admin.py:87 -msgid "metadata" +#: core/admin.py:76 +msgid "additional info" msgstr "" #: core/admin.py:94 +msgid "metadata" +msgstr "" + +#: core/admin.py:101 msgid "timestamps" msgstr "" -#: core/admin.py:109 +#: core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "" -#: core/admin.py:114 +#: core/admin.py:121 msgid "selected items have been activated." msgstr "" -#: core/admin.py:120 +#: core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "" -#: core/admin.py:125 +#: core/admin.py:132 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:701 core/models.py:709 +#: core/admin.py:144 core/graphene/object_types.py:609 +#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 msgid "attribute value" msgstr "" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 +#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718 msgid "attribute values" msgstr "" -#: core/admin.py:146 +#: core/admin.py:153 msgid "image" msgstr "" -#: core/admin.py:147 core/graphene/object_types.py:501 +#: core/admin.py:154 core/graphene/object_types.py:501 msgid "images" msgstr "" -#: core/admin.py:155 core/models.py:459 +#: core/admin.py:162 core/models.py:467 msgid "stock" msgstr "" -#: core/admin.py:156 core/graphene/object_types.py:663 +#: core/admin.py:163 core/graphene/object_types.py:663 msgid "stocks" msgstr "" -#: core/admin.py:166 core/models.py:1667 +#: core/admin.py:173 core/models.py:1675 msgid "order product" msgstr "" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 msgid "order products" msgstr "" -#: core/admin.py:180 core/admin.py:181 +#: core/admin.py:187 core/admin.py:188 msgid "children" msgstr "" -#: core/admin.py:566 +#: core/admin.py:940 msgid "Config" msgstr "" @@ -678,23 +682,23 @@ msgstr "" msgid "add or remove feedback on an order–product relation" msgstr "" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 msgid "no search term provided." msgstr "" -#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +#: core/filters.py:65 core/filters.py:399 core/filters.py:526 msgid "Search" msgstr "" -#: core/filters.py:66 core/filters.py:554 core/filters.py:583 +#: core/filters.py:66 core/filters.py:556 core/filters.py:585 msgid "UUID" msgstr "" -#: core/filters.py:67 core/filters.py:399 core/filters.py:526 +#: core/filters.py:67 core/filters.py:401 core/filters.py:528 msgid "Name" msgstr "" -#: core/filters.py:68 core/filters.py:528 +#: core/filters.py:68 core/filters.py:530 msgid "Categories" msgstr "" @@ -702,7 +706,7 @@ msgstr "" msgid "Categories Slugs" msgstr "" -#: core/filters.py:71 core/filters.py:407 +#: core/filters.py:71 core/filters.py:409 msgid "Tags" msgstr "" @@ -730,8 +734,8 @@ msgstr "" msgid "Quantity" msgstr "" -#: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:301 core/models.py:383 core/models.py:536 +#: core/filters.py:78 core/filters.py:403 core/filters.py:529 +#: core/models.py:309 core/models.py:391 core/models.py:544 msgid "Slug" msgstr "" @@ -747,7 +751,7 @@ msgstr "" msgid "Include personal ordered" msgstr "" -#: core/filters.py:85 core/models.py:540 +#: core/filters.py:85 core/models.py:548 msgid "SKU" msgstr "" @@ -755,48 +759,48 @@ msgstr "" msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" -#: core/filters.py:324 +#: core/filters.py:326 msgid "Search (ID, product name or part number)" msgstr "" -#: core/filters.py:327 +#: core/filters.py:329 msgid "Bought after (inclusive)" msgstr "" -#: core/filters.py:328 +#: core/filters.py:330 msgid "Bought before (inclusive)" msgstr "" -#: core/filters.py:331 core/filters.py:378 core/filters.py:585 +#: core/filters.py:333 core/filters.py:380 core/filters.py:587 msgid "User email" msgstr "" -#: core/filters.py:332 core/filters.py:379 core/filters.py:563 -#: core/filters.py:584 +#: core/filters.py:334 core/filters.py:381 core/filters.py:565 +#: core/filters.py:586 msgid "User UUID" msgstr "" -#: core/filters.py:333 +#: core/filters.py:335 msgid "Status" msgstr "" -#: core/filters.py:337 +#: core/filters.py:339 msgid "Human Readable ID" msgstr "" -#: core/filters.py:400 +#: core/filters.py:402 msgid "Parent" msgstr "" -#: core/filters.py:404 +#: core/filters.py:406 msgid "Whole category(has at least 1 product or not)" msgstr "" -#: core/filters.py:408 +#: core/filters.py:410 msgid "Level" msgstr "" -#: core/filters.py:558 +#: core/filters.py:560 msgid "Product UUID" msgstr "" @@ -851,7 +855,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:679 +#: core/graphene/mutations.py:527 core/viewsets.py:680 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" @@ -925,9 +929,9 @@ msgstr "" msgid "original address string provided by the user" msgstr "" -#: 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 +#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 +#: core/models.py:1289 core/models.py:1318 core/models.py:1343 +#: core/viewsets.py:683 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" @@ -941,8 +945,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:672 core/models.py:1144 -#: core/models.py:1744 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 +#: core/models.py:1752 msgid "attributes" msgstr "" @@ -955,11 +959,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:326 core/models.py:626 +#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 msgid "categories" msgstr "" -#: core/graphene/object_types.py:124 core/models.py:397 +#: core/graphene/object_types.py:124 core/models.py:405 msgid "brands" msgstr "" @@ -968,7 +972,7 @@ msgid "category image url" msgstr "" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:263 +#: core/models.py:271 msgid "markup percentage" msgstr "" @@ -988,7 +992,7 @@ msgstr "" msgid "products in this category" msgstr "" -#: core/graphene/object_types.py:351 core/models.py:169 +#: core/graphene/object_types.py:351 core/models.py:177 msgid "vendors" msgstr "" @@ -1013,7 +1017,7 @@ msgid "represents feedback from a user." msgstr "" #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1138 +#: core/models.py:1146 msgid "notifications" msgstr "" @@ -1021,7 +1025,7 @@ msgstr "" msgid "download url for this order product if applicable" msgstr "" -#: core/graphene/object_types.py:400 core/models.py:1860 +#: core/graphene/object_types.py:400 core/models.py:1868 msgid "feedback" msgstr "" @@ -1029,7 +1033,7 @@ msgstr "" msgid "a list of order products in this order" msgstr "" -#: core/graphene/object_types.py:436 core/models.py:1108 +#: core/graphene/object_types.py:436 core/models.py:1116 msgid "billing address" msgstr "" @@ -1055,7 +1059,7 @@ msgstr "" msgid "transactions for this order" msgstr "" -#: core/graphene/object_types.py:465 core/models.py:1172 +#: core/graphene/object_types.py:465 core/models.py:1180 msgid "orders" msgstr "" @@ -1067,19 +1071,19 @@ msgstr "" msgid "product's images" msgstr "" -#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 +#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 msgid "category" msgstr "" -#: core/graphene/object_types.py:502 core/models.py:1861 +#: core/graphene/object_types.py:502 core/models.py:1869 msgid "feedbacks" msgstr "" -#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 +#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 msgid "brand" msgstr "" -#: core/graphene/object_types.py:504 core/models.py:101 +#: core/graphene/object_types.py:504 core/models.py:102 msgid "attribute groups" msgstr "" @@ -1107,7 +1111,7 @@ msgstr "" msgid "only available for personal orders" msgstr "" -#: core/graphene/object_types.py:534 core/models.py:550 +#: core/graphene/object_types.py:534 core/models.py:558 msgid "products" msgstr "" @@ -1119,15 +1123,15 @@ msgstr "" msgid "products on sale" msgstr "" -#: core/graphene/object_types.py:651 core/models.py:798 +#: core/graphene/object_types.py:651 core/models.py:806 msgid "promotions" msgstr "" -#: core/graphene/object_types.py:655 core/models.py:168 +#: core/graphene/object_types.py:655 core/models.py:176 msgid "vendor" msgstr "" -#: core/graphene/object_types.py:656 core/models.py:549 +#: core/graphene/object_types.py:656 core/models.py:557 #: 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 +1139,11 @@ msgstr "" msgid "product" msgstr "" -#: core/graphene/object_types.py:667 core/models.py:821 +#: core/graphene/object_types.py:667 core/models.py:829 msgid "wishlisted products" msgstr "" -#: core/graphene/object_types.py:673 core/models.py:838 +#: core/graphene/object_types.py:673 core/models.py:846 msgid "wishlists" msgstr "" @@ -1147,7 +1151,7 @@ msgstr "" msgid "tagged products" msgstr "" -#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 +#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 msgid "product tags" msgstr "" @@ -1232,7 +1236,7 @@ msgstr "" msgid "posts search results" msgstr "" -#: core/models.py:70 +#: core/models.py:71 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1240,23 +1244,23 @@ msgid "" "categorizing and managing attributes more effectively in acomplex system." msgstr "" -#: core/models.py:86 +#: core/models.py:87 msgid "parent of this group" msgstr "" -#: core/models.py:87 +#: core/models.py:88 msgid "parent attribute group" msgstr "" -#: core/models.py:91 core/models.py:92 +#: core/models.py:92 core/models.py:93 msgid "attribute group's name" msgstr "" -#: core/models.py:100 core/models.py:634 +#: core/models.py:101 core/models.py:642 msgid "attribute group" msgstr "" -#: core/models.py:106 +#: core/models.py:107 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1267,31 +1271,39 @@ msgid "" "use in systems that interact with third-party vendors." msgstr "" -#: core/models.py:119 +#: core/models.py:120 msgid "stores credentials and endpoints required for vendor communication" msgstr "" -#: core/models.py:120 +#: core/models.py:121 msgid "authentication info" msgstr "" -#: core/models.py:125 +#: core/models.py:126 msgid "define the markup for products retrieved from this vendor" msgstr "" -#: core/models.py:126 +#: core/models.py:127 msgid "vendor markup percentage" msgstr "" -#: core/models.py:130 +#: core/models.py:131 msgid "name of this vendor" msgstr "" -#: core/models.py:131 +#: core/models.py:132 msgid "vendor name" msgstr "" -#: core/models.py:177 +#: core/models.py:143 +msgid "response file" +msgstr "" + +#: core/models.py:144 +msgid "vendor's last processing response" +msgstr "" + +#: core/models.py:185 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1300,42 +1312,42 @@ msgid "" "metadata customization for administrative purposes." msgstr "" -#: core/models.py:189 core/models.py:220 +#: core/models.py:197 core/models.py:228 msgid "internal tag identifier for the product tag" msgstr "" -#: core/models.py:190 core/models.py:221 +#: core/models.py:198 core/models.py:229 msgid "tag name" msgstr "" -#: core/models.py:194 core/models.py:225 +#: core/models.py:202 core/models.py:233 msgid "user-friendly name for the product tag" msgstr "" -#: core/models.py:195 core/models.py:226 +#: core/models.py:203 core/models.py:234 msgid "tag display name" msgstr "" -#: core/models.py:203 +#: core/models.py:211 msgid "product tag" msgstr "" -#: core/models.py:209 +#: core/models.py:217 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:234 +#: core/models.py:242 msgid "category tag" msgstr "" -#: core/models.py:235 core/models.py:307 +#: core/models.py:243 core/models.py:315 msgid "category tags" msgstr "" -#: core/models.py:240 +#: core/models.py:248 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1348,51 +1360,51 @@ msgid "" "priority." msgstr "" -#: core/models.py:254 +#: core/models.py:262 msgid "upload an image representing this category" msgstr "" -#: core/models.py:257 +#: core/models.py:265 msgid "category image" msgstr "" -#: core/models.py:262 +#: core/models.py:270 msgid "define a markup percentage for products in this category" msgstr "" -#: core/models.py:271 +#: core/models.py:279 msgid "parent of this category to form a hierarchical structure" msgstr "" -#: core/models.py:272 +#: core/models.py:280 msgid "parent category" msgstr "" -#: core/models.py:277 +#: core/models.py:285 msgid "category name" msgstr "" -#: core/models.py:278 +#: core/models.py:286 msgid "provide a name for this category" msgstr "" -#: core/models.py:285 +#: core/models.py:293 msgid "add a detailed description for this category" msgstr "" -#: core/models.py:286 +#: core/models.py:294 msgid "category description" msgstr "" -#: core/models.py:306 +#: core/models.py:314 msgid "tags that help describe or group this category" msgstr "" -#: core/models.py:313 core/models.py:389 +#: core/models.py:321 core/models.py:397 msgid "priority" msgstr "" -#: core/models.py:332 +#: core/models.py:340 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 +1412,47 @@ msgid "" "organization and representation of brand-related data within the application." msgstr "" -#: core/models.py:342 +#: core/models.py:350 msgid "name of this brand" msgstr "" -#: core/models.py:343 +#: core/models.py:351 msgid "brand name" msgstr "" -#: core/models.py:350 +#: core/models.py:358 msgid "upload a logo representing this brand" msgstr "" -#: core/models.py:352 +#: core/models.py:360 msgid "brand small image" msgstr "" -#: core/models.py:358 +#: core/models.py:366 msgid "upload a big logo representing this brand" msgstr "" -#: core/models.py:360 +#: core/models.py:368 msgid "brand big image" msgstr "" -#: core/models.py:365 +#: core/models.py:373 msgid "add a detailed description of the brand" msgstr "" -#: core/models.py:366 +#: core/models.py:374 msgid "brand description" msgstr "" -#: core/models.py:371 +#: core/models.py:379 msgid "optional categories that this brand is associated with" msgstr "" -#: core/models.py:372 +#: core/models.py:380 msgid "associated categories" msgstr "" -#: core/models.py:402 +#: core/models.py:410 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 +1462,67 @@ msgid "" "from various vendors." msgstr "" -#: core/models.py:414 +#: core/models.py:422 msgid "the vendor supplying this product stock" msgstr "" -#: core/models.py:415 +#: core/models.py:423 msgid "associated vendor" msgstr "" -#: core/models.py:419 +#: core/models.py:427 msgid "final price to the customer after markups" msgstr "" -#: core/models.py:420 +#: core/models.py:428 msgid "selling price" msgstr "" -#: core/models.py:425 +#: core/models.py:433 msgid "the product associated with this stock entry" msgstr "" -#: core/models.py:426 core/models.py:697 core/models.py:744 core/models.py:1641 +#: core/models.py:434 core/models.py:705 core/models.py:752 core/models.py:1649 msgid "associated product" msgstr "" -#: core/models.py:433 +#: core/models.py:441 msgid "the price paid to the vendor for this product" msgstr "" -#: core/models.py:434 +#: core/models.py:442 msgid "vendor purchase price" msgstr "" -#: core/models.py:438 +#: core/models.py:446 msgid "available quantity of the product in stock" msgstr "" -#: core/models.py:439 +#: core/models.py:447 msgid "quantity in stock" msgstr "" -#: core/models.py:443 +#: core/models.py:451 msgid "vendor-assigned SKU for identifying the product" msgstr "" -#: core/models.py:444 +#: core/models.py:452 msgid "vendor sku" msgstr "" -#: core/models.py:450 +#: core/models.py:458 msgid "digital file associated with this stock if applicable" msgstr "" -#: core/models.py:451 +#: core/models.py:459 msgid "digital file" msgstr "" -#: core/models.py:460 +#: core/models.py:468 msgid "stock entries" msgstr "" -#: core/models.py:465 +#: core/models.py:473 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1522,55 +1534,55 @@ msgid "" "product data and its associated information within an application." msgstr "" -#: core/models.py:478 +#: core/models.py:486 msgid "category this product belongs to" msgstr "" -#: core/models.py:487 +#: core/models.py:495 msgid "optionally associate this product with a brand" msgstr "" -#: core/models.py:493 +#: core/models.py:501 msgid "tags that help describe or group this product" msgstr "" -#: core/models.py:498 +#: core/models.py:506 msgid "indicates whether this product is digitally delivered" msgstr "" -#: core/models.py:499 +#: core/models.py:507 msgid "is product digital" msgstr "" -#: core/models.py:505 +#: core/models.py:513 msgid "provide a clear identifying name for the product" msgstr "" -#: core/models.py:506 +#: core/models.py:514 msgid "product name" msgstr "" -#: core/models.py:511 core/models.py:786 +#: core/models.py:519 core/models.py:794 msgid "add a detailed description of the product" msgstr "" -#: core/models.py:512 +#: core/models.py:520 msgid "product description" msgstr "" -#: core/models.py:519 +#: core/models.py:527 msgid "part number for this product" msgstr "" -#: core/models.py:520 +#: core/models.py:528 msgid "part number" msgstr "" -#: core/models.py:539 +#: core/models.py:547 msgid "stock keeping unit for this product" msgstr "" -#: core/models.py:613 +#: core/models.py:621 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 +1592,87 @@ msgid "" "for dynamic and flexible data structuring." msgstr "" -#: core/models.py:625 +#: core/models.py:633 msgid "category of this attribute" msgstr "" -#: core/models.py:633 +#: core/models.py:641 msgid "group of this attribute" msgstr "" -#: core/models.py:639 +#: core/models.py:647 msgid "string" msgstr "" -#: core/models.py:640 +#: core/models.py:648 msgid "integer" msgstr "" -#: core/models.py:641 +#: core/models.py:649 msgid "float" msgstr "" -#: core/models.py:642 +#: core/models.py:650 msgid "boolean" msgstr "" -#: core/models.py:643 +#: core/models.py:651 msgid "array" msgstr "" -#: core/models.py:644 +#: core/models.py:652 msgid "object" msgstr "" -#: core/models.py:646 +#: core/models.py:654 msgid "type of the attribute's value" msgstr "" -#: core/models.py:647 +#: core/models.py:655 msgid "value type" msgstr "" -#: core/models.py:652 +#: core/models.py:660 msgid "name of this attribute" msgstr "" -#: core/models.py:653 +#: core/models.py:661 msgid "attribute's name" msgstr "" -#: core/models.py:659 +#: core/models.py:667 msgid "is filterable" msgstr "" -#: core/models.py:660 +#: core/models.py:668 msgid "designates whether this attribute can be used for filtering or not" msgstr "" -#: core/models.py:671 core/models.py:689 +#: core/models.py:679 core/models.py:697 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "" -#: core/models.py:677 +#: core/models.py:685 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:688 +#: core/models.py:696 msgid "attribute of this value" msgstr "" -#: core/models.py:696 +#: core/models.py:704 msgid "the specific product associated with this attribute's value" msgstr "" -#: core/models.py:702 +#: core/models.py:710 msgid "the specific value for this attribute" msgstr "" -#: core/models.py:715 +#: core/models.py:723 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 +1681,39 @@ msgid "" "with alternative text for the images." msgstr "" -#: core/models.py:726 +#: core/models.py:734 msgid "provide alternative text for the image for accessibility" msgstr "" -#: core/models.py:727 +#: core/models.py:735 msgid "image alt text" msgstr "" -#: core/models.py:730 +#: core/models.py:738 msgid "upload the image file for this product" msgstr "" -#: core/models.py:731 core/models.py:756 +#: core/models.py:739 core/models.py:764 msgid "product image" msgstr "" -#: core/models.py:737 +#: core/models.py:745 msgid "determines the order in which images are displayed" msgstr "" -#: core/models.py:738 +#: core/models.py:746 msgid "display priority" msgstr "" -#: core/models.py:743 +#: core/models.py:751 msgid "the product that this image represents" msgstr "" -#: core/models.py:757 +#: core/models.py:765 msgid "product images" msgstr "" -#: core/models.py:762 +#: core/models.py:770 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 +1723,39 @@ msgid "" "affected items in the campaign." msgstr "" -#: core/models.py:774 +#: core/models.py:782 msgid "percentage discount for the selected products" msgstr "" -#: core/models.py:775 +#: core/models.py:783 msgid "discount percentage" msgstr "" -#: core/models.py:780 +#: core/models.py:788 msgid "provide a unique name for this promotion" msgstr "" -#: core/models.py:781 +#: core/models.py:789 msgid "promotion name" msgstr "" -#: core/models.py:787 +#: core/models.py:795 msgid "promotion description" msgstr "" -#: core/models.py:792 +#: core/models.py:800 msgid "select which products are included in this promotion" msgstr "" -#: core/models.py:793 +#: core/models.py:801 msgid "included products" msgstr "" -#: core/models.py:797 +#: core/models.py:805 msgid "promotion" msgstr "" -#: core/models.py:808 +#: core/models.py:816 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 +1763,23 @@ msgid "" "operations for adding and removing multiple products at once." msgstr "" -#: core/models.py:820 +#: core/models.py:828 msgid "products that the user has marked as wanted" msgstr "" -#: core/models.py:828 +#: core/models.py:836 msgid "user who owns this wishlist" msgstr "" -#: core/models.py:829 +#: core/models.py:837 msgid "wishlist owner" msgstr "" -#: core/models.py:837 +#: core/models.py:845 msgid "wishlist" msgstr "" -#: core/models.py:879 +#: core/models.py:887 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1777,19 +1789,19 @@ msgid "" "custom features." msgstr "" -#: core/models.py:892 +#: core/models.py:900 msgid "documentary" msgstr "" -#: core/models.py:893 +#: core/models.py:901 msgid "documentaries" msgstr "" -#: core/models.py:903 +#: core/models.py:911 msgid "unresolved" msgstr "" -#: core/models.py:908 +#: core/models.py:916 msgid "" "Represents an address entity that includes location details and associations " "with a user. Provides functionality for geographic and address data storage, " @@ -1801,59 +1813,59 @@ msgid "" "address with a user, facilitating personalized data handling." msgstr "" -#: core/models.py:923 +#: core/models.py:931 msgid "address line for the customer" msgstr "" -#: core/models.py:924 +#: core/models.py:932 msgid "address line" msgstr "" -#: core/models.py:926 +#: core/models.py:934 msgid "street" msgstr "" -#: core/models.py:927 +#: core/models.py:935 msgid "district" msgstr "" -#: core/models.py:928 +#: core/models.py:936 msgid "city" msgstr "" -#: core/models.py:929 +#: core/models.py:937 msgid "region" msgstr "" -#: core/models.py:930 +#: core/models.py:938 msgid "postal code" msgstr "" -#: core/models.py:931 +#: core/models.py:939 msgid "country" msgstr "" -#: core/models.py:938 +#: core/models.py:946 msgid "geolocation point: (longitude, latitude)" msgstr "" -#: core/models.py:941 +#: core/models.py:949 msgid "full JSON response from geocoder for this address" msgstr "" -#: core/models.py:946 +#: core/models.py:954 msgid "stored JSON response from the geocoding service" msgstr "" -#: core/models.py:954 +#: core/models.py:962 msgid "address" msgstr "" -#: core/models.py:955 +#: core/models.py:963 msgid "addresses" msgstr "" -#: core/models.py:967 +#: core/models.py:975 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 +1875,86 @@ msgid "" "apply the promo code to an order while ensuring constraints are met." msgstr "" -#: core/models.py:981 +#: core/models.py:989 msgid "unique code used by a user to redeem a discount" msgstr "" -#: core/models.py:982 +#: core/models.py:990 msgid "promo code identifier" msgstr "" -#: core/models.py:989 +#: core/models.py:997 msgid "fixed discount amount applied if percent is not used" msgstr "" -#: core/models.py:990 +#: core/models.py:998 msgid "fixed discount amount" msgstr "" -#: core/models.py:996 +#: core/models.py:1004 msgid "percentage discount applied if fixed amount is not used" msgstr "" -#: core/models.py:997 +#: core/models.py:1005 msgid "percentage discount" msgstr "" -#: core/models.py:1002 +#: core/models.py:1010 msgid "timestamp when the promocode expires" msgstr "" -#: core/models.py:1003 +#: core/models.py:1011 msgid "end validity time" msgstr "" -#: core/models.py:1008 +#: core/models.py:1016 msgid "timestamp from which this promocode is valid" msgstr "" -#: core/models.py:1009 +#: core/models.py:1017 msgid "start validity time" msgstr "" -#: core/models.py:1014 +#: core/models.py:1022 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" -#: core/models.py:1015 +#: core/models.py:1023 msgid "usage timestamp" msgstr "" -#: core/models.py:1020 +#: core/models.py:1028 msgid "user assigned to this promocode if applicable" msgstr "" -#: core/models.py:1021 +#: core/models.py:1029 msgid "assigned user" msgstr "" -#: core/models.py:1028 +#: core/models.py:1036 msgid "promo code" msgstr "" -#: core/models.py:1029 +#: core/models.py:1037 msgid "promo codes" msgstr "" -#: core/models.py:1044 +#: core/models.py:1052 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "" -#: core/models.py:1065 +#: core/models.py:1073 msgid "promocode already used" msgstr "" -#: core/models.py:1081 +#: core/models.py:1089 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "" -#: core/models.py:1090 +#: core/models.py:1098 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 +1964,144 @@ msgid "" "supports managing the products in the order lifecycle." msgstr "" -#: core/models.py:1107 +#: core/models.py:1115 msgid "the billing address used for this order" msgstr "" -#: core/models.py:1115 +#: core/models.py:1123 msgid "optional promo code applied to this order" msgstr "" -#: core/models.py:1116 +#: core/models.py:1124 msgid "applied promo code" msgstr "" -#: core/models.py:1124 +#: core/models.py:1132 msgid "the shipping address used for this order" msgstr "" -#: core/models.py:1125 +#: core/models.py:1133 msgid "shipping address" msgstr "" -#: core/models.py:1131 +#: core/models.py:1139 msgid "current status of the order in its lifecycle" msgstr "" -#: core/models.py:1132 +#: core/models.py:1140 msgid "order status" msgstr "" -#: core/models.py:1137 core/models.py:1618 +#: core/models.py:1145 core/models.py:1626 msgid "json structure of notifications to display to users" msgstr "" -#: core/models.py:1143 +#: core/models.py:1151 msgid "json representation of order attributes for this order" msgstr "" -#: core/models.py:1149 +#: core/models.py:1157 msgid "the user who placed the order" msgstr "" -#: core/models.py:1150 +#: core/models.py:1158 msgid "user" msgstr "" -#: core/models.py:1156 +#: core/models.py:1164 msgid "the timestamp when the order was finalized" msgstr "" -#: core/models.py:1157 +#: core/models.py:1165 msgid "buy time" msgstr "" -#: core/models.py:1164 +#: core/models.py:1172 msgid "a human-readable identifier for the order" msgstr "" -#: core/models.py:1165 +#: core/models.py:1173 msgid "human readable id" msgstr "" -#: core/models.py:1171 +#: core/models.py:1179 msgid "order" msgstr "" -#: core/models.py:1209 +#: core/models.py:1217 msgid "a user must have only one pending order at a time" msgstr "" -#: core/models.py:1249 +#: core/models.py:1257 msgid "you cannot add products to an order that is not a pending one" msgstr "" -#: core/models.py:1254 +#: core/models.py:1262 msgid "you cannot add inactive products to order" msgstr "" -#: core/models.py:1271 +#: core/models.py:1279 msgid "you cannot add more products than available in stock" msgstr "" -#: core/models.py:1293 core/models.py:1318 core/models.py:1326 +#: core/models.py:1301 core/models.py:1326 core/models.py:1334 msgid "you cannot remove products from an order that is not a pending one" msgstr "" -#: core/models.py:1314 +#: core/models.py:1322 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "" -#: core/models.py:1346 +#: core/models.py:1354 msgid "promocode does not exist" msgstr "" -#: core/models.py:1352 +#: core/models.py:1360 msgid "you can only buy physical products with shipping address specified" msgstr "" -#: core/models.py:1371 +#: core/models.py:1379 msgid "address does not exist" msgstr "" -#: core/models.py:1392 core/models.py:1461 +#: core/models.py:1400 core/models.py:1469 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" -#: core/models.py:1395 core/models.py:1457 +#: core/models.py:1403 core/models.py:1465 msgid "invalid force value" msgstr "" -#: core/models.py:1401 core/models.py:1464 +#: core/models.py:1409 core/models.py:1472 msgid "you cannot purchase an empty order!" msgstr "" -#: core/models.py:1420 +#: core/models.py:1428 msgid "you cannot buy an order without a user" msgstr "" -#: core/models.py:1434 +#: core/models.py:1442 msgid "a user without a balance cannot buy with balance" msgstr "" -#: core/models.py:1439 +#: core/models.py:1447 msgid "insufficient funds to complete the order" msgstr "" -#: core/models.py:1473 +#: core/models.py:1481 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "" -#: core/models.py:1482 +#: core/models.py:1490 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" -#: core/models.py:1591 +#: core/models.py:1599 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2102,108 +2114,108 @@ msgid "" "Product models and stores a reference to them." msgstr "" -#: core/models.py:1606 +#: core/models.py:1614 msgid "the price paid by the customer for this product at purchase time" msgstr "" -#: core/models.py:1607 +#: core/models.py:1615 msgid "purchase price at order time" msgstr "" -#: core/models.py:1612 +#: core/models.py:1620 msgid "internal comments for admins about this ordered product" msgstr "" -#: core/models.py:1613 +#: core/models.py:1621 msgid "internal comments" msgstr "" -#: core/models.py:1619 +#: core/models.py:1627 msgid "user notifications" msgstr "" -#: core/models.py:1624 +#: core/models.py:1632 msgid "json representation of this item's attributes" msgstr "" -#: core/models.py:1625 +#: core/models.py:1633 msgid "ordered product attributes" msgstr "" -#: core/models.py:1630 +#: core/models.py:1638 msgid "reference to the parent order that contains this product" msgstr "" -#: core/models.py:1631 +#: core/models.py:1639 msgid "parent order" msgstr "" -#: core/models.py:1640 +#: core/models.py:1648 msgid "the specific product associated with this order line" msgstr "" -#: core/models.py:1647 +#: core/models.py:1655 msgid "quantity of this specific product in the order" msgstr "" -#: core/models.py:1648 +#: core/models.py:1656 msgid "product quantity" msgstr "" -#: core/models.py:1655 +#: core/models.py:1663 msgid "current status of this product in the order" msgstr "" -#: core/models.py:1656 +#: core/models.py:1664 msgid "product line status" msgstr "" -#: core/models.py:1719 +#: core/models.py:1727 msgid "order product must have an order" msgstr "" -#: core/models.py:1721 +#: core/models.py:1729 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "" -#: core/models.py:1735 +#: core/models.py:1743 msgid "you cannot feedback an order which is not received" msgstr "" -#: core/models.py:1741 +#: core/models.py:1749 msgid "name" msgstr "" -#: core/models.py:1742 +#: core/models.py:1750 msgid "URL of the integration" msgstr "" -#: core/models.py:1743 +#: core/models.py:1751 msgid "authentication credentials" msgstr "" -#: core/models.py:1765 +#: core/models.py:1773 msgid "you can only have one default CRM provider" msgstr "" -#: core/models.py:1775 +#: core/models.py:1783 msgid "CRM" msgstr "" -#: core/models.py:1776 +#: core/models.py:1784 msgid "CRMs" msgstr "" -#: core/models.py:1788 +#: core/models.py:1796 msgid "order CRM link" msgstr "" -#: core/models.py:1789 +#: core/models.py:1797 msgid "orders CRM links" msgstr "" -#: core/models.py:1794 +#: core/models.py:1802 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2213,15 +2225,15 @@ msgid "" "the asset when the associated order is in a completed status." msgstr "" -#: core/models.py:1808 +#: core/models.py:1816 msgid "download" msgstr "" -#: core/models.py:1809 +#: core/models.py:1817 msgid "downloads" msgstr "" -#: core/models.py:1823 +#: core/models.py:1831 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2230,27 +2242,27 @@ msgid "" "fields to effectively model and manage feedback data." msgstr "" -#: core/models.py:1835 +#: core/models.py:1843 msgid "user-provided comments about their experience with the product" msgstr "" -#: core/models.py:1836 +#: core/models.py:1844 msgid "feedback comments" msgstr "" -#: core/models.py:1843 +#: core/models.py:1851 msgid "references the specific product in an order that this feedback is about" msgstr "" -#: core/models.py:1844 +#: core/models.py:1852 msgid "related order product" msgstr "" -#: core/models.py:1849 +#: core/models.py:1857 msgid "user-assigned rating for the product" msgstr "" -#: core/models.py:1850 +#: core/models.py:1858 msgid "product rating" msgstr "" @@ -2451,22 +2463,22 @@ msgstr "" msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "" -#: core/utils/emailing.py:25 +#: core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "" -#: core/utils/emailing.py:74 +#: core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "" -#: core/utils/emailing.py:109 +#: core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "" -#: core/utils/emailing.py:197 +#: core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "" @@ -2648,7 +2660,7 @@ msgid "" "use of Django's filtering system for querying data." msgstr "" -#: core/viewsets.py:593 +#: core/viewsets.py:594 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2659,7 +2671,7 @@ msgid "" "enforces permissions accordingly while interacting with order data." msgstr "" -#: core/viewsets.py:782 +#: core/viewsets.py:784 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2668,25 +2680,25 @@ msgid "" "feedback on OrderProduct instances" msgstr "" -#: core/viewsets.py:833 +#: core/viewsets.py:835 msgid "Manages operations related to Product images in the application. " msgstr "" -#: core/viewsets.py:845 +#: core/viewsets.py:847 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "" -#: core/viewsets.py:866 +#: core/viewsets.py:868 msgid "Represents a view set for managing promotions. " msgstr "" -#: core/viewsets.py:878 +#: core/viewsets.py:880 msgid "Handles operations related to Stock data in the system." msgstr "" -#: core/viewsets.py:892 +#: core/viewsets.py:894 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -2697,7 +2709,7 @@ msgid "" "are granted." msgstr "" -#: core/viewsets.py:1007 +#: core/viewsets.py:1009 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -2706,12 +2718,12 @@ msgid "" "on the request context." msgstr "" -#: core/viewsets.py:1074 +#: core/viewsets.py:1076 #, python-brace-format msgid "Geocoding error: {e}" msgstr "" -#: core/viewsets.py:1081 +#: core/viewsets.py:1083 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/ko_KR/LC_MESSAGES/django.mo b/core/locale/ko_KR/LC_MESSAGES/django.mo index 2bb66273..6f33fb39 100644 Binary files a/core/locale/ko_KR/LC_MESSAGES/django.mo and b/core/locale/ko_KR/LC_MESSAGES/django.mo differ diff --git a/core/locale/ko_KR/LC_MESSAGES/django.po b/core/locale/ko_KR/LC_MESSAGES/django.po index 8cf9fdc6..64a4d231 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -47,82 +47,86 @@ msgstr "수정됨" msgid "when the object was last modified" msgstr "개체가 마지막으로 편집된 시기" -#: core/admin.py:63 +#: core/admin.py:68 msgid "translations" msgstr "번역" -#: core/admin.py:67 +#: core/admin.py:72 msgid "general" msgstr "일반" -#: core/admin.py:69 +#: core/admin.py:74 msgid "relations" msgstr "관계" -#: core/admin.py:87 +#: core/admin.py:76 +msgid "additional info" +msgstr "추가 정보" + +#: core/admin.py:94 msgid "metadata" msgstr "메타데이터" -#: core/admin.py:94 +#: core/admin.py:101 msgid "timestamps" msgstr "타임스탬프" -#: core/admin.py:109 +#: core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "선택한 %(verbose_name_plural)s 활성화" -#: core/admin.py:114 +#: core/admin.py:121 msgid "selected items have been activated." msgstr "선택한 아이템이 활성화되었습니다!" -#: core/admin.py:120 +#: core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "선택한 %(verbose_name_plural)s 비활성화하기" -#: core/admin.py:125 +#: core/admin.py:132 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:701 core/models.py:709 +#: core/admin.py:144 core/graphene/object_types.py:609 +#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 msgid "attribute value" msgstr "속성 값" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 +#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718 msgid "attribute values" msgstr "속성 값" -#: core/admin.py:146 +#: core/admin.py:153 msgid "image" msgstr "이미지" -#: core/admin.py:147 core/graphene/object_types.py:501 +#: core/admin.py:154 core/graphene/object_types.py:501 msgid "images" msgstr "이미지" -#: core/admin.py:155 core/models.py:459 +#: core/admin.py:162 core/models.py:467 msgid "stock" msgstr "재고" -#: core/admin.py:156 core/graphene/object_types.py:663 +#: core/admin.py:163 core/graphene/object_types.py:663 msgid "stocks" msgstr "주식" -#: core/admin.py:166 core/models.py:1667 +#: core/admin.py:173 core/models.py:1675 msgid "order product" msgstr "제품 주문" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 msgid "order products" msgstr "제품 주문" -#: core/admin.py:180 core/admin.py:181 +#: core/admin.py:187 core/admin.py:188 msgid "children" msgstr "어린이" -#: core/admin.py:566 +#: core/admin.py:940 msgid "Config" msgstr "구성" @@ -689,23 +693,23 @@ msgstr "주문-제품 관계 삭제" msgid "add or remove feedback on an order–product relation" msgstr "주문-제품 관계에 대한 피드백 추가 또는 제거" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 msgid "no search term provided." msgstr "검색어가 입력되지 않았습니다." -#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +#: core/filters.py:65 core/filters.py:399 core/filters.py:526 msgid "Search" msgstr "검색" -#: core/filters.py:66 core/filters.py:554 core/filters.py:583 +#: core/filters.py:66 core/filters.py:556 core/filters.py:585 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:399 core/filters.py:526 +#: core/filters.py:67 core/filters.py:401 core/filters.py:528 msgid "Name" msgstr "이름" -#: core/filters.py:68 core/filters.py:528 +#: core/filters.py:68 core/filters.py:530 msgid "Categories" msgstr "카테고리" @@ -713,7 +717,7 @@ msgstr "카테고리" msgid "Categories Slugs" msgstr "카테고리 슬러그" -#: core/filters.py:71 core/filters.py:407 +#: core/filters.py:71 core/filters.py:409 msgid "Tags" msgstr "태그" @@ -741,8 +745,8 @@ msgstr "속성" msgid "Quantity" msgstr "수량" -#: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:301 core/models.py:383 core/models.py:536 +#: core/filters.py:78 core/filters.py:403 core/filters.py:529 +#: core/models.py:309 core/models.py:391 core/models.py:544 msgid "Slug" msgstr "슬러그" @@ -758,7 +762,7 @@ msgstr "하위 카테고리 포함" msgid "Include personal ordered" msgstr "개인 주문 제품 포함" -#: core/filters.py:85 core/models.py:540 +#: core/filters.py:85 core/models.py:548 msgid "SKU" msgstr "SKU" @@ -766,48 +770,48 @@ msgstr "SKU" msgid "there must be a category_uuid to use include_subcategories flag" msgstr "include_subcategories 플래그를 사용하려면 category_uuid가 있어야 합니다." -#: core/filters.py:324 +#: core/filters.py:326 msgid "Search (ID, product name or part number)" msgstr "검색(ID, 제품명 또는 부품 번호)" -#: core/filters.py:327 +#: core/filters.py:329 msgid "Bought after (inclusive)" msgstr "구매 후(포함)" -#: core/filters.py:328 +#: core/filters.py:330 msgid "Bought before (inclusive)" msgstr "이전 구매(포함)" -#: core/filters.py:331 core/filters.py:378 core/filters.py:585 +#: core/filters.py:333 core/filters.py:380 core/filters.py:587 msgid "User email" msgstr "사용자 이메일" -#: core/filters.py:332 core/filters.py:379 core/filters.py:563 -#: core/filters.py:584 +#: core/filters.py:334 core/filters.py:381 core/filters.py:565 +#: core/filters.py:586 msgid "User UUID" msgstr "사용자 UUID" -#: core/filters.py:333 +#: core/filters.py:335 msgid "Status" msgstr "상태" -#: core/filters.py:337 +#: core/filters.py:339 msgid "Human Readable ID" msgstr "사람이 읽을 수 있는 ID" -#: core/filters.py:400 +#: core/filters.py:402 msgid "Parent" msgstr "부모" -#: core/filters.py:404 +#: core/filters.py:406 msgid "Whole category(has at least 1 product or not)" msgstr "전체 카테고리(1개 이상의 제품 보유 여부)" -#: core/filters.py:408 +#: core/filters.py:410 msgid "Level" msgstr "레벨" -#: core/filters.py:558 +#: core/filters.py:560 msgid "Product UUID" msgstr "제품 UUID" @@ -862,7 +866,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:679 +#: core/graphene/mutations.py:527 core/viewsets.py:680 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "order.buy() 메서드에서 잘못된 유형이 발생했습니다: {type(instance)!s}" @@ -936,9 +940,9 @@ msgstr "주문 제품 {order_product_uuid}을 찾을 수 없습니다!" msgid "original address string provided by the user" msgstr "사용자가 제공한 원본 주소 문자열" -#: 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 +#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 +#: core/models.py:1289 core/models.py:1318 core/models.py:1343 +#: core/viewsets.py:683 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name}가 존재하지 않습니다: {uuid}!" @@ -952,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:672 core/models.py:1144 -#: core/models.py:1744 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 +#: core/models.py:1752 msgid "attributes" msgstr "속성" @@ -966,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:326 core/models.py:626 +#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 msgid "categories" msgstr "카테고리" -#: core/graphene/object_types.py:124 core/models.py:397 +#: core/graphene/object_types.py:124 core/models.py:405 msgid "brands" msgstr "브랜드" @@ -979,7 +983,7 @@ msgid "category image url" msgstr "카테고리" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:263 +#: core/models.py:271 msgid "markup percentage" msgstr "마크업 퍼센트" @@ -1000,7 +1004,7 @@ msgstr "이 카테고리의 태그" msgid "products in this category" msgstr "이 카테고리의 제품" -#: core/graphene/object_types.py:351 core/models.py:169 +#: core/graphene/object_types.py:351 core/models.py:177 msgid "vendors" msgstr "공급업체" @@ -1025,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:1138 +#: core/models.py:1146 msgid "notifications" msgstr "알림" @@ -1033,7 +1037,7 @@ msgstr "알림" msgid "download url for this order product if applicable" msgstr "해당되는 경우 이 주문 제품의 URL 다운로드" -#: core/graphene/object_types.py:400 core/models.py:1860 +#: core/graphene/object_types.py:400 core/models.py:1868 msgid "feedback" msgstr "피드백" @@ -1041,7 +1045,7 @@ msgstr "피드백" msgid "a list of order products in this order" msgstr "주문 제품 목록은 다음 순서로 표시됩니다." -#: core/graphene/object_types.py:436 core/models.py:1108 +#: core/graphene/object_types.py:436 core/models.py:1116 msgid "billing address" msgstr "청구서 수신 주소" @@ -1067,7 +1071,7 @@ msgstr "주문에 포함된 모든 제품이 디지털 제품인가요?" msgid "transactions for this order" msgstr "이 주문에 대한 거래" -#: core/graphene/object_types.py:465 core/models.py:1172 +#: core/graphene/object_types.py:465 core/models.py:1180 msgid "orders" msgstr "주문" @@ -1079,19 +1083,19 @@ msgstr "이미지 URL" msgid "product's images" msgstr "제품 이미지" -#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 +#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 msgid "category" msgstr "카테고리" -#: core/graphene/object_types.py:502 core/models.py:1861 +#: core/graphene/object_types.py:502 core/models.py:1869 msgid "feedbacks" msgstr "피드백" -#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 +#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 msgid "brand" msgstr "브랜드" -#: core/graphene/object_types.py:504 core/models.py:101 +#: core/graphene/object_types.py:504 core/models.py:102 msgid "attribute groups" msgstr "속성 그룹" @@ -1119,7 +1123,7 @@ msgstr "피드백 수" msgid "only available for personal orders" msgstr "개인 주문만 가능한 제품" -#: core/graphene/object_types.py:534 core/models.py:550 +#: core/graphene/object_types.py:534 core/models.py:558 msgid "products" msgstr "제품" @@ -1131,15 +1135,15 @@ msgstr "프로모션 코드" msgid "products on sale" msgstr "판매 중인 제품" -#: core/graphene/object_types.py:651 core/models.py:798 +#: core/graphene/object_types.py:651 core/models.py:806 msgid "promotions" msgstr "프로모션" -#: core/graphene/object_types.py:655 core/models.py:168 +#: core/graphene/object_types.py:655 core/models.py:176 msgid "vendor" msgstr "공급업체" -#: core/graphene/object_types.py:656 core/models.py:549 +#: core/graphene/object_types.py:656 core/models.py:557 #: 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 +1151,11 @@ msgstr "공급업체" msgid "product" msgstr "제품" -#: core/graphene/object_types.py:667 core/models.py:821 +#: core/graphene/object_types.py:667 core/models.py:829 msgid "wishlisted products" msgstr "위시리스트 제품" -#: core/graphene/object_types.py:673 core/models.py:838 +#: core/graphene/object_types.py:673 core/models.py:846 msgid "wishlists" msgstr "위시리스트" @@ -1159,7 +1163,7 @@ msgstr "위시리스트" msgid "tagged products" msgstr "태그가 지정된 제품" -#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 +#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 msgid "product tags" msgstr "제품 태그" @@ -1244,7 +1248,7 @@ msgstr "제품 검색 결과" msgid "posts search results" msgstr "제품 검색 결과" -#: core/models.py:70 +#: core/models.py:71 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1254,23 +1258,23 @@ msgstr "" "계층적일 수 있는 속성 그룹을 나타냅니다. 이 클래스는 속성 그룹을 관리하고 구성하는 데 사용됩니다. 속성 그룹은 상위 그룹을 가질 수 " "있으며 계층 구조를 형성할 수 있습니다. 이는 복잡한 시스템에서 속성을 보다 효과적으로 분류하고 관리하는 데 유용할 수 있습니다." -#: core/models.py:86 +#: core/models.py:87 msgid "parent of this group" msgstr "이 그룹의 부모" -#: core/models.py:87 +#: core/models.py:88 msgid "parent attribute group" msgstr "상위 속성 그룹" -#: core/models.py:91 core/models.py:92 +#: core/models.py:92 core/models.py:93 msgid "attribute group's name" msgstr "속성 그룹의 이름" -#: core/models.py:100 core/models.py:634 +#: core/models.py:101 core/models.py:642 msgid "attribute group" msgstr "속성 그룹" -#: core/models.py:106 +#: core/models.py:107 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1285,31 +1289,39 @@ msgstr "" "제품에 적용된 마크업 비율을 저장합니다. 또한 이 모델은 추가 메타데이터 및 제약 조건을 유지하므로 타사 공급업체와 상호 작용하는 " "시스템에서 사용하기에 적합합니다." -#: core/models.py:119 +#: core/models.py:120 msgid "stores credentials and endpoints required for vendor communication" msgstr "공급업체의 API 통신에 필요한 자격 증명과 엔드포인트를 저장합니다." -#: core/models.py:120 +#: core/models.py:121 msgid "authentication info" msgstr "인증 정보" -#: core/models.py:125 +#: core/models.py:126 msgid "define the markup for products retrieved from this vendor" msgstr "이 공급업체에서 검색된 제품에 대한 마크업을 정의합니다." -#: core/models.py:126 +#: core/models.py:127 msgid "vendor markup percentage" msgstr "공급업체 마크업 비율" -#: core/models.py:130 +#: core/models.py:131 msgid "name of this vendor" msgstr "이 공급업체의 이름" -#: core/models.py:131 +#: core/models.py:132 msgid "vendor name" msgstr "공급업체 이름" -#: core/models.py:177 +#: core/models.py:143 +msgid "response file" +msgstr "응답 파일" + +#: core/models.py:144 +msgid "vendor's last processing response" +msgstr "공급업체의 마지막 처리 응답" + +#: core/models.py:185 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1321,27 +1333,27 @@ msgstr "" "이름의 조합을 통해 제품을 고유하게 식별하고 분류하도록 설계되었습니다. 믹스인을 통해 내보낸 작업을 지원하며 관리 목적으로 메타데이터 " "사용자 지정을 제공합니다." -#: core/models.py:189 core/models.py:220 +#: core/models.py:197 core/models.py:228 msgid "internal tag identifier for the product tag" msgstr "제품 태그의 내부 태그 식별자" -#: core/models.py:190 core/models.py:221 +#: core/models.py:198 core/models.py:229 msgid "tag name" msgstr "태그 이름" -#: core/models.py:194 core/models.py:225 +#: core/models.py:202 core/models.py:233 msgid "user-friendly name for the product tag" msgstr "제품 태그의 사용자 친화적인 이름" -#: core/models.py:195 core/models.py:226 +#: core/models.py:203 core/models.py:234 msgid "tag display name" msgstr "태그 표시 이름" -#: core/models.py:203 +#: core/models.py:211 msgid "product tag" msgstr "제품 태그" -#: core/models.py:209 +#: core/models.py:217 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 +1362,15 @@ msgstr "" "제품에 사용되는 카테고리 태그를 나타냅니다. 이 클래스는 제품을 연결하고 분류하는 데 사용할 수 있는 카테고리 태그를 모델링합니다. 내부" " 태그 식별자 및 사용자 친화적인 표시 이름에 대한 속성을 포함합니다." -#: core/models.py:234 +#: core/models.py:242 msgid "category tag" msgstr "카테고리 태그" -#: core/models.py:235 core/models.py:307 +#: core/models.py:243 core/models.py:315 msgid "category tags" msgstr "카테고리 태그" -#: core/models.py:240 +#: core/models.py:248 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1375,51 +1387,51 @@ msgstr "" "있습니다. 이 클래스는 일반적으로 애플리케이션 내에서 제품 카테고리 또는 기타 유사한 그룹을 정의하고 관리하는 데 사용되며, 사용자나 " "관리자가 카테고리의 이름, 설명 및 계층 구조를 지정하고 이미지, 태그 또는 우선순위와 같은 속성을 할당할 수 있도록 합니다." -#: core/models.py:254 +#: core/models.py:262 msgid "upload an image representing this category" msgstr "이 카테고리를 대표하는 이미지 업로드" -#: core/models.py:257 +#: core/models.py:265 msgid "category image" msgstr "카테고리 이미지" -#: core/models.py:262 +#: core/models.py:270 msgid "define a markup percentage for products in this category" msgstr "이 카테고리의 제품에 대한 마크업 비율을 정의합니다." -#: core/models.py:271 +#: core/models.py:279 msgid "parent of this category to form a hierarchical structure" msgstr "계층 구조를 형성하는 이 카테고리의 상위 카테고리" -#: core/models.py:272 +#: core/models.py:280 msgid "parent category" msgstr "상위 카테고리" -#: core/models.py:277 +#: core/models.py:285 msgid "category name" msgstr "카테고리 이름" -#: core/models.py:278 +#: core/models.py:286 msgid "provide a name for this category" msgstr "이 카테고리의 이름을 입력합니다." -#: core/models.py:285 +#: core/models.py:293 msgid "add a detailed description for this category" msgstr "이 카테고리에 대한 자세한 설명 추가" -#: core/models.py:286 +#: core/models.py:294 msgid "category description" msgstr "카테고리 설명" -#: core/models.py:306 +#: core/models.py:314 msgid "tags that help describe or group this category" msgstr "이 카테고리를 설명하거나 그룹화하는 데 도움이 되는 태그" -#: core/models.py:313 core/models.py:389 +#: core/models.py:321 core/models.py:397 msgid "priority" msgstr "우선순위" -#: core/models.py:332 +#: core/models.py:340 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 +1442,47 @@ msgstr "" "시스템에서 브랜드 객체를 나타냅니다. 이 클래스는 이름, 로고, 설명, 관련 카테고리, 고유 슬러그, 우선순위 등 브랜드와 관련된 정보 " "및 속성을 처리합니다. 이를 통해 애플리케이션 내에서 브랜드 관련 데이터를 구성하고 표현할 수 있습니다." -#: core/models.py:342 +#: core/models.py:350 msgid "name of this brand" msgstr "이 브랜드 이름" -#: core/models.py:343 +#: core/models.py:351 msgid "brand name" msgstr "브랜드 이름" -#: core/models.py:350 +#: core/models.py:358 msgid "upload a logo representing this brand" msgstr "이 브랜드를 대표하는 로고 업로드" -#: core/models.py:352 +#: core/models.py:360 msgid "brand small image" msgstr "브랜드 작은 이미지" -#: core/models.py:358 +#: core/models.py:366 msgid "upload a big logo representing this brand" msgstr "이 브랜드를 대표하는 큰 로고 업로드" -#: core/models.py:360 +#: core/models.py:368 msgid "brand big image" msgstr "브랜드 빅 이미지" -#: core/models.py:365 +#: core/models.py:373 msgid "add a detailed description of the brand" msgstr "브랜드에 대한 자세한 설명 추가" -#: core/models.py:366 +#: core/models.py:374 msgid "brand description" msgstr "브랜드 설명" -#: core/models.py:371 +#: core/models.py:379 msgid "optional categories that this brand is associated with" msgstr "이 브랜드와 연관된 선택적 카테고리" -#: core/models.py:372 +#: core/models.py:380 msgid "associated categories" msgstr "카테고리" -#: core/models.py:402 +#: core/models.py:410 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 +1495,68 @@ msgstr "" " 디지털 자산과 같은 재고 관련 속성에 대한 세부 정보를 제공합니다. 다양한 공급업체에서 제공하는 제품을 추적하고 평가할 수 있도록 하는" " 재고 관리 시스템의 일부입니다." -#: core/models.py:414 +#: core/models.py:422 msgid "the vendor supplying this product stock" msgstr "이 제품 재고를 공급하는 공급업체" -#: core/models.py:415 +#: core/models.py:423 msgid "associated vendor" msgstr "관련 공급업체" -#: core/models.py:419 +#: core/models.py:427 msgid "final price to the customer after markups" msgstr "마크업 후 고객에게 제공되는 최종 가격" -#: core/models.py:420 +#: core/models.py:428 msgid "selling price" msgstr "판매 가격" -#: core/models.py:425 +#: core/models.py:433 msgid "the product associated with this stock entry" msgstr "이 주식 항목과 관련된 제품" -#: core/models.py:426 core/models.py:697 core/models.py:744 -#: core/models.py:1641 +#: core/models.py:434 core/models.py:705 core/models.py:752 +#: core/models.py:1649 msgid "associated product" msgstr "관련 제품" -#: core/models.py:433 +#: core/models.py:441 msgid "the price paid to the vendor for this product" msgstr "이 제품에 대해 공급업체에 지불한 가격" -#: core/models.py:434 +#: core/models.py:442 msgid "vendor purchase price" msgstr "공급업체 구매 가격" -#: core/models.py:438 +#: core/models.py:446 msgid "available quantity of the product in stock" msgstr "재고가 있는 제품의 사용 가능한 수량" -#: core/models.py:439 +#: core/models.py:447 msgid "quantity in stock" msgstr "재고 수량" -#: core/models.py:443 +#: core/models.py:451 msgid "vendor-assigned SKU for identifying the product" msgstr "제품 식별을 위해 공급업체에서 할당하는 SKU" -#: core/models.py:444 +#: core/models.py:452 msgid "vendor sku" msgstr "공급업체의 SKU" -#: core/models.py:450 +#: core/models.py:458 msgid "digital file associated with this stock if applicable" msgstr "해당되는 경우 이 주식과 관련된 디지털 파일" -#: core/models.py:451 +#: core/models.py:459 msgid "digital file" msgstr "디지털 파일" -#: core/models.py:460 +#: core/models.py:468 msgid "stock entries" msgstr "재고 항목" -#: core/models.py:465 +#: core/models.py:473 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1560,55 +1572,55 @@ msgstr "" "사용하도록 설계되었습니다. 이 클래스는 관련 모델(예: 카테고리, 브랜드, 제품 태그)과 상호 작용하고 자주 액세스하는 속성에 대한 " "캐싱을 관리하여 성능을 개선합니다. 애플리케이션 내에서 제품 데이터 및 관련 정보를 정의하고 조작하는 데 사용됩니다." -#: core/models.py:478 +#: core/models.py:486 msgid "category this product belongs to" msgstr "이 제품이 속한 카테고리" -#: core/models.py:487 +#: core/models.py:495 msgid "optionally associate this product with a brand" msgstr "선택 사항으로 이 제품을 브랜드와 연결" -#: core/models.py:493 +#: core/models.py:501 msgid "tags that help describe or group this product" msgstr "이 제품을 설명하거나 그룹화하는 데 도움이 되는 태그" -#: core/models.py:498 +#: core/models.py:506 msgid "indicates whether this product is digitally delivered" msgstr "이 제품이 디지털 방식으로 배송되는지 여부를 나타냅니다." -#: core/models.py:499 +#: core/models.py:507 msgid "is product digital" msgstr "제품 디지털화 여부" -#: core/models.py:505 +#: core/models.py:513 msgid "provide a clear identifying name for the product" msgstr "제품에 대한 명확한 식별 이름 제공" -#: core/models.py:506 +#: core/models.py:514 msgid "product name" msgstr "제품 이름" -#: core/models.py:511 core/models.py:786 +#: core/models.py:519 core/models.py:794 msgid "add a detailed description of the product" msgstr "제품에 대한 자세한 설명 추가" -#: core/models.py:512 +#: core/models.py:520 msgid "product description" msgstr "제품 설명" -#: core/models.py:519 +#: core/models.py:527 msgid "part number for this product" msgstr "이 제품의 부품 번호" -#: core/models.py:520 +#: core/models.py:528 msgid "part number" msgstr "부품 번호" -#: core/models.py:539 +#: core/models.py:547 msgid "stock keeping unit for this product" msgstr "이 제품의 재고 보관 단위" -#: core/models.py:613 +#: core/models.py:621 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 +1633,68 @@ msgstr "" "사용됩니다. 속성에는 연관된 카테고리, 그룹, 값 유형 및 이름이 있습니다. 이 모델은 문자열, 정수, 실수, 부울, 배열, 객체 등 " "여러 유형의 값을 지원합니다. 이를 통해 동적이고 유연한 데이터 구조화가 가능합니다." -#: core/models.py:625 +#: core/models.py:633 msgid "category of this attribute" msgstr "이 속성의 범주" -#: core/models.py:633 +#: core/models.py:641 msgid "group of this attribute" msgstr "이 속성의 그룹" -#: core/models.py:639 +#: core/models.py:647 msgid "string" msgstr "문자열" -#: core/models.py:640 +#: core/models.py:648 msgid "integer" msgstr "정수" -#: core/models.py:641 +#: core/models.py:649 msgid "float" msgstr "Float" -#: core/models.py:642 +#: core/models.py:650 msgid "boolean" msgstr "부울" -#: core/models.py:643 +#: core/models.py:651 msgid "array" msgstr "배열" -#: core/models.py:644 +#: core/models.py:652 msgid "object" msgstr "개체" -#: core/models.py:646 +#: core/models.py:654 msgid "type of the attribute's value" msgstr "속성 값의 유형" -#: core/models.py:647 +#: core/models.py:655 msgid "value type" msgstr "값 유형" -#: core/models.py:652 +#: core/models.py:660 msgid "name of this attribute" msgstr "이 속성의 이름" -#: core/models.py:653 +#: core/models.py:661 msgid "attribute's name" msgstr "속성 이름" -#: core/models.py:659 +#: core/models.py:667 msgid "is filterable" msgstr "필터링 가능" -#: core/models.py:660 +#: core/models.py:668 msgid "designates whether this attribute can be used for filtering or not" msgstr "는 이 속성을 필터링에 사용할 수 있는지 여부를 지정합니다." -#: core/models.py:671 core/models.py:689 +#: core/models.py:679 core/models.py:697 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "속성" -#: core/models.py:677 +#: core/models.py:685 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 +1703,19 @@ msgstr "" "상품에 연결된 속성의 특정 값을 나타냅니다. '속성'을 고유한 '값'에 연결하여 제품 특성을 더 잘 구성하고 동적으로 표현할 수 " "있습니다." -#: core/models.py:688 +#: core/models.py:696 msgid "attribute of this value" msgstr "이 값의 속성" -#: core/models.py:696 +#: core/models.py:704 msgid "the specific product associated with this attribute's value" msgstr "이 속성 값과 연관된 특정 제품" -#: core/models.py:702 +#: core/models.py:710 msgid "the specific value for this attribute" msgstr "이 속성의 구체적인 값은 다음과 같습니다." -#: core/models.py:715 +#: core/models.py:723 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 +1726,39 @@ msgstr "" "시스템에서 제품과 연관된 제품 이미지를 나타냅니다. 이 클래스는 이미지 파일 업로드, 특정 제품과의 연결, 표시 순서 결정 등의 기능을 " "포함하여 제품의 이미지를 관리하도록 설계되었습니다. 또한 이미지에 대한 대체 텍스트가 포함된 접근성 기능도 포함되어 있습니다." -#: core/models.py:726 +#: core/models.py:734 msgid "provide alternative text for the image for accessibility" msgstr "접근성을 위해 이미지에 대체 텍스트 제공" -#: core/models.py:727 +#: core/models.py:735 msgid "image alt text" msgstr "이미지 대체 텍스트" -#: core/models.py:730 +#: core/models.py:738 msgid "upload the image file for this product" msgstr "이 제품의 이미지 파일 업로드" -#: core/models.py:731 core/models.py:756 +#: core/models.py:739 core/models.py:764 msgid "product image" msgstr "제품 이미지" -#: core/models.py:737 +#: core/models.py:745 msgid "determines the order in which images are displayed" msgstr "이미지가 표시되는 순서를 결정합니다." -#: core/models.py:738 +#: core/models.py:746 msgid "display priority" msgstr "우선순위 표시" -#: core/models.py:743 +#: core/models.py:751 msgid "the product that this image represents" msgstr "이 이미지가 나타내는 제품" -#: core/models.py:757 +#: core/models.py:765 msgid "product images" msgstr "제품 이미지" -#: core/models.py:762 +#: core/models.py:770 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 +1771,39 @@ msgstr "" "정의하고 관리하는 데 사용됩니다. 이 클래스에는 할인율 설정, 프로모션에 대한 세부 정보 제공 및 해당 제품에 대한 링크를 위한 속성이 " "포함되어 있습니다. 제품 카탈로그와 통합되어 캠페인에서 영향을 받는 품목을 결정합니다." -#: core/models.py:774 +#: core/models.py:782 msgid "percentage discount for the selected products" msgstr "선택한 제품에 대한 할인 비율" -#: core/models.py:775 +#: core/models.py:783 msgid "discount percentage" msgstr "할인 비율" -#: core/models.py:780 +#: core/models.py:788 msgid "provide a unique name for this promotion" msgstr "이 프로모션의 고유한 이름을 입력하세요." -#: core/models.py:781 +#: core/models.py:789 msgid "promotion name" msgstr "프로모션 이름" -#: core/models.py:787 +#: core/models.py:795 msgid "promotion description" msgstr "프로모션 설명" -#: core/models.py:792 +#: core/models.py:800 msgid "select which products are included in this promotion" msgstr "이 프로모션에 포함되는 제품 선택" -#: core/models.py:793 +#: core/models.py:801 msgid "included products" msgstr "포함된 제품" -#: core/models.py:797 +#: core/models.py:805 msgid "promotion" msgstr "프로모션" -#: core/models.py:808 +#: core/models.py:816 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 +1813,23 @@ msgstr "" "원하는 상품을 저장하고 관리하기 위한 사용자의 위시리스트를 나타냅니다. 이 클래스는 제품 컬렉션을 관리하는 기능을 제공하여 제품 추가 및" " 제거와 같은 작업을 지원할 뿐만 아니라 여러 제품을 한 번에 추가 및 제거하는 작업도 지원합니다." -#: core/models.py:820 +#: core/models.py:828 msgid "products that the user has marked as wanted" msgstr "사용자가 원하는 것으로 표시한 제품" -#: core/models.py:828 +#: core/models.py:836 msgid "user who owns this wishlist" msgstr "이 위시리스트를 소유한 사용자" -#: core/models.py:829 +#: core/models.py:837 msgid "wishlist owner" msgstr "위시리스트의 소유자" -#: core/models.py:837 +#: core/models.py:845 msgid "wishlist" msgstr "위시리스트" -#: core/models.py:879 +#: core/models.py:887 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1830,19 +1842,19 @@ msgstr "" "정보를 저장하는 데 사용됩니다. 여기에는 다큐멘터리 파일의 파일 유형과 저장 경로를 처리하는 메서드와 프로퍼티가 포함되어 있습니다. 특정" " 믹스인의 기능을 확장하고 추가 사용자 정의 기능을 제공합니다." -#: core/models.py:892 +#: core/models.py:900 msgid "documentary" msgstr "다큐멘터리" -#: core/models.py:893 +#: core/models.py:901 msgid "documentaries" msgstr "다큐멘터리" -#: core/models.py:903 +#: core/models.py:911 msgid "unresolved" msgstr "해결되지 않음" -#: core/models.py:908 +#: core/models.py:916 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1858,59 +1870,59 @@ msgstr "" "저장하도록 설계되었습니다. 지오코딩 API와의 통합을 지원하여 추가 처리 또는 검사를 위해 원시 API 응답을 저장할 수 있습니다. 또한" " 이 클래스를 사용하면 주소를 사용자와 연결하여 개인화된 데이터 처리를 용이하게 할 수 있습니다." -#: core/models.py:923 +#: core/models.py:931 msgid "address line for the customer" msgstr "고객 주소 라인" -#: core/models.py:924 +#: core/models.py:932 msgid "address line" msgstr "주소 라인" -#: core/models.py:926 +#: core/models.py:934 msgid "street" msgstr "거리" -#: core/models.py:927 +#: core/models.py:935 msgid "district" msgstr "지구" -#: core/models.py:928 +#: core/models.py:936 msgid "city" msgstr "도시" -#: core/models.py:929 +#: core/models.py:937 msgid "region" msgstr "지역" -#: core/models.py:930 +#: core/models.py:938 msgid "postal code" msgstr "우편 번호" -#: core/models.py:931 +#: core/models.py:939 msgid "country" msgstr "국가" -#: core/models.py:938 +#: core/models.py:946 msgid "geolocation point: (longitude, latitude)" msgstr "지리적 위치 포인트(경도, 위도)" -#: core/models.py:941 +#: core/models.py:949 msgid "full JSON response from geocoder for this address" msgstr "이 주소에 대한 지오코더의 전체 JSON 응답" -#: core/models.py:946 +#: core/models.py:954 msgid "stored JSON response from the geocoding service" msgstr "지오코딩 서비스의 저장된 JSON 응답" -#: core/models.py:954 +#: core/models.py:962 msgid "address" msgstr "주소" -#: core/models.py:955 +#: core/models.py:963 msgid "addresses" msgstr "주소" -#: core/models.py:967 +#: core/models.py:975 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 +1935,86 @@ msgstr "" "할인 속성(금액 또는 백분율), 유효 기간, 관련 사용자(있는 경우), 사용 상태 등 프로모션 코드에 대한 세부 정보를 저장합니다. " "여기에는 제약 조건이 충족되는지 확인하면서 프로모션 코드의 유효성을 검사하고 주문에 적용하는 기능이 포함되어 있습니다." -#: core/models.py:981 +#: core/models.py:989 msgid "unique code used by a user to redeem a discount" msgstr "사용자가 할인을 받기 위해 사용하는 고유 코드" -#: core/models.py:982 +#: core/models.py:990 msgid "promo code identifier" msgstr "프로모션 코드 식별자" -#: core/models.py:989 +#: core/models.py:997 msgid "fixed discount amount applied if percent is not used" msgstr "퍼센트를 사용하지 않을 경우 고정 할인 금액 적용" -#: core/models.py:990 +#: core/models.py:998 msgid "fixed discount amount" msgstr "고정 할인 금액" -#: core/models.py:996 +#: core/models.py:1004 msgid "percentage discount applied if fixed amount is not used" msgstr "고정 금액 미사용 시 적용되는 할인 비율" -#: core/models.py:997 +#: core/models.py:1005 msgid "percentage discount" msgstr "백분율 할인" -#: core/models.py:1002 +#: core/models.py:1010 msgid "timestamp when the promocode expires" msgstr "프로모션 코드 만료 시 타임스탬프" -#: core/models.py:1003 +#: core/models.py:1011 msgid "end validity time" msgstr "유효 기간 종료 시간" -#: core/models.py:1008 +#: core/models.py:1016 msgid "timestamp from which this promocode is valid" msgstr "이 프로모코드의 타임스탬프가 유효한 시점" -#: core/models.py:1009 +#: core/models.py:1017 msgid "start validity time" msgstr "유효 기간 시작 시간" -#: core/models.py:1014 +#: core/models.py:1022 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "프로모코드가 사용된 타임스탬프, 아직 사용되지 않은 경우 비워둡니다." -#: core/models.py:1015 +#: core/models.py:1023 msgid "usage timestamp" msgstr "사용 타임스탬프" -#: core/models.py:1020 +#: core/models.py:1028 msgid "user assigned to this promocode if applicable" msgstr "해당되는 경우 이 프로모코드에 할당된 사용자" -#: core/models.py:1021 +#: core/models.py:1029 msgid "assigned user" msgstr "할당된 사용자" -#: core/models.py:1028 +#: core/models.py:1036 msgid "promo code" msgstr "프로모션 코드" -#: core/models.py:1029 +#: core/models.py:1037 msgid "promo codes" msgstr "프로모션 코드" -#: core/models.py:1044 +#: core/models.py:1052 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "할인 유형(금액 또는 백분율)은 한 가지 유형만 정의해야 하며, 두 가지 모두 또는 둘 다 정의해서는 안 됩니다." -#: core/models.py:1065 +#: core/models.py:1073 msgid "promocode already used" msgstr "프로모코드가 이미 사용되었습니다." -#: core/models.py:1081 +#: core/models.py:1089 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "프로모션 코드 {self.uuid}의 할인 유형이 잘못되었습니다!" -#: core/models.py:1090 +#: core/models.py:1098 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 +2027,144 @@ msgstr "" "포함하여 애플리케이션 내에서 주문을 모델링합니다. 주문에는 연결된 제품, 프로모션 적용, 주소 설정, 배송 또는 청구 세부 정보 " "업데이트가 가능합니다. 또한 주문 수명 주기에서 제품을 관리하는 기능도 지원합니다." -#: core/models.py:1107 +#: core/models.py:1115 msgid "the billing address used for this order" msgstr "이 주문에 사용된 청구 주소" -#: core/models.py:1115 +#: core/models.py:1123 msgid "optional promo code applied to this order" msgstr "이 주문에 적용된 프로모션 코드(선택 사항)" -#: core/models.py:1116 +#: core/models.py:1124 msgid "applied promo code" msgstr "프로모션 코드 적용" -#: core/models.py:1124 +#: core/models.py:1132 msgid "the shipping address used for this order" msgstr "이 주문에 사용된 배송지 주소" -#: core/models.py:1125 +#: core/models.py:1133 msgid "shipping address" msgstr "배송 주소" -#: core/models.py:1131 +#: core/models.py:1139 msgid "current status of the order in its lifecycle" msgstr "라이프사이클 내 주문의 현재 상태" -#: core/models.py:1132 +#: core/models.py:1140 msgid "order status" msgstr "주문 상태" -#: core/models.py:1137 core/models.py:1618 +#: core/models.py:1145 core/models.py:1626 msgid "json structure of notifications to display to users" msgstr "사용자에게 표시할 알림의 JSON 구조, 관리자 UI에서는 테이블 보기가 사용됩니다." -#: core/models.py:1143 +#: core/models.py:1151 msgid "json representation of order attributes for this order" msgstr "이 주문에 대한 주문 속성의 JSON 표현" -#: core/models.py:1149 +#: core/models.py:1157 msgid "the user who placed the order" msgstr "주문한 사용자" -#: core/models.py:1150 +#: core/models.py:1158 msgid "user" msgstr "사용자" -#: core/models.py:1156 +#: core/models.py:1164 msgid "the timestamp when the order was finalized" msgstr "주문이 완료된 타임스탬프" -#: core/models.py:1157 +#: core/models.py:1165 msgid "buy time" msgstr "시간 확보" -#: core/models.py:1164 +#: core/models.py:1172 msgid "a human-readable identifier for the order" msgstr "사람이 읽을 수 있는 주문 식별자" -#: core/models.py:1165 +#: core/models.py:1173 msgid "human readable id" msgstr "사람이 읽을 수 있는 ID" -#: core/models.py:1171 +#: core/models.py:1179 msgid "order" msgstr "주문" -#: core/models.py:1209 +#: core/models.py:1217 msgid "a user must have only one pending order at a time" msgstr "사용자는 한 번에 하나의 대기 주문만 보유해야 합니다!" -#: core/models.py:1249 +#: core/models.py:1257 msgid "you cannot add products to an order that is not a pending one" msgstr "보류 중인 주문이 아닌 주문에는 제품을 추가할 수 없습니다." -#: core/models.py:1254 +#: core/models.py:1262 msgid "you cannot add inactive products to order" msgstr "주문에 비활성 제품을 추가할 수 없습니다." -#: core/models.py:1271 +#: core/models.py:1279 msgid "you cannot add more products than available in stock" msgstr "재고가 있는 제품보다 많은 제품을 추가할 수 없습니다." -#: core/models.py:1293 core/models.py:1318 core/models.py:1326 +#: core/models.py:1301 core/models.py:1326 core/models.py:1334 msgid "you cannot remove products from an order that is not a pending one" msgstr "보류 중인 주문이 아닌 주문에서는 제품을 제거할 수 없습니다." -#: core/models.py:1314 +#: core/models.py:1322 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "쿼리 <{query}>에 {name}가 존재하지 않습니다!" -#: core/models.py:1346 +#: core/models.py:1354 msgid "promocode does not exist" msgstr "프로모코드가 존재하지 않습니다." -#: core/models.py:1352 +#: core/models.py:1360 msgid "you can only buy physical products with shipping address specified" msgstr "배송 주소가 지정된 실제 제품만 구매할 수 있습니다!" -#: core/models.py:1371 +#: core/models.py:1379 msgid "address does not exist" msgstr "주소가 존재하지 않습니다." -#: core/models.py:1392 core/models.py:1461 +#: core/models.py:1400 core/models.py:1469 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "지금은 구매할 수 없습니다. 몇 분 후에 다시 시도해 주세요." -#: core/models.py:1395 core/models.py:1457 +#: core/models.py:1403 core/models.py:1465 msgid "invalid force value" msgstr "잘못된 힘 값" -#: core/models.py:1401 core/models.py:1464 +#: core/models.py:1409 core/models.py:1472 msgid "you cannot purchase an empty order!" msgstr "빈 주문은 구매할 수 없습니다!" -#: core/models.py:1420 +#: core/models.py:1428 msgid "you cannot buy an order without a user" msgstr "사용자 없이는 주문을 구매할 수 없습니다!" -#: core/models.py:1434 +#: core/models.py:1442 msgid "a user without a balance cannot buy with balance" msgstr "잔액이 없는 사용자는 잔액으로 구매할 수 없습니다!" -#: core/models.py:1439 +#: core/models.py:1447 msgid "insufficient funds to complete the order" msgstr "주문을 완료하기에 자금이 부족합니다." -#: core/models.py:1473 +#: core/models.py:1481 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "등록하지 않으면 구매할 수 없으므로 고객 이름, 고객 이메일, 고객 전화 번호 등의 정보를 제공하세요." -#: core/models.py:1482 +#: core/models.py:1490 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "결제 방법이 잘못되었습니다: {payment_method}에서 {available_payment_methods}로!" -#: core/models.py:1591 +#: core/models.py:1599 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2169,108 +2181,108 @@ msgstr "" "작업을 처리합니다. 또한 이 모델은 총 가격 계산이나 디지털 제품의 다운로드 URL 생성 등 비즈니스 로직을 지원하는 메서드와 속성을 " "제공합니다. 이 모델은 주문 및 제품 모델과 통합되며 해당 모델에 대한 참조를 저장합니다." -#: core/models.py:1606 +#: core/models.py:1614 msgid "the price paid by the customer for this product at purchase time" msgstr "구매 시점에 고객이 이 제품에 대해 지불한 가격입니다." -#: core/models.py:1607 +#: core/models.py:1615 msgid "purchase price at order time" msgstr "주문 시점의 구매 가격" -#: core/models.py:1612 +#: core/models.py:1620 msgid "internal comments for admins about this ordered product" msgstr "주문한 제품에 대한 관리자용 내부 댓글" -#: core/models.py:1613 +#: core/models.py:1621 msgid "internal comments" msgstr "내부 의견" -#: core/models.py:1619 +#: core/models.py:1627 msgid "user notifications" msgstr "사용자 알림" -#: core/models.py:1624 +#: core/models.py:1632 msgid "json representation of this item's attributes" msgstr "이 항목의 속성에 대한 JSON 표현" -#: core/models.py:1625 +#: core/models.py:1633 msgid "ordered product attributes" msgstr "주문한 제품 속성" -#: core/models.py:1630 +#: core/models.py:1638 msgid "reference to the parent order that contains this product" msgstr "이 제품이 포함된 상위 주문 참조" -#: core/models.py:1631 +#: core/models.py:1639 msgid "parent order" msgstr "상위 주문" -#: core/models.py:1640 +#: core/models.py:1648 msgid "the specific product associated with this order line" msgstr "이 주문 라인과 연결된 특정 제품" -#: core/models.py:1647 +#: core/models.py:1655 msgid "quantity of this specific product in the order" msgstr "이 특정 제품의 주문 수량" -#: core/models.py:1648 +#: core/models.py:1656 msgid "product quantity" msgstr "제품 수량" -#: core/models.py:1655 +#: core/models.py:1663 msgid "current status of this product in the order" msgstr "이 제품의 현재 상태 순서" -#: core/models.py:1656 +#: core/models.py:1664 msgid "product line status" msgstr "제품 라인 상태" -#: core/models.py:1719 +#: core/models.py:1727 msgid "order product must have an order" msgstr "주문제품에는 연결된 주문이 있어야 합니다!" -#: core/models.py:1721 +#: core/models.py:1729 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "피드백에 지정된 작업이 잘못되었습니다: {action}!" -#: core/models.py:1735 +#: core/models.py:1743 msgid "you cannot feedback an order which is not received" msgstr "받지 않은 주문에 대해서는 피드백을 제공할 수 없습니다." -#: core/models.py:1741 +#: core/models.py:1749 msgid "name" msgstr "이름" -#: core/models.py:1742 +#: core/models.py:1750 msgid "URL of the integration" msgstr "통합 URL" -#: core/models.py:1743 +#: core/models.py:1751 msgid "authentication credentials" msgstr "인증 자격 증명" -#: core/models.py:1765 +#: core/models.py:1773 msgid "you can only have one default CRM provider" msgstr "기본 CRM 공급업체는 하나만 사용할 수 있습니다." -#: core/models.py:1775 +#: core/models.py:1783 msgid "CRM" msgstr "CRM" -#: core/models.py:1776 +#: core/models.py:1784 msgid "CRMs" msgstr "CRM" -#: core/models.py:1788 +#: core/models.py:1796 msgid "order CRM link" msgstr "주문의 CRM 링크" -#: core/models.py:1789 +#: core/models.py:1797 msgid "orders CRM links" msgstr "주문의 CRM 링크" -#: core/models.py:1794 +#: core/models.py:1802 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2283,15 +2295,15 @@ msgstr "" "수 있는 기능을 제공합니다. 연결된 주문 상품, 다운로드 횟수, 자산이 공개적으로 표시되는지 여부에 대한 정보를 유지 관리합니다. " "여기에는 연결된 주문이 완료 상태일 때 자산을 다운로드할 수 있는 URL을 생성하는 메서드가 포함되어 있습니다." -#: core/models.py:1808 +#: core/models.py:1816 msgid "download" msgstr "다운로드" -#: core/models.py:1809 +#: core/models.py:1817 msgid "downloads" msgstr "다운로드" -#: core/models.py:1823 +#: core/models.py:1831 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2303,28 +2315,28 @@ msgstr "" "설계되었습니다. 여기에는 사용자 댓글, 주문에서 관련 제품에 대한 참조 및 사용자가 지정한 등급을 저장하는 속성이 포함되어 있습니다. 이" " 클래스는 데이터베이스 필드를 사용하여 피드백 데이터를 효과적으로 모델링하고 관리합니다." -#: core/models.py:1835 +#: core/models.py:1843 msgid "user-provided comments about their experience with the product" msgstr "제품 사용 경험에 대한 사용자 제공 의견" -#: core/models.py:1836 +#: core/models.py:1844 msgid "feedback comments" msgstr "피드백 댓글" -#: core/models.py:1843 +#: core/models.py:1851 msgid "" "references the specific product in an order that this feedback is about" msgstr "이 피드백에 대한 순서대로 특정 제품을 참조합니다." -#: core/models.py:1844 +#: core/models.py:1852 msgid "related order product" msgstr "관련 주문 제품" -#: core/models.py:1849 +#: core/models.py:1857 msgid "user-assigned rating for the product" msgstr "제품에 대한 사용자 지정 평점" -#: core/models.py:1850 +#: core/models.py:1858 msgid "product rating" msgstr "제품 평가" @@ -2530,22 +2542,22 @@ msgstr "데이터와 시간 초과가 모두 필요합니다." msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "잘못된 시간 초과 값, 0~216000초 사이여야 합니다." -#: core/utils/emailing.py:25 +#: core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | 문의 시작됨" -#: core/utils/emailing.py:74 +#: core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | 주문 확인" -#: core/utils/emailing.py:109 +#: core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | 주문 배송됨" -#: core/utils/emailing.py:197 +#: core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | 프로모코드 부여됨" @@ -2761,7 +2773,7 @@ msgstr "" "구현하는 것입니다. 이 클래스는 기본 `EvibesViewSet`을 확장하고 데이터 쿼리를 위해 Django의 필터링 시스템을 " "사용합니다." -#: core/viewsets.py:593 +#: core/viewsets.py:594 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2776,7 +2788,7 @@ msgstr "" "엔드포인트가 포함되어 있습니다. 뷰셋은 수행되는 특정 작업에 따라 여러 직렬화기를 사용하며 주문 데이터와 상호 작용하는 동안 그에 따라 " "권한을 적용합니다." -#: core/viewsets.py:782 +#: core/viewsets.py:784 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2788,25 +2800,25 @@ msgstr "" "수행할 수 있습니다. 여기에는 요청된 작업을 기반으로 필터링, 권한 확인 및 직렬화기 전환이 포함됩니다. 또한 주문 제품 인스턴스에 대한" " 피드백 처리를 위한 세부 작업도 제공합니다." -#: core/viewsets.py:833 +#: core/viewsets.py:835 msgid "Manages operations related to Product images in the application. " msgstr "애플리케이션에서 제품 이미지와 관련된 작업을 관리합니다." -#: core/viewsets.py:845 +#: core/viewsets.py:847 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "다양한 API 작업을 통해 프로모션 코드 인스턴스의 검색 및 처리를 관리합니다." -#: core/viewsets.py:866 +#: core/viewsets.py:868 msgid "Represents a view set for managing promotions. " msgstr "프로모션을 관리하기 위한 보기 세트를 나타냅니다." -#: core/viewsets.py:878 +#: core/viewsets.py:880 msgid "Handles operations related to Stock data in the system." msgstr "시스템에서 주식 데이터와 관련된 작업을 처리합니다." -#: core/viewsets.py:892 +#: core/viewsets.py:894 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -2820,7 +2832,7 @@ msgstr "" "내의 제품을 검색, 수정 및 사용자 지정할 수 있도록 합니다. 이 뷰셋은 위시리스트 제품에 대한 추가, 제거 및 대량 작업과 같은 기능을" " 용이하게 합니다. 명시적인 권한이 부여되지 않는 한 사용자가 자신의 위시리스트만 관리할 수 있도록 권한 검사가 통합되어 있습니다." -#: core/viewsets.py:1007 +#: core/viewsets.py:1009 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -2832,12 +2844,12 @@ msgstr "" "사용자 정의 작업을 가능하게 합니다. 여기에는 다양한 HTTP 메서드, 직렬화기 재정의, 요청 컨텍스트에 따른 권한 처리를 위한 특수 " "동작이 포함되어 있습니다." -#: core/viewsets.py:1074 +#: core/viewsets.py:1076 #, python-brace-format msgid "Geocoding error: {e}" msgstr "지오코딩 오류입니다: {e}" -#: core/viewsets.py:1081 +#: core/viewsets.py:1083 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/nl_NL/LC_MESSAGES/django.mo b/core/locale/nl_NL/LC_MESSAGES/django.mo index 88e38f82..7e9107b9 100644 Binary files a/core/locale/nl_NL/LC_MESSAGES/django.mo and b/core/locale/nl_NL/LC_MESSAGES/django.mo differ diff --git a/core/locale/nl_NL/LC_MESSAGES/django.po b/core/locale/nl_NL/LC_MESSAGES/django.po index 50561dcd..f074b693 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -49,82 +49,86 @@ msgstr "Gewijzigd" msgid "when the object was last modified" msgstr "Wanneer het object voor het laatst bewerkt is" -#: core/admin.py:63 +#: core/admin.py:68 msgid "translations" msgstr "Vertalingen" -#: core/admin.py:67 +#: core/admin.py:72 msgid "general" msgstr "Algemeen" -#: core/admin.py:69 +#: core/admin.py:74 msgid "relations" msgstr "Relaties" -#: core/admin.py:87 +#: core/admin.py:76 +msgid "additional info" +msgstr "extra informatie" + +#: core/admin.py:94 msgid "metadata" msgstr "Metagegevens" -#: core/admin.py:94 +#: core/admin.py:101 msgid "timestamps" msgstr "Tijdstempels" -#: core/admin.py:109 +#: core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Activeer geselecteerde %(verbose_name_plural)s" -#: core/admin.py:114 +#: core/admin.py:121 msgid "selected items have been activated." msgstr "Geselecteerde items zijn geactiveerd!" -#: core/admin.py:120 +#: core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Deactiveer geselecteerd %(verbose_name_plural)s" -#: core/admin.py:125 +#: core/admin.py:132 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:701 core/models.py:709 +#: core/admin.py:144 core/graphene/object_types.py:609 +#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 msgid "attribute value" msgstr "Attribuut Waarde" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 +#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718 msgid "attribute values" msgstr "Attribuutwaarden" -#: core/admin.py:146 +#: core/admin.py:153 msgid "image" msgstr "Afbeelding" -#: core/admin.py:147 core/graphene/object_types.py:501 +#: core/admin.py:154 core/graphene/object_types.py:501 msgid "images" msgstr "Afbeeldingen" -#: core/admin.py:155 core/models.py:459 +#: core/admin.py:162 core/models.py:467 msgid "stock" msgstr "Voorraad" -#: core/admin.py:156 core/graphene/object_types.py:663 +#: core/admin.py:163 core/graphene/object_types.py:663 msgid "stocks" msgstr "Aandelen" -#: core/admin.py:166 core/models.py:1667 +#: core/admin.py:173 core/models.py:1675 msgid "order product" msgstr "Product bestellen" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 msgid "order products" msgstr "Producten bestellen" -#: core/admin.py:180 core/admin.py:181 +#: core/admin.py:187 core/admin.py:188 msgid "children" msgstr "Kinderen" -#: core/admin.py:566 +#: core/admin.py:940 msgid "Config" msgstr "Config" @@ -753,23 +757,23 @@ 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:118 core/elasticsearch/__init__.py:498 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 msgid "no search term provided." msgstr "Geen zoekterm opgegeven." -#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +#: core/filters.py:65 core/filters.py:399 core/filters.py:526 msgid "Search" msgstr "Zoek op" -#: core/filters.py:66 core/filters.py:554 core/filters.py:583 +#: core/filters.py:66 core/filters.py:556 core/filters.py:585 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:399 core/filters.py:526 +#: core/filters.py:67 core/filters.py:401 core/filters.py:528 msgid "Name" msgstr "Naam" -#: core/filters.py:68 core/filters.py:528 +#: core/filters.py:68 core/filters.py:530 msgid "Categories" msgstr "Categorieën" @@ -777,7 +781,7 @@ msgstr "Categorieën" msgid "Categories Slugs" msgstr "Categorieën Naaktslakken" -#: core/filters.py:71 core/filters.py:407 +#: core/filters.py:71 core/filters.py:409 msgid "Tags" msgstr "Tags" @@ -805,8 +809,8 @@ msgstr "Attributen" msgid "Quantity" msgstr "Hoeveelheid" -#: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:301 core/models.py:383 core/models.py:536 +#: core/filters.py:78 core/filters.py:403 core/filters.py:529 +#: core/models.py:309 core/models.py:391 core/models.py:544 msgid "Slug" msgstr "Slak" @@ -822,7 +826,7 @@ msgstr "Subcategorieën opnemen" msgid "Include personal ordered" msgstr "Inclusief persoonlijk bestelde producten" -#: core/filters.py:85 core/models.py:540 +#: core/filters.py:85 core/models.py:548 msgid "SKU" msgstr "SKU" @@ -831,48 +835,48 @@ 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:324 +#: core/filters.py:326 msgid "Search (ID, product name or part number)" msgstr "Zoeken (ID, productnaam of onderdeelnummer)" -#: core/filters.py:327 +#: core/filters.py:329 msgid "Bought after (inclusive)" msgstr "Gekocht na (inclusief)" -#: core/filters.py:328 +#: core/filters.py:330 msgid "Bought before (inclusive)" msgstr "Eerder gekocht (inclusief)" -#: core/filters.py:331 core/filters.py:378 core/filters.py:585 +#: core/filters.py:333 core/filters.py:380 core/filters.py:587 msgid "User email" msgstr "E-mail gebruiker" -#: core/filters.py:332 core/filters.py:379 core/filters.py:563 -#: core/filters.py:584 +#: core/filters.py:334 core/filters.py:381 core/filters.py:565 +#: core/filters.py:586 msgid "User UUID" msgstr "Gebruiker UUID" -#: core/filters.py:333 +#: core/filters.py:335 msgid "Status" msgstr "Status" -#: core/filters.py:337 +#: core/filters.py:339 msgid "Human Readable ID" msgstr "Menselijk leesbare ID" -#: core/filters.py:400 +#: core/filters.py:402 msgid "Parent" msgstr "Ouder" -#: core/filters.py:404 +#: core/filters.py:406 msgid "Whole category(has at least 1 product or not)" msgstr "Hele categorie (heeft minstens 1 product of niet)" -#: core/filters.py:408 +#: core/filters.py:410 msgid "Level" msgstr "Niveau" -#: core/filters.py:558 +#: core/filters.py:560 msgid "Product UUID" msgstr "Product UUID" @@ -927,7 +931,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:679 +#: core/graphene/mutations.py:527 core/viewsets.py:680 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Verkeerd type kwam uit order.buy() methode: {type(instance)!s}" @@ -1002,9 +1006,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:849 core/models.py:862 -#: core/models.py:1281 core/models.py:1310 core/models.py:1335 -#: core/viewsets.py:682 +#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 +#: core/models.py:1289 core/models.py:1318 core/models.py:1343 +#: core/viewsets.py:683 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} bestaat niet: {uuid}!" @@ -1018,8 +1022,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:672 core/models.py:1144 -#: core/models.py:1744 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 +#: core/models.py:1752 msgid "attributes" msgstr "Attributen" @@ -1032,11 +1036,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:326 core/models.py:626 +#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 msgid "categories" msgstr "Categorieën" -#: core/graphene/object_types.py:124 core/models.py:397 +#: core/graphene/object_types.py:124 core/models.py:405 msgid "brands" msgstr "Merken" @@ -1045,7 +1049,7 @@ msgid "category image url" msgstr "Categorieën" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:263 +#: core/models.py:271 msgid "markup percentage" msgstr "Opwaarderingspercentage" @@ -1070,7 +1074,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:169 +#: core/graphene/object_types.py:351 core/models.py:177 msgid "vendors" msgstr "Verkopers" @@ -1095,7 +1099,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:1138 +#: core/models.py:1146 msgid "notifications" msgstr "Meldingen" @@ -1103,7 +1107,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:1860 +#: core/graphene/object_types.py:400 core/models.py:1868 msgid "feedback" msgstr "Feedback" @@ -1111,7 +1115,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:1108 +#: core/graphene/object_types.py:436 core/models.py:1116 msgid "billing address" msgstr "Factuuradres" @@ -1139,7 +1143,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:1172 +#: core/graphene/object_types.py:465 core/models.py:1180 msgid "orders" msgstr "Bestellingen" @@ -1151,19 +1155,19 @@ msgstr "Afbeelding URL" msgid "product's images" msgstr "Afbeeldingen van het product" -#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 +#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 msgid "category" msgstr "Categorie" -#: core/graphene/object_types.py:502 core/models.py:1861 +#: core/graphene/object_types.py:502 core/models.py:1869 msgid "feedbacks" msgstr "Reacties" -#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 +#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 msgid "brand" msgstr "Merk" -#: core/graphene/object_types.py:504 core/models.py:101 +#: core/graphene/object_types.py:504 core/models.py:102 msgid "attribute groups" msgstr "Attribuutgroepen" @@ -1191,7 +1195,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:550 +#: core/graphene/object_types.py:534 core/models.py:558 msgid "products" msgstr "Producten" @@ -1203,15 +1207,15 @@ msgstr "Promocodes" msgid "products on sale" msgstr "Producten te koop" -#: core/graphene/object_types.py:651 core/models.py:798 +#: core/graphene/object_types.py:651 core/models.py:806 msgid "promotions" msgstr "Promoties" -#: core/graphene/object_types.py:655 core/models.py:168 +#: core/graphene/object_types.py:655 core/models.py:176 msgid "vendor" msgstr "Verkoper" -#: core/graphene/object_types.py:656 core/models.py:549 +#: core/graphene/object_types.py:656 core/models.py:557 #: 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 +1223,11 @@ msgstr "Verkoper" msgid "product" msgstr "Product" -#: core/graphene/object_types.py:667 core/models.py:821 +#: core/graphene/object_types.py:667 core/models.py:829 msgid "wishlisted products" msgstr "Gewenste producten" -#: core/graphene/object_types.py:673 core/models.py:838 +#: core/graphene/object_types.py:673 core/models.py:846 msgid "wishlists" msgstr "Verlanglijst" @@ -1231,7 +1235,7 @@ msgstr "Verlanglijst" msgid "tagged products" msgstr "Getagde producten" -#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 +#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 msgid "product tags" msgstr "Product tags" @@ -1318,7 +1322,7 @@ msgstr "Producten zoekresultaten" msgid "posts search results" msgstr "Zoekresultaten" -#: core/models.py:70 +#: core/models.py:71 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1331,23 +1335,23 @@ msgstr "" "hiërarchische structuur vormt. Dit kan nuttig zijn voor het categoriseren en" " effectiever beheren van attributen in een complex systeem." -#: core/models.py:86 +#: core/models.py:87 msgid "parent of this group" msgstr "Ouder van deze groep" -#: core/models.py:87 +#: core/models.py:88 msgid "parent attribute group" msgstr "Ouderattribuutgroep" -#: core/models.py:91 core/models.py:92 +#: core/models.py:92 core/models.py:93 msgid "attribute group's name" msgstr "Naam attribuutgroep" -#: core/models.py:100 core/models.py:634 +#: core/models.py:101 core/models.py:642 msgid "attribute group" msgstr "Attribuutgroep" -#: core/models.py:106 +#: core/models.py:107 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1366,34 +1370,42 @@ msgstr "" "metadata en beperkingen, waardoor het geschikt is voor gebruik in systemen " "die communiceren met externe verkopers." -#: core/models.py:119 +#: core/models.py:120 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Slaat referenties en eindpunten op die vereist zijn voor API-communicatie " "van de verkoper" -#: core/models.py:120 +#: core/models.py:121 msgid "authentication info" msgstr "Authenticatie-info" -#: core/models.py:125 +#: core/models.py:126 msgid "define the markup for products retrieved from this vendor" msgstr "" "Definieer de opmaak voor producten die zijn opgehaald bij deze leverancier" -#: core/models.py:126 +#: core/models.py:127 msgid "vendor markup percentage" msgstr "Verkoper winstpercentage" -#: core/models.py:130 +#: core/models.py:131 msgid "name of this vendor" msgstr "Naam van deze verkoper" -#: core/models.py:131 +#: core/models.py:132 msgid "vendor name" msgstr "Naam verkoper" -#: core/models.py:177 +#: core/models.py:143 +msgid "response file" +msgstr "responsbestand" + +#: core/models.py:144 +msgid "vendor's last processing response" +msgstr "laatste verwerkingsreactie van verkoper" + +#: core/models.py:185 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1408,27 +1420,27 @@ msgstr "" "ondersteunt bewerkingen die geëxporteerd worden door mixins en biedt " "aanpassing van metadata voor administratieve doeleinden." -#: core/models.py:189 core/models.py:220 +#: core/models.py:197 core/models.py:228 msgid "internal tag identifier for the product tag" msgstr "Interne tagidentifier voor de producttag" -#: core/models.py:190 core/models.py:221 +#: core/models.py:198 core/models.py:229 msgid "tag name" msgstr "Tag naam" -#: core/models.py:194 core/models.py:225 +#: core/models.py:202 core/models.py:233 msgid "user-friendly name for the product tag" msgstr "Gebruiksvriendelijke naam voor de producttag" -#: core/models.py:195 core/models.py:226 +#: core/models.py:203 core/models.py:234 msgid "tag display name" msgstr "Tag weergavenaam" -#: core/models.py:203 +#: core/models.py:211 msgid "product tag" msgstr "Productlabel" -#: core/models.py:209 +#: core/models.py:217 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 +1451,15 @@ msgstr "" "associëren en te classificeren. Ze bevat attributen voor een interne " "tagidentifier en een gebruiksvriendelijke weergavenaam." -#: core/models.py:234 +#: core/models.py:242 msgid "category tag" msgstr "categorie tag" -#: core/models.py:235 core/models.py:307 +#: core/models.py:243 core/models.py:315 msgid "category tags" msgstr "categorie tags" -#: core/models.py:240 +#: core/models.py:248 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1470,51 +1482,51 @@ msgstr "" " kunnen specificeren en attributen zoals afbeeldingen, tags of prioriteit " "kunnen toekennen." -#: core/models.py:254 +#: core/models.py:262 msgid "upload an image representing this category" msgstr "Upload een afbeelding die deze categorie vertegenwoordigt" -#: core/models.py:257 +#: core/models.py:265 msgid "category image" msgstr "Categorie afbeelding" -#: core/models.py:262 +#: core/models.py:270 msgid "define a markup percentage for products in this category" msgstr "Definieer een toeslagpercentage voor producten in deze categorie" -#: core/models.py:271 +#: core/models.py:279 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:272 +#: core/models.py:280 msgid "parent category" msgstr "Oudercategorie" -#: core/models.py:277 +#: core/models.py:285 msgid "category name" msgstr "Naam categorie" -#: core/models.py:278 +#: core/models.py:286 msgid "provide a name for this category" msgstr "Geef deze categorie een naam" -#: core/models.py:285 +#: core/models.py:293 msgid "add a detailed description for this category" msgstr "Voeg een gedetailleerde beschrijving toe voor deze categorie" -#: core/models.py:286 +#: core/models.py:294 msgid "category description" msgstr "Categorie beschrijving" -#: core/models.py:306 +#: core/models.py:314 msgid "tags that help describe or group this category" msgstr "tags die deze categorie helpen beschrijven of groeperen" -#: core/models.py:313 core/models.py:389 +#: core/models.py:321 core/models.py:397 msgid "priority" msgstr "Prioriteit" -#: core/models.py:332 +#: core/models.py:340 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 +1540,47 @@ msgstr "" "prioriteitsvolgorde. Hiermee kunnen merkgerelateerde gegevens worden " "georganiseerd en weergegeven in de applicatie." -#: core/models.py:342 +#: core/models.py:350 msgid "name of this brand" msgstr "Naam van dit merk" -#: core/models.py:343 +#: core/models.py:351 msgid "brand name" msgstr "Merknaam" -#: core/models.py:350 +#: core/models.py:358 msgid "upload a logo representing this brand" msgstr "Upload een logo dat dit merk vertegenwoordigt" -#: core/models.py:352 +#: core/models.py:360 msgid "brand small image" msgstr "Klein merkimago" -#: core/models.py:358 +#: core/models.py:366 msgid "upload a big logo representing this brand" msgstr "Upload een groot logo dat dit merk vertegenwoordigt" -#: core/models.py:360 +#: core/models.py:368 msgid "brand big image" msgstr "Groot merkimago" -#: core/models.py:365 +#: core/models.py:373 msgid "add a detailed description of the brand" msgstr "Een gedetailleerde beschrijving van het merk toevoegen" -#: core/models.py:366 +#: core/models.py:374 msgid "brand description" msgstr "Merknaam" -#: core/models.py:371 +#: core/models.py:379 msgid "optional categories that this brand is associated with" msgstr "Optionele categorieën waarmee dit merk wordt geassocieerd" -#: core/models.py:372 +#: core/models.py:380 msgid "associated categories" msgstr "Categorieën" -#: core/models.py:402 +#: core/models.py:410 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 +1597,68 @@ msgstr "" "evalueren van beschikbare producten van verschillende leveranciers mogelijk " "te maken." -#: core/models.py:414 +#: core/models.py:422 msgid "the vendor supplying this product stock" msgstr "De verkoper die dit product levert" -#: core/models.py:415 +#: core/models.py:423 msgid "associated vendor" msgstr "Geassocieerde verkoper" -#: core/models.py:419 +#: core/models.py:427 msgid "final price to the customer after markups" msgstr "Eindprijs voor de klant na winstmarges" -#: core/models.py:420 +#: core/models.py:428 msgid "selling price" msgstr "Verkoopprijs" -#: core/models.py:425 +#: core/models.py:433 msgid "the product associated with this stock entry" msgstr "Het product dat bij deze voorraadvermelding hoort" -#: core/models.py:426 core/models.py:697 core/models.py:744 -#: core/models.py:1641 +#: core/models.py:434 core/models.py:705 core/models.py:752 +#: core/models.py:1649 msgid "associated product" msgstr "Bijbehorend product" -#: core/models.py:433 +#: core/models.py:441 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:434 +#: core/models.py:442 msgid "vendor purchase price" msgstr "Aankoopprijs verkoper" -#: core/models.py:438 +#: core/models.py:446 msgid "available quantity of the product in stock" msgstr "Beschikbare hoeveelheid van het product in voorraad" -#: core/models.py:439 +#: core/models.py:447 msgid "quantity in stock" msgstr "Hoeveelheid op voorraad" -#: core/models.py:443 +#: core/models.py:451 msgid "vendor-assigned SKU for identifying the product" msgstr "Door de verkoper toegewezen SKU om het product te identificeren" -#: core/models.py:444 +#: core/models.py:452 msgid "vendor sku" msgstr "Verkoper SKU" -#: core/models.py:450 +#: core/models.py:458 msgid "digital file associated with this stock if applicable" msgstr "Digitaal bestand gekoppeld aan deze voorraad indien van toepassing" -#: core/models.py:451 +#: core/models.py:459 msgid "digital file" msgstr "Digitaal bestand" -#: core/models.py:460 +#: core/models.py:468 msgid "stock entries" msgstr "Voorraadboekingen" -#: core/models.py:465 +#: core/models.py:473 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1667,55 +1679,55 @@ msgstr "" "verbeteren. Het wordt gebruikt om productgegevens en de bijbehorende " "informatie te definiëren en te manipuleren binnen een applicatie." -#: core/models.py:478 +#: core/models.py:486 msgid "category this product belongs to" msgstr "Categorie waartoe dit product behoort" -#: core/models.py:487 +#: core/models.py:495 msgid "optionally associate this product with a brand" msgstr "Dit product optioneel koppelen aan een merk" -#: core/models.py:493 +#: core/models.py:501 msgid "tags that help describe or group this product" msgstr "Tags die dit product helpen beschrijven of groeperen" -#: core/models.py:498 +#: core/models.py:506 msgid "indicates whether this product is digitally delivered" msgstr "Geeft aan of dit product digitaal wordt geleverd" -#: core/models.py:499 +#: core/models.py:507 msgid "is product digital" msgstr "Is product digitaal" -#: core/models.py:505 +#: core/models.py:513 msgid "provide a clear identifying name for the product" msgstr "Zorg voor een duidelijke identificerende naam voor het product" -#: core/models.py:506 +#: core/models.py:514 msgid "product name" msgstr "Naam product" -#: core/models.py:511 core/models.py:786 +#: core/models.py:519 core/models.py:794 msgid "add a detailed description of the product" msgstr "Voeg een gedetailleerde beschrijving van het product toe" -#: core/models.py:512 +#: core/models.py:520 msgid "product description" msgstr "Productbeschrijving" -#: core/models.py:519 +#: core/models.py:527 msgid "part number for this product" msgstr "Onderdeelnummer voor dit product" -#: core/models.py:520 +#: core/models.py:528 msgid "part number" msgstr "Onderdeelnummer" -#: core/models.py:539 +#: core/models.py:547 msgid "stock keeping unit for this product" msgstr "Voorraadhoudende eenheid voor dit product" -#: core/models.py:613 +#: core/models.py:621 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 +1744,70 @@ msgstr "" "boolean, array en object. Dit maakt dynamische en flexibele " "gegevensstructurering mogelijk." -#: core/models.py:625 +#: core/models.py:633 msgid "category of this attribute" msgstr "Categorie van dit kenmerk" -#: core/models.py:633 +#: core/models.py:641 msgid "group of this attribute" msgstr "Groep van dit kenmerk" -#: core/models.py:639 +#: core/models.py:647 msgid "string" msgstr "String" -#: core/models.py:640 +#: core/models.py:648 msgid "integer" msgstr "Integer" -#: core/models.py:641 +#: core/models.py:649 msgid "float" msgstr "Vlotter" -#: core/models.py:642 +#: core/models.py:650 msgid "boolean" msgstr "Booleaans" -#: core/models.py:643 +#: core/models.py:651 msgid "array" msgstr "Array" -#: core/models.py:644 +#: core/models.py:652 msgid "object" msgstr "Object" -#: core/models.py:646 +#: core/models.py:654 msgid "type of the attribute's value" msgstr "Type waarde van het kenmerk" -#: core/models.py:647 +#: core/models.py:655 msgid "value type" msgstr "Waardetype" -#: core/models.py:652 +#: core/models.py:660 msgid "name of this attribute" msgstr "Naam van dit kenmerk" -#: core/models.py:653 +#: core/models.py:661 msgid "attribute's name" msgstr "Naam attribuut" -#: core/models.py:659 +#: core/models.py:667 msgid "is filterable" msgstr "kan worden gefilterd" -#: core/models.py:660 +#: core/models.py:668 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:671 core/models.py:689 +#: core/models.py:679 core/models.py:697 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attribuut" -#: core/models.py:677 +#: core/models.py:685 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 +1818,19 @@ msgstr "" "betere organisatie en dynamische weergave van productkenmerken mogelijk " "maakt." -#: core/models.py:688 +#: core/models.py:696 msgid "attribute of this value" msgstr "Attribuut van deze waarde" -#: core/models.py:696 +#: core/models.py:704 msgid "the specific product associated with this attribute's value" msgstr "Het specifieke product geassocieerd met de waarde van dit kenmerk" -#: core/models.py:702 +#: core/models.py:710 msgid "the specific value for this attribute" msgstr "De specifieke waarde voor dit kenmerk" -#: core/models.py:715 +#: core/models.py:723 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 +1845,39 @@ msgstr "" "weergavevolgorde te bepalen. Het bevat ook een toegankelijkheidsfunctie met " "alternatieve tekst voor de afbeeldingen." -#: core/models.py:726 +#: core/models.py:734 msgid "provide alternative text for the image for accessibility" msgstr "Geef alternatieve tekst voor de afbeelding voor toegankelijkheid" -#: core/models.py:727 +#: core/models.py:735 msgid "image alt text" msgstr "Alt-tekst afbeelding" -#: core/models.py:730 +#: core/models.py:738 msgid "upload the image file for this product" msgstr "Upload het afbeeldingsbestand voor dit product" -#: core/models.py:731 core/models.py:756 +#: core/models.py:739 core/models.py:764 msgid "product image" msgstr "Product afbeelding" -#: core/models.py:737 +#: core/models.py:745 msgid "determines the order in which images are displayed" msgstr "Bepaalt de volgorde waarin afbeeldingen worden weergegeven" -#: core/models.py:738 +#: core/models.py:746 msgid "display priority" msgstr "Prioriteit weergeven" -#: core/models.py:743 +#: core/models.py:751 msgid "the product that this image represents" msgstr "Het product dat deze afbeelding vertegenwoordigt" -#: core/models.py:757 +#: core/models.py:765 msgid "product images" msgstr "Product afbeeldingen" -#: core/models.py:762 +#: core/models.py:770 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 +1894,39 @@ msgstr "" "integreert met de productcatalogus om de betreffende artikelen in de " "campagne te bepalen." -#: core/models.py:774 +#: core/models.py:782 msgid "percentage discount for the selected products" msgstr "Kortingspercentage voor de geselecteerde producten" -#: core/models.py:775 +#: core/models.py:783 msgid "discount percentage" msgstr "Kortingspercentage" -#: core/models.py:780 +#: core/models.py:788 msgid "provide a unique name for this promotion" msgstr "Geef deze promotie een unieke naam" -#: core/models.py:781 +#: core/models.py:789 msgid "promotion name" msgstr "Naam promotie" -#: core/models.py:787 +#: core/models.py:795 msgid "promotion description" msgstr "Promotie beschrijving" -#: core/models.py:792 +#: core/models.py:800 msgid "select which products are included in this promotion" msgstr "Selecteer welke producten onder deze promotie vallen" -#: core/models.py:793 +#: core/models.py:801 msgid "included products" msgstr "Meegeleverde producten" -#: core/models.py:797 +#: core/models.py:805 msgid "promotion" msgstr "Promotie" -#: core/models.py:808 +#: core/models.py:816 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 +1939,23 @@ msgstr "" "toevoegen en verwijderen van producten, maar ook bewerkingen voor het " "toevoegen en verwijderen van meerdere producten tegelijk." -#: core/models.py:820 +#: core/models.py:828 msgid "products that the user has marked as wanted" msgstr "Producten die de gebruiker als gewenst heeft gemarkeerd" -#: core/models.py:828 +#: core/models.py:836 msgid "user who owns this wishlist" msgstr "Gebruiker die eigenaar is van deze verlanglijst" -#: core/models.py:829 +#: core/models.py:837 msgid "wishlist owner" msgstr "Eigenaar verlanglijstje" -#: core/models.py:837 +#: core/models.py:845 msgid "wishlist" msgstr "Verlanglijst" -#: core/models.py:879 +#: core/models.py:887 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1960,19 +1972,19 @@ msgstr "" "Het breidt functionaliteit uit van specifieke mixins en biedt extra " "aangepaste functies." -#: core/models.py:892 +#: core/models.py:900 msgid "documentary" msgstr "Documentaire" -#: core/models.py:893 +#: core/models.py:901 msgid "documentaries" msgstr "Documentaires" -#: core/models.py:903 +#: core/models.py:911 msgid "unresolved" msgstr "Onopgelost" -#: core/models.py:908 +#: core/models.py:916 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1993,59 +2005,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:923 +#: core/models.py:931 msgid "address line for the customer" msgstr "Adresregel voor de klant" -#: core/models.py:924 +#: core/models.py:932 msgid "address line" msgstr "Adresregel" -#: core/models.py:926 +#: core/models.py:934 msgid "street" msgstr "Straat" -#: core/models.py:927 +#: core/models.py:935 msgid "district" msgstr "District" -#: core/models.py:928 +#: core/models.py:936 msgid "city" msgstr "Stad" -#: core/models.py:929 +#: core/models.py:937 msgid "region" msgstr "Regio" -#: core/models.py:930 +#: core/models.py:938 msgid "postal code" msgstr "Postcode" -#: core/models.py:931 +#: core/models.py:939 msgid "country" msgstr "Land" -#: core/models.py:938 +#: core/models.py:946 msgid "geolocation point: (longitude, latitude)" msgstr "Geolocatie Punt (lengtegraad, breedtegraad)" -#: core/models.py:941 +#: core/models.py:949 msgid "full JSON response from geocoder for this address" msgstr "Volledig JSON-antwoord van geocoder voor dit adres" -#: core/models.py:946 +#: core/models.py:954 msgid "stored JSON response from the geocoding service" msgstr "Opgeslagen JSON-antwoord van de geocoderingsservice" -#: core/models.py:954 +#: core/models.py:962 msgid "address" msgstr "Adres" -#: core/models.py:955 +#: core/models.py:963 msgid "addresses" msgstr "Adressen" -#: core/models.py:967 +#: core/models.py:975 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 +2075,76 @@ msgstr "" "te valideren en toe te passen op een bestelling, waarbij ervoor wordt " "gezorgd dat aan de beperkingen wordt voldaan." -#: core/models.py:981 +#: core/models.py:989 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:982 +#: core/models.py:990 msgid "promo code identifier" msgstr "Promo code identificatie" -#: core/models.py:989 +#: core/models.py:997 msgid "fixed discount amount applied if percent is not used" msgstr "" "Vast kortingsbedrag dat wordt toegepast als percentage niet wordt gebruikt" -#: core/models.py:990 +#: core/models.py:998 msgid "fixed discount amount" msgstr "Vast kortingsbedrag" -#: core/models.py:996 +#: core/models.py:1004 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:997 +#: core/models.py:1005 msgid "percentage discount" msgstr "Kortingspercentage" -#: core/models.py:1002 +#: core/models.py:1010 msgid "timestamp when the promocode expires" msgstr "Tijdstempel wanneer de promocode verloopt" -#: core/models.py:1003 +#: core/models.py:1011 msgid "end validity time" msgstr "Geldigheidsduur einde" -#: core/models.py:1008 +#: core/models.py:1016 msgid "timestamp from which this promocode is valid" msgstr "Tijdstempel vanaf wanneer deze promocode geldig is" -#: core/models.py:1009 +#: core/models.py:1017 msgid "start validity time" msgstr "Begin geldigheidsduur" -#: core/models.py:1014 +#: core/models.py:1022 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:1015 +#: core/models.py:1023 msgid "usage timestamp" msgstr "Gebruik tijdstempel" -#: core/models.py:1020 +#: core/models.py:1028 msgid "user assigned to this promocode if applicable" msgstr "Gebruiker toegewezen aan deze promocode indien van toepassing" -#: core/models.py:1021 +#: core/models.py:1029 msgid "assigned user" msgstr "Toegewezen gebruiker" -#: core/models.py:1028 +#: core/models.py:1036 msgid "promo code" msgstr "Kortingscode" -#: core/models.py:1029 +#: core/models.py:1037 msgid "promo codes" msgstr "Actiecodes" -#: core/models.py:1044 +#: core/models.py:1052 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2140,16 +2152,16 @@ msgstr "" "Er moet slechts één type korting worden gedefinieerd (bedrag of percentage)," " maar niet beide of geen van beide." -#: core/models.py:1065 +#: core/models.py:1073 msgid "promocode already used" msgstr "Promocode is al gebruikt" -#: core/models.py:1081 +#: core/models.py:1089 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Ongeldig kortingstype voor promocode {self.uuid}!" -#: core/models.py:1090 +#: core/models.py:1098 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 +2179,141 @@ msgstr "" "bijgewerkt. De functionaliteit ondersteunt ook het beheer van de producten " "in de levenscyclus van de bestelling." -#: core/models.py:1107 +#: core/models.py:1115 msgid "the billing address used for this order" msgstr "Het factuuradres dat voor deze bestelling is gebruikt" -#: core/models.py:1115 +#: core/models.py:1123 msgid "optional promo code applied to this order" msgstr "Optionele promotiecode toegepast op deze bestelling" -#: core/models.py:1116 +#: core/models.py:1124 msgid "applied promo code" msgstr "Kortingscode toegepast" -#: core/models.py:1124 +#: core/models.py:1132 msgid "the shipping address used for this order" msgstr "Het verzendadres dat voor deze bestelling is gebruikt" -#: core/models.py:1125 +#: core/models.py:1133 msgid "shipping address" msgstr "Verzendadres" -#: core/models.py:1131 +#: core/models.py:1139 msgid "current status of the order in its lifecycle" msgstr "Huidige status van de order in zijn levenscyclus" -#: core/models.py:1132 +#: core/models.py:1140 msgid "order status" msgstr "Bestelstatus" -#: core/models.py:1137 core/models.py:1618 +#: core/models.py:1145 core/models.py:1626 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:1143 +#: core/models.py:1151 msgid "json representation of order attributes for this order" msgstr "JSON-weergave van bestelattributen voor deze bestelling" -#: core/models.py:1149 +#: core/models.py:1157 msgid "the user who placed the order" msgstr "De gebruiker die de bestelling heeft geplaatst" -#: core/models.py:1150 +#: core/models.py:1158 msgid "user" msgstr "Gebruiker" -#: core/models.py:1156 +#: core/models.py:1164 msgid "the timestamp when the order was finalized" msgstr "De tijdstempel waarop de bestelling is afgerond" -#: core/models.py:1157 +#: core/models.py:1165 msgid "buy time" msgstr "Tijd kopen" -#: core/models.py:1164 +#: core/models.py:1172 msgid "a human-readable identifier for the order" msgstr "Een menselijk leesbare identificatiecode voor de bestelling" -#: core/models.py:1165 +#: core/models.py:1173 msgid "human readable id" msgstr "menselijk leesbare ID" -#: core/models.py:1171 +#: core/models.py:1179 msgid "order" msgstr "Bestel" -#: core/models.py:1209 +#: core/models.py:1217 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:1249 +#: core/models.py:1257 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:1254 +#: core/models.py:1262 msgid "you cannot add inactive products to order" msgstr "U kunt geen inactieve producten toevoegen aan uw bestelling" -#: core/models.py:1271 +#: core/models.py:1279 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:1293 core/models.py:1318 core/models.py:1326 +#: core/models.py:1301 core/models.py:1326 core/models.py:1334 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:1314 +#: core/models.py:1322 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} bestaat niet met query <{query}>!" -#: core/models.py:1346 +#: core/models.py:1354 msgid "promocode does not exist" msgstr "Promocode bestaat niet" -#: core/models.py:1352 +#: core/models.py:1360 msgid "you can only buy physical products with shipping address specified" msgstr "Je kunt alleen fysieke producten kopen met opgegeven verzendadres!" -#: core/models.py:1371 +#: core/models.py:1379 msgid "address does not exist" msgstr "Adres bestaat niet" -#: core/models.py:1392 core/models.py:1461 +#: core/models.py:1400 core/models.py:1469 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:1395 core/models.py:1457 +#: core/models.py:1403 core/models.py:1465 msgid "invalid force value" msgstr "Ongeldige krachtwaarde" -#: core/models.py:1401 core/models.py:1464 +#: core/models.py:1409 core/models.py:1472 msgid "you cannot purchase an empty order!" msgstr "Je kunt geen lege bestelling kopen!" -#: core/models.py:1420 +#: core/models.py:1428 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:1434 +#: core/models.py:1442 msgid "a user without a balance cannot buy with balance" msgstr "Een gebruiker zonder saldo kan niet kopen met saldo!" -#: core/models.py:1439 +#: core/models.py:1447 msgid "insufficient funds to complete the order" msgstr "Onvoldoende fondsen om de bestelling te voltooien" -#: core/models.py:1473 +#: core/models.py:1481 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2309,7 +2321,7 @@ msgstr "" "u niet kunt kopen zonder registratie, geef dan de volgende informatie: " "klantnaam, e-mail klant, telefoonnummer klant" -#: core/models.py:1482 +#: core/models.py:1490 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2317,7 +2329,7 @@ msgstr "" "Ongeldige betalingsmethode: {payment_method} van " "{available_payment_methods}!" -#: core/models.py:1591 +#: core/models.py:1599 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2340,110 +2352,110 @@ msgstr "" "digitale producten. Het model integreert met de modellen Order en Product en" " slaat een verwijzing ernaar op." -#: core/models.py:1606 +#: core/models.py:1614 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:1607 +#: core/models.py:1615 msgid "purchase price at order time" msgstr "Aankoopprijs bij bestelling" -#: core/models.py:1612 +#: core/models.py:1620 msgid "internal comments for admins about this ordered product" msgstr "Interne opmerkingen voor beheerders over dit bestelde product" -#: core/models.py:1613 +#: core/models.py:1621 msgid "internal comments" msgstr "Interne opmerkingen" -#: core/models.py:1619 +#: core/models.py:1627 msgid "user notifications" msgstr "Meldingen van gebruikers" -#: core/models.py:1624 +#: core/models.py:1632 msgid "json representation of this item's attributes" msgstr "JSON weergave van de attributen van dit item" -#: core/models.py:1625 +#: core/models.py:1633 msgid "ordered product attributes" msgstr "Geordende producteigenschappen" -#: core/models.py:1630 +#: core/models.py:1638 msgid "reference to the parent order that contains this product" msgstr "Verwijzing naar de bovenliggende bestelling die dit product bevat" -#: core/models.py:1631 +#: core/models.py:1639 msgid "parent order" msgstr "Ouderlijk bevel" -#: core/models.py:1640 +#: core/models.py:1648 msgid "the specific product associated with this order line" msgstr "Het specifieke product dat bij deze bestelregel hoort" -#: core/models.py:1647 +#: core/models.py:1655 msgid "quantity of this specific product in the order" msgstr "Hoeveelheid van dit specifieke product in de bestelling" -#: core/models.py:1648 +#: core/models.py:1656 msgid "product quantity" msgstr "Hoeveelheid product" -#: core/models.py:1655 +#: core/models.py:1663 msgid "current status of this product in the order" msgstr "Huidige status van dit product in de bestelling" -#: core/models.py:1656 +#: core/models.py:1664 msgid "product line status" msgstr "Status productlijn" -#: core/models.py:1719 +#: core/models.py:1727 msgid "order product must have an order" msgstr "Orderproduct moet een bijbehorende order hebben!" -#: core/models.py:1721 +#: core/models.py:1729 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Verkeerde actie opgegeven voor feedback: {action}!" -#: core/models.py:1735 +#: core/models.py:1743 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:1741 +#: core/models.py:1749 msgid "name" msgstr "Naam" -#: core/models.py:1742 +#: core/models.py:1750 msgid "URL of the integration" msgstr "URL van de integratie" -#: core/models.py:1743 +#: core/models.py:1751 msgid "authentication credentials" msgstr "Authenticatiegegevens" -#: core/models.py:1765 +#: core/models.py:1773 msgid "you can only have one default CRM provider" msgstr "Je kunt maar één standaard CRM-provider hebben" -#: core/models.py:1775 +#: core/models.py:1783 msgid "CRM" msgstr "CRM" -#: core/models.py:1776 +#: core/models.py:1784 msgid "CRMs" msgstr "CRM's" -#: core/models.py:1788 +#: core/models.py:1796 msgid "order CRM link" msgstr "CRM link van bestelling" -#: core/models.py:1789 +#: core/models.py:1797 msgid "orders CRM links" msgstr "CRM-koppelingen voor bestellingen" -#: core/models.py:1794 +#: core/models.py:1802 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2460,15 +2472,15 @@ msgstr "" "om een URL te genereren voor het downloaden van de activa wanneer de " "bijbehorende order een voltooide status heeft." -#: core/models.py:1808 +#: core/models.py:1816 msgid "download" msgstr "Downloaden" -#: core/models.py:1809 +#: core/models.py:1817 msgid "downloads" msgstr "Downloads" -#: core/models.py:1823 +#: core/models.py:1831 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2484,30 +2496,30 @@ msgstr "" "gebruikt databasevelden om feedbackgegevens effectief te modelleren en te " "beheren." -#: core/models.py:1835 +#: core/models.py:1843 msgid "user-provided comments about their experience with the product" msgstr "Opmerkingen van gebruikers over hun ervaring met het product" -#: core/models.py:1836 +#: core/models.py:1844 msgid "feedback comments" msgstr "Reacties" -#: core/models.py:1843 +#: core/models.py:1851 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:1844 +#: core/models.py:1852 msgid "related order product" msgstr "Gerelateerd product bestellen" -#: core/models.py:1849 +#: core/models.py:1857 msgid "user-assigned rating for the product" msgstr "Door de gebruiker toegekende waardering voor het product" -#: core/models.py:1850 +#: core/models.py:1858 msgid "product rating" msgstr "Productbeoordeling" @@ -2726,22 +2738,22 @@ msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "" "Ongeldige time-outwaarde, deze moet tussen 0 en 216000 seconden liggen" -#: core/utils/emailing.py:25 +#: core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | neem contact met ons op" -#: core/utils/emailing.py:74 +#: core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Orderbevestiging" -#: core/utils/emailing.py:109 +#: core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Bestelling afgeleverd" -#: core/utils/emailing.py:197 +#: core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | promocode toegekend" @@ -2995,7 +3007,7 @@ msgstr "" "implementeren. Het breidt de basis `EvibesViewSet` uit en maakt gebruik van " "Django's filtersysteem voor het opvragen van gegevens." -#: core/viewsets.py:593 +#: core/viewsets.py:594 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3015,7 +3027,7 @@ msgstr "" "gebaseerd op de specifieke actie die wordt uitgevoerd en dwingt " "dienovereenkomstig permissies af tijdens de interactie met ordergegevens." -#: core/viewsets.py:782 +#: core/viewsets.py:784 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3030,12 +3042,12 @@ msgstr "" " een gedetailleerde actie voor het afhandelen van feedback op OrderProduct " "instanties" -#: core/viewsets.py:833 +#: core/viewsets.py:835 msgid "Manages operations related to Product images in the application. " msgstr "" "Beheert bewerkingen met betrekking tot productafbeeldingen in de applicatie." -#: core/viewsets.py:845 +#: core/viewsets.py:847 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3043,16 +3055,16 @@ msgstr "" "Beheert het ophalen en afhandelen van PromoCode-instanties via verschillende" " API-acties." -#: core/viewsets.py:866 +#: core/viewsets.py:868 msgid "Represents a view set for managing promotions. " msgstr "Vertegenwoordigt een view set voor het beheren van promoties." -#: core/viewsets.py:878 +#: core/viewsets.py:880 msgid "Handles operations related to Stock data in the system." msgstr "" "Verwerkt bewerkingen met betrekking tot voorraadgegevens in het systeem." -#: core/viewsets.py:892 +#: core/viewsets.py:894 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3071,7 +3083,7 @@ msgstr "" "verlanglijstjes kunnen beheren, tenzij er expliciete toestemmingen zijn " "verleend." -#: core/viewsets.py:1007 +#: core/viewsets.py:1009 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3085,12 +3097,12 @@ msgstr "" "gespecialiseerde gedragingen voor verschillende HTTP methoden, serializer " "omzeilingen en toestemmingsafhandeling gebaseerd op de verzoekcontext." -#: core/viewsets.py:1074 +#: core/viewsets.py:1076 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Fout bij geocodering: {e}" -#: core/viewsets.py:1081 +#: core/viewsets.py:1083 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/no_NO/LC_MESSAGES/django.mo b/core/locale/no_NO/LC_MESSAGES/django.mo index 85d2ecda..ec8af072 100644 Binary files a/core/locale/no_NO/LC_MESSAGES/django.mo and b/core/locale/no_NO/LC_MESSAGES/django.mo differ diff --git a/core/locale/no_NO/LC_MESSAGES/django.po b/core/locale/no_NO/LC_MESSAGES/django.po index dccb8a47..0118e5c7 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-10-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -50,82 +50,86 @@ msgstr "Modifisert" msgid "when the object was last modified" msgstr "Når objektet sist ble redigert" -#: core/admin.py:63 +#: core/admin.py:68 msgid "translations" msgstr "Oversettelser" -#: core/admin.py:67 +#: core/admin.py:72 msgid "general" msgstr "Generelt" -#: core/admin.py:69 +#: core/admin.py:74 msgid "relations" msgstr "Relasjoner" -#: core/admin.py:87 +#: core/admin.py:76 +msgid "additional info" +msgstr "ytterligere informasjon" + +#: core/admin.py:94 msgid "metadata" msgstr "Metadata" -#: core/admin.py:94 +#: core/admin.py:101 msgid "timestamps" msgstr "Tidsstempler" -#: core/admin.py:109 +#: core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Aktiver valgt %(verbose_name_plural)s" -#: core/admin.py:114 +#: core/admin.py:121 msgid "selected items have been activated." msgstr "Utvalgte elementer har blitt aktivert!" -#: core/admin.py:120 +#: core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Deaktiver valgt %(verbose_name_plural)s" -#: core/admin.py:125 +#: core/admin.py:132 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:701 core/models.py:709 +#: core/admin.py:144 core/graphene/object_types.py:609 +#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 msgid "attribute value" msgstr "Attributtverdi" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 +#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718 msgid "attribute values" msgstr "Attributtverdier" -#: core/admin.py:146 +#: core/admin.py:153 msgid "image" msgstr "Bilde" -#: core/admin.py:147 core/graphene/object_types.py:501 +#: core/admin.py:154 core/graphene/object_types.py:501 msgid "images" msgstr "Bilder" -#: core/admin.py:155 core/models.py:459 +#: core/admin.py:162 core/models.py:467 msgid "stock" msgstr "Lager" -#: core/admin.py:156 core/graphene/object_types.py:663 +#: core/admin.py:163 core/graphene/object_types.py:663 msgid "stocks" msgstr "Aksjer" -#: core/admin.py:166 core/models.py:1667 +#: core/admin.py:173 core/models.py:1675 msgid "order product" msgstr "Bestill produkt" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 msgid "order products" msgstr "Bestill produkter" -#: core/admin.py:180 core/admin.py:181 +#: core/admin.py:187 core/admin.py:188 msgid "children" msgstr "Barn" -#: core/admin.py:566 +#: core/admin.py:940 msgid "Config" msgstr "Konfigurer" @@ -739,23 +743,23 @@ 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:118 core/elasticsearch/__init__.py:498 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 msgid "no search term provided." msgstr "Ingen søkeord oppgitt." -#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +#: core/filters.py:65 core/filters.py:399 core/filters.py:526 msgid "Search" msgstr "Søk" -#: core/filters.py:66 core/filters.py:554 core/filters.py:583 +#: core/filters.py:66 core/filters.py:556 core/filters.py:585 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:399 core/filters.py:526 +#: core/filters.py:67 core/filters.py:401 core/filters.py:528 msgid "Name" msgstr "Navn" -#: core/filters.py:68 core/filters.py:528 +#: core/filters.py:68 core/filters.py:530 msgid "Categories" msgstr "Kategorier" @@ -763,7 +767,7 @@ msgstr "Kategorier" msgid "Categories Slugs" msgstr "Kategorier Snegler" -#: core/filters.py:71 core/filters.py:407 +#: core/filters.py:71 core/filters.py:409 msgid "Tags" msgstr "Tagger" @@ -791,8 +795,8 @@ msgstr "Egenskaper" msgid "Quantity" msgstr "Antall" -#: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:301 core/models.py:383 core/models.py:536 +#: core/filters.py:78 core/filters.py:403 core/filters.py:529 +#: core/models.py:309 core/models.py:391 core/models.py:544 msgid "Slug" msgstr "Snegl" @@ -808,7 +812,7 @@ msgstr "Inkluder underkategorier" msgid "Include personal ordered" msgstr "Inkluder personlig bestilte produkter" -#: core/filters.py:85 core/models.py:540 +#: core/filters.py:85 core/models.py:548 msgid "SKU" msgstr "SKU" @@ -817,48 +821,48 @@ 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:324 +#: core/filters.py:326 msgid "Search (ID, product name or part number)" msgstr "Søk (ID, produktnavn eller delenummer)" -#: core/filters.py:327 +#: core/filters.py:329 msgid "Bought after (inclusive)" msgstr "Kjøpt etter (inklusive)" -#: core/filters.py:328 +#: core/filters.py:330 msgid "Bought before (inclusive)" msgstr "Kjøpt før (inkludert)" -#: core/filters.py:331 core/filters.py:378 core/filters.py:585 +#: core/filters.py:333 core/filters.py:380 core/filters.py:587 msgid "User email" msgstr "Brukerens e-post" -#: core/filters.py:332 core/filters.py:379 core/filters.py:563 -#: core/filters.py:584 +#: core/filters.py:334 core/filters.py:381 core/filters.py:565 +#: core/filters.py:586 msgid "User UUID" msgstr "Bruker UUID" -#: core/filters.py:333 +#: core/filters.py:335 msgid "Status" msgstr "Status" -#: core/filters.py:337 +#: core/filters.py:339 msgid "Human Readable ID" msgstr "Menneskelig lesbar ID" -#: core/filters.py:400 +#: core/filters.py:402 msgid "Parent" msgstr "Foreldre" -#: core/filters.py:404 +#: core/filters.py:406 msgid "Whole category(has at least 1 product or not)" msgstr "Hele kategorien (har minst 1 produkt eller ikke)" -#: core/filters.py:408 +#: core/filters.py:410 msgid "Level" msgstr "Nivå" -#: core/filters.py:558 +#: core/filters.py:560 msgid "Product UUID" msgstr "Produkt UUID" @@ -914,7 +918,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:679 +#: core/graphene/mutations.py:527 core/viewsets.py:680 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Feil type kom fra order.buy()-metoden: {type(instance)!s}" @@ -989,9 +993,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:849 core/models.py:862 -#: core/models.py:1281 core/models.py:1310 core/models.py:1335 -#: core/viewsets.py:682 +#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 +#: core/models.py:1289 core/models.py:1318 core/models.py:1343 +#: core/viewsets.py:683 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} eksisterer ikke: {uuid}!" @@ -1005,8 +1009,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:672 core/models.py:1144 -#: core/models.py:1744 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 +#: core/models.py:1752 msgid "attributes" msgstr "Egenskaper" @@ -1019,11 +1023,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:326 core/models.py:626 +#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 msgid "categories" msgstr "Kategorier" -#: core/graphene/object_types.py:124 core/models.py:397 +#: core/graphene/object_types.py:124 core/models.py:405 msgid "brands" msgstr "Merkevarer" @@ -1032,7 +1036,7 @@ msgid "category image url" msgstr "Kategorier" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:263 +#: core/models.py:271 msgid "markup percentage" msgstr "Påslag i prosent" @@ -1057,7 +1061,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:169 +#: core/graphene/object_types.py:351 core/models.py:177 msgid "vendors" msgstr "Leverandører" @@ -1082,7 +1086,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:1138 +#: core/models.py:1146 msgid "notifications" msgstr "Varsler" @@ -1090,7 +1094,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:1860 +#: core/graphene/object_types.py:400 core/models.py:1868 msgid "feedback" msgstr "Tilbakemeldinger" @@ -1098,7 +1102,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:1108 +#: core/graphene/object_types.py:436 core/models.py:1116 msgid "billing address" msgstr "Faktureringsadresse" @@ -1126,7 +1130,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:1172 +#: core/graphene/object_types.py:465 core/models.py:1180 msgid "orders" msgstr "Bestillinger" @@ -1138,19 +1142,19 @@ msgstr "Bilde-URL" msgid "product's images" msgstr "Bilder av produktet" -#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 +#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 msgid "category" msgstr "Kategori" -#: core/graphene/object_types.py:502 core/models.py:1861 +#: core/graphene/object_types.py:502 core/models.py:1869 msgid "feedbacks" msgstr "Tilbakemeldinger" -#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 +#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 msgid "brand" msgstr "Merkevare" -#: core/graphene/object_types.py:504 core/models.py:101 +#: core/graphene/object_types.py:504 core/models.py:102 msgid "attribute groups" msgstr "Attributtgrupper" @@ -1178,7 +1182,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:550 +#: core/graphene/object_types.py:534 core/models.py:558 msgid "products" msgstr "Produkter" @@ -1190,15 +1194,15 @@ msgstr "Promokoder" msgid "products on sale" msgstr "Produkter på salg" -#: core/graphene/object_types.py:651 core/models.py:798 +#: core/graphene/object_types.py:651 core/models.py:806 msgid "promotions" msgstr "Kampanjer" -#: core/graphene/object_types.py:655 core/models.py:168 +#: core/graphene/object_types.py:655 core/models.py:176 msgid "vendor" msgstr "Leverandør" -#: core/graphene/object_types.py:656 core/models.py:549 +#: core/graphene/object_types.py:656 core/models.py:557 #: 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 +1210,11 @@ msgstr "Leverandør" msgid "product" msgstr "Produkt" -#: core/graphene/object_types.py:667 core/models.py:821 +#: core/graphene/object_types.py:667 core/models.py:829 msgid "wishlisted products" msgstr "Produkter på ønskelisten" -#: core/graphene/object_types.py:673 core/models.py:838 +#: core/graphene/object_types.py:673 core/models.py:846 msgid "wishlists" msgstr "Ønskelister" @@ -1218,7 +1222,7 @@ msgstr "Ønskelister" msgid "tagged products" msgstr "Merkede produkter" -#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 +#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 msgid "product tags" msgstr "Produktmerker" @@ -1303,7 +1307,7 @@ msgstr "Søkeresultater for produkter" msgid "posts search results" msgstr "Søkeresultater for produkter" -#: core/models.py:70 +#: core/models.py:71 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1316,23 +1320,23 @@ msgstr "" "struktur. Dette kan være nyttig for å kategorisere og administrere " "attributter på en mer effektiv måte i et komplekst system." -#: core/models.py:86 +#: core/models.py:87 msgid "parent of this group" msgstr "Foreldre til denne gruppen" -#: core/models.py:87 +#: core/models.py:88 msgid "parent attribute group" msgstr "Overordnet attributtgruppe" -#: core/models.py:91 core/models.py:92 +#: core/models.py:92 core/models.py:93 msgid "attribute group's name" msgstr "Attributtgruppens navn" -#: core/models.py:100 core/models.py:634 +#: core/models.py:101 core/models.py:642 msgid "attribute group" msgstr "Attributtgruppe" -#: core/models.py:106 +#: core/models.py:107 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1351,33 +1355,41 @@ msgstr "" "som gjør den egnet for bruk i systemer som samhandler med " "tredjepartsleverandører." -#: core/models.py:119 +#: core/models.py:120 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Lagrer legitimasjon og endepunkter som kreves for leverandørens API-" "kommunikasjon" -#: core/models.py:120 +#: core/models.py:121 msgid "authentication info" msgstr "Autentiseringsinformasjon" -#: core/models.py:125 +#: core/models.py:126 msgid "define the markup for products retrieved from this vendor" msgstr "Definer påslag for produkter som hentes fra denne leverandøren" -#: core/models.py:126 +#: core/models.py:127 msgid "vendor markup percentage" msgstr "Leverandørens påslagsprosent" -#: core/models.py:130 +#: core/models.py:131 msgid "name of this vendor" msgstr "Navn på denne leverandøren" -#: core/models.py:131 +#: core/models.py:132 msgid "vendor name" msgstr "Leverandørens navn" -#: core/models.py:177 +#: core/models.py:143 +msgid "response file" +msgstr "svarfil" + +#: core/models.py:144 +msgid "vendor's last processing response" +msgstr "leverandørens siste behandlingssvar" + +#: core/models.py:185 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1392,27 +1404,27 @@ msgstr "" "operasjoner som eksporteres gjennom mixins, og gir metadatatilpasning for " "administrative formål." -#: core/models.py:189 core/models.py:220 +#: core/models.py:197 core/models.py:228 msgid "internal tag identifier for the product tag" msgstr "Intern tagg-identifikator for produkttaggen" -#: core/models.py:190 core/models.py:221 +#: core/models.py:198 core/models.py:229 msgid "tag name" msgstr "Tagg navn" -#: core/models.py:194 core/models.py:225 +#: core/models.py:202 core/models.py:233 msgid "user-friendly name for the product tag" msgstr "Brukervennlig navn for produkttaggen" -#: core/models.py:195 core/models.py:226 +#: core/models.py:203 core/models.py:234 msgid "tag display name" msgstr "Visningsnavn for taggen" -#: core/models.py:203 +#: core/models.py:211 msgid "product tag" msgstr "Produktmerke" -#: core/models.py:209 +#: core/models.py:217 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 +1435,15 @@ msgstr "" "produkter. Den inneholder attributter for en intern tagg-identifikator og et" " brukervennlig visningsnavn." -#: core/models.py:234 +#: core/models.py:242 msgid "category tag" msgstr "kategorimerke" -#: core/models.py:235 core/models.py:307 +#: core/models.py:243 core/models.py:315 msgid "category tags" msgstr "kategorikoder" -#: core/models.py:240 +#: core/models.py:248 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1453,51 +1465,51 @@ msgstr "" "spesifisere navn, beskrivelse og hierarki for kategoriene, samt tildele " "attributter som bilder, tagger eller prioritet." -#: core/models.py:254 +#: core/models.py:262 msgid "upload an image representing this category" msgstr "Last opp et bilde som representerer denne kategorien" -#: core/models.py:257 +#: core/models.py:265 msgid "category image" msgstr "Kategori bilde" -#: core/models.py:262 +#: core/models.py:270 msgid "define a markup percentage for products in this category" msgstr "Definer en påslagsprosent for produkter i denne kategorien" -#: core/models.py:271 +#: core/models.py:279 msgid "parent of this category to form a hierarchical structure" msgstr "Overordnet til denne kategorien for å danne en hierarkisk struktur" -#: core/models.py:272 +#: core/models.py:280 msgid "parent category" msgstr "Overordnet kategori" -#: core/models.py:277 +#: core/models.py:285 msgid "category name" msgstr "Navn på kategori" -#: core/models.py:278 +#: core/models.py:286 msgid "provide a name for this category" msgstr "Oppgi et navn for denne kategorien" -#: core/models.py:285 +#: core/models.py:293 msgid "add a detailed description for this category" msgstr "Legg til en detaljert beskrivelse for denne kategorien" -#: core/models.py:286 +#: core/models.py:294 msgid "category description" msgstr "Beskrivelse av kategori" -#: core/models.py:306 +#: core/models.py:314 msgid "tags that help describe or group this category" msgstr "tagger som bidrar til å beskrive eller gruppere denne kategorien" -#: core/models.py:313 core/models.py:389 +#: core/models.py:321 core/models.py:397 msgid "priority" msgstr "Prioritet" -#: core/models.py:332 +#: core/models.py:340 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 +1523,47 @@ msgstr "" "prioriteringsrekkefølge. Den gjør det mulig å organisere og representere " "merkerelaterte data i applikasjonen." -#: core/models.py:342 +#: core/models.py:350 msgid "name of this brand" msgstr "Navnet på dette merket" -#: core/models.py:343 +#: core/models.py:351 msgid "brand name" msgstr "Merkenavn" -#: core/models.py:350 +#: core/models.py:358 msgid "upload a logo representing this brand" msgstr "Last opp en logo som representerer dette varemerket" -#: core/models.py:352 +#: core/models.py:360 msgid "brand small image" msgstr "Merkevare lite image" -#: core/models.py:358 +#: core/models.py:366 msgid "upload a big logo representing this brand" msgstr "Last opp en stor logo som representerer dette varemerket" -#: core/models.py:360 +#: core/models.py:368 msgid "brand big image" msgstr "Merkevare med stort image" -#: core/models.py:365 +#: core/models.py:373 msgid "add a detailed description of the brand" msgstr "Legg til en detaljert beskrivelse av merket" -#: core/models.py:366 +#: core/models.py:374 msgid "brand description" msgstr "Varemerkebeskrivelse" -#: core/models.py:371 +#: core/models.py:379 msgid "optional categories that this brand is associated with" msgstr "Valgfrie kategorier som dette merket er assosiert med" -#: core/models.py:372 +#: core/models.py:380 msgid "associated categories" msgstr "Kategorier" -#: core/models.py:402 +#: core/models.py:410 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 +1579,68 @@ msgstr "" "lagerstyringssystemet for å muliggjøre sporing og evaluering av produkter " "som er tilgjengelige fra ulike leverandører." -#: core/models.py:414 +#: core/models.py:422 msgid "the vendor supplying this product stock" msgstr "Leverandøren som leverer dette produktet lagerfører" -#: core/models.py:415 +#: core/models.py:423 msgid "associated vendor" msgstr "Tilknyttet leverandør" -#: core/models.py:419 +#: core/models.py:427 msgid "final price to the customer after markups" msgstr "Sluttpris til kunden etter påslag" -#: core/models.py:420 +#: core/models.py:428 msgid "selling price" msgstr "Salgspris" -#: core/models.py:425 +#: core/models.py:433 msgid "the product associated with this stock entry" msgstr "Produktet som er knyttet til denne lagerposten" -#: core/models.py:426 core/models.py:697 core/models.py:744 -#: core/models.py:1641 +#: core/models.py:434 core/models.py:705 core/models.py:752 +#: core/models.py:1649 msgid "associated product" msgstr "Tilhørende produkt" -#: core/models.py:433 +#: core/models.py:441 msgid "the price paid to the vendor for this product" msgstr "Prisen som er betalt til leverandøren for dette produktet" -#: core/models.py:434 +#: core/models.py:442 msgid "vendor purchase price" msgstr "Leverandørens innkjøpspris" -#: core/models.py:438 +#: core/models.py:446 msgid "available quantity of the product in stock" msgstr "Tilgjengelig mengde av produktet på lager" -#: core/models.py:439 +#: core/models.py:447 msgid "quantity in stock" msgstr "Antall på lager" -#: core/models.py:443 +#: core/models.py:451 msgid "vendor-assigned SKU for identifying the product" msgstr "Leverandørens SKU for identifisering av produktet" -#: core/models.py:444 +#: core/models.py:452 msgid "vendor sku" msgstr "Leverandørens SKU" -#: core/models.py:450 +#: core/models.py:458 msgid "digital file associated with this stock if applicable" msgstr "Digital fil knyttet til denne aksjen, hvis aktuelt" -#: core/models.py:451 +#: core/models.py:459 msgid "digital file" msgstr "Digital fil" -#: core/models.py:460 +#: core/models.py:468 msgid "stock entries" msgstr "Lageroppføringer" -#: core/models.py:465 +#: core/models.py:473 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1649,55 +1661,55 @@ msgstr "" "ytelsen. Den brukes til å definere og manipulere produktdata og tilhørende " "informasjon i en applikasjon." -#: core/models.py:478 +#: core/models.py:486 msgid "category this product belongs to" msgstr "Kategori dette produktet tilhører" -#: core/models.py:487 +#: core/models.py:495 msgid "optionally associate this product with a brand" msgstr "Du kan eventuelt knytte dette produktet til et varemerke" -#: core/models.py:493 +#: core/models.py:501 msgid "tags that help describe or group this product" msgstr "Tagger som bidrar til å beskrive eller gruppere dette produktet" -#: core/models.py:498 +#: core/models.py:506 msgid "indicates whether this product is digitally delivered" msgstr "Angir om dette produktet leveres digitalt" -#: core/models.py:499 +#: core/models.py:507 msgid "is product digital" msgstr "Er produktet digitalt" -#: core/models.py:505 +#: core/models.py:513 msgid "provide a clear identifying name for the product" msgstr "Gi produktet et tydelig navn som identifiserer det" -#: core/models.py:506 +#: core/models.py:514 msgid "product name" msgstr "Produktnavn" -#: core/models.py:511 core/models.py:786 +#: core/models.py:519 core/models.py:794 msgid "add a detailed description of the product" msgstr "Legg til en detaljert beskrivelse av produktet" -#: core/models.py:512 +#: core/models.py:520 msgid "product description" msgstr "Produktbeskrivelse" -#: core/models.py:519 +#: core/models.py:527 msgid "part number for this product" msgstr "Delenummer for dette produktet" -#: core/models.py:520 +#: core/models.py:528 msgid "part number" msgstr "Delenummer" -#: core/models.py:539 +#: core/models.py:547 msgid "stock keeping unit for this product" msgstr "Lagerholdsenhet for dette produktet" -#: core/models.py:613 +#: core/models.py:621 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 +1725,70 @@ msgstr "" "float, boolsk, matrise og objekt. Dette gir mulighet for dynamisk og " "fleksibel datastrukturering." -#: core/models.py:625 +#: core/models.py:633 msgid "category of this attribute" msgstr "Kategori for dette attributtet" -#: core/models.py:633 +#: core/models.py:641 msgid "group of this attribute" msgstr "Gruppe av dette attributtet" -#: core/models.py:639 +#: core/models.py:647 msgid "string" msgstr "Streng" -#: core/models.py:640 +#: core/models.py:648 msgid "integer" msgstr "Heltall" -#: core/models.py:641 +#: core/models.py:649 msgid "float" msgstr "Flyter" -#: core/models.py:642 +#: core/models.py:650 msgid "boolean" msgstr "Boolsk" -#: core/models.py:643 +#: core/models.py:651 msgid "array" msgstr "Array" -#: core/models.py:644 +#: core/models.py:652 msgid "object" msgstr "Objekt" -#: core/models.py:646 +#: core/models.py:654 msgid "type of the attribute's value" msgstr "Type av attributtets verdi" -#: core/models.py:647 +#: core/models.py:655 msgid "value type" msgstr "Verditype" -#: core/models.py:652 +#: core/models.py:660 msgid "name of this attribute" msgstr "Navn på dette attributtet" -#: core/models.py:653 +#: core/models.py:661 msgid "attribute's name" msgstr "Attributtets navn" -#: core/models.py:659 +#: core/models.py:667 msgid "is filterable" msgstr "er filtrerbar" -#: core/models.py:660 +#: core/models.py:668 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:671 core/models.py:689 +#: core/models.py:679 core/models.py:697 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attributt" -#: core/models.py:677 +#: core/models.py:685 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 +1798,19 @@ msgstr "" "produkt. Den knytter \"attributtet\" til en unik \"verdi\", noe som gir " "bedre organisering og dynamisk representasjon av produktegenskaper." -#: core/models.py:688 +#: core/models.py:696 msgid "attribute of this value" msgstr "Attributt for denne verdien" -#: core/models.py:696 +#: core/models.py:704 msgid "the specific product associated with this attribute's value" msgstr "Det spesifikke produktet som er knyttet til dette attributtets verdi" -#: core/models.py:702 +#: core/models.py:710 msgid "the specific value for this attribute" msgstr "Den spesifikke verdien for dette attributtet" -#: core/models.py:715 +#: core/models.py:723 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 +1824,39 @@ msgstr "" "produkter og bestemme visningsrekkefølgen. Den inneholder også en " "tilgjengelighetsfunksjon med alternativ tekst for bildene." -#: core/models.py:726 +#: core/models.py:734 msgid "provide alternative text for the image for accessibility" msgstr "Gi alternativ tekst til bildet for tilgjengelighet" -#: core/models.py:727 +#: core/models.py:735 msgid "image alt text" msgstr "Alt-tekst til bilder" -#: core/models.py:730 +#: core/models.py:738 msgid "upload the image file for this product" msgstr "Last opp bildefilen for dette produktet" -#: core/models.py:731 core/models.py:756 +#: core/models.py:739 core/models.py:764 msgid "product image" msgstr "Produktbilde" -#: core/models.py:737 +#: core/models.py:745 msgid "determines the order in which images are displayed" msgstr "Bestemmer rekkefølgen bildene skal vises i" -#: core/models.py:738 +#: core/models.py:746 msgid "display priority" msgstr "Prioritet på skjermen" -#: core/models.py:743 +#: core/models.py:751 msgid "the product that this image represents" msgstr "Produktet som dette bildet representerer" -#: core/models.py:757 +#: core/models.py:765 msgid "product images" msgstr "Produktbilder" -#: core/models.py:762 +#: core/models.py:770 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 +1872,39 @@ msgstr "" "produktene. Den integreres med produktkatalogen for å finne de berørte " "varene i kampanjen." -#: core/models.py:774 +#: core/models.py:782 msgid "percentage discount for the selected products" msgstr "Prosentvis rabatt for de valgte produktene" -#: core/models.py:775 +#: core/models.py:783 msgid "discount percentage" msgstr "Rabattprosent" -#: core/models.py:780 +#: core/models.py:788 msgid "provide a unique name for this promotion" msgstr "Oppgi et unikt navn for denne kampanjen" -#: core/models.py:781 +#: core/models.py:789 msgid "promotion name" msgstr "Navn på kampanjen" -#: core/models.py:787 +#: core/models.py:795 msgid "promotion description" msgstr "Beskrivelse av kampanjen" -#: core/models.py:792 +#: core/models.py:800 msgid "select which products are included in this promotion" msgstr "Velg hvilke produkter som er inkludert i denne kampanjen" -#: core/models.py:793 +#: core/models.py:801 msgid "included products" msgstr "Inkluderte produkter" -#: core/models.py:797 +#: core/models.py:805 msgid "promotion" msgstr "Markedsføring" -#: core/models.py:808 +#: core/models.py:816 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 +1916,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:820 +#: core/models.py:828 msgid "products that the user has marked as wanted" msgstr "Produkter som brukeren har merket som ønsket" -#: core/models.py:828 +#: core/models.py:836 msgid "user who owns this wishlist" msgstr "Bruker som eier denne ønskelisten" -#: core/models.py:829 +#: core/models.py:837 msgid "wishlist owner" msgstr "Ønskelistens eier" -#: core/models.py:837 +#: core/models.py:845 msgid "wishlist" msgstr "Ønskeliste" -#: core/models.py:879 +#: core/models.py:887 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1936,19 +1948,19 @@ msgstr "" "utvider funksjonaliteten fra spesifikke mixins og tilbyr flere tilpassede " "funksjoner." -#: core/models.py:892 +#: core/models.py:900 msgid "documentary" msgstr "Dokumentarfilm" -#: core/models.py:893 +#: core/models.py:901 msgid "documentaries" msgstr "Dokumentarfilmer" -#: core/models.py:903 +#: core/models.py:911 msgid "unresolved" msgstr "Uavklart" -#: core/models.py:908 +#: core/models.py:916 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1969,59 +1981,59 @@ msgstr "" " å knytte en adresse til en bruker, noe som gjør det enklere å tilpasse " "datahåndteringen." -#: core/models.py:923 +#: core/models.py:931 msgid "address line for the customer" msgstr "Adresselinje for kunden" -#: core/models.py:924 +#: core/models.py:932 msgid "address line" msgstr "Adresselinje" -#: core/models.py:926 +#: core/models.py:934 msgid "street" msgstr "Gate" -#: core/models.py:927 +#: core/models.py:935 msgid "district" msgstr "Distrikt" -#: core/models.py:928 +#: core/models.py:936 msgid "city" msgstr "By" -#: core/models.py:929 +#: core/models.py:937 msgid "region" msgstr "Region" -#: core/models.py:930 +#: core/models.py:938 msgid "postal code" msgstr "Postnummer" -#: core/models.py:931 +#: core/models.py:939 msgid "country" msgstr "Land" -#: core/models.py:938 +#: core/models.py:946 msgid "geolocation point: (longitude, latitude)" msgstr "Geolokaliseringspunkt(lengdegrad, breddegrad)" -#: core/models.py:941 +#: core/models.py:949 msgid "full JSON response from geocoder for this address" msgstr "Fullstendig JSON-svar fra geokoderen for denne adressen" -#: core/models.py:946 +#: core/models.py:954 msgid "stored JSON response from the geocoding service" msgstr "Lagret JSON-svar fra geokodingstjenesten" -#: core/models.py:954 +#: core/models.py:962 msgid "address" msgstr "Adresse" -#: core/models.py:955 +#: core/models.py:963 msgid "addresses" msgstr "Adresser" -#: core/models.py:967 +#: core/models.py:975 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 +2050,73 @@ msgstr "" "kampanjekoden på en bestilling, samtidig som den sikrer at begrensningene er" " oppfylt." -#: core/models.py:981 +#: core/models.py:989 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:982 +#: core/models.py:990 msgid "promo code identifier" msgstr "Kampanjekode-identifikator" -#: core/models.py:989 +#: core/models.py:997 msgid "fixed discount amount applied if percent is not used" msgstr "Fast rabattbeløp som brukes hvis prosent ikke brukes" -#: core/models.py:990 +#: core/models.py:998 msgid "fixed discount amount" msgstr "Fast rabattbeløp" -#: core/models.py:996 +#: core/models.py:1004 msgid "percentage discount applied if fixed amount is not used" msgstr "Prosentvis rabatt hvis fast beløp ikke brukes" -#: core/models.py:997 +#: core/models.py:1005 msgid "percentage discount" msgstr "Prosentvis rabatt" -#: core/models.py:1002 +#: core/models.py:1010 msgid "timestamp when the promocode expires" msgstr "Tidsstempel for når kampanjekoden utløper" -#: core/models.py:1003 +#: core/models.py:1011 msgid "end validity time" msgstr "Slutt gyldighetstid" -#: core/models.py:1008 +#: core/models.py:1016 msgid "timestamp from which this promocode is valid" msgstr "Tidsstempel som denne kampanjekoden er gyldig fra" -#: core/models.py:1009 +#: core/models.py:1017 msgid "start validity time" msgstr "Start gyldighetstid" -#: core/models.py:1014 +#: core/models.py:1022 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:1015 +#: core/models.py:1023 msgid "usage timestamp" msgstr "Tidsstempel for bruk" -#: core/models.py:1020 +#: core/models.py:1028 msgid "user assigned to this promocode if applicable" msgstr "Bruker som er tilordnet denne kampanjekoden, hvis aktuelt" -#: core/models.py:1021 +#: core/models.py:1029 msgid "assigned user" msgstr "Tilordnet bruker" -#: core/models.py:1028 +#: core/models.py:1036 msgid "promo code" msgstr "Kampanjekode" -#: core/models.py:1029 +#: core/models.py:1037 msgid "promo codes" msgstr "Kampanjekoder" -#: core/models.py:1044 +#: core/models.py:1052 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2112,16 +2124,16 @@ msgstr "" "Bare én type rabatt skal defineres (beløp eller prosent), men ikke begge " "eller ingen av delene." -#: core/models.py:1065 +#: core/models.py:1073 msgid "promocode already used" msgstr "Promokoden har allerede blitt brukt" -#: core/models.py:1081 +#: core/models.py:1089 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Ugyldig rabattype for kampanjekode {self.uuid}!" -#: core/models.py:1090 +#: core/models.py:1098 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 +2150,140 @@ msgstr "" "kan oppdateres. På samme måte støtter funksjonaliteten håndtering av " "produktene i bestillingens livssyklus." -#: core/models.py:1107 +#: core/models.py:1115 msgid "the billing address used for this order" msgstr "Faktureringsadressen som brukes for denne bestillingen" -#: core/models.py:1115 +#: core/models.py:1123 msgid "optional promo code applied to this order" msgstr "Valgfri kampanjekode brukt på denne bestillingen" -#: core/models.py:1116 +#: core/models.py:1124 msgid "applied promo code" msgstr "Anvendt kampanjekode" -#: core/models.py:1124 +#: core/models.py:1132 msgid "the shipping address used for this order" msgstr "Leveringsadressen som brukes for denne bestillingen" -#: core/models.py:1125 +#: core/models.py:1133 msgid "shipping address" msgstr "Leveringsadresse" -#: core/models.py:1131 +#: core/models.py:1139 msgid "current status of the order in its lifecycle" msgstr "Ordrens nåværende status i livssyklusen" -#: core/models.py:1132 +#: core/models.py:1140 msgid "order status" msgstr "Order status" -#: core/models.py:1137 core/models.py:1618 +#: core/models.py:1145 core/models.py:1626 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:1143 +#: core/models.py:1151 msgid "json representation of order attributes for this order" msgstr "JSON-representasjon av ordreattributter for denne ordren" -#: core/models.py:1149 +#: core/models.py:1157 msgid "the user who placed the order" msgstr "Brukeren som har lagt inn bestillingen" -#: core/models.py:1150 +#: core/models.py:1158 msgid "user" msgstr "Bruker" -#: core/models.py:1156 +#: core/models.py:1164 msgid "the timestamp when the order was finalized" msgstr "Tidsstempel for når bestillingen ble fullført" -#: core/models.py:1157 +#: core/models.py:1165 msgid "buy time" msgstr "Kjøp tid" -#: core/models.py:1164 +#: core/models.py:1172 msgid "a human-readable identifier for the order" msgstr "En menneskelig lesbar identifikator for bestillingen" -#: core/models.py:1165 +#: core/models.py:1173 msgid "human readable id" msgstr "ID som kan leses av mennesker" -#: core/models.py:1171 +#: core/models.py:1179 msgid "order" msgstr "Bestilling" -#: core/models.py:1209 +#: core/models.py:1217 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:1249 +#: core/models.py:1257 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:1254 +#: core/models.py:1262 msgid "you cannot add inactive products to order" msgstr "Du kan ikke legge til inaktive produkter i bestillingen" -#: core/models.py:1271 +#: core/models.py:1279 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:1293 core/models.py:1318 core/models.py:1326 +#: core/models.py:1301 core/models.py:1326 core/models.py:1334 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:1314 +#: core/models.py:1322 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} finnes ikke med spørring <{query}>!" -#: core/models.py:1346 +#: core/models.py:1354 msgid "promocode does not exist" msgstr "Promokoden finnes ikke" -#: core/models.py:1352 +#: core/models.py:1360 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:1371 +#: core/models.py:1379 msgid "address does not exist" msgstr "Adressen eksisterer ikke" -#: core/models.py:1392 core/models.py:1461 +#: core/models.py:1400 core/models.py:1469 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:1395 core/models.py:1457 +#: core/models.py:1403 core/models.py:1465 msgid "invalid force value" msgstr "Ugyldig kraftverdi" -#: core/models.py:1401 core/models.py:1464 +#: core/models.py:1409 core/models.py:1472 msgid "you cannot purchase an empty order!" msgstr "Du kan ikke kjøpe en tom ordre!" -#: core/models.py:1420 +#: core/models.py:1428 msgid "you cannot buy an order without a user" msgstr "Du kan ikke kjøpe en ordre uten en bruker!" -#: core/models.py:1434 +#: core/models.py:1442 msgid "a user without a balance cannot buy with balance" msgstr "En bruker uten saldo kan ikke kjøpe med saldo!" -#: core/models.py:1439 +#: core/models.py:1447 msgid "insufficient funds to complete the order" msgstr "Utilstrekkelige midler til å fullføre bestillingen" -#: core/models.py:1473 +#: core/models.py:1481 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2279,14 +2291,14 @@ msgstr "" "du kan ikke kjøpe uten registrering, vennligst oppgi følgende informasjon: " "kundenavn, kundens e-postadresse, kundens telefonnummer" -#: core/models.py:1482 +#: core/models.py:1490 #, 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:1591 +#: core/models.py:1599 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2309,109 +2321,109 @@ msgstr "" "Modellen integreres med Order- og Product-modellene og lagrer en referanse " "til disse." -#: core/models.py:1606 +#: core/models.py:1614 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:1607 +#: core/models.py:1615 msgid "purchase price at order time" msgstr "Innkjøpspris på bestillingstidspunktet" -#: core/models.py:1612 +#: core/models.py:1620 msgid "internal comments for admins about this ordered product" msgstr "Interne kommentarer for administratorer om dette bestilte produktet" -#: core/models.py:1613 +#: core/models.py:1621 msgid "internal comments" msgstr "Interne kommentarer" -#: core/models.py:1619 +#: core/models.py:1627 msgid "user notifications" msgstr "Brukervarsler" -#: core/models.py:1624 +#: core/models.py:1632 msgid "json representation of this item's attributes" msgstr "JSON-representasjon av dette elementets attributter" -#: core/models.py:1625 +#: core/models.py:1633 msgid "ordered product attributes" msgstr "Bestilte produktegenskaper" -#: core/models.py:1630 +#: core/models.py:1638 msgid "reference to the parent order that contains this product" msgstr "" "Referanse til den overordnede bestillingen som inneholder dette produktet" -#: core/models.py:1631 +#: core/models.py:1639 msgid "parent order" msgstr "Overordnet ordre" -#: core/models.py:1640 +#: core/models.py:1648 msgid "the specific product associated with this order line" msgstr "Det spesifikke produktet som er knyttet til denne ordrelinjen" -#: core/models.py:1647 +#: core/models.py:1655 msgid "quantity of this specific product in the order" msgstr "Antall av dette spesifikke produktet i bestillingen" -#: core/models.py:1648 +#: core/models.py:1656 msgid "product quantity" msgstr "Produktmengde" -#: core/models.py:1655 +#: core/models.py:1663 msgid "current status of this product in the order" msgstr "Nåværende status for dette produktet i bestillingen" -#: core/models.py:1656 +#: core/models.py:1664 msgid "product line status" msgstr "Status for produktlinjen" -#: core/models.py:1719 +#: core/models.py:1727 msgid "order product must have an order" msgstr "Orderproduct må ha en tilknyttet ordre!" -#: core/models.py:1721 +#: core/models.py:1729 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Feil handling angitt for tilbakemelding: {action}!" -#: core/models.py:1735 +#: core/models.py:1743 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:1741 +#: core/models.py:1749 msgid "name" msgstr "Navn" -#: core/models.py:1742 +#: core/models.py:1750 msgid "URL of the integration" msgstr "URL-adressen til integrasjonen" -#: core/models.py:1743 +#: core/models.py:1751 msgid "authentication credentials" msgstr "Legitimasjon for autentisering" -#: core/models.py:1765 +#: core/models.py:1773 msgid "you can only have one default CRM provider" msgstr "Du kan bare ha én standard CRM-leverandør" -#: core/models.py:1775 +#: core/models.py:1783 msgid "CRM" msgstr "CRM" -#: core/models.py:1776 +#: core/models.py:1784 msgid "CRMs" msgstr "CRM" -#: core/models.py:1788 +#: core/models.py:1796 msgid "order CRM link" msgstr "Ordre CRM-kobling" -#: core/models.py:1789 +#: core/models.py:1797 msgid "orders CRM links" msgstr "CRM-koblinger for bestillinger" -#: core/models.py:1794 +#: core/models.py:1802 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2428,15 +2440,15 @@ msgstr "" "for å generere en URL for nedlasting av ressursen når den tilknyttede " "bestillingen har status som fullført." -#: core/models.py:1808 +#: core/models.py:1816 msgid "download" msgstr "Last ned" -#: core/models.py:1809 +#: core/models.py:1817 msgid "downloads" msgstr "Nedlastinger" -#: core/models.py:1823 +#: core/models.py:1831 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2451,30 +2463,30 @@ msgstr "" "og en brukertildelt vurdering. Klassen bruker databasefelt for å modellere " "og administrere tilbakemeldingsdata på en effektiv måte." -#: core/models.py:1835 +#: core/models.py:1843 msgid "user-provided comments about their experience with the product" msgstr "Brukerkommentarer om deres erfaringer med produktet" -#: core/models.py:1836 +#: core/models.py:1844 msgid "feedback comments" msgstr "Tilbakemeldinger og kommentarer" -#: core/models.py:1843 +#: core/models.py:1851 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:1844 +#: core/models.py:1852 msgid "related order product" msgstr "Relatert bestillingsprodukt" -#: core/models.py:1849 +#: core/models.py:1857 msgid "user-assigned rating for the product" msgstr "Brukertildelt vurdering for produktet" -#: core/models.py:1850 +#: core/models.py:1858 msgid "product rating" msgstr "Produktvurdering" @@ -2692,22 +2704,22 @@ msgstr "Både data og tidsavbrudd er påkrevd" msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "Ugyldig tidsavbruddsverdi, den må være mellom 0 og 216000 sekunder" -#: core/utils/emailing.py:25 +#: core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | kontakt oss initiert" -#: core/utils/emailing.py:74 +#: core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Ordrebekreftelse" -#: core/utils/emailing.py:109 +#: core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Bestilling levert" -#: core/utils/emailing.py:197 +#: core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | promokode gitt" @@ -2955,7 +2967,7 @@ msgstr "" "tilbakemeldingsobjekter. Den utvider basisklassen `EvibesViewSet` og bruker " "Djangos filtreringssystem for å spørre etter data." -#: core/viewsets.py:593 +#: core/viewsets.py:594 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2974,7 +2986,7 @@ msgstr "" "serialisatorer basert på den spesifikke handlingen som utføres, og håndhever" " tillatelser i samsvar med dette under samhandling med ordredata." -#: core/viewsets.py:782 +#: core/viewsets.py:784 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2989,11 +3001,11 @@ msgstr "" " tillegg inneholder det en detaljert handling for håndtering av " "tilbakemeldinger på OrderProduct-instanser" -#: core/viewsets.py:833 +#: core/viewsets.py:835 msgid "Manages operations related to Product images in the application. " msgstr "Administrerer operasjoner knyttet til produktbilder i applikasjonen." -#: core/viewsets.py:845 +#: core/viewsets.py:847 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3001,15 +3013,15 @@ msgstr "" "Administrerer henting og håndtering av PromoCode-instanser gjennom ulike " "API-handlinger." -#: core/viewsets.py:866 +#: core/viewsets.py:868 msgid "Represents a view set for managing promotions. " msgstr "Representerer et visningssett for håndtering av kampanjer." -#: core/viewsets.py:878 +#: core/viewsets.py:880 msgid "Handles operations related to Stock data in the system." msgstr "Håndterer operasjoner knyttet til lagerdata i systemet." -#: core/viewsets.py:892 +#: core/viewsets.py:894 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3027,7 +3039,7 @@ msgstr "" "integrert for å sikre at brukere bare kan administrere sine egne ønskelister" " med mindre eksplisitte tillatelser er gitt." -#: core/viewsets.py:1007 +#: core/viewsets.py:1009 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3041,12 +3053,12 @@ msgstr "" "inkluderer spesialisert atferd for ulike HTTP-metoder, overstyring av " "serializer og håndtering av tillatelser basert på forespørselskonteksten." -#: core/viewsets.py:1074 +#: core/viewsets.py:1076 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Feil i geokoding: {e}" -#: core/viewsets.py:1081 +#: core/viewsets.py:1083 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/pl_PL/LC_MESSAGES/django.mo b/core/locale/pl_PL/LC_MESSAGES/django.mo index d8e27634..987739e0 100644 Binary files a/core/locale/pl_PL/LC_MESSAGES/django.mo and b/core/locale/pl_PL/LC_MESSAGES/django.mo differ diff --git a/core/locale/pl_PL/LC_MESSAGES/django.po b/core/locale/pl_PL/LC_MESSAGES/django.po index c1180eac..fb77b80a 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -51,82 +51,86 @@ msgstr "Zmodyfikowany" msgid "when the object was last modified" msgstr "Kiedy obiekt był ostatnio edytowany" -#: core/admin.py:63 +#: core/admin.py:68 msgid "translations" msgstr "Tłumaczenia" -#: core/admin.py:67 +#: core/admin.py:72 msgid "general" msgstr "Ogólne" -#: core/admin.py:69 +#: core/admin.py:74 msgid "relations" msgstr "Relacje" -#: core/admin.py:87 +#: core/admin.py:76 +msgid "additional info" +msgstr "dodatkowe informacje" + +#: core/admin.py:94 msgid "metadata" msgstr "Metadane" -#: core/admin.py:94 +#: core/admin.py:101 msgid "timestamps" msgstr "Znaczniki czasu" -#: core/admin.py:109 +#: core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Aktywuj wybrane %(verbose_name_plural)s" -#: core/admin.py:114 +#: core/admin.py:121 msgid "selected items have been activated." msgstr "Wybrane elementy zostały aktywowane!" -#: core/admin.py:120 +#: core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Dezaktywacja wybranego %(verbose_name_plural)s" -#: core/admin.py:125 +#: core/admin.py:132 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:701 core/models.py:709 +#: core/admin.py:144 core/graphene/object_types.py:609 +#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 msgid "attribute value" msgstr "Wartość atrybutu" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 +#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718 msgid "attribute values" msgstr "Wartości atrybutów" -#: core/admin.py:146 +#: core/admin.py:153 msgid "image" msgstr "Obraz" -#: core/admin.py:147 core/graphene/object_types.py:501 +#: core/admin.py:154 core/graphene/object_types.py:501 msgid "images" msgstr "Obrazy" -#: core/admin.py:155 core/models.py:459 +#: core/admin.py:162 core/models.py:467 msgid "stock" msgstr "Stan magazynowy" -#: core/admin.py:156 core/graphene/object_types.py:663 +#: core/admin.py:163 core/graphene/object_types.py:663 msgid "stocks" msgstr "Akcje" -#: core/admin.py:166 core/models.py:1667 +#: core/admin.py:173 core/models.py:1675 msgid "order product" msgstr "Zamów produkt" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 msgid "order products" msgstr "Zamawianie produktów" -#: core/admin.py:180 core/admin.py:181 +#: core/admin.py:187 core/admin.py:188 msgid "children" msgstr "Dzieci" -#: core/admin.py:566 +#: core/admin.py:940 msgid "Config" msgstr "Konfiguracja" @@ -746,23 +750,23 @@ 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:118 core/elasticsearch/__init__.py:498 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 msgid "no search term provided." msgstr "Nie podano wyszukiwanego hasła." -#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +#: core/filters.py:65 core/filters.py:399 core/filters.py:526 msgid "Search" msgstr "Wyszukiwanie" -#: core/filters.py:66 core/filters.py:554 core/filters.py:583 +#: core/filters.py:66 core/filters.py:556 core/filters.py:585 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:399 core/filters.py:526 +#: core/filters.py:67 core/filters.py:401 core/filters.py:528 msgid "Name" msgstr "Nazwa" -#: core/filters.py:68 core/filters.py:528 +#: core/filters.py:68 core/filters.py:530 msgid "Categories" msgstr "Kategorie" @@ -770,7 +774,7 @@ msgstr "Kategorie" msgid "Categories Slugs" msgstr "Kategorie Ślimaki" -#: core/filters.py:71 core/filters.py:407 +#: core/filters.py:71 core/filters.py:409 msgid "Tags" msgstr "Tagi" @@ -798,8 +802,8 @@ msgstr "Atrybuty" msgid "Quantity" msgstr "Ilość" -#: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:301 core/models.py:383 core/models.py:536 +#: core/filters.py:78 core/filters.py:403 core/filters.py:529 +#: core/models.py:309 core/models.py:391 core/models.py:544 msgid "Slug" msgstr "Ślimak" @@ -815,7 +819,7 @@ msgstr "Uwzględnienie podkategorii" msgid "Include personal ordered" msgstr "Obejmuje produkty zamawiane osobiście" -#: core/filters.py:85 core/models.py:540 +#: core/filters.py:85 core/models.py:548 msgid "SKU" msgstr "SKU" @@ -823,48 +827,48 @@ msgstr "SKU" 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:324 +#: core/filters.py:326 msgid "Search (ID, product name or part number)" msgstr "Wyszukiwanie (ID, nazwa produktu lub numer części)" -#: core/filters.py:327 +#: core/filters.py:329 msgid "Bought after (inclusive)" msgstr "Kupione po (włącznie)" -#: core/filters.py:328 +#: core/filters.py:330 msgid "Bought before (inclusive)" msgstr "Kupione wcześniej (włącznie)" -#: core/filters.py:331 core/filters.py:378 core/filters.py:585 +#: core/filters.py:333 core/filters.py:380 core/filters.py:587 msgid "User email" msgstr "E-mail użytkownika" -#: core/filters.py:332 core/filters.py:379 core/filters.py:563 -#: core/filters.py:584 +#: core/filters.py:334 core/filters.py:381 core/filters.py:565 +#: core/filters.py:586 msgid "User UUID" msgstr "UUID użytkownika" -#: core/filters.py:333 +#: core/filters.py:335 msgid "Status" msgstr "Status" -#: core/filters.py:337 +#: core/filters.py:339 msgid "Human Readable ID" msgstr "Identyfikator czytelny dla człowieka" -#: core/filters.py:400 +#: core/filters.py:402 msgid "Parent" msgstr "Rodzic" -#: core/filters.py:404 +#: core/filters.py:406 msgid "Whole category(has at least 1 product or not)" msgstr "Cała kategoria (ma co najmniej 1 produkt lub nie)" -#: core/filters.py:408 +#: core/filters.py:410 msgid "Level" msgstr "Poziom" -#: core/filters.py:558 +#: core/filters.py:560 msgid "Product UUID" msgstr "UUID produktu" @@ -919,7 +923,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:679 +#: core/graphene/mutations.py:527 core/viewsets.py:680 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 +999,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:849 core/models.py:862 -#: core/models.py:1281 core/models.py:1310 core/models.py:1335 -#: core/viewsets.py:682 +#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 +#: core/models.py:1289 core/models.py:1318 core/models.py:1343 +#: core/viewsets.py:683 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} nie istnieje: {uuid}!" @@ -1011,8 +1015,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:672 core/models.py:1144 -#: core/models.py:1744 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 +#: core/models.py:1752 msgid "attributes" msgstr "Atrybuty" @@ -1025,11 +1029,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:326 core/models.py:626 +#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 msgid "categories" msgstr "Kategorie" -#: core/graphene/object_types.py:124 core/models.py:397 +#: core/graphene/object_types.py:124 core/models.py:405 msgid "brands" msgstr "Marki" @@ -1038,7 +1042,7 @@ msgid "category image url" msgstr "Kategorie" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:263 +#: core/models.py:271 msgid "markup percentage" msgstr "Procentowy narzut" @@ -1061,7 +1065,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:169 +#: core/graphene/object_types.py:351 core/models.py:177 msgid "vendors" msgstr "Sprzedawcy" @@ -1086,7 +1090,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:1138 +#: core/models.py:1146 msgid "notifications" msgstr "Powiadomienia" @@ -1094,7 +1098,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:1860 +#: core/graphene/object_types.py:400 core/models.py:1868 msgid "feedback" msgstr "Informacje zwrotne" @@ -1102,7 +1106,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:1108 +#: core/graphene/object_types.py:436 core/models.py:1116 msgid "billing address" msgstr "Adres rozliczeniowy" @@ -1130,7 +1134,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:1172 +#: core/graphene/object_types.py:465 core/models.py:1180 msgid "orders" msgstr "Zamówienia" @@ -1142,19 +1146,19 @@ msgstr "Adres URL obrazu" msgid "product's images" msgstr "Zdjęcia produktu" -#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 +#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 msgid "category" msgstr "Kategoria" -#: core/graphene/object_types.py:502 core/models.py:1861 +#: core/graphene/object_types.py:502 core/models.py:1869 msgid "feedbacks" msgstr "Informacje zwrotne" -#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 +#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 msgid "brand" msgstr "Marka" -#: core/graphene/object_types.py:504 core/models.py:101 +#: core/graphene/object_types.py:504 core/models.py:102 msgid "attribute groups" msgstr "Grupy atrybutów" @@ -1182,7 +1186,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:550 +#: core/graphene/object_types.py:534 core/models.py:558 msgid "products" msgstr "Produkty" @@ -1194,15 +1198,15 @@ msgstr "Promocodes" msgid "products on sale" msgstr "Produkty w sprzedaży" -#: core/graphene/object_types.py:651 core/models.py:798 +#: core/graphene/object_types.py:651 core/models.py:806 msgid "promotions" msgstr "Promocje" -#: core/graphene/object_types.py:655 core/models.py:168 +#: core/graphene/object_types.py:655 core/models.py:176 msgid "vendor" msgstr "Sprzedawca" -#: core/graphene/object_types.py:656 core/models.py:549 +#: core/graphene/object_types.py:656 core/models.py:557 #: 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 +1214,11 @@ msgstr "Sprzedawca" msgid "product" msgstr "Produkt" -#: core/graphene/object_types.py:667 core/models.py:821 +#: core/graphene/object_types.py:667 core/models.py:829 msgid "wishlisted products" msgstr "Produkty z listy życzeń" -#: core/graphene/object_types.py:673 core/models.py:838 +#: core/graphene/object_types.py:673 core/models.py:846 msgid "wishlists" msgstr "Listy życzeń" @@ -1222,7 +1226,7 @@ msgstr "Listy życzeń" msgid "tagged products" msgstr "Produkty Tagged" -#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 +#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 msgid "product tags" msgstr "Tagi produktu" @@ -1307,7 +1311,7 @@ msgstr "Wyniki wyszukiwania produktów" msgid "posts search results" msgstr "Wyniki wyszukiwania produktów" -#: core/models.py:70 +#: core/models.py:71 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1320,23 +1324,23 @@ msgstr "" "bardziej efektywnego kategoryzowania i zarządzania atrybutami w złożonym " "systemie." -#: core/models.py:86 +#: core/models.py:87 msgid "parent of this group" msgstr "Rodzic tej grupy" -#: core/models.py:87 +#: core/models.py:88 msgid "parent attribute group" msgstr "Grupa atrybutów nadrzędnych" -#: core/models.py:91 core/models.py:92 +#: core/models.py:92 core/models.py:93 msgid "attribute group's name" msgstr "Nazwa grupy atrybutów" -#: core/models.py:100 core/models.py:634 +#: core/models.py:101 core/models.py:642 msgid "attribute group" msgstr "Grupa atrybutów" -#: core/models.py:106 +#: core/models.py:107 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1355,33 +1359,41 @@ msgstr "" "ograniczenia, dzięki czemu nadaje się do użytku w systemach, które " "współpracują z zewnętrznymi dostawcami." -#: core/models.py:119 +#: core/models.py:120 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Przechowuje dane uwierzytelniające i punkty końcowe wymagane do komunikacji " "API dostawcy." -#: core/models.py:120 +#: core/models.py:121 msgid "authentication info" msgstr "Informacje o uwierzytelnianiu" -#: core/models.py:125 +#: core/models.py:126 msgid "define the markup for products retrieved from this vendor" msgstr "Definiowanie znaczników dla produktów pobranych od tego dostawcy" -#: core/models.py:126 +#: core/models.py:127 msgid "vendor markup percentage" msgstr "Procentowa marża sprzedawcy" -#: core/models.py:130 +#: core/models.py:131 msgid "name of this vendor" msgstr "Nazwa tego sprzedawcy" -#: core/models.py:131 +#: core/models.py:132 msgid "vendor name" msgstr "Nazwa sprzedawcy" -#: core/models.py:177 +#: core/models.py:143 +msgid "response file" +msgstr "plik odpowiedzi" + +#: core/models.py:144 +msgid "vendor's last processing response" +msgstr "odpowiedź sprzedawcy na ostatnie przetwarzanie" + +#: core/models.py:185 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1396,27 +1408,27 @@ msgstr "" "Obsługuje operacje eksportowane przez mixiny i zapewnia dostosowanie " "metadanych do celów administracyjnych." -#: core/models.py:189 core/models.py:220 +#: core/models.py:197 core/models.py:228 msgid "internal tag identifier for the product tag" msgstr "Wewnętrzny identyfikator tagu produktu" -#: core/models.py:190 core/models.py:221 +#: core/models.py:198 core/models.py:229 msgid "tag name" msgstr "Nazwa tagu" -#: core/models.py:194 core/models.py:225 +#: core/models.py:202 core/models.py:233 msgid "user-friendly name for the product tag" msgstr "Przyjazna dla użytkownika nazwa etykiety produktu" -#: core/models.py:195 core/models.py:226 +#: core/models.py:203 core/models.py:234 msgid "tag display name" msgstr "Wyświetlana nazwa znacznika" -#: core/models.py:203 +#: core/models.py:211 msgid "product tag" msgstr "Etykieta produktu" -#: core/models.py:209 +#: core/models.py:217 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 +1439,15 @@ msgstr "" "Zawiera atrybuty dla wewnętrznego identyfikatora tagu i przyjaznej dla " "użytkownika nazwy wyświetlanej." -#: core/models.py:234 +#: core/models.py:242 msgid "category tag" msgstr "tag kategorii" -#: core/models.py:235 core/models.py:307 +#: core/models.py:243 core/models.py:315 msgid "category tags" msgstr "tagi kategorii" -#: core/models.py:240 +#: core/models.py:248 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1457,51 +1469,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:254 +#: core/models.py:262 msgid "upload an image representing this category" msgstr "Prześlij obraz reprezentujący tę kategorię" -#: core/models.py:257 +#: core/models.py:265 msgid "category image" msgstr "Obraz kategorii" -#: core/models.py:262 +#: core/models.py:270 msgid "define a markup percentage for products in this category" msgstr "Zdefiniuj procentowy narzut dla produktów w tej kategorii." -#: core/models.py:271 +#: core/models.py:279 msgid "parent of this category to form a hierarchical structure" msgstr "Rodzic tej kategorii w celu utworzenia struktury hierarchicznej" -#: core/models.py:272 +#: core/models.py:280 msgid "parent category" msgstr "Kategoria nadrzędna" -#: core/models.py:277 +#: core/models.py:285 msgid "category name" msgstr "Nazwa kategorii" -#: core/models.py:278 +#: core/models.py:286 msgid "provide a name for this category" msgstr "Podaj nazwę dla tej kategorii" -#: core/models.py:285 +#: core/models.py:293 msgid "add a detailed description for this category" msgstr "Dodaj szczegółowy opis dla tej kategorii" -#: core/models.py:286 +#: core/models.py:294 msgid "category description" msgstr "Opis kategorii" -#: core/models.py:306 +#: core/models.py:314 msgid "tags that help describe or group this category" msgstr "tagi, które pomagają opisać lub pogrupować tę kategorię" -#: core/models.py:313 core/models.py:389 +#: core/models.py:321 core/models.py:397 msgid "priority" msgstr "Priorytet" -#: core/models.py:332 +#: core/models.py:340 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 +1526,47 @@ msgstr "" " unikalny slug i kolejność priorytetów. Pozwala na organizację i " "reprezentację danych związanych z marką w aplikacji." -#: core/models.py:342 +#: core/models.py:350 msgid "name of this brand" msgstr "Nazwa tej marki" -#: core/models.py:343 +#: core/models.py:351 msgid "brand name" msgstr "Nazwa marki" -#: core/models.py:350 +#: core/models.py:358 msgid "upload a logo representing this brand" msgstr "Prześlij logo reprezentujące tę markę" -#: core/models.py:352 +#: core/models.py:360 msgid "brand small image" msgstr "Mały wizerunek marki" -#: core/models.py:358 +#: core/models.py:366 msgid "upload a big logo representing this brand" msgstr "Prześlij duże logo reprezentujące tę markę" -#: core/models.py:360 +#: core/models.py:368 msgid "brand big image" msgstr "Duży wizerunek marki" -#: core/models.py:365 +#: core/models.py:373 msgid "add a detailed description of the brand" msgstr "Dodaj szczegółowy opis marki" -#: core/models.py:366 +#: core/models.py:374 msgid "brand description" msgstr "Opis marki" -#: core/models.py:371 +#: core/models.py:379 msgid "optional categories that this brand is associated with" msgstr "Opcjonalne kategorie, z którymi powiązana jest ta marka" -#: core/models.py:372 +#: core/models.py:380 msgid "associated categories" msgstr "Kategorie" -#: core/models.py:402 +#: core/models.py:410 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 +1582,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:414 +#: core/models.py:422 msgid "the vendor supplying this product stock" msgstr "Sprzedawca dostarczający ten produkt" -#: core/models.py:415 +#: core/models.py:423 msgid "associated vendor" msgstr "Powiązany sprzedawca" -#: core/models.py:419 +#: core/models.py:427 msgid "final price to the customer after markups" msgstr "Ostateczna cena dla klienta po uwzględnieniu marży" -#: core/models.py:420 +#: core/models.py:428 msgid "selling price" msgstr "Cena sprzedaży" -#: core/models.py:425 +#: core/models.py:433 msgid "the product associated with this stock entry" msgstr "Produkt powiązany z tym wpisem magazynowym" -#: core/models.py:426 core/models.py:697 core/models.py:744 -#: core/models.py:1641 +#: core/models.py:434 core/models.py:705 core/models.py:752 +#: core/models.py:1649 msgid "associated product" msgstr "Produkt powiązany" -#: core/models.py:433 +#: core/models.py:441 msgid "the price paid to the vendor for this product" msgstr "Cena zapłacona sprzedawcy za ten produkt" -#: core/models.py:434 +#: core/models.py:442 msgid "vendor purchase price" msgstr "Cena zakupu przez sprzedawcę" -#: core/models.py:438 +#: core/models.py:446 msgid "available quantity of the product in stock" msgstr "Dostępna ilość produktu w magazynie" -#: core/models.py:439 +#: core/models.py:447 msgid "quantity in stock" msgstr "Ilość w magazynie" -#: core/models.py:443 +#: core/models.py:451 msgid "vendor-assigned SKU for identifying the product" msgstr "Jednostki SKU przypisane przez dostawcę w celu identyfikacji produktu" -#: core/models.py:444 +#: core/models.py:452 msgid "vendor sku" msgstr "SKU sprzedawcy" -#: core/models.py:450 +#: core/models.py:458 msgid "digital file associated with this stock if applicable" msgstr "Plik cyfrowy powiązany z tymi zapasami, jeśli dotyczy" -#: core/models.py:451 +#: core/models.py:459 msgid "digital file" msgstr "Plik cyfrowy" -#: core/models.py:460 +#: core/models.py:468 msgid "stock entries" msgstr "Zapisy magazynowe" -#: core/models.py:465 +#: core/models.py:473 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1652,55 +1664,55 @@ msgstr "" "definiowania i manipulowania danymi produktu i powiązanymi z nimi " "informacjami w aplikacji." -#: core/models.py:478 +#: core/models.py:486 msgid "category this product belongs to" msgstr "Kategoria, do której należy ten produkt" -#: core/models.py:487 +#: core/models.py:495 msgid "optionally associate this product with a brand" msgstr "Opcjonalnie można powiązać ten produkt z marką" -#: core/models.py:493 +#: core/models.py:501 msgid "tags that help describe or group this product" msgstr "Tagi, które pomagają opisać lub pogrupować ten produkt" -#: core/models.py:498 +#: core/models.py:506 msgid "indicates whether this product is digitally delivered" msgstr "Wskazuje, czy produkt jest dostarczany cyfrowo." -#: core/models.py:499 +#: core/models.py:507 msgid "is product digital" msgstr "Czy produkt jest cyfrowy?" -#: core/models.py:505 +#: core/models.py:513 msgid "provide a clear identifying name for the product" msgstr "Wyraźna nazwa identyfikująca produkt" -#: core/models.py:506 +#: core/models.py:514 msgid "product name" msgstr "Nazwa produktu" -#: core/models.py:511 core/models.py:786 +#: core/models.py:519 core/models.py:794 msgid "add a detailed description of the product" msgstr "Dodaj szczegółowy opis produktu" -#: core/models.py:512 +#: core/models.py:520 msgid "product description" msgstr "Opis produktu" -#: core/models.py:519 +#: core/models.py:527 msgid "part number for this product" msgstr "Numer części dla tego produktu" -#: core/models.py:520 +#: core/models.py:528 msgid "part number" msgstr "Numer części" -#: core/models.py:539 +#: core/models.py:547 msgid "stock keeping unit for this product" msgstr "Jednostka magazynowa dla tego produktu" -#: core/models.py:613 +#: core/models.py:621 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 +1728,69 @@ msgstr "" "string, integer, float, boolean, array i object. Pozwala to na dynamiczną i " "elastyczną strukturę danych." -#: core/models.py:625 +#: core/models.py:633 msgid "category of this attribute" msgstr "Kategoria tego atrybutu" -#: core/models.py:633 +#: core/models.py:641 msgid "group of this attribute" msgstr "Grupa tego atrybutu" -#: core/models.py:639 +#: core/models.py:647 msgid "string" msgstr "String" -#: core/models.py:640 +#: core/models.py:648 msgid "integer" msgstr "Integer" -#: core/models.py:641 +#: core/models.py:649 msgid "float" msgstr "Pływak" -#: core/models.py:642 +#: core/models.py:650 msgid "boolean" msgstr "Wartość logiczna" -#: core/models.py:643 +#: core/models.py:651 msgid "array" msgstr "Tablica" -#: core/models.py:644 +#: core/models.py:652 msgid "object" msgstr "Obiekt" -#: core/models.py:646 +#: core/models.py:654 msgid "type of the attribute's value" msgstr "Typ wartości atrybutu" -#: core/models.py:647 +#: core/models.py:655 msgid "value type" msgstr "Typ wartości" -#: core/models.py:652 +#: core/models.py:660 msgid "name of this attribute" msgstr "Nazwa tego atrybutu" -#: core/models.py:653 +#: core/models.py:661 msgid "attribute's name" msgstr "Nazwa atrybutu" -#: core/models.py:659 +#: core/models.py:667 msgid "is filterable" msgstr "można filtrować" -#: core/models.py:660 +#: core/models.py:668 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:671 core/models.py:689 +#: core/models.py:679 core/models.py:697 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Atrybut" -#: core/models.py:677 +#: core/models.py:685 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 +1800,19 @@ msgstr "" "\"atrybut\" z unikalną \"wartością\", umożliwiając lepszą organizację i " "dynamiczną reprezentację cech produktu." -#: core/models.py:688 +#: core/models.py:696 msgid "attribute of this value" msgstr "Atrybut tej wartości" -#: core/models.py:696 +#: core/models.py:704 msgid "the specific product associated with this attribute's value" msgstr "Konkretny produkt powiązany z wartością tego atrybutu" -#: core/models.py:702 +#: core/models.py:710 msgid "the specific value for this attribute" msgstr "Konkretna wartość dla tego atrybutu" -#: core/models.py:715 +#: core/models.py:723 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 +1826,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:726 +#: core/models.py:734 msgid "provide alternative text for the image for accessibility" msgstr "" "Zapewnienie alternatywnego tekstu dla obrazu w celu ułatwienia dostępu" -#: core/models.py:727 +#: core/models.py:735 msgid "image alt text" msgstr "Tekst alternatywny obrazu" -#: core/models.py:730 +#: core/models.py:738 msgid "upload the image file for this product" msgstr "Prześlij plik obrazu dla tego produktu" -#: core/models.py:731 core/models.py:756 +#: core/models.py:739 core/models.py:764 msgid "product image" msgstr "Obraz produktu" -#: core/models.py:737 +#: core/models.py:745 msgid "determines the order in which images are displayed" msgstr "Określa kolejność wyświetlania obrazów" -#: core/models.py:738 +#: core/models.py:746 msgid "display priority" msgstr "Priorytet wyświetlania" -#: core/models.py:743 +#: core/models.py:751 msgid "the product that this image represents" msgstr "Produkt, który przedstawia ten obraz" -#: core/models.py:757 +#: core/models.py:765 msgid "product images" msgstr "Zdjęcia produktów" -#: core/models.py:762 +#: core/models.py:770 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 +1875,39 @@ msgstr "" "produktami. Integruje się z katalogiem produktów w celu określenia pozycji, " "których dotyczy kampania." -#: core/models.py:774 +#: core/models.py:782 msgid "percentage discount for the selected products" msgstr "Rabat procentowy na wybrane produkty" -#: core/models.py:775 +#: core/models.py:783 msgid "discount percentage" msgstr "Procent rabatu" -#: core/models.py:780 +#: core/models.py:788 msgid "provide a unique name for this promotion" msgstr "Podaj unikalną nazwę tej promocji" -#: core/models.py:781 +#: core/models.py:789 msgid "promotion name" msgstr "Nazwa promocji" -#: core/models.py:787 +#: core/models.py:795 msgid "promotion description" msgstr "Opis promocji" -#: core/models.py:792 +#: core/models.py:800 msgid "select which products are included in this promotion" msgstr "Wybierz produkty objęte promocją" -#: core/models.py:793 +#: core/models.py:801 msgid "included products" msgstr "Dołączone produkty" -#: core/models.py:797 +#: core/models.py:805 msgid "promotion" msgstr "Promocja" -#: core/models.py:808 +#: core/models.py:816 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 +1919,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:820 +#: core/models.py:828 msgid "products that the user has marked as wanted" msgstr "Produkty, które użytkownik oznaczył jako poszukiwane" -#: core/models.py:828 +#: core/models.py:836 msgid "user who owns this wishlist" msgstr "Użytkownik posiadający tę listę życzeń" -#: core/models.py:829 +#: core/models.py:837 msgid "wishlist owner" msgstr "Właściciel listy życzeń" -#: core/models.py:837 +#: core/models.py:845 msgid "wishlist" msgstr "Lista życzeń" -#: core/models.py:879 +#: core/models.py:887 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1939,19 +1951,19 @@ msgstr "" "funkcjonalność z określonych miksów i zapewnia dodatkowe niestandardowe " "funkcje." -#: core/models.py:892 +#: core/models.py:900 msgid "documentary" msgstr "Film dokumentalny" -#: core/models.py:893 +#: core/models.py:901 msgid "documentaries" msgstr "Filmy dokumentalne" -#: core/models.py:903 +#: core/models.py:911 msgid "unresolved" msgstr "Nierozwiązany" -#: core/models.py:908 +#: core/models.py:916 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1973,59 +1985,59 @@ msgstr "" "również powiązanie adresu z użytkownikiem, ułatwiając spersonalizowaną " "obsługę danych." -#: core/models.py:923 +#: core/models.py:931 msgid "address line for the customer" msgstr "Linia adresu dla klienta" -#: core/models.py:924 +#: core/models.py:932 msgid "address line" msgstr "Linia adresowa" -#: core/models.py:926 +#: core/models.py:934 msgid "street" msgstr "ul." -#: core/models.py:927 +#: core/models.py:935 msgid "district" msgstr "Okręg" -#: core/models.py:928 +#: core/models.py:936 msgid "city" msgstr "Miasto" -#: core/models.py:929 +#: core/models.py:937 msgid "region" msgstr "Region" -#: core/models.py:930 +#: core/models.py:938 msgid "postal code" msgstr "Kod pocztowy" -#: core/models.py:931 +#: core/models.py:939 msgid "country" msgstr "Kraj" -#: core/models.py:938 +#: core/models.py:946 msgid "geolocation point: (longitude, latitude)" msgstr "Geolocation Point(Longitude, Latitude)" -#: core/models.py:941 +#: core/models.py:949 msgid "full JSON response from geocoder for this address" msgstr "Pełna odpowiedź JSON z geokodera dla tego adresu" -#: core/models.py:946 +#: core/models.py:954 msgid "stored JSON response from the geocoding service" msgstr "Przechowywana odpowiedź JSON z usługi geokodowania" -#: core/models.py:954 +#: core/models.py:962 msgid "address" msgstr "Adres" -#: core/models.py:955 +#: core/models.py:963 msgid "addresses" msgstr "Adresy" -#: core/models.py:967 +#: core/models.py:975 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 +2054,73 @@ msgstr "" "Obejmuje funkcję sprawdzania poprawności i stosowania kodu promocyjnego do " "zamówienia, zapewniając jednocześnie spełnienie ograniczeń." -#: core/models.py:981 +#: core/models.py:989 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:982 +#: core/models.py:990 msgid "promo code identifier" msgstr "Identyfikator kodu promocyjnego" -#: core/models.py:989 +#: core/models.py:997 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:990 +#: core/models.py:998 msgid "fixed discount amount" msgstr "Stała kwota rabatu" -#: core/models.py:996 +#: core/models.py:1004 msgid "percentage discount applied if fixed amount is not used" msgstr "Rabat procentowy stosowany w przypadku niewykorzystania stałej kwoty" -#: core/models.py:997 +#: core/models.py:1005 msgid "percentage discount" msgstr "Rabat procentowy" -#: core/models.py:1002 +#: core/models.py:1010 msgid "timestamp when the promocode expires" msgstr "Znacznik czasu wygaśnięcia kodu promocyjnego" -#: core/models.py:1003 +#: core/models.py:1011 msgid "end validity time" msgstr "Końcowy czas ważności" -#: core/models.py:1008 +#: core/models.py:1016 msgid "timestamp from which this promocode is valid" msgstr "Znacznik czasu, od którego ten kod promocyjny jest ważny" -#: core/models.py:1009 +#: core/models.py:1017 msgid "start validity time" msgstr "Czas rozpoczęcia ważności" -#: core/models.py:1014 +#: core/models.py:1022 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:1015 +#: core/models.py:1023 msgid "usage timestamp" msgstr "Znacznik czasu użycia" -#: core/models.py:1020 +#: core/models.py:1028 msgid "user assigned to this promocode if applicable" msgstr "Użytkownik przypisany do tego kodu promocyjnego, jeśli dotyczy" -#: core/models.py:1021 +#: core/models.py:1029 msgid "assigned user" msgstr "Przypisany użytkownik" -#: core/models.py:1028 +#: core/models.py:1036 msgid "promo code" msgstr "Kod promocyjny" -#: core/models.py:1029 +#: core/models.py:1037 msgid "promo codes" msgstr "Kody promocyjne" -#: core/models.py:1044 +#: core/models.py:1052 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2116,16 +2128,16 @@ msgstr "" "Należy zdefiniować tylko jeden rodzaj rabatu (kwotowy lub procentowy), ale " "nie oba lub żaden z nich." -#: core/models.py:1065 +#: core/models.py:1073 msgid "promocode already used" msgstr "Kod promocyjny został już wykorzystany" -#: core/models.py:1081 +#: core/models.py:1089 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Nieprawidłowy typ rabatu dla kodu promocyjnego {self.uuid}!" -#: core/models.py:1090 +#: core/models.py:1098 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 +2154,142 @@ msgstr "" "Funkcjonalność wspiera również zarządzanie produktami w cyklu życia " "zamówienia." -#: core/models.py:1107 +#: core/models.py:1115 msgid "the billing address used for this order" msgstr "Adres rozliczeniowy użyty dla tego zamówienia" -#: core/models.py:1115 +#: core/models.py:1123 msgid "optional promo code applied to this order" msgstr "Opcjonalny kod promocyjny zastosowany do tego zamówienia" -#: core/models.py:1116 +#: core/models.py:1124 msgid "applied promo code" msgstr "Zastosowany kod promocyjny" -#: core/models.py:1124 +#: core/models.py:1132 msgid "the shipping address used for this order" msgstr "Adres wysyłki użyty dla tego zamówienia" -#: core/models.py:1125 +#: core/models.py:1133 msgid "shipping address" msgstr "Adres wysyłki" -#: core/models.py:1131 +#: core/models.py:1139 msgid "current status of the order in its lifecycle" msgstr "Aktualny status zamówienia w jego cyklu życia" -#: core/models.py:1132 +#: core/models.py:1140 msgid "order status" msgstr "Status zamówienia" -#: core/models.py:1137 core/models.py:1618 +#: core/models.py:1145 core/models.py:1626 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:1143 +#: core/models.py:1151 msgid "json representation of order attributes for this order" msgstr "Reprezentacja JSON atrybutów zamówienia dla tego zamówienia" -#: core/models.py:1149 +#: core/models.py:1157 msgid "the user who placed the order" msgstr "Użytkownik, który złożył zamówienie" -#: core/models.py:1150 +#: core/models.py:1158 msgid "user" msgstr "Użytkownik" -#: core/models.py:1156 +#: core/models.py:1164 msgid "the timestamp when the order was finalized" msgstr "Znacznik czasu, kiedy zamówienie zostało sfinalizowane" -#: core/models.py:1157 +#: core/models.py:1165 msgid "buy time" msgstr "Kup czas" -#: core/models.py:1164 +#: core/models.py:1172 msgid "a human-readable identifier for the order" msgstr "Czytelny dla człowieka identyfikator zamówienia" -#: core/models.py:1165 +#: core/models.py:1173 msgid "human readable id" msgstr "Identyfikator czytelny dla człowieka" -#: core/models.py:1171 +#: core/models.py:1179 msgid "order" msgstr "Zamówienie" -#: core/models.py:1209 +#: core/models.py:1217 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:1249 +#: core/models.py:1257 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:1254 +#: core/models.py:1262 msgid "you cannot add inactive products to order" msgstr "Nie można dodać nieaktywnych produktów do zamówienia" -#: core/models.py:1271 +#: core/models.py:1279 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:1293 core/models.py:1318 core/models.py:1326 +#: core/models.py:1301 core/models.py:1326 core/models.py:1334 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:1314 +#: core/models.py:1322 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} nie istnieje z zapytaniem <{query}>!" -#: core/models.py:1346 +#: core/models.py:1354 msgid "promocode does not exist" msgstr "Kod promocyjny nie istnieje" -#: core/models.py:1352 +#: core/models.py:1360 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:1371 +#: core/models.py:1379 msgid "address does not exist" msgstr "Adres nie istnieje" -#: core/models.py:1392 core/models.py:1461 +#: core/models.py:1400 core/models.py:1469 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:1395 core/models.py:1457 +#: core/models.py:1403 core/models.py:1465 msgid "invalid force value" msgstr "Nieprawidłowa wartość siły" -#: core/models.py:1401 core/models.py:1464 +#: core/models.py:1409 core/models.py:1472 msgid "you cannot purchase an empty order!" msgstr "Nie można kupić pustego zamówienia!" -#: core/models.py:1420 +#: core/models.py:1428 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:1434 +#: core/models.py:1442 msgid "a user without a balance cannot buy with balance" msgstr "Użytkownik bez salda nie może kupować za saldo!" -#: core/models.py:1439 +#: core/models.py:1447 msgid "insufficient funds to complete the order" msgstr "Niewystarczające środki do zrealizowania zamówienia" -#: core/models.py:1473 +#: core/models.py:1481 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2286,7 +2298,7 @@ msgstr "" "informacje: imię i nazwisko klienta, adres e-mail klienta, numer telefonu " "klienta." -#: core/models.py:1482 +#: core/models.py:1490 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2294,7 +2306,7 @@ msgstr "" "Nieprawidłowa metoda płatności: {payment_method} z " "{available_payment_methods}!" -#: core/models.py:1591 +#: core/models.py:1599 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2316,112 +2328,112 @@ msgstr "" "pobierania dla produktów cyfrowych. Model ten integruje się z modelami Order" " i Product i przechowuje odniesienia do nich." -#: core/models.py:1606 +#: core/models.py:1614 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:1607 +#: core/models.py:1615 msgid "purchase price at order time" msgstr "Cena zakupu w momencie zamówienia" -#: core/models.py:1612 +#: core/models.py:1620 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:1613 +#: core/models.py:1621 msgid "internal comments" msgstr "Uwagi wewnętrzne" -#: core/models.py:1619 +#: core/models.py:1627 msgid "user notifications" msgstr "Powiadomienia użytkownika" -#: core/models.py:1624 +#: core/models.py:1632 msgid "json representation of this item's attributes" msgstr "Reprezentacja JSON atrybutów tego elementu" -#: core/models.py:1625 +#: core/models.py:1633 msgid "ordered product attributes" msgstr "Zamówione atrybuty produktu" -#: core/models.py:1630 +#: core/models.py:1638 msgid "reference to the parent order that contains this product" msgstr "Odniesienie do zamówienia nadrzędnego zawierającego ten produkt" -#: core/models.py:1631 +#: core/models.py:1639 msgid "parent order" msgstr "Zamówienie nadrzędne" -#: core/models.py:1640 +#: core/models.py:1648 msgid "the specific product associated with this order line" msgstr "Konkretny produkt powiązany z tą linią zamówienia" -#: core/models.py:1647 +#: core/models.py:1655 msgid "quantity of this specific product in the order" msgstr "Ilość tego konkretnego produktu w zamówieniu" -#: core/models.py:1648 +#: core/models.py:1656 msgid "product quantity" msgstr "Ilość produktu" -#: core/models.py:1655 +#: core/models.py:1663 msgid "current status of this product in the order" msgstr "Aktualny status tego produktu w zamówieniu" -#: core/models.py:1656 +#: core/models.py:1664 msgid "product line status" msgstr "Status linii produktów" -#: core/models.py:1719 +#: core/models.py:1727 msgid "order product must have an order" msgstr "Orderproduct musi mieć powiązane zamówienie!" -#: core/models.py:1721 +#: core/models.py:1729 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Nieprawidłowa akcja określona dla informacji zwrotnej: {action}!" -#: core/models.py:1735 +#: core/models.py:1743 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:1741 +#: core/models.py:1749 msgid "name" msgstr "Nazwa" -#: core/models.py:1742 +#: core/models.py:1750 msgid "URL of the integration" msgstr "Adres URL integracji" -#: core/models.py:1743 +#: core/models.py:1751 msgid "authentication credentials" msgstr "Dane uwierzytelniające" -#: core/models.py:1765 +#: core/models.py:1773 msgid "you can only have one default CRM provider" msgstr "Można mieć tylko jednego domyślnego dostawcę CRM" -#: core/models.py:1775 +#: core/models.py:1783 msgid "CRM" msgstr "CRM" -#: core/models.py:1776 +#: core/models.py:1784 msgid "CRMs" msgstr "CRM" -#: core/models.py:1788 +#: core/models.py:1796 msgid "order CRM link" msgstr "Łącze CRM zamówienia" -#: core/models.py:1789 +#: core/models.py:1797 msgid "orders CRM links" msgstr "Łącza CRM zamówień" -#: core/models.py:1794 +#: core/models.py:1802 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2438,15 +2450,15 @@ msgstr "" "generowania adresu URL do pobrania zasobu, gdy powiązane zamówienie ma " "status ukończonego." -#: core/models.py:1808 +#: core/models.py:1816 msgid "download" msgstr "Pobierz" -#: core/models.py:1809 +#: core/models.py:1817 msgid "downloads" msgstr "Pliki do pobrania" -#: core/models.py:1823 +#: core/models.py:1831 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2462,30 +2474,30 @@ msgstr "" "Klasa wykorzystuje pola bazy danych do efektywnego modelowania i zarządzania" " danymi opinii." -#: core/models.py:1835 +#: core/models.py:1843 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:1836 +#: core/models.py:1844 msgid "feedback comments" msgstr "Komentarze zwrotne" -#: core/models.py:1843 +#: core/models.py:1851 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:1844 +#: core/models.py:1852 msgid "related order product" msgstr "Powiązany produkt zamówienia" -#: core/models.py:1849 +#: core/models.py:1857 msgid "user-assigned rating for the product" msgstr "Ocena produktu przypisana przez użytkownika" -#: core/models.py:1850 +#: core/models.py:1858 msgid "product rating" msgstr "Ocena produktu" @@ -2705,22 +2717,22 @@ msgstr "" "Nieprawidłowa wartość limitu czasu, musi zawierać się w przedziale od 0 do " "216000 sekund." -#: core/utils/emailing.py:25 +#: core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | zainicjowany kontakt" -#: core/utils/emailing.py:74 +#: core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Potwierdzenie zamówienia" -#: core/utils/emailing.py:109 +#: core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Zamówienie dostarczone" -#: core/utils/emailing.py:197 +#: core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | przyznany kod promocyjny" @@ -2966,7 +2978,7 @@ msgstr "" "bazowy `EvibesViewSet` i wykorzystuje system filtrowania Django do " "odpytywania danych." -#: core/viewsets.py:593 +#: core/viewsets.py:594 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2985,7 +2997,7 @@ msgstr "" "wykorzystuje wiele serializatorów w oparciu o konkretną wykonywaną akcję i " "odpowiednio egzekwuje uprawnienia podczas interakcji z danymi zamówienia." -#: core/viewsets.py:782 +#: core/viewsets.py:784 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3000,26 +3012,26 @@ msgstr "" "szczegółową akcję do obsługi informacji zwrotnych na temat instancji " "OrderProduct" -#: core/viewsets.py:833 +#: core/viewsets.py:835 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 +#: core/viewsets.py:847 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 +#: core/viewsets.py:868 msgid "Represents a view set for managing promotions. " msgstr "Reprezentuje zestaw widoków do zarządzania promocjami." -#: core/viewsets.py:878 +#: core/viewsets.py:880 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 +#: core/viewsets.py:894 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3037,7 +3049,7 @@ msgstr "" "że użytkownicy mogą zarządzać tylko własnymi listami życzeń, chyba że " "zostaną przyznane wyraźne uprawnienia." -#: core/viewsets.py:1007 +#: core/viewsets.py:1009 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3051,12 +3063,12 @@ msgstr "" "wyspecjalizowane zachowania dla różnych metod HTTP, zastępowanie serializera" " i obsługę uprawnień w oparciu o kontekst żądania." -#: core/viewsets.py:1074 +#: core/viewsets.py:1076 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Błąd geokodowania: {e}" -#: core/viewsets.py:1081 +#: core/viewsets.py:1083 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/pt_BR/LC_MESSAGES/django.mo b/core/locale/pt_BR/LC_MESSAGES/django.mo index 7e457099..6227f93c 100644 Binary files a/core/locale/pt_BR/LC_MESSAGES/django.mo and b/core/locale/pt_BR/LC_MESSAGES/django.mo differ diff --git a/core/locale/pt_BR/LC_MESSAGES/django.po b/core/locale/pt_BR/LC_MESSAGES/django.po index 07328d4b..42b189bf 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -51,82 +51,86 @@ msgstr "Modificado" msgid "when the object was last modified" msgstr "Quando o objeto foi editado pela última vez" -#: core/admin.py:63 +#: core/admin.py:68 msgid "translations" msgstr "Traduções" -#: core/admin.py:67 +#: core/admin.py:72 msgid "general" msgstr "Geral" -#: core/admin.py:69 +#: core/admin.py:74 msgid "relations" msgstr "Relações" -#: core/admin.py:87 +#: core/admin.py:76 +msgid "additional info" +msgstr "informações adicionais" + +#: core/admin.py:94 msgid "metadata" msgstr "Metadados" -#: core/admin.py:94 +#: core/admin.py:101 msgid "timestamps" msgstr "Carimbos de data/hora" -#: core/admin.py:109 +#: core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Ativar o %(verbose_name_plural)s selecionado" -#: core/admin.py:114 +#: core/admin.py:121 msgid "selected items have been activated." msgstr "Os itens selecionados foram ativados!" -#: core/admin.py:120 +#: core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Desativar o %(verbose_name_plural)s selecionado" -#: core/admin.py:125 +#: core/admin.py:132 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:701 core/models.py:709 +#: core/admin.py:144 core/graphene/object_types.py:609 +#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 msgid "attribute value" msgstr "Valor do atributo" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 +#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718 msgid "attribute values" msgstr "Valores de atributos" -#: core/admin.py:146 +#: core/admin.py:153 msgid "image" msgstr "Imagem" -#: core/admin.py:147 core/graphene/object_types.py:501 +#: core/admin.py:154 core/graphene/object_types.py:501 msgid "images" msgstr "Imagens" -#: core/admin.py:155 core/models.py:459 +#: core/admin.py:162 core/models.py:467 msgid "stock" msgstr "Estoque" -#: core/admin.py:156 core/graphene/object_types.py:663 +#: core/admin.py:163 core/graphene/object_types.py:663 msgid "stocks" msgstr "Ações" -#: core/admin.py:166 core/models.py:1667 +#: core/admin.py:173 core/models.py:1675 msgid "order product" msgstr "Pedido de produto" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 msgid "order products" msgstr "Solicitar produtos" -#: core/admin.py:180 core/admin.py:181 +#: core/admin.py:187 core/admin.py:188 msgid "children" msgstr "Crianças" -#: core/admin.py:566 +#: core/admin.py:940 msgid "Config" msgstr "Configuração" @@ -736,23 +740,23 @@ 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:118 core/elasticsearch/__init__.py:498 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 msgid "no search term provided." msgstr "Nenhum termo de pesquisa foi fornecido." -#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +#: core/filters.py:65 core/filters.py:399 core/filters.py:526 msgid "Search" msgstr "Pesquisa" -#: core/filters.py:66 core/filters.py:554 core/filters.py:583 +#: core/filters.py:66 core/filters.py:556 core/filters.py:585 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:399 core/filters.py:526 +#: core/filters.py:67 core/filters.py:401 core/filters.py:528 msgid "Name" msgstr "Nome" -#: core/filters.py:68 core/filters.py:528 +#: core/filters.py:68 core/filters.py:530 msgid "Categories" msgstr "Categorias" @@ -760,7 +764,7 @@ msgstr "Categorias" msgid "Categories Slugs" msgstr "Categorias Lesmas" -#: core/filters.py:71 core/filters.py:407 +#: core/filters.py:71 core/filters.py:409 msgid "Tags" msgstr "Tags" @@ -788,8 +792,8 @@ msgstr "Atributos" msgid "Quantity" msgstr "Quantidade" -#: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:301 core/models.py:383 core/models.py:536 +#: core/filters.py:78 core/filters.py:403 core/filters.py:529 +#: core/models.py:309 core/models.py:391 core/models.py:544 msgid "Slug" msgstr "Lesma" @@ -805,7 +809,7 @@ msgstr "Incluir subcategorias" msgid "Include personal ordered" msgstr "Incluir produtos pessoais encomendados" -#: core/filters.py:85 core/models.py:540 +#: core/filters.py:85 core/models.py:548 msgid "SKU" msgstr "SKU" @@ -814,48 +818,48 @@ 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:324 +#: core/filters.py:326 msgid "Search (ID, product name or part number)" msgstr "Pesquisa (ID, nome do produto ou número de peça)" -#: core/filters.py:327 +#: core/filters.py:329 msgid "Bought after (inclusive)" msgstr "Comprado depois (inclusive)" -#: core/filters.py:328 +#: core/filters.py:330 msgid "Bought before (inclusive)" msgstr "Comprado antes (inclusive)" -#: core/filters.py:331 core/filters.py:378 core/filters.py:585 +#: core/filters.py:333 core/filters.py:380 core/filters.py:587 msgid "User email" msgstr "E-mail do usuário" -#: core/filters.py:332 core/filters.py:379 core/filters.py:563 -#: core/filters.py:584 +#: core/filters.py:334 core/filters.py:381 core/filters.py:565 +#: core/filters.py:586 msgid "User UUID" msgstr "UUID do usuário" -#: core/filters.py:333 +#: core/filters.py:335 msgid "Status" msgstr "Status" -#: core/filters.py:337 +#: core/filters.py:339 msgid "Human Readable ID" msgstr "ID legível por humanos" -#: core/filters.py:400 +#: core/filters.py:402 msgid "Parent" msgstr "Parent" -#: core/filters.py:404 +#: core/filters.py:406 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:408 +#: core/filters.py:410 msgid "Level" msgstr "Nível" -#: core/filters.py:558 +#: core/filters.py:560 msgid "Product UUID" msgstr "UUID do produto" @@ -910,7 +914,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:679 +#: core/graphene/mutations.py:527 core/viewsets.py:680 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 +989,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:849 core/models.py:862 -#: core/models.py:1281 core/models.py:1310 core/models.py:1335 -#: core/viewsets.py:682 +#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 +#: core/models.py:1289 core/models.py:1318 core/models.py:1343 +#: core/viewsets.py:683 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} não existe: {uuid}!" @@ -1001,8 +1005,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:672 core/models.py:1144 -#: core/models.py:1744 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 +#: core/models.py:1752 msgid "attributes" msgstr "Atributos" @@ -1015,11 +1019,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:326 core/models.py:626 +#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 msgid "categories" msgstr "Categorias" -#: core/graphene/object_types.py:124 core/models.py:397 +#: core/graphene/object_types.py:124 core/models.py:405 msgid "brands" msgstr "Marcas" @@ -1028,7 +1032,7 @@ msgid "category image url" msgstr "Categorias" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:263 +#: core/models.py:271 msgid "markup percentage" msgstr "Porcentagem de marcação" @@ -1050,7 +1054,7 @@ msgstr "Tags para esta categoria" msgid "products in this category" msgstr "Produtos desta categoria" -#: core/graphene/object_types.py:351 core/models.py:169 +#: core/graphene/object_types.py:351 core/models.py:177 msgid "vendors" msgstr "Vendors" @@ -1076,7 +1080,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:1138 +#: core/models.py:1146 msgid "notifications" msgstr "Notificações" @@ -1084,7 +1088,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:1860 +#: core/graphene/object_types.py:400 core/models.py:1868 msgid "feedback" msgstr "Feedback" @@ -1092,7 +1096,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:1108 +#: core/graphene/object_types.py:436 core/models.py:1116 msgid "billing address" msgstr "Endereço de cobrança" @@ -1120,7 +1124,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:1172 +#: core/graphene/object_types.py:465 core/models.py:1180 msgid "orders" msgstr "Pedidos" @@ -1132,19 +1136,19 @@ msgstr "URL da imagem" msgid "product's images" msgstr "Imagens do produto" -#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 +#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 msgid "category" msgstr "Categoria" -#: core/graphene/object_types.py:502 core/models.py:1861 +#: core/graphene/object_types.py:502 core/models.py:1869 msgid "feedbacks" msgstr "Feedbacks" -#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 +#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 msgid "brand" msgstr "Brand" -#: core/graphene/object_types.py:504 core/models.py:101 +#: core/graphene/object_types.py:504 core/models.py:102 msgid "attribute groups" msgstr "Grupos de atributos" @@ -1172,7 +1176,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:550 +#: core/graphene/object_types.py:534 core/models.py:558 msgid "products" msgstr "Produtos" @@ -1184,15 +1188,15 @@ msgstr "Códigos promocionais" msgid "products on sale" msgstr "Produtos à venda" -#: core/graphene/object_types.py:651 core/models.py:798 +#: core/graphene/object_types.py:651 core/models.py:806 msgid "promotions" msgstr "Promoções" -#: core/graphene/object_types.py:655 core/models.py:168 +#: core/graphene/object_types.py:655 core/models.py:176 msgid "vendor" msgstr "Vendor" -#: core/graphene/object_types.py:656 core/models.py:549 +#: core/graphene/object_types.py:656 core/models.py:557 #: 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 +1204,11 @@ msgstr "Vendor" msgid "product" msgstr "Produto" -#: core/graphene/object_types.py:667 core/models.py:821 +#: core/graphene/object_types.py:667 core/models.py:829 msgid "wishlisted products" msgstr "Produtos da lista de desejos" -#: core/graphene/object_types.py:673 core/models.py:838 +#: core/graphene/object_types.py:673 core/models.py:846 msgid "wishlists" msgstr "Listas de desejos" @@ -1212,7 +1216,7 @@ msgstr "Listas de desejos" msgid "tagged products" msgstr "Produtos marcados" -#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 +#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 msgid "product tags" msgstr "Etiquetas do produto" @@ -1298,7 +1302,7 @@ msgstr "Resultados da pesquisa de produtos" msgid "posts search results" msgstr "Resultados da pesquisa de produtos" -#: core/models.py:70 +#: core/models.py:71 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1311,23 +1315,23 @@ msgstr "" "útil para categorizar e gerenciar atributos de forma mais eficaz em um " "sistema complexo." -#: core/models.py:86 +#: core/models.py:87 msgid "parent of this group" msgstr "Pai deste grupo" -#: core/models.py:87 +#: core/models.py:88 msgid "parent attribute group" msgstr "Grupo de atributos pai" -#: core/models.py:91 core/models.py:92 +#: core/models.py:92 core/models.py:93 msgid "attribute group's name" msgstr "Nome do grupo de atributos" -#: core/models.py:100 core/models.py:634 +#: core/models.py:101 core/models.py:642 msgid "attribute group" msgstr "Grupo de atributos" -#: core/models.py:106 +#: core/models.py:107 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1346,33 +1350,41 @@ msgstr "" " adicionais, tornando-o adequado para uso em sistemas que interagem com " "fornecedores terceirizados." -#: core/models.py:119 +#: core/models.py:120 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Armazena as credenciais e os pontos de extremidade necessários para a " "comunicação da API do fornecedor" -#: core/models.py:120 +#: core/models.py:121 msgid "authentication info" msgstr "Informações de autenticação" -#: core/models.py:125 +#: core/models.py:126 msgid "define the markup for products retrieved from this vendor" msgstr "Definir a marcação para produtos recuperados desse fornecedor" -#: core/models.py:126 +#: core/models.py:127 msgid "vendor markup percentage" msgstr "Porcentagem da margem de lucro do fornecedor" -#: core/models.py:130 +#: core/models.py:131 msgid "name of this vendor" msgstr "Nome do fornecedor" -#: core/models.py:131 +#: core/models.py:132 msgid "vendor name" msgstr "Nome do fornecedor" -#: core/models.py:177 +#: core/models.py:143 +msgid "response file" +msgstr "arquivo de resposta" + +#: core/models.py:144 +msgid "vendor's last processing response" +msgstr "última resposta de processamento do fornecedor" + +#: core/models.py:185 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1387,27 +1399,27 @@ msgstr "" "operações exportadas por meio de mixins e fornece personalização de " "metadados para fins administrativos." -#: core/models.py:189 core/models.py:220 +#: core/models.py:197 core/models.py:228 msgid "internal tag identifier for the product tag" msgstr "Identificador de tag interno para a tag do produto" -#: core/models.py:190 core/models.py:221 +#: core/models.py:198 core/models.py:229 msgid "tag name" msgstr "Nome da etiqueta" -#: core/models.py:194 core/models.py:225 +#: core/models.py:202 core/models.py:233 msgid "user-friendly name for the product tag" msgstr "Nome de fácil utilização para a etiqueta do produto" -#: core/models.py:195 core/models.py:226 +#: core/models.py:203 core/models.py:234 msgid "tag display name" msgstr "Nome de exibição da tag" -#: core/models.py:203 +#: core/models.py:211 msgid "product tag" msgstr "Etiqueta do produto" -#: core/models.py:209 +#: core/models.py:217 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 +1430,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:234 +#: core/models.py:242 msgid "category tag" msgstr "tag de categoria" -#: core/models.py:235 core/models.py:307 +#: core/models.py:243 core/models.py:315 msgid "category tags" msgstr "tags de categoria" -#: core/models.py:240 +#: core/models.py:248 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1449,51 +1461,51 @@ msgstr "" "descrição e a hierarquia das categorias, bem como atribuam atributos como " "imagens, tags ou prioridade." -#: core/models.py:254 +#: core/models.py:262 msgid "upload an image representing this category" msgstr "Faça upload de uma imagem que represente essa categoria" -#: core/models.py:257 +#: core/models.py:265 msgid "category image" msgstr "Imagem da categoria" -#: core/models.py:262 +#: core/models.py:270 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:271 +#: core/models.py:279 msgid "parent of this category to form a hierarchical structure" msgstr "Pai dessa categoria para formar uma estrutura hierárquica" -#: core/models.py:272 +#: core/models.py:280 msgid "parent category" msgstr "Categoria dos pais" -#: core/models.py:277 +#: core/models.py:285 msgid "category name" msgstr "Nome da categoria" -#: core/models.py:278 +#: core/models.py:286 msgid "provide a name for this category" msgstr "Forneça um nome para essa categoria" -#: core/models.py:285 +#: core/models.py:293 msgid "add a detailed description for this category" msgstr "Adicione uma descrição detalhada para essa categoria" -#: core/models.py:286 +#: core/models.py:294 msgid "category description" msgstr "Descrição da categoria" -#: core/models.py:306 +#: core/models.py:314 msgid "tags that help describe or group this category" msgstr "tags que ajudam a descrever ou agrupar essa categoria" -#: core/models.py:313 core/models.py:389 +#: core/models.py:321 core/models.py:397 msgid "priority" msgstr "Prioridade" -#: core/models.py:332 +#: core/models.py:340 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 +1519,47 @@ msgstr "" "Ela permite a organização e a representação de dados relacionados à marca no" " aplicativo." -#: core/models.py:342 +#: core/models.py:350 msgid "name of this brand" msgstr "Nome da marca" -#: core/models.py:343 +#: core/models.py:351 msgid "brand name" msgstr "Nome da marca" -#: core/models.py:350 +#: core/models.py:358 msgid "upload a logo representing this brand" msgstr "Faça upload de um logotipo que represente essa marca" -#: core/models.py:352 +#: core/models.py:360 msgid "brand small image" msgstr "Imagem pequena da marca" -#: core/models.py:358 +#: core/models.py:366 msgid "upload a big logo representing this brand" msgstr "Faça upload de um logotipo grande que represente essa marca" -#: core/models.py:360 +#: core/models.py:368 msgid "brand big image" msgstr "Imagem de marca grande" -#: core/models.py:365 +#: core/models.py:373 msgid "add a detailed description of the brand" msgstr "Adicione uma descrição detalhada da marca" -#: core/models.py:366 +#: core/models.py:374 msgid "brand description" msgstr "Descrição da marca" -#: core/models.py:371 +#: core/models.py:379 msgid "optional categories that this brand is associated with" msgstr "Categorias opcionais às quais essa marca está associada" -#: core/models.py:372 +#: core/models.py:380 msgid "associated categories" msgstr "Categorias" -#: core/models.py:402 +#: core/models.py:410 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 +1575,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:414 +#: core/models.py:422 msgid "the vendor supplying this product stock" msgstr "O fornecedor que fornece esse estoque de produtos" -#: core/models.py:415 +#: core/models.py:423 msgid "associated vendor" msgstr "Fornecedor associado" -#: core/models.py:419 +#: core/models.py:427 msgid "final price to the customer after markups" msgstr "Preço final para o cliente após as marcações" -#: core/models.py:420 +#: core/models.py:428 msgid "selling price" msgstr "Preço de venda" -#: core/models.py:425 +#: core/models.py:433 msgid "the product associated with this stock entry" msgstr "O produto associado a essa entrada em estoque" -#: core/models.py:426 core/models.py:697 core/models.py:744 -#: core/models.py:1641 +#: core/models.py:434 core/models.py:705 core/models.py:752 +#: core/models.py:1649 msgid "associated product" msgstr "Produto associado" -#: core/models.py:433 +#: core/models.py:441 msgid "the price paid to the vendor for this product" msgstr "O preço pago ao fornecedor por esse produto" -#: core/models.py:434 +#: core/models.py:442 msgid "vendor purchase price" msgstr "Preço de compra do fornecedor" -#: core/models.py:438 +#: core/models.py:446 msgid "available quantity of the product in stock" msgstr "Quantidade disponível do produto em estoque" -#: core/models.py:439 +#: core/models.py:447 msgid "quantity in stock" msgstr "Quantidade em estoque" -#: core/models.py:443 +#: core/models.py:451 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU atribuído pelo fornecedor para identificar o produto" -#: core/models.py:444 +#: core/models.py:452 msgid "vendor sku" msgstr "SKU do fornecedor" -#: core/models.py:450 +#: core/models.py:458 msgid "digital file associated with this stock if applicable" msgstr "Arquivo digital associado a esse estoque, se aplicável" -#: core/models.py:451 +#: core/models.py:459 msgid "digital file" msgstr "Arquivo digital" -#: core/models.py:460 +#: core/models.py:468 msgid "stock entries" msgstr "Entradas de estoque" -#: core/models.py:465 +#: core/models.py:473 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1645,55 +1657,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:478 +#: core/models.py:486 msgid "category this product belongs to" msgstr "Categoria à qual este produto pertence" -#: core/models.py:487 +#: core/models.py:495 msgid "optionally associate this product with a brand" msgstr "Opcionalmente, associe esse produto a uma marca" -#: core/models.py:493 +#: core/models.py:501 msgid "tags that help describe or group this product" msgstr "Tags que ajudam a descrever ou agrupar este produto" -#: core/models.py:498 +#: core/models.py:506 msgid "indicates whether this product is digitally delivered" msgstr "Indica se esse produto é entregue digitalmente" -#: core/models.py:499 +#: core/models.py:507 msgid "is product digital" msgstr "O produto é digital" -#: core/models.py:505 +#: core/models.py:513 msgid "provide a clear identifying name for the product" msgstr "Fornecer um nome de identificação claro para o produto" -#: core/models.py:506 +#: core/models.py:514 msgid "product name" msgstr "Nome do produto" -#: core/models.py:511 core/models.py:786 +#: core/models.py:519 core/models.py:794 msgid "add a detailed description of the product" msgstr "Adicione uma descrição detalhada do produto" -#: core/models.py:512 +#: core/models.py:520 msgid "product description" msgstr "Descrição do produto" -#: core/models.py:519 +#: core/models.py:527 msgid "part number for this product" msgstr "Número de peça para este produto" -#: core/models.py:520 +#: core/models.py:528 msgid "part number" msgstr "Número da peça" -#: core/models.py:539 +#: core/models.py:547 msgid "stock keeping unit for this product" msgstr "Unidade de Manutenção de Estoque para este produto" -#: core/models.py:613 +#: core/models.py:621 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 +1721,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:625 +#: core/models.py:633 msgid "category of this attribute" msgstr "Categoria desse atributo" -#: core/models.py:633 +#: core/models.py:641 msgid "group of this attribute" msgstr "Grupo desse atributo" -#: core/models.py:639 +#: core/models.py:647 msgid "string" msgstr "Cordas" -#: core/models.py:640 +#: core/models.py:648 msgid "integer" msgstr "Inteiro" -#: core/models.py:641 +#: core/models.py:649 msgid "float" msgstr "Flutuação" -#: core/models.py:642 +#: core/models.py:650 msgid "boolean" msgstr "Booleano" -#: core/models.py:643 +#: core/models.py:651 msgid "array" msgstr "Matriz" -#: core/models.py:644 +#: core/models.py:652 msgid "object" msgstr "Objeto" -#: core/models.py:646 +#: core/models.py:654 msgid "type of the attribute's value" msgstr "Tipo do valor do atributo" -#: core/models.py:647 +#: core/models.py:655 msgid "value type" msgstr "Tipo de valor" -#: core/models.py:652 +#: core/models.py:660 msgid "name of this attribute" msgstr "Nome desse atributo" -#: core/models.py:653 +#: core/models.py:661 msgid "attribute's name" msgstr "Nome do atributo" -#: core/models.py:659 +#: core/models.py:667 msgid "is filterable" msgstr "é filtrável" -#: core/models.py:660 +#: core/models.py:668 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:671 core/models.py:689 +#: core/models.py:679 core/models.py:697 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Atributo" -#: core/models.py:677 +#: core/models.py:685 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 +1793,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:688 +#: core/models.py:696 msgid "attribute of this value" msgstr "Atributo desse valor" -#: core/models.py:696 +#: core/models.py:704 msgid "the specific product associated with this attribute's value" msgstr "O produto específico associado ao valor desse atributo" -#: core/models.py:702 +#: core/models.py:710 msgid "the specific value for this attribute" msgstr "O valor específico para esse atributo" -#: core/models.py:715 +#: core/models.py:723 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 +1819,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:726 +#: core/models.py:734 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:727 +#: core/models.py:735 msgid "image alt text" msgstr "Texto alternativo da imagem" -#: core/models.py:730 +#: core/models.py:738 msgid "upload the image file for this product" msgstr "Faça o upload do arquivo de imagem para este produto" -#: core/models.py:731 core/models.py:756 +#: core/models.py:739 core/models.py:764 msgid "product image" msgstr "Imagem do produto" -#: core/models.py:737 +#: core/models.py:745 msgid "determines the order in which images are displayed" msgstr "Determina a ordem em que as imagens são exibidas" -#: core/models.py:738 +#: core/models.py:746 msgid "display priority" msgstr "Prioridade de exibição" -#: core/models.py:743 +#: core/models.py:751 msgid "the product that this image represents" msgstr "O produto que esta imagem representa" -#: core/models.py:757 +#: core/models.py:765 msgid "product images" msgstr "Imagens do produto" -#: core/models.py:762 +#: core/models.py:770 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 +1868,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:774 +#: core/models.py:782 msgid "percentage discount for the selected products" msgstr "Desconto percentual para os produtos selecionados" -#: core/models.py:775 +#: core/models.py:783 msgid "discount percentage" msgstr "Porcentagem de desconto" -#: core/models.py:780 +#: core/models.py:788 msgid "provide a unique name for this promotion" msgstr "Forneça um nome exclusivo para essa promoção" -#: core/models.py:781 +#: core/models.py:789 msgid "promotion name" msgstr "Nome da promoção" -#: core/models.py:787 +#: core/models.py:795 msgid "promotion description" msgstr "Descrição da promoção" -#: core/models.py:792 +#: core/models.py:800 msgid "select which products are included in this promotion" msgstr "Selecione quais produtos estão incluídos nessa promoção" -#: core/models.py:793 +#: core/models.py:801 msgid "included products" msgstr "Produtos incluídos" -#: core/models.py:797 +#: core/models.py:805 msgid "promotion" msgstr "Promoção" -#: core/models.py:808 +#: core/models.py:816 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 +1913,23 @@ msgstr "" " bem como operações de suporte para adicionar e remover vários produtos de " "uma só vez." -#: core/models.py:820 +#: core/models.py:828 msgid "products that the user has marked as wanted" msgstr "Produtos que o usuário marcou como desejados" -#: core/models.py:828 +#: core/models.py:836 msgid "user who owns this wishlist" msgstr "Usuário que possui esta lista de desejos" -#: core/models.py:829 +#: core/models.py:837 msgid "wishlist owner" msgstr "Proprietário da lista de desejos" -#: core/models.py:837 +#: core/models.py:845 msgid "wishlist" msgstr "Lista de desejos" -#: core/models.py:879 +#: core/models.py:887 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1933,19 +1945,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:892 +#: core/models.py:900 msgid "documentary" msgstr "Documentário" -#: core/models.py:893 +#: core/models.py:901 msgid "documentaries" msgstr "Documentários" -#: core/models.py:903 +#: core/models.py:911 msgid "unresolved" msgstr "Não resolvido" -#: core/models.py:908 +#: core/models.py:916 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1967,59 +1979,59 @@ msgstr "" "associar um endereço a um usuário, facilitando o tratamento personalizado " "dos dados." -#: core/models.py:923 +#: core/models.py:931 msgid "address line for the customer" msgstr "Linha de endereço do cliente" -#: core/models.py:924 +#: core/models.py:932 msgid "address line" msgstr "Linha de endereço" -#: core/models.py:926 +#: core/models.py:934 msgid "street" msgstr "Rua" -#: core/models.py:927 +#: core/models.py:935 msgid "district" msgstr "Distrito" -#: core/models.py:928 +#: core/models.py:936 msgid "city" msgstr "Cidade" -#: core/models.py:929 +#: core/models.py:937 msgid "region" msgstr "Região" -#: core/models.py:930 +#: core/models.py:938 msgid "postal code" msgstr "Código postal" -#: core/models.py:931 +#: core/models.py:939 msgid "country" msgstr "País" -#: core/models.py:938 +#: core/models.py:946 msgid "geolocation point: (longitude, latitude)" msgstr "Ponto de geolocalização (Longitude, Latitude)" -#: core/models.py:941 +#: core/models.py:949 msgid "full JSON response from geocoder for this address" msgstr "Resposta JSON completa do geocodificador para este endereço" -#: core/models.py:946 +#: core/models.py:954 msgid "stored JSON response from the geocoding service" msgstr "Resposta JSON armazenada do serviço de geocodificação" -#: core/models.py:954 +#: core/models.py:962 msgid "address" msgstr "Endereço" -#: core/models.py:955 +#: core/models.py:963 msgid "addresses" msgstr "Endereços" -#: core/models.py:967 +#: core/models.py:975 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 +2048,74 @@ msgstr "" "funcionalidade para validar e aplicar o código promocional a um pedido, " "garantindo que as restrições sejam atendidas." -#: core/models.py:981 +#: core/models.py:989 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:982 +#: core/models.py:990 msgid "promo code identifier" msgstr "Identificador de código promocional" -#: core/models.py:989 +#: core/models.py:997 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:990 +#: core/models.py:998 msgid "fixed discount amount" msgstr "Valor do desconto fixo" -#: core/models.py:996 +#: core/models.py:1004 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:997 +#: core/models.py:1005 msgid "percentage discount" msgstr "Desconto percentual" -#: core/models.py:1002 +#: core/models.py:1010 msgid "timestamp when the promocode expires" msgstr "Registro de data e hora em que o código promocional expira" -#: core/models.py:1003 +#: core/models.py:1011 msgid "end validity time" msgstr "Tempo de validade final" -#: core/models.py:1008 +#: core/models.py:1016 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:1009 +#: core/models.py:1017 msgid "start validity time" msgstr "Hora de início da validade" -#: core/models.py:1014 +#: core/models.py:1022 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:1015 +#: core/models.py:1023 msgid "usage timestamp" msgstr "Registro de data e hora de uso" -#: core/models.py:1020 +#: core/models.py:1028 msgid "user assigned to this promocode if applicable" msgstr "Usuário atribuído a esse código promocional, se aplicável" -#: core/models.py:1021 +#: core/models.py:1029 msgid "assigned user" msgstr "Usuário atribuído" -#: core/models.py:1028 +#: core/models.py:1036 msgid "promo code" msgstr "Código promocional" -#: core/models.py:1029 +#: core/models.py:1037 msgid "promo codes" msgstr "Códigos promocionais" -#: core/models.py:1044 +#: core/models.py:1052 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2111,16 +2123,16 @@ msgstr "" "Apenas um tipo de desconto deve ser definido (valor ou porcentagem), mas não" " ambos ou nenhum." -#: core/models.py:1065 +#: core/models.py:1073 msgid "promocode already used" msgstr "O código promocional já foi usado" -#: core/models.py:1081 +#: core/models.py:1089 #, 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:1090 +#: core/models.py:1098 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 +2149,138 @@ msgstr "" "atualizados. Da mesma forma, a funcionalidade suporta o gerenciamento dos " "produtos no ciclo de vida do pedido." -#: core/models.py:1107 +#: core/models.py:1115 msgid "the billing address used for this order" msgstr "O endereço de cobrança usado para esse pedido" -#: core/models.py:1115 +#: core/models.py:1123 msgid "optional promo code applied to this order" msgstr "Código promocional opcional aplicado a este pedido" -#: core/models.py:1116 +#: core/models.py:1124 msgid "applied promo code" msgstr "Código promocional aplicado" -#: core/models.py:1124 +#: core/models.py:1132 msgid "the shipping address used for this order" msgstr "O endereço de entrega usado para esse pedido" -#: core/models.py:1125 +#: core/models.py:1133 msgid "shipping address" msgstr "Endereço de entrega" -#: core/models.py:1131 +#: core/models.py:1139 msgid "current status of the order in its lifecycle" msgstr "Status atual do pedido em seu ciclo de vida" -#: core/models.py:1132 +#: core/models.py:1140 msgid "order status" msgstr "Status do pedido" -#: core/models.py:1137 core/models.py:1618 +#: core/models.py:1145 core/models.py:1626 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:1143 +#: core/models.py:1151 msgid "json representation of order attributes for this order" msgstr "Representação JSON dos atributos do pedido para esse pedido" -#: core/models.py:1149 +#: core/models.py:1157 msgid "the user who placed the order" msgstr "O usuário que fez o pedido" -#: core/models.py:1150 +#: core/models.py:1158 msgid "user" msgstr "Usuário" -#: core/models.py:1156 +#: core/models.py:1164 msgid "the timestamp when the order was finalized" msgstr "O registro de data e hora em que o pedido foi finalizado" -#: core/models.py:1157 +#: core/models.py:1165 msgid "buy time" msgstr "Tempo de compra" -#: core/models.py:1164 +#: core/models.py:1172 msgid "a human-readable identifier for the order" msgstr "Um identificador legível por humanos para o pedido" -#: core/models.py:1165 +#: core/models.py:1173 msgid "human readable id" msgstr "ID legível por humanos" -#: core/models.py:1171 +#: core/models.py:1179 msgid "order" msgstr "Pedido" -#: core/models.py:1209 +#: core/models.py:1217 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:1249 +#: core/models.py:1257 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:1254 +#: core/models.py:1262 msgid "you cannot add inactive products to order" msgstr "Não é possível adicionar produtos inativos ao pedido" -#: core/models.py:1271 +#: core/models.py:1279 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:1293 core/models.py:1318 core/models.py:1326 +#: core/models.py:1301 core/models.py:1326 core/models.py:1334 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:1314 +#: core/models.py:1322 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} não existe com a consulta <{query}>!" -#: core/models.py:1346 +#: core/models.py:1354 msgid "promocode does not exist" msgstr "O código promocional não existe" -#: core/models.py:1352 +#: core/models.py:1360 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:1371 +#: core/models.py:1379 msgid "address does not exist" msgstr "O endereço não existe" -#: core/models.py:1392 core/models.py:1461 +#: core/models.py:1400 core/models.py:1469 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:1395 core/models.py:1457 +#: core/models.py:1403 core/models.py:1465 msgid "invalid force value" msgstr "Valor de força inválido" -#: core/models.py:1401 core/models.py:1464 +#: core/models.py:1409 core/models.py:1472 msgid "you cannot purchase an empty order!" msgstr "Você não pode comprar um pedido vazio!" -#: core/models.py:1420 +#: core/models.py:1428 msgid "you cannot buy an order without a user" msgstr "Não é possível comprar um pedido sem um usuário!" -#: core/models.py:1434 +#: core/models.py:1442 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:1439 +#: core/models.py:1447 msgid "insufficient funds to complete the order" msgstr "Fundos insuficientes para concluir o pedido" -#: core/models.py:1473 +#: core/models.py:1481 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2276,7 +2288,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:1482 +#: core/models.py:1490 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2284,7 +2296,7 @@ msgstr "" "Método de pagamento inválido: {payment_method} de " "{available_payment_methods}!" -#: core/models.py:1591 +#: core/models.py:1599 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2306,109 +2318,109 @@ msgstr "" "para produtos digitais. O modelo se integra aos modelos Order e Product e " "armazena uma referência a eles." -#: core/models.py:1606 +#: core/models.py:1614 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:1607 +#: core/models.py:1615 msgid "purchase price at order time" msgstr "Preço de compra no momento do pedido" -#: core/models.py:1612 +#: core/models.py:1620 msgid "internal comments for admins about this ordered product" msgstr "" "Comentários internos para administradores sobre este produto encomendado" -#: core/models.py:1613 +#: core/models.py:1621 msgid "internal comments" msgstr "Comentários internos" -#: core/models.py:1619 +#: core/models.py:1627 msgid "user notifications" msgstr "Notificações do usuário" -#: core/models.py:1624 +#: core/models.py:1632 msgid "json representation of this item's attributes" msgstr "Representação JSON dos atributos desse item" -#: core/models.py:1625 +#: core/models.py:1633 msgid "ordered product attributes" msgstr "Atributos ordenados do produto" -#: core/models.py:1630 +#: core/models.py:1638 msgid "reference to the parent order that contains this product" msgstr "Referência ao pedido pai que contém esse produto" -#: core/models.py:1631 +#: core/models.py:1639 msgid "parent order" msgstr "Ordem dos pais" -#: core/models.py:1640 +#: core/models.py:1648 msgid "the specific product associated with this order line" msgstr "O produto específico associado a essa linha de pedido" -#: core/models.py:1647 +#: core/models.py:1655 msgid "quantity of this specific product in the order" msgstr "Quantidade desse produto específico no pedido" -#: core/models.py:1648 +#: core/models.py:1656 msgid "product quantity" msgstr "Quantidade do produto" -#: core/models.py:1655 +#: core/models.py:1663 msgid "current status of this product in the order" msgstr "Status atual desse produto no pedido" -#: core/models.py:1656 +#: core/models.py:1664 msgid "product line status" msgstr "Status da linha de produtos" -#: core/models.py:1719 +#: core/models.py:1727 msgid "order product must have an order" msgstr "O Orderproduct deve ter um pedido associado!" -#: core/models.py:1721 +#: core/models.py:1729 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Ação incorreta especificada para o feedback: {action}!" -#: core/models.py:1735 +#: core/models.py:1743 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:1741 +#: core/models.py:1749 msgid "name" msgstr "Nome" -#: core/models.py:1742 +#: core/models.py:1750 msgid "URL of the integration" msgstr "URL da integração" -#: core/models.py:1743 +#: core/models.py:1751 msgid "authentication credentials" msgstr "Credenciais de autenticação" -#: core/models.py:1765 +#: core/models.py:1773 msgid "you can only have one default CRM provider" msgstr "Você só pode ter um provedor de CRM padrão" -#: core/models.py:1775 +#: core/models.py:1783 msgid "CRM" msgstr "CRM" -#: core/models.py:1776 +#: core/models.py:1784 msgid "CRMs" msgstr "CRMs" -#: core/models.py:1788 +#: core/models.py:1796 msgid "order CRM link" msgstr "Link do CRM do pedido" -#: core/models.py:1789 +#: core/models.py:1797 msgid "orders CRM links" msgstr "Links de CRM dos pedidos" -#: core/models.py:1794 +#: core/models.py:1802 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2424,15 +2436,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:1808 +#: core/models.py:1816 msgid "download" msgstr "Baixar" -#: core/models.py:1809 +#: core/models.py:1817 msgid "downloads" msgstr "Downloads" -#: core/models.py:1823 +#: core/models.py:1831 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2447,31 +2459,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:1835 +#: core/models.py:1843 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:1836 +#: core/models.py:1844 msgid "feedback comments" msgstr "Comentários de feedback" -#: core/models.py:1843 +#: core/models.py:1851 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:1844 +#: core/models.py:1852 msgid "related order product" msgstr "Produto de pedido relacionado" -#: core/models.py:1849 +#: core/models.py:1857 msgid "user-assigned rating for the product" msgstr "Classificação atribuída pelo usuário ao produto" -#: core/models.py:1850 +#: core/models.py:1858 msgid "product rating" msgstr "Avaliação do produto" @@ -2688,22 +2700,22 @@ msgstr "São necessários dados e tempo limite" msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "Valor de tempo limite inválido, deve estar entre 0 e 216000 segundos" -#: core/utils/emailing.py:25 +#: core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | entre em contato conosco iniciado" -#: core/utils/emailing.py:74 +#: core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Confirmação do pedido" -#: core/utils/emailing.py:109 +#: core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Pedido entregue" -#: core/utils/emailing.py:197 +#: core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | promocode granted" @@ -2954,7 +2966,7 @@ msgstr "" "feedback acessíveis. Ela estende a base `EvibesViewSet` e faz uso do sistema" " de filtragem do Django para consultar dados." -#: core/viewsets.py:593 +#: core/viewsets.py:594 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2973,7 +2985,7 @@ msgstr "" "específica que está sendo executada e impõe as permissões de acordo com a " "interação com os dados do pedido." -#: core/viewsets.py:782 +#: core/viewsets.py:784 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2988,11 +3000,11 @@ msgstr "" "fornece uma ação detalhada para lidar com feedback sobre instâncias de " "OrderProduct" -#: core/viewsets.py:833 +#: core/viewsets.py:835 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 +#: core/viewsets.py:847 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3000,15 +3012,15 @@ msgstr "" "Gerencia a recuperação e o manuseio de instâncias de PromoCode por meio de " "várias ações de API." -#: core/viewsets.py:866 +#: core/viewsets.py:868 msgid "Represents a view set for managing promotions. " msgstr "Representa um conjunto de visualizações para gerenciar promoções." -#: core/viewsets.py:878 +#: core/viewsets.py:880 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 +#: core/viewsets.py:894 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3027,7 +3039,7 @@ msgstr "" "possam gerenciar suas próprias listas de desejos, a menos que sejam " "concedidas permissões explícitas." -#: core/viewsets.py:1007 +#: core/viewsets.py:1009 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3042,12 +3054,12 @@ msgstr "" "substituições de serializadores e tratamento de permissões com base no " "contexto da solicitação." -#: core/viewsets.py:1074 +#: core/viewsets.py:1076 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Erro de geocodificação: {e}" -#: core/viewsets.py:1081 +#: core/viewsets.py:1083 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/ro_RO/LC_MESSAGES/django.mo b/core/locale/ro_RO/LC_MESSAGES/django.mo index 07a56e10..33316bb6 100644 Binary files a/core/locale/ro_RO/LC_MESSAGES/django.mo and b/core/locale/ro_RO/LC_MESSAGES/django.mo differ diff --git a/core/locale/ro_RO/LC_MESSAGES/django.po b/core/locale/ro_RO/LC_MESSAGES/django.po index 908019ec..1c9f4da7 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -51,82 +51,86 @@ msgstr "Modificat" msgid "when the object was last modified" msgstr "Când a fost editat obiectul ultima dată" -#: core/admin.py:63 +#: core/admin.py:68 msgid "translations" msgstr "Traduceri" -#: core/admin.py:67 +#: core/admin.py:72 msgid "general" msgstr "Generalități" -#: core/admin.py:69 +#: core/admin.py:74 msgid "relations" msgstr "Relații" -#: core/admin.py:87 +#: core/admin.py:76 +msgid "additional info" +msgstr "informații suplimentare" + +#: core/admin.py:94 msgid "metadata" msgstr "Metadate" -#: core/admin.py:94 +#: core/admin.py:101 msgid "timestamps" msgstr "Timestamps" -#: core/admin.py:109 +#: core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Activați %(verbose_name_plural)s selectat" -#: core/admin.py:114 +#: core/admin.py:121 msgid "selected items have been activated." msgstr "Articolele selectate au fost activate!" -#: core/admin.py:120 +#: core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Dezactivați %(verbose_name_plural)s selectat" -#: core/admin.py:125 +#: core/admin.py:132 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:701 core/models.py:709 +#: core/admin.py:144 core/graphene/object_types.py:609 +#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 msgid "attribute value" msgstr "Atribut Valoare" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 +#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718 msgid "attribute values" msgstr "Valori ale atributului" -#: core/admin.py:146 +#: core/admin.py:153 msgid "image" msgstr "Imagine" -#: core/admin.py:147 core/graphene/object_types.py:501 +#: core/admin.py:154 core/graphene/object_types.py:501 msgid "images" msgstr "Imagini" -#: core/admin.py:155 core/models.py:459 +#: core/admin.py:162 core/models.py:467 msgid "stock" msgstr "Stoc" -#: core/admin.py:156 core/graphene/object_types.py:663 +#: core/admin.py:163 core/graphene/object_types.py:663 msgid "stocks" msgstr "Stocuri" -#: core/admin.py:166 core/models.py:1667 +#: core/admin.py:173 core/models.py:1675 msgid "order product" msgstr "Comanda Produs" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 msgid "order products" msgstr "Comandați produse" -#: core/admin.py:180 core/admin.py:181 +#: core/admin.py:187 core/admin.py:188 msgid "children" msgstr "Copii" -#: core/admin.py:566 +#: core/admin.py:940 msgid "Config" msgstr "Configurare" @@ -747,23 +751,23 @@ 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:118 core/elasticsearch/__init__.py:498 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 msgid "no search term provided." msgstr "Nu a fost furnizat niciun termen de căutare." -#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +#: core/filters.py:65 core/filters.py:399 core/filters.py:526 msgid "Search" msgstr "Căutare" -#: core/filters.py:66 core/filters.py:554 core/filters.py:583 +#: core/filters.py:66 core/filters.py:556 core/filters.py:585 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:399 core/filters.py:526 +#: core/filters.py:67 core/filters.py:401 core/filters.py:528 msgid "Name" msgstr "Nume și prenume" -#: core/filters.py:68 core/filters.py:528 +#: core/filters.py:68 core/filters.py:530 msgid "Categories" msgstr "Categorii" @@ -771,7 +775,7 @@ msgstr "Categorii" msgid "Categories Slugs" msgstr "Categorii Melci" -#: core/filters.py:71 core/filters.py:407 +#: core/filters.py:71 core/filters.py:409 msgid "Tags" msgstr "Etichete" @@ -799,8 +803,8 @@ msgstr "Atribute" msgid "Quantity" msgstr "Cantitate" -#: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:301 core/models.py:383 core/models.py:536 +#: core/filters.py:78 core/filters.py:403 core/filters.py:529 +#: core/models.py:309 core/models.py:391 core/models.py:544 msgid "Slug" msgstr "Melc" @@ -816,7 +820,7 @@ msgstr "Includeți subcategorii" msgid "Include personal ordered" msgstr "Includeți produsele comandate personal" -#: core/filters.py:85 core/models.py:540 +#: core/filters.py:85 core/models.py:548 msgid "SKU" msgstr "SKU" @@ -826,48 +830,48 @@ msgstr "" "Trebuie să existe un category_uuid pentru a utiliza flagul " "include_subcategories" -#: core/filters.py:324 +#: core/filters.py:326 msgid "Search (ID, product name or part number)" msgstr "Căutare (ID, numele produsului sau numărul piesei)" -#: core/filters.py:327 +#: core/filters.py:329 msgid "Bought after (inclusive)" msgstr "Cumpărat după (inclusiv)" -#: core/filters.py:328 +#: core/filters.py:330 msgid "Bought before (inclusive)" msgstr "Cumpărat înainte (inclusiv)" -#: core/filters.py:331 core/filters.py:378 core/filters.py:585 +#: core/filters.py:333 core/filters.py:380 core/filters.py:587 msgid "User email" msgstr "E-mail utilizator" -#: core/filters.py:332 core/filters.py:379 core/filters.py:563 -#: core/filters.py:584 +#: core/filters.py:334 core/filters.py:381 core/filters.py:565 +#: core/filters.py:586 msgid "User UUID" msgstr "UUID utilizator" -#: core/filters.py:333 +#: core/filters.py:335 msgid "Status" msgstr "Statut" -#: core/filters.py:337 +#: core/filters.py:339 msgid "Human Readable ID" msgstr "ID lizibil de către om" -#: core/filters.py:400 +#: core/filters.py:402 msgid "Parent" msgstr "Părinte" -#: core/filters.py:404 +#: core/filters.py:406 msgid "Whole category(has at least 1 product or not)" msgstr "Întreaga categorie (are cel puțin 1 produs sau nu)" -#: core/filters.py:408 +#: core/filters.py:410 msgid "Level" msgstr "Nivel" -#: core/filters.py:558 +#: core/filters.py:560 msgid "Product UUID" msgstr "UUID produs" @@ -923,7 +927,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:679 +#: core/graphene/mutations.py:527 core/viewsets.py:680 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 +1003,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:849 core/models.py:862 -#: core/models.py:1281 core/models.py:1310 core/models.py:1335 -#: core/viewsets.py:682 +#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 +#: core/models.py:1289 core/models.py:1318 core/models.py:1343 +#: core/viewsets.py:683 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} nu există: {uuid}!" @@ -1015,8 +1019,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:672 core/models.py:1144 -#: core/models.py:1744 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 +#: core/models.py:1752 msgid "attributes" msgstr "Atribute" @@ -1029,11 +1033,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:326 core/models.py:626 +#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 msgid "categories" msgstr "Categorii" -#: core/graphene/object_types.py:124 core/models.py:397 +#: core/graphene/object_types.py:124 core/models.py:405 msgid "brands" msgstr "Mărci" @@ -1042,7 +1046,7 @@ msgid "category image url" msgstr "Categorii" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:263 +#: core/models.py:271 msgid "markup percentage" msgstr "Procentul de majorare" @@ -1067,7 +1071,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:169 +#: core/graphene/object_types.py:351 core/models.py:177 msgid "vendors" msgstr "Furnizori" @@ -1092,7 +1096,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:1138 +#: core/models.py:1146 msgid "notifications" msgstr "Notificări" @@ -1100,7 +1104,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:1860 +#: core/graphene/object_types.py:400 core/models.py:1868 msgid "feedback" msgstr "Feedback" @@ -1108,7 +1112,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:1108 +#: core/graphene/object_types.py:436 core/models.py:1116 msgid "billing address" msgstr "Adresa de facturare" @@ -1136,7 +1140,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:1172 +#: core/graphene/object_types.py:465 core/models.py:1180 msgid "orders" msgstr "Ordine" @@ -1148,19 +1152,19 @@ msgstr "URL imagine" msgid "product's images" msgstr "Imagini ale produsului" -#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 +#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 msgid "category" msgstr "Categorie" -#: core/graphene/object_types.py:502 core/models.py:1861 +#: core/graphene/object_types.py:502 core/models.py:1869 msgid "feedbacks" msgstr "Feedback-uri" -#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 +#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 msgid "brand" msgstr "Marca" -#: core/graphene/object_types.py:504 core/models.py:101 +#: core/graphene/object_types.py:504 core/models.py:102 msgid "attribute groups" msgstr "Grupuri de atribute" @@ -1188,7 +1192,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:550 +#: core/graphene/object_types.py:534 core/models.py:558 msgid "products" msgstr "Produse" @@ -1200,15 +1204,15 @@ msgstr "Coduri promoționale" msgid "products on sale" msgstr "Produse scoase la vânzare" -#: core/graphene/object_types.py:651 core/models.py:798 +#: core/graphene/object_types.py:651 core/models.py:806 msgid "promotions" msgstr "Promoții" -#: core/graphene/object_types.py:655 core/models.py:168 +#: core/graphene/object_types.py:655 core/models.py:176 msgid "vendor" msgstr "Furnizor" -#: core/graphene/object_types.py:656 core/models.py:549 +#: core/graphene/object_types.py:656 core/models.py:557 #: 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 +1220,11 @@ msgstr "Furnizor" msgid "product" msgstr "Produs" -#: core/graphene/object_types.py:667 core/models.py:821 +#: core/graphene/object_types.py:667 core/models.py:829 msgid "wishlisted products" msgstr "Produse dorite" -#: core/graphene/object_types.py:673 core/models.py:838 +#: core/graphene/object_types.py:673 core/models.py:846 msgid "wishlists" msgstr "Liste de dorințe" @@ -1228,7 +1232,7 @@ msgstr "Liste de dorințe" msgid "tagged products" msgstr "Produse etichetate" -#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 +#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 msgid "product tags" msgstr "Etichete de produs" @@ -1315,7 +1319,7 @@ msgstr "Rezultate căutare produse" msgid "posts search results" msgstr "Rezultate căutare produse" -#: core/models.py:70 +#: core/models.py:71 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1328,23 +1332,23 @@ msgstr "" " lucru poate fi util pentru clasificarea și gestionarea mai eficientă a " "atributelor în cadrul unui sistem complex." -#: core/models.py:86 +#: core/models.py:87 msgid "parent of this group" msgstr "Părinte al acestui grup" -#: core/models.py:87 +#: core/models.py:88 msgid "parent attribute group" msgstr "Grup de atribute părinte" -#: core/models.py:91 core/models.py:92 +#: core/models.py:92 core/models.py:93 msgid "attribute group's name" msgstr "Numele grupului de atribute" -#: core/models.py:100 core/models.py:634 +#: core/models.py:101 core/models.py:642 msgid "attribute group" msgstr "Grup de atribute" -#: core/models.py:106 +#: core/models.py:107 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1363,34 +1367,42 @@ msgstr "" "metadate și constrângeri suplimentare, ceea ce îl face potrivit pentru " "utilizarea în sisteme care interacționează cu furnizori terți." -#: core/models.py:119 +#: core/models.py:120 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Stochează acreditările și punctele finale necesare pentru comunicarea API a " "furnizorului" -#: core/models.py:120 +#: core/models.py:121 msgid "authentication info" msgstr "Informații privind autentificarea" -#: core/models.py:125 +#: core/models.py:126 msgid "define the markup for products retrieved from this vendor" msgstr "" "Definirea marjei de profit pentru produsele preluate de la acest furnizor" -#: core/models.py:126 +#: core/models.py:127 msgid "vendor markup percentage" msgstr "Procentul de majorare al furnizorului" -#: core/models.py:130 +#: core/models.py:131 msgid "name of this vendor" msgstr "Numele acestui vânzător" -#: core/models.py:131 +#: core/models.py:132 msgid "vendor name" msgstr "Numele furnizorului" -#: core/models.py:177 +#: core/models.py:143 +msgid "response file" +msgstr "fișier de răspuns" + +#: core/models.py:144 +msgid "vendor's last processing response" +msgstr "ultimul răspuns de prelucrare al vânzătorului" + +#: core/models.py:185 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1405,27 +1417,27 @@ msgstr "" "Aceasta acceptă operațiuni exportate prin mixins și oferă personalizarea " "metadatelor în scopuri administrative." -#: core/models.py:189 core/models.py:220 +#: core/models.py:197 core/models.py:228 msgid "internal tag identifier for the product tag" msgstr "Identificator intern de etichetă pentru eticheta produsului" -#: core/models.py:190 core/models.py:221 +#: core/models.py:198 core/models.py:229 msgid "tag name" msgstr "Nume etichetă" -#: core/models.py:194 core/models.py:225 +#: core/models.py:202 core/models.py:233 msgid "user-friendly name for the product tag" msgstr "Nume ușor de utilizat pentru eticheta produsului" -#: core/models.py:195 core/models.py:226 +#: core/models.py:203 core/models.py:234 msgid "tag display name" msgstr "Nume afișare etichetă" -#: core/models.py:203 +#: core/models.py:211 msgid "product tag" msgstr "Etichetă produs" -#: core/models.py:209 +#: core/models.py:217 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 +1448,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:234 +#: core/models.py:242 msgid "category tag" msgstr "etichetă de categorie" -#: core/models.py:235 core/models.py:307 +#: core/models.py:243 core/models.py:315 msgid "category tags" msgstr "Etichete de categorie" -#: core/models.py:240 +#: core/models.py:248 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1466,52 +1478,52 @@ msgstr "" " administratorilor să specifice numele, descrierea și ierarhia categoriilor," " precum și să atribuie atribute precum imagini, etichete sau prioritate." -#: core/models.py:254 +#: core/models.py:262 msgid "upload an image representing this category" msgstr "Încărcați o imagine care reprezintă această categorie" -#: core/models.py:257 +#: core/models.py:265 msgid "category image" msgstr "Categorie imagine" -#: core/models.py:262 +#: core/models.py:270 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:271 +#: core/models.py:279 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:272 +#: core/models.py:280 msgid "parent category" msgstr "Categoria de părinți" -#: core/models.py:277 +#: core/models.py:285 msgid "category name" msgstr "Numele categoriei" -#: core/models.py:278 +#: core/models.py:286 msgid "provide a name for this category" msgstr "Furnizați un nume pentru această categorie" -#: core/models.py:285 +#: core/models.py:293 msgid "add a detailed description for this category" msgstr "Adăugați o descriere detaliată pentru această categorie" -#: core/models.py:286 +#: core/models.py:294 msgid "category description" msgstr "Descriere categorie" -#: core/models.py:306 +#: core/models.py:314 msgid "tags that help describe or group this category" msgstr "etichete care ajută la descrierea sau gruparea acestei categorii" -#: core/models.py:313 core/models.py:389 +#: core/models.py:321 core/models.py:397 msgid "priority" msgstr "Prioritate" -#: core/models.py:332 +#: core/models.py:340 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 +1537,47 @@ msgstr "" "Aceasta permite organizarea și reprezentarea datelor legate de marcă în " "cadrul aplicației." -#: core/models.py:342 +#: core/models.py:350 msgid "name of this brand" msgstr "Denumirea acestui brand" -#: core/models.py:343 +#: core/models.py:351 msgid "brand name" msgstr "Nume de marcă" -#: core/models.py:350 +#: core/models.py:358 msgid "upload a logo representing this brand" msgstr "Încărcați un logo care reprezintă acest brand" -#: core/models.py:352 +#: core/models.py:360 msgid "brand small image" msgstr "Brand imagine mică" -#: core/models.py:358 +#: core/models.py:366 msgid "upload a big logo representing this brand" msgstr "Încărcați un logo mare care reprezintă acest brand" -#: core/models.py:360 +#: core/models.py:368 msgid "brand big image" msgstr "Imagine de marcă mare" -#: core/models.py:365 +#: core/models.py:373 msgid "add a detailed description of the brand" msgstr "Adăugați o descriere detaliată a mărcii" -#: core/models.py:366 +#: core/models.py:374 msgid "brand description" msgstr "Descrierea mărcii" -#: core/models.py:371 +#: core/models.py:379 msgid "optional categories that this brand is associated with" msgstr "Categorii opționale cu care acest brand este asociat" -#: core/models.py:372 +#: core/models.py:380 msgid "associated categories" msgstr "Categorii" -#: core/models.py:402 +#: core/models.py:410 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 +1593,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:414 +#: core/models.py:422 msgid "the vendor supplying this product stock" msgstr "Furnizorul care furnizează acest stoc de produse" -#: core/models.py:415 +#: core/models.py:423 msgid "associated vendor" msgstr "Furnizor asociat" -#: core/models.py:419 +#: core/models.py:427 msgid "final price to the customer after markups" msgstr "Prețul final pentru client după majorări" -#: core/models.py:420 +#: core/models.py:428 msgid "selling price" msgstr "Prețul de vânzare" -#: core/models.py:425 +#: core/models.py:433 msgid "the product associated with this stock entry" msgstr "Produsul asociat cu această intrare în stoc" -#: core/models.py:426 core/models.py:697 core/models.py:744 -#: core/models.py:1641 +#: core/models.py:434 core/models.py:705 core/models.py:752 +#: core/models.py:1649 msgid "associated product" msgstr "Produs asociat" -#: core/models.py:433 +#: core/models.py:441 msgid "the price paid to the vendor for this product" msgstr "Prețul plătit vânzătorului pentru acest produs" -#: core/models.py:434 +#: core/models.py:442 msgid "vendor purchase price" msgstr "Prețul de achiziție al furnizorului" -#: core/models.py:438 +#: core/models.py:446 msgid "available quantity of the product in stock" msgstr "Cantitatea disponibilă a produsului în stoc" -#: core/models.py:439 +#: core/models.py:447 msgid "quantity in stock" msgstr "Cantitate în stoc" -#: core/models.py:443 +#: core/models.py:451 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU atribuit de furnizor pentru identificarea produsului" -#: core/models.py:444 +#: core/models.py:452 msgid "vendor sku" msgstr "SKU al furnizorului" -#: core/models.py:450 +#: core/models.py:458 msgid "digital file associated with this stock if applicable" msgstr "Fișier digital asociat cu acest stoc, dacă este cazul" -#: core/models.py:451 +#: core/models.py:459 msgid "digital file" msgstr "Fișier digital" -#: core/models.py:460 +#: core/models.py:468 msgid "stock entries" msgstr "Intrări pe stoc" -#: core/models.py:465 +#: core/models.py:473 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1663,55 +1675,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:478 +#: core/models.py:486 msgid "category this product belongs to" msgstr "Categoria din care face parte acest produs" -#: core/models.py:487 +#: core/models.py:495 msgid "optionally associate this product with a brand" msgstr "Opțional, asociați acest produs cu un brand" -#: core/models.py:493 +#: core/models.py:501 msgid "tags that help describe or group this product" msgstr "Etichete care ajută la descrierea sau gruparea acestui produs" -#: core/models.py:498 +#: core/models.py:506 msgid "indicates whether this product is digitally delivered" msgstr "Indică dacă acest produs este livrat digital" -#: core/models.py:499 +#: core/models.py:507 msgid "is product digital" msgstr "Produsul este digital" -#: core/models.py:505 +#: core/models.py:513 msgid "provide a clear identifying name for the product" msgstr "Furnizați o denumire clară de identificare a produsului" -#: core/models.py:506 +#: core/models.py:514 msgid "product name" msgstr "Denumirea produsului" -#: core/models.py:511 core/models.py:786 +#: core/models.py:519 core/models.py:794 msgid "add a detailed description of the product" msgstr "Adăugați o descriere detaliată a produsului" -#: core/models.py:512 +#: core/models.py:520 msgid "product description" msgstr "Descrierea produsului" -#: core/models.py:519 +#: core/models.py:527 msgid "part number for this product" msgstr "Numărul piesei pentru acest produs" -#: core/models.py:520 +#: core/models.py:528 msgid "part number" msgstr "Numărul piesei" -#: core/models.py:539 +#: core/models.py:547 msgid "stock keeping unit for this product" msgstr "Stock Keeping Unit pentru acest produs" -#: core/models.py:613 +#: core/models.py:621 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 +1739,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:625 +#: core/models.py:633 msgid "category of this attribute" msgstr "Categoria acestui atribut" -#: core/models.py:633 +#: core/models.py:641 msgid "group of this attribute" msgstr "Grupul acestui atribut" -#: core/models.py:639 +#: core/models.py:647 msgid "string" msgstr "Șir de caractere" -#: core/models.py:640 +#: core/models.py:648 msgid "integer" msgstr "Număr întreg" -#: core/models.py:641 +#: core/models.py:649 msgid "float" msgstr "Float" -#: core/models.py:642 +#: core/models.py:650 msgid "boolean" msgstr "Boolean" -#: core/models.py:643 +#: core/models.py:651 msgid "array" msgstr "Array" -#: core/models.py:644 +#: core/models.py:652 msgid "object" msgstr "Obiect" -#: core/models.py:646 +#: core/models.py:654 msgid "type of the attribute's value" msgstr "Tipul valorii atributului" -#: core/models.py:647 +#: core/models.py:655 msgid "value type" msgstr "Tipul de valoare" -#: core/models.py:652 +#: core/models.py:660 msgid "name of this attribute" msgstr "Denumirea acestui atribut" -#: core/models.py:653 +#: core/models.py:661 msgid "attribute's name" msgstr "Numele atributului" -#: core/models.py:659 +#: core/models.py:667 msgid "is filterable" msgstr "este filtrabil" -#: core/models.py:660 +#: core/models.py:668 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:671 core/models.py:689 +#: core/models.py:679 core/models.py:697 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Atribut" -#: core/models.py:677 +#: core/models.py:685 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 +1812,19 @@ msgstr "" "produs. Leagă \"atributul\" de o \"valoare\" unică, permițând o mai bună " "organizare și reprezentare dinamică a caracteristicilor produsului." -#: core/models.py:688 +#: core/models.py:696 msgid "attribute of this value" msgstr "Atributul acestei valori" -#: core/models.py:696 +#: core/models.py:704 msgid "the specific product associated with this attribute's value" msgstr "Produsul specific asociat cu valoarea acestui atribut" -#: core/models.py:702 +#: core/models.py:710 msgid "the specific value for this attribute" msgstr "Valoarea specifică pentru acest atribut" -#: core/models.py:715 +#: core/models.py:723 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 +1839,39 @@ msgstr "" "asemenea, include o funcție de accesibilitate cu text alternativ pentru " "imagini." -#: core/models.py:726 +#: core/models.py:734 msgid "provide alternative text for the image for accessibility" msgstr "Furnizați text alternativ pentru imagine pentru accesibilitate" -#: core/models.py:727 +#: core/models.py:735 msgid "image alt text" msgstr "Textul alt al imaginii" -#: core/models.py:730 +#: core/models.py:738 msgid "upload the image file for this product" msgstr "Încărcați fișierul de imagine pentru acest produs" -#: core/models.py:731 core/models.py:756 +#: core/models.py:739 core/models.py:764 msgid "product image" msgstr "Imaginea produsului" -#: core/models.py:737 +#: core/models.py:745 msgid "determines the order in which images are displayed" msgstr "Determină ordinea în care sunt afișate imaginile" -#: core/models.py:738 +#: core/models.py:746 msgid "display priority" msgstr "Prioritatea afișării" -#: core/models.py:743 +#: core/models.py:751 msgid "the product that this image represents" msgstr "Produsul pe care îl reprezintă această imagine" -#: core/models.py:757 +#: core/models.py:765 msgid "product images" msgstr "Imagini ale produsului" -#: core/models.py:762 +#: core/models.py:770 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 +1887,39 @@ msgstr "" "asocierea acesteia la produsele aplicabile. Se integrează cu catalogul de " "produse pentru a determina articolele afectate în cadrul campaniei." -#: core/models.py:774 +#: core/models.py:782 msgid "percentage discount for the selected products" msgstr "Procentul de reducere pentru produsele selectate" -#: core/models.py:775 +#: core/models.py:783 msgid "discount percentage" msgstr "Procent de reducere" -#: core/models.py:780 +#: core/models.py:788 msgid "provide a unique name for this promotion" msgstr "Furnizați un nume unic pentru această promoție" -#: core/models.py:781 +#: core/models.py:789 msgid "promotion name" msgstr "Numele promoției" -#: core/models.py:787 +#: core/models.py:795 msgid "promotion description" msgstr "Descrierea promoției" -#: core/models.py:792 +#: core/models.py:800 msgid "select which products are included in this promotion" msgstr "Selectați ce produse sunt incluse în această promoție" -#: core/models.py:793 +#: core/models.py:801 msgid "included products" msgstr "Produse incluse" -#: core/models.py:797 +#: core/models.py:805 msgid "promotion" msgstr "Promovare" -#: core/models.py:808 +#: core/models.py:816 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 +1932,23 @@ msgstr "" "precum și operațiuni pentru adăugarea și eliminarea mai multor produse " "simultan." -#: core/models.py:820 +#: core/models.py:828 msgid "products that the user has marked as wanted" msgstr "Produse pe care utilizatorul le-a marcat ca fiind dorite" -#: core/models.py:828 +#: core/models.py:836 msgid "user who owns this wishlist" msgstr "Utilizatorul care deține această listă de dorințe" -#: core/models.py:829 +#: core/models.py:837 msgid "wishlist owner" msgstr "Proprietarul listei de dorințe" -#: core/models.py:837 +#: core/models.py:845 msgid "wishlist" msgstr "Lista dorințelor" -#: core/models.py:879 +#: core/models.py:887 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1953,19 +1965,19 @@ msgstr "" "funcționalitatea mixinilor specifici și oferă caracteristici personalizate " "suplimentare." -#: core/models.py:892 +#: core/models.py:900 msgid "documentary" msgstr "Documentar" -#: core/models.py:893 +#: core/models.py:901 msgid "documentaries" msgstr "Documentare" -#: core/models.py:903 +#: core/models.py:911 msgid "unresolved" msgstr "Nerezolvat" -#: core/models.py:908 +#: core/models.py:916 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1987,59 +1999,59 @@ msgstr "" "unei adrese cu un utilizator, facilitând gestionarea personalizată a " "datelor." -#: core/models.py:923 +#: core/models.py:931 msgid "address line for the customer" msgstr "Linia de adresă pentru client" -#: core/models.py:924 +#: core/models.py:932 msgid "address line" msgstr "Linia de adresă" -#: core/models.py:926 +#: core/models.py:934 msgid "street" msgstr "Strada" -#: core/models.py:927 +#: core/models.py:935 msgid "district" msgstr "Districtul" -#: core/models.py:928 +#: core/models.py:936 msgid "city" msgstr "Oraș" -#: core/models.py:929 +#: core/models.py:937 msgid "region" msgstr "Regiunea" -#: core/models.py:930 +#: core/models.py:938 msgid "postal code" msgstr "Cod poștal" -#: core/models.py:931 +#: core/models.py:939 msgid "country" msgstr "Țara" -#: core/models.py:938 +#: core/models.py:946 msgid "geolocation point: (longitude, latitude)" msgstr "Punct de geolocație (longitudine, latitudine)" -#: core/models.py:941 +#: core/models.py:949 msgid "full JSON response from geocoder for this address" msgstr "Răspuns JSON complet de la geocoder pentru această adresă" -#: core/models.py:946 +#: core/models.py:954 msgid "stored JSON response from the geocoding service" msgstr "Răspuns JSON stocat de la serviciul de geocodare" -#: core/models.py:954 +#: core/models.py:962 msgid "address" msgstr "Adresă" -#: core/models.py:955 +#: core/models.py:963 msgid "addresses" msgstr "Adrese" -#: core/models.py:967 +#: core/models.py:975 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 +2069,73 @@ msgstr "" " a codului promoțional la o comandă, asigurându-se în același timp că sunt " "respectate constrângerile." -#: core/models.py:981 +#: core/models.py:989 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:982 +#: core/models.py:990 msgid "promo code identifier" msgstr "Cod promoțional de identificare" -#: core/models.py:989 +#: core/models.py:997 msgid "fixed discount amount applied if percent is not used" msgstr "Valoarea fixă a reducerii aplicate dacă procentul nu este utilizat" -#: core/models.py:990 +#: core/models.py:998 msgid "fixed discount amount" msgstr "Valoarea fixă a reducerii" -#: core/models.py:996 +#: core/models.py:1004 msgid "percentage discount applied if fixed amount is not used" msgstr "Procentul de reducere aplicat dacă suma fixă nu este utilizată" -#: core/models.py:997 +#: core/models.py:1005 msgid "percentage discount" msgstr "Reducere procentuală" -#: core/models.py:1002 +#: core/models.py:1010 msgid "timestamp when the promocode expires" msgstr "Data la care expiră codul promoțional" -#: core/models.py:1003 +#: core/models.py:1011 msgid "end validity time" msgstr "Timpul final de valabilitate" -#: core/models.py:1008 +#: core/models.py:1016 msgid "timestamp from which this promocode is valid" msgstr "Timestamp de la care acest cod promoțional este valabil" -#: core/models.py:1009 +#: core/models.py:1017 msgid "start validity time" msgstr "Ora de începere a valabilității" -#: core/models.py:1014 +#: core/models.py:1022 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:1015 +#: core/models.py:1023 msgid "usage timestamp" msgstr "Timestamp de utilizare" -#: core/models.py:1020 +#: core/models.py:1028 msgid "user assigned to this promocode if applicable" msgstr "Utilizatorul atribuit acestui cod promoțional, dacă este cazul" -#: core/models.py:1021 +#: core/models.py:1029 msgid "assigned user" msgstr "Utilizator atribuit" -#: core/models.py:1028 +#: core/models.py:1036 msgid "promo code" msgstr "Cod promoțional" -#: core/models.py:1029 +#: core/models.py:1037 msgid "promo codes" msgstr "Coduri promoționale" -#: core/models.py:1044 +#: core/models.py:1052 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2131,16 +2143,16 @@ msgstr "" "Trebuie definit un singur tip de reducere (sumă sau procent), dar nu ambele " "sau niciuna." -#: core/models.py:1065 +#: core/models.py:1073 msgid "promocode already used" msgstr "Codul promoțional a fost deja utilizat" -#: core/models.py:1081 +#: core/models.py:1089 #, 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:1090 +#: core/models.py:1098 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 +2169,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:1107 +#: core/models.py:1115 msgid "the billing address used for this order" msgstr "Adresa de facturare utilizată pentru această comandă" -#: core/models.py:1115 +#: core/models.py:1123 msgid "optional promo code applied to this order" msgstr "Cod promoțional opțional aplicat la această comandă" -#: core/models.py:1116 +#: core/models.py:1124 msgid "applied promo code" msgstr "Cod promoțional aplicat" -#: core/models.py:1124 +#: core/models.py:1132 msgid "the shipping address used for this order" msgstr "Adresa de expediere utilizată pentru această comandă" -#: core/models.py:1125 +#: core/models.py:1133 msgid "shipping address" msgstr "Adresa de expediere" -#: core/models.py:1131 +#: core/models.py:1139 msgid "current status of the order in its lifecycle" msgstr "Stadiul actual al comenzii în ciclul său de viață" -#: core/models.py:1132 +#: core/models.py:1140 msgid "order status" msgstr "Stadiul comenzii" -#: core/models.py:1137 core/models.py:1618 +#: core/models.py:1145 core/models.py:1626 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:1143 +#: core/models.py:1151 msgid "json representation of order attributes for this order" msgstr "Reprezentarea JSON a atributelor comenzii pentru această comandă" -#: core/models.py:1149 +#: core/models.py:1157 msgid "the user who placed the order" msgstr "Utilizatorul care a plasat comanda" -#: core/models.py:1150 +#: core/models.py:1158 msgid "user" msgstr "Utilizator" -#: core/models.py:1156 +#: core/models.py:1164 msgid "the timestamp when the order was finalized" msgstr "Momentul în care comanda a fost finalizată" -#: core/models.py:1157 +#: core/models.py:1165 msgid "buy time" msgstr "Cumpărați timp" -#: core/models.py:1164 +#: core/models.py:1172 msgid "a human-readable identifier for the order" msgstr "Un identificator ușor de citit pentru comandă" -#: core/models.py:1165 +#: core/models.py:1173 msgid "human readable id" msgstr "ID lizibil de către om" -#: core/models.py:1171 +#: core/models.py:1179 msgid "order" msgstr "Comandă" -#: core/models.py:1209 +#: core/models.py:1217 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:1249 +#: core/models.py:1257 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:1254 +#: core/models.py:1262 msgid "you cannot add inactive products to order" msgstr "Nu puteți adăuga produse inactive la comandă" -#: core/models.py:1271 +#: core/models.py:1279 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:1293 core/models.py:1318 core/models.py:1326 +#: core/models.py:1301 core/models.py:1326 core/models.py:1334 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:1314 +#: core/models.py:1322 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} nu există cu interogarea <{query}>!" -#: core/models.py:1346 +#: core/models.py:1354 msgid "promocode does not exist" msgstr "Codul promoțional nu există" -#: core/models.py:1352 +#: core/models.py:1360 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:1371 +#: core/models.py:1379 msgid "address does not exist" msgstr "Adresa nu există" -#: core/models.py:1392 core/models.py:1461 +#: core/models.py:1400 core/models.py:1469 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:1395 core/models.py:1457 +#: core/models.py:1403 core/models.py:1465 msgid "invalid force value" msgstr "Valoare forță invalidă" -#: core/models.py:1401 core/models.py:1464 +#: core/models.py:1409 core/models.py:1472 msgid "you cannot purchase an empty order!" msgstr "Nu puteți achiziționa o comandă goală!" -#: core/models.py:1420 +#: core/models.py:1428 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:1434 +#: core/models.py:1442 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:1439 +#: core/models.py:1447 msgid "insufficient funds to complete the order" msgstr "Insuficiența fondurilor pentru finalizarea comenzii" -#: core/models.py:1473 +#: core/models.py:1481 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2298,7 +2310,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:1482 +#: core/models.py:1490 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2306,7 +2318,7 @@ msgstr "" "Metodă de plată invalidă: {payment_method} de la " "{available_payment_methods}!" -#: core/models.py:1591 +#: core/models.py:1599 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2329,110 +2341,110 @@ msgstr "" "produsele digitale. Modelul se integrează cu modelele Order și Product și " "stochează o referință la acestea." -#: core/models.py:1606 +#: core/models.py:1614 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:1607 +#: core/models.py:1615 msgid "purchase price at order time" msgstr "Prețul de achiziție la momentul comenzii" -#: core/models.py:1612 +#: core/models.py:1620 msgid "internal comments for admins about this ordered product" msgstr "" "Comentarii interne pentru administratori cu privire la acest produs comandat" -#: core/models.py:1613 +#: core/models.py:1621 msgid "internal comments" msgstr "Observații interne" -#: core/models.py:1619 +#: core/models.py:1627 msgid "user notifications" msgstr "Notificări pentru utilizatori" -#: core/models.py:1624 +#: core/models.py:1632 msgid "json representation of this item's attributes" msgstr "Reprezentarea JSON a atributelor acestui element" -#: core/models.py:1625 +#: core/models.py:1633 msgid "ordered product attributes" msgstr "Atribute de produs ordonate" -#: core/models.py:1630 +#: core/models.py:1638 msgid "reference to the parent order that contains this product" msgstr "Trimitere la comanda mamă care conține acest produs" -#: core/models.py:1631 +#: core/models.py:1639 msgid "parent order" msgstr "Ordinul părinților" -#: core/models.py:1640 +#: core/models.py:1648 msgid "the specific product associated with this order line" msgstr "Produsul specific asociat cu această linie de comandă" -#: core/models.py:1647 +#: core/models.py:1655 msgid "quantity of this specific product in the order" msgstr "Cantitatea acestui produs specific din comandă" -#: core/models.py:1648 +#: core/models.py:1656 msgid "product quantity" msgstr "Cantitatea produsului" -#: core/models.py:1655 +#: core/models.py:1663 msgid "current status of this product in the order" msgstr "Starea actuală a acestui produs în comandă" -#: core/models.py:1656 +#: core/models.py:1664 msgid "product line status" msgstr "Starea liniei de produse" -#: core/models.py:1719 +#: core/models.py:1727 msgid "order product must have an order" msgstr "Comandaprodusul trebuie să aibă o comandă asociată!" -#: core/models.py:1721 +#: core/models.py:1729 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Acțiune greșită specificată pentru feedback: {action}!" -#: core/models.py:1735 +#: core/models.py:1743 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:1741 +#: core/models.py:1749 msgid "name" msgstr "Nume și prenume" -#: core/models.py:1742 +#: core/models.py:1750 msgid "URL of the integration" msgstr "Adresa URL a integrării" -#: core/models.py:1743 +#: core/models.py:1751 msgid "authentication credentials" msgstr "Acreditări de autentificare" -#: core/models.py:1765 +#: core/models.py:1773 msgid "you can only have one default CRM provider" msgstr "Puteți avea un singur furnizor CRM implicit" -#: core/models.py:1775 +#: core/models.py:1783 msgid "CRM" msgstr "CRM" -#: core/models.py:1776 +#: core/models.py:1784 msgid "CRMs" msgstr "CRM-uri" -#: core/models.py:1788 +#: core/models.py:1796 msgid "order CRM link" msgstr "Legătura CRM a comenzii" -#: core/models.py:1789 +#: core/models.py:1797 msgid "orders CRM links" msgstr "Legături CRM pentru comenzi" -#: core/models.py:1794 +#: core/models.py:1802 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2449,15 +2461,15 @@ msgstr "" "adrese URL pentru descărcarea activului atunci când comanda asociată este în" " stare finalizată." -#: core/models.py:1808 +#: core/models.py:1816 msgid "download" msgstr "Descărcare" -#: core/models.py:1809 +#: core/models.py:1817 msgid "downloads" msgstr "Descărcări" -#: core/models.py:1823 +#: core/models.py:1831 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,31 +2484,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:1835 +#: core/models.py:1843 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:1836 +#: core/models.py:1844 msgid "feedback comments" msgstr "Comentarii de feedback" -#: core/models.py:1843 +#: core/models.py:1851 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:1844 +#: core/models.py:1852 msgid "related order product" msgstr "Produs aferent comenzii" -#: core/models.py:1849 +#: core/models.py:1857 msgid "user-assigned rating for the product" msgstr "Rating atribuit de utilizator pentru produs" -#: core/models.py:1850 +#: core/models.py:1858 msgid "product rating" msgstr "Evaluarea produsului" @@ -2714,22 +2726,22 @@ msgstr "Sunt necesare atât datele, cât și timpul de așteptare" msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "Valoare timeout invalidă, trebuie să fie între 0 și 216000 secunde" -#: core/utils/emailing.py:25 +#: core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | contactați-ne inițiat" -#: core/utils/emailing.py:74 +#: core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Confirmarea comenzii" -#: core/utils/emailing.py:109 +#: core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Livrarea comenzii" -#: core/utils/emailing.py:197 +#: core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | promocode acordat" @@ -2981,7 +2993,7 @@ msgstr "" "Feedback accesibile. Aceasta extinde clasa de bază `EvibesViewSet` și " "utilizează sistemul de filtrare Django pentru interogarea datelor." -#: core/viewsets.py:593 +#: core/viewsets.py:594 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3001,7 +3013,7 @@ msgstr "" "de acțiunea specifică efectuată și aplică permisiunile corespunzătoare în " "timpul interacțiunii cu datele comenzii." -#: core/viewsets.py:782 +#: core/viewsets.py:784 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3016,12 +3028,12 @@ msgstr "" "solicitată. În plus, oferă o acțiune detaliată pentru gestionarea feedback-" "ului privind instanțele OrderProduct" -#: core/viewsets.py:833 +#: core/viewsets.py:835 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 +#: core/viewsets.py:847 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3029,16 +3041,16 @@ msgstr "" "Gestionează recuperarea și gestionarea instanțelor PromoCode prin diverse " "acțiuni API." -#: core/viewsets.py:866 +#: core/viewsets.py:868 msgid "Represents a view set for managing promotions. " msgstr "Reprezintă un set de vizualizări pentru gestionarea promoțiilor." -#: core/viewsets.py:878 +#: core/viewsets.py:880 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 +#: core/viewsets.py:894 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3057,7 +3069,7 @@ msgstr "" "utilizatorii își pot gestiona doar propriile liste de dorințe, cu excepția " "cazului în care sunt acordate permisiuni explicite." -#: core/viewsets.py:1007 +#: core/viewsets.py:1009 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3072,12 +3084,12 @@ msgstr "" "serializatorului și gestionarea permisiunilor în funcție de contextul " "cererii." -#: core/viewsets.py:1074 +#: core/viewsets.py:1076 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Eroare de geocodare: {e}" -#: core/viewsets.py:1081 +#: core/viewsets.py:1083 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/ru_RU/LC_MESSAGES/django.mo b/core/locale/ru_RU/LC_MESSAGES/django.mo index fcc5a124..37d97b91 100644 Binary files a/core/locale/ru_RU/LC_MESSAGES/django.mo and b/core/locale/ru_RU/LC_MESSAGES/django.mo differ diff --git a/core/locale/ru_RU/LC_MESSAGES/django.po b/core/locale/ru_RU/LC_MESSAGES/django.po index 298fb489..cf04f70d 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -51,82 +51,86 @@ msgstr "Модифицированный" msgid "when the object was last modified" msgstr "Когда объект был отредактирован в последний раз" -#: core/admin.py:63 +#: core/admin.py:68 msgid "translations" msgstr "Переводы" -#: core/admin.py:67 +#: core/admin.py:72 msgid "general" msgstr "Общие сведения" -#: core/admin.py:69 +#: core/admin.py:74 msgid "relations" msgstr "Отношения" -#: core/admin.py:87 +#: core/admin.py:76 +msgid "additional info" +msgstr "дополнительная информация" + +#: core/admin.py:94 msgid "metadata" msgstr "Метаданные" -#: core/admin.py:94 +#: core/admin.py:101 msgid "timestamps" msgstr "Временные метки" -#: core/admin.py:109 +#: core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Активировать выбранный %(verbose_name_plural)s" -#: core/admin.py:114 +#: core/admin.py:121 msgid "selected items have been activated." msgstr "Выбранные сущности активированы!" -#: core/admin.py:120 +#: core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Деактивировать выбранный %(verbose_name_plural)s" -#: core/admin.py:125 +#: core/admin.py:132 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:701 core/models.py:709 +#: core/admin.py:144 core/graphene/object_types.py:609 +#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 msgid "attribute value" msgstr "Значение атрибута" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 +#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718 msgid "attribute values" msgstr "Значения атрибутов" -#: core/admin.py:146 +#: core/admin.py:153 msgid "image" msgstr "Изображение" -#: core/admin.py:147 core/graphene/object_types.py:501 +#: core/admin.py:154 core/graphene/object_types.py:501 msgid "images" msgstr "Изображения" -#: core/admin.py:155 core/models.py:459 +#: core/admin.py:162 core/models.py:467 msgid "stock" msgstr "Наличие" -#: core/admin.py:156 core/graphene/object_types.py:663 +#: core/admin.py:163 core/graphene/object_types.py:663 msgid "stocks" msgstr "Наличия" -#: core/admin.py:166 core/models.py:1667 +#: core/admin.py:173 core/models.py:1675 msgid "order product" msgstr "Заказанный товар" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 msgid "order products" msgstr "Заказанные товары" -#: core/admin.py:180 core/admin.py:181 +#: core/admin.py:187 core/admin.py:188 msgid "children" msgstr "Дети" -#: core/admin.py:566 +#: core/admin.py:940 msgid "Config" msgstr "Конфигурация" @@ -746,23 +750,23 @@ msgstr "удалить отношение \"заказ-продукт" msgid "add or remove feedback on an order–product relation" msgstr "добавлять или удалять отзывы о связи заказ-продукт" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 msgid "no search term provided." msgstr "Поисковый запрос не предоставлен." -#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +#: core/filters.py:65 core/filters.py:399 core/filters.py:526 msgid "Search" msgstr "Поиск" -#: core/filters.py:66 core/filters.py:554 core/filters.py:583 +#: core/filters.py:66 core/filters.py:556 core/filters.py:585 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:399 core/filters.py:526 +#: core/filters.py:67 core/filters.py:401 core/filters.py:528 msgid "Name" msgstr "Имя" -#: core/filters.py:68 core/filters.py:528 +#: core/filters.py:68 core/filters.py:530 msgid "Categories" msgstr "Категории" @@ -770,7 +774,7 @@ msgstr "Категории" msgid "Categories Slugs" msgstr "Категории Слизни" -#: core/filters.py:71 core/filters.py:407 +#: core/filters.py:71 core/filters.py:409 msgid "Tags" msgstr "Теги" @@ -798,8 +802,8 @@ msgstr "Атрибуты" msgid "Quantity" msgstr "Количество" -#: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:301 core/models.py:383 core/models.py:536 +#: core/filters.py:78 core/filters.py:403 core/filters.py:529 +#: core/models.py:309 core/models.py:391 core/models.py:544 msgid "Slug" msgstr "Слаг" @@ -815,7 +819,7 @@ msgstr "Включите подкатегории" msgid "Include personal ordered" msgstr "Включите продукты, заказанные лично" -#: core/filters.py:85 core/models.py:540 +#: core/filters.py:85 core/models.py:548 msgid "SKU" msgstr "Артикул" @@ -825,48 +829,48 @@ msgstr "" "Для использования флага include_subcategories должен быть указан " "category_uuid." -#: core/filters.py:324 +#: core/filters.py:326 msgid "Search (ID, product name or part number)" msgstr "Поиск (идентификатор, название продукта или номер детали)" -#: core/filters.py:327 +#: core/filters.py:329 msgid "Bought after (inclusive)" msgstr "Куплено после (включительно)" -#: core/filters.py:328 +#: core/filters.py:330 msgid "Bought before (inclusive)" msgstr "Куплено ранее (включительно)" -#: core/filters.py:331 core/filters.py:378 core/filters.py:585 +#: core/filters.py:333 core/filters.py:380 core/filters.py:587 msgid "User email" msgstr "Электронная почта пользователя" -#: core/filters.py:332 core/filters.py:379 core/filters.py:563 -#: core/filters.py:584 +#: core/filters.py:334 core/filters.py:381 core/filters.py:565 +#: core/filters.py:586 msgid "User UUID" msgstr "UUID пользователя" -#: core/filters.py:333 +#: core/filters.py:335 msgid "Status" msgstr "Статус" -#: core/filters.py:337 +#: core/filters.py:339 msgid "Human Readable ID" msgstr "Человекочитаемый идентификатор" -#: core/filters.py:400 +#: core/filters.py:402 msgid "Parent" msgstr "Родитель" -#: core/filters.py:404 +#: core/filters.py:406 msgid "Whole category(has at least 1 product or not)" msgstr "Вся категория (есть хотя бы 1 продукт или нет)" -#: core/filters.py:408 +#: core/filters.py:410 msgid "Level" msgstr "Уровень" -#: core/filters.py:558 +#: core/filters.py:560 msgid "Product UUID" msgstr "UUID продукта" @@ -923,7 +927,7 @@ msgstr "" "варианты!" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:679 +#: core/graphene/mutations.py:527 core/viewsets.py:680 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Неправильный тип получен из метода order.buy(): {type(instance)!s}" @@ -999,9 +1003,9 @@ msgstr "Заказ товара {order_product_uuid} не найден!" msgid "original address string provided by the user" msgstr "Оригинальная строка адреса, предоставленная пользователем" -#: 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 +#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 +#: core/models.py:1289 core/models.py:1318 core/models.py:1343 +#: core/viewsets.py:683 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} не существует: {uuid}!" @@ -1015,8 +1019,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:672 core/models.py:1144 -#: core/models.py:1744 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 +#: core/models.py:1752 msgid "attributes" msgstr "Атрибуты" @@ -1029,11 +1033,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:326 core/models.py:626 +#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 msgid "categories" msgstr "Категории" -#: core/graphene/object_types.py:124 core/models.py:397 +#: core/graphene/object_types.py:124 core/models.py:405 msgid "brands" msgstr "Бренды" @@ -1042,7 +1046,7 @@ msgid "category image url" msgstr "Категории" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:263 +#: core/models.py:271 msgid "markup percentage" msgstr "Процент наценки" @@ -1066,7 +1070,7 @@ msgstr "Теги для этой категории" msgid "products in this category" msgstr "Продукты в этой категории" -#: core/graphene/object_types.py:351 core/models.py:169 +#: core/graphene/object_types.py:351 core/models.py:177 msgid "vendors" msgstr "Поставщики" @@ -1092,7 +1096,7 @@ msgid "represents feedback from a user." msgstr "Представляет собой отзыв пользователя." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1138 +#: core/models.py:1146 msgid "notifications" msgstr "Уведомления" @@ -1100,7 +1104,7 @@ msgstr "Уведомления" msgid "download url for this order product if applicable" msgstr "Если применимо, загрузите url для этого продукта заказа" -#: core/graphene/object_types.py:400 core/models.py:1860 +#: core/graphene/object_types.py:400 core/models.py:1868 msgid "feedback" msgstr "Обратная связь" @@ -1108,7 +1112,7 @@ msgstr "Обратная связь" msgid "a list of order products in this order" msgstr "Список товаров, заказанных в этом заказе" -#: core/graphene/object_types.py:436 core/models.py:1108 +#: core/graphene/object_types.py:436 core/models.py:1116 msgid "billing address" msgstr "Адрес для выставления счетов" @@ -1136,7 +1140,7 @@ msgstr "Все ли товары в заказе представлены в ц msgid "transactions for this order" msgstr "Операции для этого заказа" -#: core/graphene/object_types.py:465 core/models.py:1172 +#: core/graphene/object_types.py:465 core/models.py:1180 msgid "orders" msgstr "Заказы" @@ -1148,19 +1152,19 @@ msgstr "URL-адрес изображения" msgid "product's images" msgstr "Изображения товара" -#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 +#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 msgid "category" msgstr "Категория" -#: core/graphene/object_types.py:502 core/models.py:1861 +#: core/graphene/object_types.py:502 core/models.py:1869 msgid "feedbacks" msgstr "Отзывы" -#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 +#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 msgid "brand" msgstr "Бренд" -#: core/graphene/object_types.py:504 core/models.py:101 +#: core/graphene/object_types.py:504 core/models.py:102 msgid "attribute groups" msgstr "Группы атрибутов" @@ -1188,7 +1192,7 @@ msgstr "Количество отзывов" msgid "only available for personal orders" msgstr "Продукты доступны только для личных заказов" -#: core/graphene/object_types.py:534 core/models.py:550 +#: core/graphene/object_types.py:534 core/models.py:558 msgid "products" msgstr "Товары" @@ -1200,15 +1204,15 @@ msgstr "Промокоды" msgid "products on sale" msgstr "Продукты в продаже" -#: core/graphene/object_types.py:651 core/models.py:798 +#: core/graphene/object_types.py:651 core/models.py:806 msgid "promotions" msgstr "Промоакции" -#: core/graphene/object_types.py:655 core/models.py:168 +#: core/graphene/object_types.py:655 core/models.py:176 msgid "vendor" msgstr "Поставщик" -#: core/graphene/object_types.py:656 core/models.py:549 +#: core/graphene/object_types.py:656 core/models.py:557 #: 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 +1220,11 @@ msgstr "Поставщик" msgid "product" msgstr "Товар" -#: core/graphene/object_types.py:667 core/models.py:821 +#: core/graphene/object_types.py:667 core/models.py:829 msgid "wishlisted products" msgstr "Продукты из списка желаний" -#: core/graphene/object_types.py:673 core/models.py:838 +#: core/graphene/object_types.py:673 core/models.py:846 msgid "wishlists" msgstr "Списки желаний" @@ -1228,7 +1232,7 @@ msgstr "Списки желаний" msgid "tagged products" msgstr "Tagged products" -#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 +#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 msgid "product tags" msgstr "Теги товара" @@ -1315,7 +1319,7 @@ msgstr "Результаты поиска товаров" msgid "posts search results" msgstr "Результаты поиска товаров" -#: core/models.py:70 +#: core/models.py:71 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1328,23 +1332,23 @@ msgstr "" "быть полезно для категоризации и более эффективного управления атрибутами в " "сложной системе." -#: core/models.py:86 +#: core/models.py:87 msgid "parent of this group" msgstr "Родитель этой группы" -#: core/models.py:87 +#: core/models.py:88 msgid "parent attribute group" msgstr "Родительская группа атрибутов" -#: core/models.py:91 core/models.py:92 +#: core/models.py:92 core/models.py:93 msgid "attribute group's name" msgstr "Имя группы атрибутов" -#: core/models.py:100 core/models.py:634 +#: core/models.py:101 core/models.py:642 msgid "attribute group" msgstr "Группа атрибутов" -#: core/models.py:106 +#: core/models.py:107 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1363,33 +1367,41 @@ msgstr "" "метаданные и ограничения, что делает ее пригодной для использования в " "системах, взаимодействующих со сторонними поставщиками." -#: core/models.py:119 +#: core/models.py:120 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Хранит учетные данные и конечные точки, необходимые для взаимодействия с API" " поставщика." -#: core/models.py:120 +#: core/models.py:121 msgid "authentication info" msgstr "Информация об аутентификации" -#: core/models.py:125 +#: core/models.py:126 msgid "define the markup for products retrieved from this vendor" msgstr "Определите наценку для товаров, полученных от этого продавца" -#: core/models.py:126 +#: core/models.py:127 msgid "vendor markup percentage" msgstr "Процент наценки поставщика" -#: core/models.py:130 +#: core/models.py:131 msgid "name of this vendor" msgstr "Имя этого продавца" -#: core/models.py:131 +#: core/models.py:132 msgid "vendor name" msgstr "Название поставщика" -#: core/models.py:177 +#: core/models.py:143 +msgid "response file" +msgstr "файл ответа" + +#: core/models.py:144 +msgid "vendor's last processing response" +msgstr "последний ответ поставщика на обработку" + +#: core/models.py:185 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1404,27 +1416,27 @@ msgstr "" "экспортируемые через миксины, и обеспечивает настройку метаданных для " "административных целей." -#: core/models.py:189 core/models.py:220 +#: core/models.py:197 core/models.py:228 msgid "internal tag identifier for the product tag" msgstr "Внутренний идентификатор тега для тега продукта" -#: core/models.py:190 core/models.py:221 +#: core/models.py:198 core/models.py:229 msgid "tag name" msgstr "Название тега" -#: core/models.py:194 core/models.py:225 +#: core/models.py:202 core/models.py:233 msgid "user-friendly name for the product tag" msgstr "Удобное название для метки продукта" -#: core/models.py:195 core/models.py:226 +#: core/models.py:203 core/models.py:234 msgid "tag display name" msgstr "Отображаемое имя тега" -#: core/models.py:203 +#: core/models.py:211 msgid "product tag" msgstr "Метка продукта" -#: core/models.py:209 +#: core/models.py:217 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 +1447,15 @@ msgstr "" "классификации продуктов. Он включает атрибуты для внутреннего идентификатора" " тега и удобного для пользователя отображаемого имени." -#: core/models.py:234 +#: core/models.py:242 msgid "category tag" msgstr "тег категории" -#: core/models.py:235 core/models.py:307 +#: core/models.py:243 core/models.py:315 msgid "category tags" msgstr "теги категорий" -#: core/models.py:240 +#: core/models.py:248 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1465,51 +1477,51 @@ msgstr "" "администраторам указывать название, описание и иерархию категорий, а также " "назначать атрибуты, такие как изображения, теги или приоритет." -#: core/models.py:254 +#: core/models.py:262 msgid "upload an image representing this category" msgstr "Загрузите изображение, представляющее эту категорию" -#: core/models.py:257 +#: core/models.py:265 msgid "category image" msgstr "Изображение категории" -#: core/models.py:262 +#: core/models.py:270 msgid "define a markup percentage for products in this category" msgstr "Определите процент наценки для товаров в этой категории" -#: core/models.py:271 +#: core/models.py:279 msgid "parent of this category to form a hierarchical structure" msgstr "Родитель данной категории для формирования иерархической структуры" -#: core/models.py:272 +#: core/models.py:280 msgid "parent category" msgstr "Родительская категория" -#: core/models.py:277 +#: core/models.py:285 msgid "category name" msgstr "Название категории" -#: core/models.py:278 +#: core/models.py:286 msgid "provide a name for this category" msgstr "Укажите название этой категории" -#: core/models.py:285 +#: core/models.py:293 msgid "add a detailed description for this category" msgstr "Добавьте подробное описание для этой категории" -#: core/models.py:286 +#: core/models.py:294 msgid "category description" msgstr "Описание категории" -#: core/models.py:306 +#: core/models.py:314 msgid "tags that help describe or group this category" msgstr "теги, которые помогают описать или сгруппировать эту категорию" -#: core/models.py:313 core/models.py:389 +#: core/models.py:321 core/models.py:397 msgid "priority" msgstr "Приоритет" -#: core/models.py:332 +#: core/models.py:340 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 +1534,47 @@ msgstr "" "связанные категории, уникальную метку и порядок приоритетов. Он позволяет " "организовать и представить данные, связанные с брендом, в приложении." -#: core/models.py:342 +#: core/models.py:350 msgid "name of this brand" msgstr "Название этой марки" -#: core/models.py:343 +#: core/models.py:351 msgid "brand name" msgstr "Название бренда" -#: core/models.py:350 +#: core/models.py:358 msgid "upload a logo representing this brand" msgstr "Загрузите логотип, представляющий этот бренд" -#: core/models.py:352 +#: core/models.py:360 msgid "brand small image" msgstr "Маленький образ бренда" -#: core/models.py:358 +#: core/models.py:366 msgid "upload a big logo representing this brand" msgstr "Загрузите большой логотип, представляющий этот бренд" -#: core/models.py:360 +#: core/models.py:368 msgid "brand big image" msgstr "Большой имидж бренда" -#: core/models.py:365 +#: core/models.py:373 msgid "add a detailed description of the brand" msgstr "Добавьте подробное описание бренда" -#: core/models.py:366 +#: core/models.py:374 msgid "brand description" msgstr "Описание бренда" -#: core/models.py:371 +#: core/models.py:379 msgid "optional categories that this brand is associated with" msgstr "Дополнительные категории, с которыми ассоциируется этот бренд" -#: core/models.py:372 +#: core/models.py:380 msgid "associated categories" msgstr "Категории" -#: core/models.py:402 +#: core/models.py:410 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 +1590,68 @@ msgstr "" "активы. Он является частью системы управления запасами, позволяющей " "отслеживать и оценивать продукты, доступные у различных поставщиков." -#: core/models.py:414 +#: core/models.py:422 msgid "the vendor supplying this product stock" msgstr "Поставщик, поставляющий данный товар на склад" -#: core/models.py:415 +#: core/models.py:423 msgid "associated vendor" msgstr "Ассоциированный поставщик" -#: core/models.py:419 +#: core/models.py:427 msgid "final price to the customer after markups" msgstr "Окончательная цена для покупателя после наценок" -#: core/models.py:420 +#: core/models.py:428 msgid "selling price" msgstr "Цена продажи" -#: core/models.py:425 +#: core/models.py:433 msgid "the product associated with this stock entry" msgstr "Продукт, связанный с этой складской записью" -#: core/models.py:426 core/models.py:697 core/models.py:744 -#: core/models.py:1641 +#: core/models.py:434 core/models.py:705 core/models.py:752 +#: core/models.py:1649 msgid "associated product" msgstr "Сопутствующий товар" -#: core/models.py:433 +#: core/models.py:441 msgid "the price paid to the vendor for this product" msgstr "Цена, уплаченная продавцу за этот продукт" -#: core/models.py:434 +#: core/models.py:442 msgid "vendor purchase price" msgstr "Цена покупки у поставщика" -#: core/models.py:438 +#: core/models.py:446 msgid "available quantity of the product in stock" msgstr "Доступное количество продукта на складе" -#: core/models.py:439 +#: core/models.py:447 msgid "quantity in stock" msgstr "Количество на складе" -#: core/models.py:443 +#: core/models.py:451 msgid "vendor-assigned SKU for identifying the product" msgstr "Присвоенный поставщиком SKU для идентификации продукта" -#: core/models.py:444 +#: core/models.py:452 msgid "vendor sku" msgstr "Артикул поставщика" -#: core/models.py:450 +#: core/models.py:458 msgid "digital file associated with this stock if applicable" msgstr "Цифровой файл, связанный с этой акцией, если применимо" -#: core/models.py:451 +#: core/models.py:459 msgid "digital file" msgstr "Цифровой файл" -#: core/models.py:460 +#: core/models.py:468 msgid "stock entries" msgstr "Наличия" -#: core/models.py:465 +#: core/models.py:473 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1660,55 +1672,55 @@ msgstr "" "повышения производительности. Он используется для определения и " "манипулирования данными о товаре и связанной с ним информацией в приложении." -#: core/models.py:478 +#: core/models.py:486 msgid "category this product belongs to" msgstr "Категория, к которой относится этот продукт" -#: core/models.py:487 +#: core/models.py:495 msgid "optionally associate this product with a brand" msgstr "По желанию ассоциируйте этот продукт с брендом" -#: core/models.py:493 +#: core/models.py:501 msgid "tags that help describe or group this product" msgstr "Теги, которые помогают описать или сгруппировать этот продукт" -#: core/models.py:498 +#: core/models.py:506 msgid "indicates whether this product is digitally delivered" msgstr "Указывает, поставляется ли этот продукт в цифровом виде" -#: core/models.py:499 +#: core/models.py:507 msgid "is product digital" msgstr "Является ли продукт цифровым" -#: core/models.py:505 +#: core/models.py:513 msgid "provide a clear identifying name for the product" msgstr "Обеспечьте четкое идентификационное название продукта" -#: core/models.py:506 +#: core/models.py:514 msgid "product name" msgstr "Название продукта" -#: core/models.py:511 core/models.py:786 +#: core/models.py:519 core/models.py:794 msgid "add a detailed description of the product" msgstr "Добавьте подробное описание продукта" -#: core/models.py:512 +#: core/models.py:520 msgid "product description" msgstr "Описание товара" -#: core/models.py:519 +#: core/models.py:527 msgid "part number for this product" msgstr "Парт. номер для данного товара" -#: core/models.py:520 +#: core/models.py:528 msgid "part number" msgstr "Парт. номер" -#: core/models.py:539 +#: core/models.py:547 msgid "stock keeping unit for this product" msgstr "Единица складского учета для данного продукта" -#: core/models.py:613 +#: core/models.py:621 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 +1737,69 @@ msgstr "" "плавающую форму, булевую форму, массив и объект. Это позволяет динамично и " "гибко структурировать данные." -#: core/models.py:625 +#: core/models.py:633 msgid "category of this attribute" msgstr "Категория этого атрибута" -#: core/models.py:633 +#: core/models.py:641 msgid "group of this attribute" msgstr "Группа этого атрибута" -#: core/models.py:639 +#: core/models.py:647 msgid "string" msgstr "Строка" -#: core/models.py:640 +#: core/models.py:648 msgid "integer" msgstr "Целое число" -#: core/models.py:641 +#: core/models.py:649 msgid "float" msgstr "Поплавок" -#: core/models.py:642 +#: core/models.py:650 msgid "boolean" msgstr "Булево" -#: core/models.py:643 +#: core/models.py:651 msgid "array" msgstr "Массив" -#: core/models.py:644 +#: core/models.py:652 msgid "object" msgstr "Объект" -#: core/models.py:646 +#: core/models.py:654 msgid "type of the attribute's value" msgstr "Тип значения атрибута" -#: core/models.py:647 +#: core/models.py:655 msgid "value type" msgstr "Тип значения" -#: core/models.py:652 +#: core/models.py:660 msgid "name of this attribute" msgstr "Имя этого атрибута" -#: core/models.py:653 +#: core/models.py:661 msgid "attribute's name" msgstr "Имя атрибута" -#: core/models.py:659 +#: core/models.py:667 msgid "is filterable" msgstr "поддается фильтрации" -#: core/models.py:660 +#: core/models.py:668 msgid "designates whether this attribute can be used for filtering or not" msgstr "" "Какие атрибуты и значения можно использовать для фильтрации этой категории." -#: core/models.py:671 core/models.py:689 +#: core/models.py:679 core/models.py:697 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Атрибут" -#: core/models.py:677 +#: core/models.py:685 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 +1809,19 @@ msgstr "" " Он связывает \"атрибут\" с уникальным \"значением\", позволяя лучше " "организовать и динамически представить характеристики продукта." -#: core/models.py:688 +#: core/models.py:696 msgid "attribute of this value" msgstr "Атрибут этого значения" -#: core/models.py:696 +#: core/models.py:704 msgid "the specific product associated with this attribute's value" msgstr "Конкретный продукт, связанный со значением этого атрибута" -#: core/models.py:702 +#: core/models.py:710 msgid "the specific value for this attribute" msgstr "Конкретное значение для этого атрибута" -#: core/models.py:715 +#: core/models.py:723 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 +1835,41 @@ msgstr "" "товарам и определения порядка их отображения. Он также включает функцию " "доступности с альтернативным текстом для изображений." -#: core/models.py:726 +#: core/models.py:734 msgid "provide alternative text for the image for accessibility" msgstr "" "Предоставьте альтернативный текст для изображения, чтобы обеспечить " "доступность" -#: core/models.py:727 +#: core/models.py:735 msgid "image alt text" msgstr "Альтовый текст изображения" -#: core/models.py:730 +#: core/models.py:738 msgid "upload the image file for this product" msgstr "Загрузите файл изображения для этого продукта" -#: core/models.py:731 core/models.py:756 +#: core/models.py:739 core/models.py:764 msgid "product image" msgstr "Изображение продукта" -#: core/models.py:737 +#: core/models.py:745 msgid "determines the order in which images are displayed" msgstr "Определяет порядок отображения изображений" -#: core/models.py:738 +#: core/models.py:746 msgid "display priority" msgstr "Приоритет отображения" -#: core/models.py:743 +#: core/models.py:751 msgid "the product that this image represents" msgstr "Продукт, который представлен на этом изображении" -#: core/models.py:757 +#: core/models.py:765 msgid "product images" msgstr "Изображения товаров" -#: core/models.py:762 +#: core/models.py:770 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 +1885,39 @@ msgstr "" "акции и привязки ее к соответствующим товарам. Он интегрируется с каталогом " "товаров для определения товаров, на которые распространяется акция." -#: core/models.py:774 +#: core/models.py:782 msgid "percentage discount for the selected products" msgstr "Процентная скидка на выбранные продукты" -#: core/models.py:775 +#: core/models.py:783 msgid "discount percentage" msgstr "Процент скидки" -#: core/models.py:780 +#: core/models.py:788 msgid "provide a unique name for this promotion" msgstr "Укажите уникальное имя для этой акции" -#: core/models.py:781 +#: core/models.py:789 msgid "promotion name" msgstr "Название акции" -#: core/models.py:787 +#: core/models.py:795 msgid "promotion description" msgstr "Описание акции" -#: core/models.py:792 +#: core/models.py:800 msgid "select which products are included in this promotion" msgstr "Выберите, какие продукты участвуют в этой акции" -#: core/models.py:793 +#: core/models.py:801 msgid "included products" msgstr "Включенные продукты" -#: core/models.py:797 +#: core/models.py:805 msgid "promotion" msgstr "Продвижение" -#: core/models.py:808 +#: core/models.py:816 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 +1930,23 @@ msgstr "" "товаров, а также поддерживая операции добавления и удаления нескольких " "товаров одновременно." -#: core/models.py:820 +#: core/models.py:828 msgid "products that the user has marked as wanted" msgstr "Продукты, которые пользователь отметил как желаемые" -#: core/models.py:828 +#: core/models.py:836 msgid "user who owns this wishlist" msgstr "Пользователь, владеющий этим списком желаний" -#: core/models.py:829 +#: core/models.py:837 msgid "wishlist owner" msgstr "Владелец вишлиста" -#: core/models.py:837 +#: core/models.py:845 msgid "wishlist" msgstr "Список желаний" -#: core/models.py:879 +#: core/models.py:887 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1950,19 +1962,19 @@ msgstr "" "документальных файлов. Он расширяет функциональность определенных миксинов и" " предоставляет дополнительные пользовательские возможности." -#: core/models.py:892 +#: core/models.py:900 msgid "documentary" msgstr "Документальный фильм" -#: core/models.py:893 +#: core/models.py:901 msgid "documentaries" msgstr "Документальные фильмы" -#: core/models.py:903 +#: core/models.py:911 msgid "unresolved" msgstr "Неразрешенные" -#: core/models.py:908 +#: core/models.py:916 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1983,59 +1995,59 @@ msgstr "" "обработки или проверки. Класс также позволяет ассоциировать адрес с " "пользователем, что облегчает работу с персонализированными данными." -#: core/models.py:923 +#: core/models.py:931 msgid "address line for the customer" msgstr "Адресная строка для клиента" -#: core/models.py:924 +#: core/models.py:932 msgid "address line" msgstr "Адресная строка" -#: core/models.py:926 +#: core/models.py:934 msgid "street" msgstr "Улица" -#: core/models.py:927 +#: core/models.py:935 msgid "district" msgstr "Округ" -#: core/models.py:928 +#: core/models.py:936 msgid "city" msgstr "Город" -#: core/models.py:929 +#: core/models.py:937 msgid "region" msgstr "Регион" -#: core/models.py:930 +#: core/models.py:938 msgid "postal code" msgstr "Почтовый индекс" -#: core/models.py:931 +#: core/models.py:939 msgid "country" msgstr "Страна" -#: core/models.py:938 +#: core/models.py:946 msgid "geolocation point: (longitude, latitude)" msgstr "Геолокационная точка(долгота, широта)" -#: core/models.py:941 +#: core/models.py:949 msgid "full JSON response from geocoder for this address" msgstr "Полный JSON-ответ от геокодера для этого адреса" -#: core/models.py:946 +#: core/models.py:954 msgid "stored JSON response from the geocoding service" msgstr "Сохраненный JSON-ответ от сервиса геокодирования" -#: core/models.py:954 +#: core/models.py:962 msgid "address" msgstr "Адрес" -#: core/models.py:955 +#: core/models.py:963 msgid "addresses" msgstr "Адреса" -#: core/models.py:967 +#: core/models.py:975 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 +2064,74 @@ msgstr "" "функциональность для проверки и применения промокода к заказу, обеспечивая " "при этом соблюдение ограничений." -#: core/models.py:981 +#: core/models.py:989 msgid "unique code used by a user to redeem a discount" msgstr "Уникальный код, используемый пользователем для получения скидки" -#: core/models.py:982 +#: core/models.py:990 msgid "promo code identifier" msgstr "Идентификатор промо-кода" -#: core/models.py:989 +#: core/models.py:997 msgid "fixed discount amount applied if percent is not used" msgstr "Фиксированная сумма скидки, применяемая, если процент не используется" -#: core/models.py:990 +#: core/models.py:998 msgid "fixed discount amount" msgstr "Фиксированная сумма скидки" -#: core/models.py:996 +#: core/models.py:1004 msgid "percentage discount applied if fixed amount is not used" msgstr "" "Процентная скидка, применяемая, если фиксированная сумма не используется" -#: core/models.py:997 +#: core/models.py:1005 msgid "percentage discount" msgstr "Процентная скидка" -#: core/models.py:1002 +#: core/models.py:1010 msgid "timestamp when the promocode expires" msgstr "Временная метка, когда истекает срок действия промокода" -#: core/models.py:1003 +#: core/models.py:1011 msgid "end validity time" msgstr "Время окончания срока действия" -#: core/models.py:1008 +#: core/models.py:1016 msgid "timestamp from which this promocode is valid" msgstr "Время, с которого действует этот промокод" -#: core/models.py:1009 +#: core/models.py:1017 msgid "start validity time" msgstr "Время начала действия" -#: core/models.py:1014 +#: core/models.py:1022 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Временная метка, когда был использован промокод, пустая, если он еще не " "использовался" -#: core/models.py:1015 +#: core/models.py:1023 msgid "usage timestamp" msgstr "Временная метка использования" -#: core/models.py:1020 +#: core/models.py:1028 msgid "user assigned to this promocode if applicable" msgstr "Пользователь, назначенный на этот промокод, если применимо" -#: core/models.py:1021 +#: core/models.py:1029 msgid "assigned user" msgstr "Назначенный пользователь" -#: core/models.py:1028 +#: core/models.py:1036 msgid "promo code" msgstr "Промокод" -#: core/models.py:1029 +#: core/models.py:1037 msgid "promo codes" msgstr "Промокоды" -#: core/models.py:1044 +#: core/models.py:1052 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2127,16 +2139,16 @@ msgstr "" "Следует определить только один тип скидки (сумма или процент), но не оба или" " ни один из них." -#: core/models.py:1065 +#: core/models.py:1073 msgid "promocode already used" msgstr "Промокоды" -#: core/models.py:1081 +#: core/models.py:1089 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Неверный тип скидки для промокода {self.uuid}!" -#: core/models.py:1090 +#: core/models.py:1098 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 +2165,138 @@ msgstr "" "доставке или выставлении счета. Кроме того, функциональность поддерживает " "управление продуктами в жизненном цикле заказа." -#: core/models.py:1107 +#: core/models.py:1115 msgid "the billing address used for this order" msgstr "Адрес для выставления счетов, используемый для данного заказа" -#: core/models.py:1115 +#: core/models.py:1123 msgid "optional promo code applied to this order" msgstr "Дополнительный промокод, применяемый к этому заказу" -#: core/models.py:1116 +#: core/models.py:1124 msgid "applied promo code" msgstr "Примененный промокод" -#: core/models.py:1124 +#: core/models.py:1132 msgid "the shipping address used for this order" msgstr "Адрес доставки, используемый для данного заказа" -#: core/models.py:1125 +#: core/models.py:1133 msgid "shipping address" msgstr "Адрес доставки" -#: core/models.py:1131 +#: core/models.py:1139 msgid "current status of the order in its lifecycle" msgstr "Текущий статус заказа в его жизненном цикле" -#: core/models.py:1132 +#: core/models.py:1140 msgid "order status" msgstr "Статус заказа" -#: core/models.py:1137 core/models.py:1618 +#: core/models.py:1145 core/models.py:1626 msgid "json structure of notifications to display to users" msgstr "" "JSON-структура уведомлений для отображения пользователям, в административном" " интерфейсе используется табличный вид" -#: core/models.py:1143 +#: core/models.py:1151 msgid "json representation of order attributes for this order" msgstr "JSON-представление атрибутов заказа для этого заказа" -#: core/models.py:1149 +#: core/models.py:1157 msgid "the user who placed the order" msgstr "Пользователь, разместивший заказ" -#: core/models.py:1150 +#: core/models.py:1158 msgid "user" msgstr "Пользователь" -#: core/models.py:1156 +#: core/models.py:1164 msgid "the timestamp when the order was finalized" msgstr "Временная метка, когда заказ был завершен" -#: core/models.py:1157 +#: core/models.py:1165 msgid "buy time" msgstr "Время покупки" -#: core/models.py:1164 +#: core/models.py:1172 msgid "a human-readable identifier for the order" msgstr "Человекочитаемый идентификатор для заказа" -#: core/models.py:1165 +#: core/models.py:1173 msgid "human readable id" msgstr "человекочитаемый идентификатор" -#: core/models.py:1171 +#: core/models.py:1179 msgid "order" msgstr "Заказ" -#: core/models.py:1209 +#: core/models.py:1217 msgid "a user must have only one pending order at a time" msgstr "Пользователь может одновременно иметь только один отложенный ордер!" -#: core/models.py:1249 +#: core/models.py:1257 msgid "you cannot add products to an order that is not a pending one" msgstr "Вы не можете добавить товары в заказ, который не является отложенным." -#: core/models.py:1254 +#: core/models.py:1262 msgid "you cannot add inactive products to order" msgstr "Вы не можете добавить неактивные товары в заказ" -#: core/models.py:1271 +#: core/models.py:1279 msgid "you cannot add more products than available in stock" msgstr "Вы не можете добавить больше товаров, чем есть на складе" -#: core/models.py:1293 core/models.py:1318 core/models.py:1326 +#: core/models.py:1301 core/models.py:1326 core/models.py:1334 msgid "you cannot remove products from an order that is not a pending one" msgstr "" "Вы не можете удалить товары из заказа, который не является отложенным." -#: core/models.py:1314 +#: core/models.py:1322 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} не существует с запросом <{query}>!" -#: core/models.py:1346 +#: core/models.py:1354 msgid "promocode does not exist" msgstr "Промокод не существует" -#: core/models.py:1352 +#: core/models.py:1360 msgid "you can only buy physical products with shipping address specified" msgstr "" "Вы можете купить физические товары только с указанным адресом доставки!" -#: core/models.py:1371 +#: core/models.py:1379 msgid "address does not exist" msgstr "Адрес не существует" -#: core/models.py:1392 core/models.py:1461 +#: core/models.py:1400 core/models.py:1469 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "В данный момент вы не можете совершить покупку, пожалуйста, повторите " "попытку через несколько минут." -#: core/models.py:1395 core/models.py:1457 +#: core/models.py:1403 core/models.py:1465 msgid "invalid force value" msgstr "Недопустимое значение силы" -#: core/models.py:1401 core/models.py:1464 +#: core/models.py:1409 core/models.py:1472 msgid "you cannot purchase an empty order!" msgstr "Вы не можете приобрести пустой заказ!" -#: core/models.py:1420 +#: core/models.py:1428 msgid "you cannot buy an order without a user" msgstr "Вы не можете купить заказ без пользователя!" -#: core/models.py:1434 +#: core/models.py:1442 msgid "a user without a balance cannot buy with balance" msgstr "Пользователь без баланса не может покупать с балансом!" -#: core/models.py:1439 +#: core/models.py:1447 msgid "insufficient funds to complete the order" msgstr "Недостаточно средств для выполнения заказа" -#: core/models.py:1473 +#: core/models.py:1481 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2292,14 +2304,14 @@ msgstr "" "Вы не можете купить без регистрации, пожалуйста, предоставьте следующую " "информацию: имя клиента, электронная почта клиента, номер телефона клиента" -#: core/models.py:1482 +#: core/models.py:1490 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "Неверный способ оплаты: {payment_method} от {available_payment_methods}!" -#: core/models.py:1591 +#: core/models.py:1599 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2321,109 +2333,109 @@ msgstr "" "для цифровых продуктов. Модель интегрируется с моделями Order и Product и " "хранит ссылки на них." -#: core/models.py:1606 +#: core/models.py:1614 msgid "the price paid by the customer for this product at purchase time" msgstr "Цена, уплаченная клиентом за данный продукт на момент покупки" -#: core/models.py:1607 +#: core/models.py:1615 msgid "purchase price at order time" msgstr "Покупная цена на момент заказа" -#: core/models.py:1612 +#: core/models.py:1620 msgid "internal comments for admins about this ordered product" msgstr "" "Внутренние комментарии для администраторов об этом заказанном продукте" -#: core/models.py:1613 +#: core/models.py:1621 msgid "internal comments" msgstr "Внутренние комментарии" -#: core/models.py:1619 +#: core/models.py:1627 msgid "user notifications" msgstr "Уведомления пользователей" -#: core/models.py:1624 +#: core/models.py:1632 msgid "json representation of this item's attributes" msgstr "JSON-представление атрибутов этого элемента" -#: core/models.py:1625 +#: core/models.py:1633 msgid "ordered product attributes" msgstr "Атрибуты заказанного продукта" -#: core/models.py:1630 +#: core/models.py:1638 msgid "reference to the parent order that contains this product" msgstr "Ссылка на родительский заказ, содержащий данный продукт" -#: core/models.py:1631 +#: core/models.py:1639 msgid "parent order" msgstr "Родительский приказ" -#: core/models.py:1640 +#: core/models.py:1648 msgid "the specific product associated with this order line" msgstr "Конкретный продукт, связанный с этой линией заказа" -#: core/models.py:1647 +#: core/models.py:1655 msgid "quantity of this specific product in the order" msgstr "Количество данного товара в заказе" -#: core/models.py:1648 +#: core/models.py:1656 msgid "product quantity" msgstr "Количество продукта" -#: core/models.py:1655 +#: core/models.py:1663 msgid "current status of this product in the order" msgstr "Текущий статус этого продукта в заказе" -#: core/models.py:1656 +#: core/models.py:1664 msgid "product line status" msgstr "Состояние продуктовой линейки" -#: core/models.py:1719 +#: core/models.py:1727 msgid "order product must have an order" msgstr "У заказанного продукта должен быть связанный с ним заказ!" -#: core/models.py:1721 +#: core/models.py:1729 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Для обратной связи указано неверное действие: {action}!" -#: core/models.py:1735 +#: core/models.py:1743 msgid "you cannot feedback an order which is not received" msgstr "Вы не можете отозвать заказ, который не был получен" -#: core/models.py:1741 +#: core/models.py:1749 msgid "name" msgstr "Имя" -#: core/models.py:1742 +#: core/models.py:1750 msgid "URL of the integration" msgstr "URL-адрес интеграции" -#: core/models.py:1743 +#: core/models.py:1751 msgid "authentication credentials" msgstr "Учетные данные для аутентификации" -#: core/models.py:1765 +#: core/models.py:1773 msgid "you can only have one default CRM provider" msgstr "У вас может быть только один поставщик CRM по умолчанию" -#: core/models.py:1775 +#: core/models.py:1783 msgid "CRM" msgstr "CRM" -#: core/models.py:1776 +#: core/models.py:1784 msgid "CRMs" msgstr "CRM" -#: core/models.py:1788 +#: core/models.py:1796 msgid "order CRM link" msgstr "Ссылка на CRM заказа" -#: core/models.py:1789 +#: core/models.py:1797 msgid "orders CRM links" msgstr "Ссылки на CRM заказов" -#: core/models.py:1794 +#: core/models.py:1802 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2439,15 +2451,15 @@ msgstr "" " общедоступным. Он включает метод для генерации URL-адреса для загрузки " "актива, когда связанный заказ находится в состоянии завершения." -#: core/models.py:1808 +#: core/models.py:1816 msgid "download" msgstr "Скачать" -#: core/models.py:1809 +#: core/models.py:1817 msgid "downloads" msgstr "Скачать" -#: core/models.py:1823 +#: core/models.py:1831 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2462,29 +2474,29 @@ msgstr "" "пользователем. Класс использует поля базы данных для эффективного " "моделирования и управления данными отзывов." -#: core/models.py:1835 +#: core/models.py:1843 msgid "user-provided comments about their experience with the product" msgstr "Комментарии пользователей об их опыте использования продукта" -#: core/models.py:1836 +#: core/models.py:1844 msgid "feedback comments" msgstr "Комментарии к отзывам" -#: core/models.py:1843 +#: core/models.py:1851 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Ссылка на конкретный продукт в заказе, о котором идет речь в этом отзыве" -#: core/models.py:1844 +#: core/models.py:1852 msgid "related order product" msgstr "Сопутствующий товар для заказа" -#: core/models.py:1849 +#: core/models.py:1857 msgid "user-assigned rating for the product" msgstr "Присвоенный пользователем рейтинг продукта" -#: core/models.py:1850 +#: core/models.py:1858 msgid "product rating" msgstr "Рейтинг продукции" @@ -2703,22 +2715,22 @@ msgstr "" "Неверное значение тайм-аута, оно должно находиться в диапазоне от 0 до " "216000 секунд" -#: core/utils/emailing.py:25 +#: core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | свяжитесь с нами по инициативе" -#: core/utils/emailing.py:74 +#: core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Подтверждение заказа" -#: core/utils/emailing.py:109 +#: core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Заказ доставлен" -#: core/utils/emailing.py:197 +#: core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | Промокод предоставлен" @@ -2969,7 +2981,7 @@ msgstr "" "доступа. Он расширяет базовый `EvibesViewSet` и использует систему " "фильтрации Django для запроса данных." -#: core/viewsets.py:593 +#: core/viewsets.py:594 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2990,7 +3002,7 @@ msgstr "" "соответствующим образом устанавливает разрешения при взаимодействии с " "данными заказа." -#: core/viewsets.py:782 +#: core/viewsets.py:784 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3005,12 +3017,12 @@ msgstr "" " от запрашиваемого действия. Кроме того, он предоставляет подробное действие" " для обработки отзывов об экземплярах OrderProduct" -#: core/viewsets.py:833 +#: core/viewsets.py:835 msgid "Manages operations related to Product images in the application. " msgstr "" "Управляет операциями, связанными с изображениями продуктов в приложении." -#: core/viewsets.py:845 +#: core/viewsets.py:847 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3018,16 +3030,16 @@ msgstr "" "Управляет получением и обработкой экземпляров PromoCode с помощью различных " "действий API." -#: core/viewsets.py:866 +#: core/viewsets.py:868 msgid "Represents a view set for managing promotions. " msgstr "" "Представляет собой набор представлений для управления рекламными акциями." -#: core/viewsets.py:878 +#: core/viewsets.py:880 msgid "Handles operations related to Stock data in the system." msgstr "Выполняет операции, связанные с данными о запасах в системе." -#: core/viewsets.py:892 +#: core/viewsets.py:894 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3045,7 +3057,7 @@ msgstr "" "проверка прав доступа гарантирует, что пользователи смогут управлять только " "своими списками желаний, если не предоставлены явные права." -#: core/viewsets.py:1007 +#: core/viewsets.py:1009 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3060,12 +3072,12 @@ msgstr "" "методов HTTP, переопределение сериализатора и обработку разрешений в " "зависимости от контекста запроса." -#: core/viewsets.py:1074 +#: core/viewsets.py:1076 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Ошибка геокодирования: {e}" -#: core/viewsets.py:1081 +#: core/viewsets.py:1083 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/sv_SE/LC_MESSAGES/django.mo b/core/locale/sv_SE/LC_MESSAGES/django.mo index 0c99465d..4fe54ffd 100644 Binary files a/core/locale/sv_SE/LC_MESSAGES/django.mo and b/core/locale/sv_SE/LC_MESSAGES/django.mo differ diff --git a/core/locale/sv_SE/LC_MESSAGES/django.po b/core/locale/sv_SE/LC_MESSAGES/django.po index 9d8612da..099ac2b4 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -49,82 +49,86 @@ msgstr "Modifierad" msgid "when the object was last modified" msgstr "När objektet senast redigerades" -#: core/admin.py:63 +#: core/admin.py:68 msgid "translations" msgstr "Översättningar" -#: core/admin.py:67 +#: core/admin.py:72 msgid "general" msgstr "Allmänt" -#: core/admin.py:69 +#: core/admin.py:74 msgid "relations" msgstr "Relationer" -#: core/admin.py:87 +#: core/admin.py:76 +msgid "additional info" +msgstr "Ytterligare information" + +#: core/admin.py:94 msgid "metadata" msgstr "Metadata" -#: core/admin.py:94 +#: core/admin.py:101 msgid "timestamps" msgstr "Tidsstämplar" -#: core/admin.py:109 +#: core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Aktivera vald %(verbose_name_plural)s." -#: core/admin.py:114 +#: core/admin.py:121 msgid "selected items have been activated." msgstr "Valda artiklar har aktiverats!" -#: core/admin.py:120 +#: core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Avaktivera vald %(verbose_name_plural)s." -#: core/admin.py:125 +#: core/admin.py:132 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:701 core/models.py:709 +#: core/admin.py:144 core/graphene/object_types.py:609 +#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 msgid "attribute value" msgstr "Attributvärde" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 +#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718 msgid "attribute values" msgstr "Attributets värden" -#: core/admin.py:146 +#: core/admin.py:153 msgid "image" msgstr "Bild" -#: core/admin.py:147 core/graphene/object_types.py:501 +#: core/admin.py:154 core/graphene/object_types.py:501 msgid "images" msgstr "Bilder" -#: core/admin.py:155 core/models.py:459 +#: core/admin.py:162 core/models.py:467 msgid "stock" msgstr "Stock" -#: core/admin.py:156 core/graphene/object_types.py:663 +#: core/admin.py:163 core/graphene/object_types.py:663 msgid "stocks" msgstr "Stocks" -#: core/admin.py:166 core/models.py:1667 +#: core/admin.py:173 core/models.py:1675 msgid "order product" msgstr "Beställ produkt" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 msgid "order products" msgstr "Beställ produkter" -#: core/admin.py:180 core/admin.py:181 +#: core/admin.py:187 core/admin.py:188 msgid "children" msgstr "Barn och ungdomar" -#: core/admin.py:566 +#: core/admin.py:940 msgid "Config" msgstr "Konfig" @@ -728,23 +732,23 @@ 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:118 core/elasticsearch/__init__.py:498 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 msgid "no search term provided." msgstr "Ingen sökterm angavs." -#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +#: core/filters.py:65 core/filters.py:399 core/filters.py:526 msgid "Search" msgstr "Sök" -#: core/filters.py:66 core/filters.py:554 core/filters.py:583 +#: core/filters.py:66 core/filters.py:556 core/filters.py:585 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:399 core/filters.py:526 +#: core/filters.py:67 core/filters.py:401 core/filters.py:528 msgid "Name" msgstr "Namn" -#: core/filters.py:68 core/filters.py:528 +#: core/filters.py:68 core/filters.py:530 msgid "Categories" msgstr "Kategorier" @@ -752,7 +756,7 @@ msgstr "Kategorier" msgid "Categories Slugs" msgstr "Kategorier Sniglar" -#: core/filters.py:71 core/filters.py:407 +#: core/filters.py:71 core/filters.py:409 msgid "Tags" msgstr "Etiketter" @@ -780,8 +784,8 @@ msgstr "Attribut" msgid "Quantity" msgstr "Kvantitet" -#: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:301 core/models.py:383 core/models.py:536 +#: core/filters.py:78 core/filters.py:403 core/filters.py:529 +#: core/models.py:309 core/models.py:391 core/models.py:544 msgid "Slug" msgstr "Snigel" @@ -797,7 +801,7 @@ msgstr "Inkludera underkategorier" msgid "Include personal ordered" msgstr "Inkludera personligt beställda produkter" -#: core/filters.py:85 core/models.py:540 +#: core/filters.py:85 core/models.py:548 msgid "SKU" msgstr "SKU" @@ -807,48 +811,48 @@ msgstr "" "Det måste finnas en category_uuid för att använda flaggan " "include_subcategories" -#: core/filters.py:324 +#: core/filters.py:326 msgid "Search (ID, product name or part number)" msgstr "Sök (ID, produktnamn eller artikelnummer)" -#: core/filters.py:327 +#: core/filters.py:329 msgid "Bought after (inclusive)" msgstr "Köpt efter (inklusive)" -#: core/filters.py:328 +#: core/filters.py:330 msgid "Bought before (inclusive)" msgstr "Köpt tidigare (inklusive)" -#: core/filters.py:331 core/filters.py:378 core/filters.py:585 +#: core/filters.py:333 core/filters.py:380 core/filters.py:587 msgid "User email" msgstr "Användarens e-post" -#: core/filters.py:332 core/filters.py:379 core/filters.py:563 -#: core/filters.py:584 +#: core/filters.py:334 core/filters.py:381 core/filters.py:565 +#: core/filters.py:586 msgid "User UUID" msgstr "Användarens UUID" -#: core/filters.py:333 +#: core/filters.py:335 msgid "Status" msgstr "Status" -#: core/filters.py:337 +#: core/filters.py:339 msgid "Human Readable ID" msgstr "Human Readable ID" -#: core/filters.py:400 +#: core/filters.py:402 msgid "Parent" msgstr "Förälder" -#: core/filters.py:404 +#: core/filters.py:406 msgid "Whole category(has at least 1 product or not)" msgstr "Hela kategorin (har minst 1 produkt eller inte)" -#: core/filters.py:408 +#: core/filters.py:410 msgid "Level" msgstr "Nivå" -#: core/filters.py:558 +#: core/filters.py:560 msgid "Product UUID" msgstr "Produktens UUID" @@ -905,7 +909,7 @@ msgstr "" "uteslutande!" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:679 +#: core/graphene/mutations.py:527 core/viewsets.py:680 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 +984,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:849 core/models.py:862 -#: core/models.py:1281 core/models.py:1310 core/models.py:1335 -#: core/viewsets.py:682 +#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 +#: core/models.py:1289 core/models.py:1318 core/models.py:1343 +#: core/viewsets.py:683 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} existerar inte: {uuid}!" @@ -996,8 +1000,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:672 core/models.py:1144 -#: core/models.py:1744 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 +#: core/models.py:1752 msgid "attributes" msgstr "Attribut" @@ -1010,11 +1014,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:326 core/models.py:626 +#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 msgid "categories" msgstr "Kategorier" -#: core/graphene/object_types.py:124 core/models.py:397 +#: core/graphene/object_types.py:124 core/models.py:405 msgid "brands" msgstr "Brands" @@ -1023,7 +1027,7 @@ msgid "category image url" msgstr "Kategorier" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:263 +#: core/models.py:271 msgid "markup percentage" msgstr "Procentuell påslagning" @@ -1046,7 +1050,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:169 +#: core/graphene/object_types.py:351 core/models.py:177 msgid "vendors" msgstr "Leverantörer" @@ -1071,7 +1075,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:1138 +#: core/models.py:1146 msgid "notifications" msgstr "Meddelanden" @@ -1079,7 +1083,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:1860 +#: core/graphene/object_types.py:400 core/models.py:1868 msgid "feedback" msgstr "Återkoppling" @@ -1087,7 +1091,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:1108 +#: core/graphene/object_types.py:436 core/models.py:1116 msgid "billing address" msgstr "Faktureringsadress" @@ -1115,7 +1119,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:1172 +#: core/graphene/object_types.py:465 core/models.py:1180 msgid "orders" msgstr "Beställningar" @@ -1127,19 +1131,19 @@ msgstr "URL för bild" msgid "product's images" msgstr "Produktens bilder" -#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 +#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 msgid "category" msgstr "Kategori" -#: core/graphene/object_types.py:502 core/models.py:1861 +#: core/graphene/object_types.py:502 core/models.py:1869 msgid "feedbacks" msgstr "Återkoppling" -#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 +#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 msgid "brand" msgstr "Varumärke" -#: core/graphene/object_types.py:504 core/models.py:101 +#: core/graphene/object_types.py:504 core/models.py:102 msgid "attribute groups" msgstr "Attributgrupper" @@ -1167,7 +1171,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:550 +#: core/graphene/object_types.py:534 core/models.py:558 msgid "products" msgstr "Produkter" @@ -1179,15 +1183,15 @@ msgstr "Promokoder" msgid "products on sale" msgstr "Produkter på rea" -#: core/graphene/object_types.py:651 core/models.py:798 +#: core/graphene/object_types.py:651 core/models.py:806 msgid "promotions" msgstr "Kampanjer" -#: core/graphene/object_types.py:655 core/models.py:168 +#: core/graphene/object_types.py:655 core/models.py:176 msgid "vendor" msgstr "Leverantör" -#: core/graphene/object_types.py:656 core/models.py:549 +#: core/graphene/object_types.py:656 core/models.py:557 #: 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 +1199,11 @@ msgstr "Leverantör" msgid "product" msgstr "Produkt" -#: core/graphene/object_types.py:667 core/models.py:821 +#: core/graphene/object_types.py:667 core/models.py:829 msgid "wishlisted products" msgstr "Önskelistade produkter" -#: core/graphene/object_types.py:673 core/models.py:838 +#: core/graphene/object_types.py:673 core/models.py:846 msgid "wishlists" msgstr "Önskelistor" @@ -1207,7 +1211,7 @@ msgstr "Önskelistor" msgid "tagged products" msgstr "Taggade produkter" -#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 +#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 msgid "product tags" msgstr "Produkttaggar" @@ -1292,7 +1296,7 @@ msgstr "Sökresultat för produkter" msgid "posts search results" msgstr "Sökresultat för produkter" -#: core/models.py:70 +#: core/models.py:71 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1305,23 +1309,23 @@ msgstr "" "användbart för att kategorisera och hantera attribut på ett mer effektivt " "sätt i ett komplext system." -#: core/models.py:86 +#: core/models.py:87 msgid "parent of this group" msgstr "Förälder till denna grupp" -#: core/models.py:87 +#: core/models.py:88 msgid "parent attribute group" msgstr "Överordnad attributgrupp" -#: core/models.py:91 core/models.py:92 +#: core/models.py:92 core/models.py:93 msgid "attribute group's name" msgstr "Attributgruppens namn" -#: core/models.py:100 core/models.py:634 +#: core/models.py:101 core/models.py:642 msgid "attribute group" msgstr "Attributgrupp" -#: core/models.py:106 +#: core/models.py:107 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1340,34 +1344,42 @@ msgstr "" "metadata och begränsningar, vilket gör den lämplig att använda i system som " "interagerar med tredjepartsleverantörer." -#: core/models.py:119 +#: core/models.py:120 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Lagrar autentiseringsuppgifter och ändpunkter som krävs för leverantörens " "API-kommunikation" -#: core/models.py:120 +#: core/models.py:121 msgid "authentication info" msgstr "Autentiseringsinformation" -#: core/models.py:125 +#: core/models.py:126 msgid "define the markup for products retrieved from this vendor" msgstr "" "Definiera markeringen för produkter som hämtas från den här leverantören" -#: core/models.py:126 +#: core/models.py:127 msgid "vendor markup percentage" msgstr "Leverantörens påslag i procent" -#: core/models.py:130 +#: core/models.py:131 msgid "name of this vendor" msgstr "Namn på denna säljare" -#: core/models.py:131 +#: core/models.py:132 msgid "vendor name" msgstr "Leverantörens namn" -#: core/models.py:177 +#: core/models.py:143 +msgid "response file" +msgstr "svarsfil" + +#: core/models.py:144 +msgid "vendor's last processing response" +msgstr "säljarens senaste bearbetningssvar" + +#: core/models.py:185 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1382,27 +1394,27 @@ msgstr "" "operationer som exporteras via mixins och tillhandahåller metadataanpassning" " för administrativa ändamål." -#: core/models.py:189 core/models.py:220 +#: core/models.py:197 core/models.py:228 msgid "internal tag identifier for the product tag" msgstr "Intern taggidentifierare för produkttaggen" -#: core/models.py:190 core/models.py:221 +#: core/models.py:198 core/models.py:229 msgid "tag name" msgstr "Tagg namn" -#: core/models.py:194 core/models.py:225 +#: core/models.py:202 core/models.py:233 msgid "user-friendly name for the product tag" msgstr "Användarvänligt namn för produkttaggen" -#: core/models.py:195 core/models.py:226 +#: core/models.py:203 core/models.py:234 msgid "tag display name" msgstr "Taggens visningsnamn" -#: core/models.py:203 +#: core/models.py:211 msgid "product tag" msgstr "Produktmärkning" -#: core/models.py:209 +#: core/models.py:217 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 +1425,15 @@ msgstr "" "klassificera produkter. Den innehåller attribut för en intern " "taggidentifierare och ett användarvänligt visningsnamn." -#: core/models.py:234 +#: core/models.py:242 msgid "category tag" msgstr "kategori tagg" -#: core/models.py:235 core/models.py:307 +#: core/models.py:243 core/models.py:315 msgid "category tags" msgstr "Kategoritaggar" -#: core/models.py:240 +#: core/models.py:248 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1443,51 +1455,51 @@ msgstr "" " ange namn, beskrivning och hierarki för kategorier samt tilldela attribut " "som bilder, taggar eller prioritet." -#: core/models.py:254 +#: core/models.py:262 msgid "upload an image representing this category" msgstr "Ladda upp en bild som representerar denna kategori" -#: core/models.py:257 +#: core/models.py:265 msgid "category image" msgstr "Kategori bild" -#: core/models.py:262 +#: core/models.py:270 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:271 +#: core/models.py:279 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:272 +#: core/models.py:280 msgid "parent category" msgstr "Föräldrakategori" -#: core/models.py:277 +#: core/models.py:285 msgid "category name" msgstr "Namn på kategori" -#: core/models.py:278 +#: core/models.py:286 msgid "provide a name for this category" msgstr "Ange ett namn för denna kategori" -#: core/models.py:285 +#: core/models.py:293 msgid "add a detailed description for this category" msgstr "Lägg till en detaljerad beskrivning för denna kategori" -#: core/models.py:286 +#: core/models.py:294 msgid "category description" msgstr "Beskrivning av kategori" -#: core/models.py:306 +#: core/models.py:314 msgid "tags that help describe or group this category" msgstr "taggar som hjälper till att beskriva eller gruppera denna kategori" -#: core/models.py:313 core/models.py:389 +#: core/models.py:321 core/models.py:397 msgid "priority" msgstr "Prioritet" -#: core/models.py:332 +#: core/models.py:340 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 +1513,47 @@ msgstr "" "prioritetsordning. Den gör det möjligt att organisera och representera " "varumärkesrelaterade data i applikationen." -#: core/models.py:342 +#: core/models.py:350 msgid "name of this brand" msgstr "Namn på detta varumärke" -#: core/models.py:343 +#: core/models.py:351 msgid "brand name" msgstr "Varumärke" -#: core/models.py:350 +#: core/models.py:358 msgid "upload a logo representing this brand" msgstr "Ladda upp en logotyp som representerar detta varumärke" -#: core/models.py:352 +#: core/models.py:360 msgid "brand small image" msgstr "Varumärke liten image" -#: core/models.py:358 +#: core/models.py:366 msgid "upload a big logo representing this brand" msgstr "Ladda upp en stor logotyp som representerar detta varumärke" -#: core/models.py:360 +#: core/models.py:368 msgid "brand big image" msgstr "Varumärke med stor image" -#: core/models.py:365 +#: core/models.py:373 msgid "add a detailed description of the brand" msgstr "Lägg till en detaljerad beskrivning av varumärket" -#: core/models.py:366 +#: core/models.py:374 msgid "brand description" msgstr "Varumärkesbeskrivning" -#: core/models.py:371 +#: core/models.py:379 msgid "optional categories that this brand is associated with" msgstr "Valfria kategorier som detta varumärke är förknippat med" -#: core/models.py:372 +#: core/models.py:380 msgid "associated categories" msgstr "Kategorier" -#: core/models.py:402 +#: core/models.py:410 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 +1569,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:414 +#: core/models.py:422 msgid "the vendor supplying this product stock" msgstr "Leverantören som levererar denna produkt lager" -#: core/models.py:415 +#: core/models.py:423 msgid "associated vendor" msgstr "Associerad leverantör" -#: core/models.py:419 +#: core/models.py:427 msgid "final price to the customer after markups" msgstr "Slutligt pris till kunden efter påslag" -#: core/models.py:420 +#: core/models.py:428 msgid "selling price" msgstr "Försäljningspris" -#: core/models.py:425 +#: core/models.py:433 msgid "the product associated with this stock entry" msgstr "Produkten som är associerad med denna lagerpost" -#: core/models.py:426 core/models.py:697 core/models.py:744 -#: core/models.py:1641 +#: core/models.py:434 core/models.py:705 core/models.py:752 +#: core/models.py:1649 msgid "associated product" msgstr "Tillhörande produkt" -#: core/models.py:433 +#: core/models.py:441 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:434 +#: core/models.py:442 msgid "vendor purchase price" msgstr "Leverantörens inköpspris" -#: core/models.py:438 +#: core/models.py:446 msgid "available quantity of the product in stock" msgstr "Tillgänglig kvantitet av produkten i lager" -#: core/models.py:439 +#: core/models.py:447 msgid "quantity in stock" msgstr "Antal i lager" -#: core/models.py:443 +#: core/models.py:451 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU som tilldelats av leverantören för identifiering av produkten" -#: core/models.py:444 +#: core/models.py:452 msgid "vendor sku" msgstr "Leverantörens SKU" -#: core/models.py:450 +#: core/models.py:458 msgid "digital file associated with this stock if applicable" msgstr "Digital fil associerad med detta lager om tillämpligt" -#: core/models.py:451 +#: core/models.py:459 msgid "digital file" msgstr "Digital fil" -#: core/models.py:460 +#: core/models.py:468 msgid "stock entries" msgstr "Lagerposter" -#: core/models.py:465 +#: core/models.py:473 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1639,55 +1651,55 @@ msgstr "" "för att definiera och manipulera produktdata och tillhörande information i " "en applikation." -#: core/models.py:478 +#: core/models.py:486 msgid "category this product belongs to" msgstr "Kategori som denna produkt tillhör" -#: core/models.py:487 +#: core/models.py:495 msgid "optionally associate this product with a brand" msgstr "Möjlighet att associera produkten med ett varumärke" -#: core/models.py:493 +#: core/models.py:501 msgid "tags that help describe or group this product" msgstr "Taggar som hjälper till att beskriva eller gruppera denna produkt" -#: core/models.py:498 +#: core/models.py:506 msgid "indicates whether this product is digitally delivered" msgstr "Anger om denna produkt levereras digitalt" -#: core/models.py:499 +#: core/models.py:507 msgid "is product digital" msgstr "Är produkten digital" -#: core/models.py:505 +#: core/models.py:513 msgid "provide a clear identifying name for the product" msgstr "Tillhandahålla ett tydligt identifierande namn för produkten" -#: core/models.py:506 +#: core/models.py:514 msgid "product name" msgstr "Produktens namn" -#: core/models.py:511 core/models.py:786 +#: core/models.py:519 core/models.py:794 msgid "add a detailed description of the product" msgstr "Lägg till en detaljerad beskrivning av produkten" -#: core/models.py:512 +#: core/models.py:520 msgid "product description" msgstr "Produktbeskrivning" -#: core/models.py:519 +#: core/models.py:527 msgid "part number for this product" msgstr "Artikelnummer för denna produkt" -#: core/models.py:520 +#: core/models.py:528 msgid "part number" msgstr "Artikelnummer" -#: core/models.py:539 +#: core/models.py:547 msgid "stock keeping unit for this product" msgstr "Lagerhållningsenhet för denna produkt" -#: core/models.py:613 +#: core/models.py:621 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 +1715,69 @@ msgstr "" "sträng, heltal, flottör, boolean, array och objekt. Detta ger möjlighet till" " dynamisk och flexibel datastrukturering." -#: core/models.py:625 +#: core/models.py:633 msgid "category of this attribute" msgstr "Kategori för detta attribut" -#: core/models.py:633 +#: core/models.py:641 msgid "group of this attribute" msgstr "Grupp av detta attribut" -#: core/models.py:639 +#: core/models.py:647 msgid "string" msgstr "Sträng" -#: core/models.py:640 +#: core/models.py:648 msgid "integer" msgstr "Heltal" -#: core/models.py:641 +#: core/models.py:649 msgid "float" msgstr "Flottör" -#: core/models.py:642 +#: core/models.py:650 msgid "boolean" msgstr "Boolean" -#: core/models.py:643 +#: core/models.py:651 msgid "array" msgstr "Array" -#: core/models.py:644 +#: core/models.py:652 msgid "object" msgstr "Objekt" -#: core/models.py:646 +#: core/models.py:654 msgid "type of the attribute's value" msgstr "Typ av attributets värde" -#: core/models.py:647 +#: core/models.py:655 msgid "value type" msgstr "Typ av värde" -#: core/models.py:652 +#: core/models.py:660 msgid "name of this attribute" msgstr "Namn på detta attribut" -#: core/models.py:653 +#: core/models.py:661 msgid "attribute's name" msgstr "Attributets namn" -#: core/models.py:659 +#: core/models.py:667 msgid "is filterable" msgstr "är filtrerbar" -#: core/models.py:660 +#: core/models.py:668 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:671 core/models.py:689 +#: core/models.py:679 core/models.py:697 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attribut" -#: core/models.py:677 +#: core/models.py:685 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 +1788,19 @@ msgstr "" "möjliggör bättre organisation och dynamisk representation av " "produktegenskaper." -#: core/models.py:688 +#: core/models.py:696 msgid "attribute of this value" msgstr "Attribut för detta värde" -#: core/models.py:696 +#: core/models.py:704 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:702 +#: core/models.py:710 msgid "the specific value for this attribute" msgstr "Det specifika värdet för detta attribut" -#: core/models.py:715 +#: core/models.py:723 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 +1814,39 @@ msgstr "" "produkter och bestämma deras visningsordning. Den innehåller också en " "tillgänglighetsfunktion med alternativ text för bilderna." -#: core/models.py:726 +#: core/models.py:734 msgid "provide alternative text for the image for accessibility" msgstr "Tillhandahåll alternativ text för bilden för tillgänglighet" -#: core/models.py:727 +#: core/models.py:735 msgid "image alt text" msgstr "Alt-text för bild" -#: core/models.py:730 +#: core/models.py:738 msgid "upload the image file for this product" msgstr "Ladda upp bildfilen för den här produkten" -#: core/models.py:731 core/models.py:756 +#: core/models.py:739 core/models.py:764 msgid "product image" msgstr "Produktbild" -#: core/models.py:737 +#: core/models.py:745 msgid "determines the order in which images are displayed" msgstr "Bestämmer i vilken ordning bilderna ska visas" -#: core/models.py:738 +#: core/models.py:746 msgid "display priority" msgstr "Prioritet för visning" -#: core/models.py:743 +#: core/models.py:751 msgid "the product that this image represents" msgstr "Den produkt som denna bild representerar" -#: core/models.py:757 +#: core/models.py:765 msgid "product images" msgstr "Produktbilder" -#: core/models.py:762 +#: core/models.py:770 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 +1862,39 @@ msgstr "" "tillämpliga produkterna. Den integreras med produktkatalogen för att " "fastställa vilka artiklar som påverkas av kampanjen." -#: core/models.py:774 +#: core/models.py:782 msgid "percentage discount for the selected products" msgstr "Procentuell rabatt för de valda produkterna" -#: core/models.py:775 +#: core/models.py:783 msgid "discount percentage" msgstr "Rabattprocent" -#: core/models.py:780 +#: core/models.py:788 msgid "provide a unique name for this promotion" msgstr "Ange ett unikt namn för denna kampanj" -#: core/models.py:781 +#: core/models.py:789 msgid "promotion name" msgstr "Kampanjens namn" -#: core/models.py:787 +#: core/models.py:795 msgid "promotion description" msgstr "Beskrivning av kampanjen" -#: core/models.py:792 +#: core/models.py:800 msgid "select which products are included in this promotion" msgstr "Välj vilka produkter som ingår i denna kampanj" -#: core/models.py:793 +#: core/models.py:801 msgid "included products" msgstr "Inkluderade produkter" -#: core/models.py:797 +#: core/models.py:805 msgid "promotion" msgstr "Marknadsföring" -#: core/models.py:808 +#: core/models.py:816 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 +1907,23 @@ msgstr "" "produkter, samt stöd för operationer för att lägga till och ta bort flera " "produkter samtidigt." -#: core/models.py:820 +#: core/models.py:828 msgid "products that the user has marked as wanted" msgstr "Produkter som användaren har markerat som önskade" -#: core/models.py:828 +#: core/models.py:836 msgid "user who owns this wishlist" msgstr "Användare som äger denna önskelista" -#: core/models.py:829 +#: core/models.py:837 msgid "wishlist owner" msgstr "Wishlist's ägare" -#: core/models.py:837 +#: core/models.py:845 msgid "wishlist" msgstr "Önskelista" -#: core/models.py:879 +#: core/models.py:887 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1927,19 +1939,19 @@ msgstr "" "för dokumentärfilerna. Den utökar funktionaliteten från specifika mixins och" " tillhandahåller ytterligare anpassade funktioner." -#: core/models.py:892 +#: core/models.py:900 msgid "documentary" msgstr "Dokumentärfilm" -#: core/models.py:893 +#: core/models.py:901 msgid "documentaries" msgstr "Dokumentärer" -#: core/models.py:903 +#: core/models.py:911 msgid "unresolved" msgstr "Olöst" -#: core/models.py:908 +#: core/models.py:916 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1960,59 +1972,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:923 +#: core/models.py:931 msgid "address line for the customer" msgstr "Adressrad till kunden" -#: core/models.py:924 +#: core/models.py:932 msgid "address line" msgstr "Adresslinje" -#: core/models.py:926 +#: core/models.py:934 msgid "street" msgstr "Gata" -#: core/models.py:927 +#: core/models.py:935 msgid "district" msgstr "Distrikt" -#: core/models.py:928 +#: core/models.py:936 msgid "city" msgstr "Stad" -#: core/models.py:929 +#: core/models.py:937 msgid "region" msgstr "Region" -#: core/models.py:930 +#: core/models.py:938 msgid "postal code" msgstr "Postnummer" -#: core/models.py:931 +#: core/models.py:939 msgid "country" msgstr "Land" -#: core/models.py:938 +#: core/models.py:946 msgid "geolocation point: (longitude, latitude)" msgstr "Geolokaliseringspunkt (longitud, latitud)" -#: core/models.py:941 +#: core/models.py:949 msgid "full JSON response from geocoder for this address" msgstr "Fullständigt JSON-svar från geokodaren för denna adress" -#: core/models.py:946 +#: core/models.py:954 msgid "stored JSON response from the geocoding service" msgstr "Lagrad JSON-svar från geokodningstjänsten" -#: core/models.py:954 +#: core/models.py:962 msgid "address" msgstr "Adress" -#: core/models.py:955 +#: core/models.py:963 msgid "addresses" msgstr "Adresser" -#: core/models.py:967 +#: core/models.py:975 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 +2041,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:981 +#: core/models.py:989 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:982 +#: core/models.py:990 msgid "promo code identifier" msgstr "Identifierare för kampanjkod" -#: core/models.py:989 +#: core/models.py:997 msgid "fixed discount amount applied if percent is not used" msgstr "Fast rabattbelopp tillämpas om procent inte används" -#: core/models.py:990 +#: core/models.py:998 msgid "fixed discount amount" msgstr "Fast diskonteringsbelopp" -#: core/models.py:996 +#: core/models.py:1004 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:997 +#: core/models.py:1005 msgid "percentage discount" msgstr "Procentuell rabatt" -#: core/models.py:1002 +#: core/models.py:1010 msgid "timestamp when the promocode expires" msgstr "Tidsstämpel när kampanjkoden upphör att gälla" -#: core/models.py:1003 +#: core/models.py:1011 msgid "end validity time" msgstr "Slutgiltig giltighetstid" -#: core/models.py:1008 +#: core/models.py:1016 msgid "timestamp from which this promocode is valid" msgstr "Tidsstämpel från vilken denna promokod är giltig" -#: core/models.py:1009 +#: core/models.py:1017 msgid "start validity time" msgstr "Start giltighetstid" -#: core/models.py:1014 +#: core/models.py:1022 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:1015 +#: core/models.py:1023 msgid "usage timestamp" msgstr "Tidsstämpel för användning" -#: core/models.py:1020 +#: core/models.py:1028 msgid "user assigned to this promocode if applicable" msgstr "Användare som tilldelats denna promokod om tillämpligt" -#: core/models.py:1021 +#: core/models.py:1029 msgid "assigned user" msgstr "Tilldelad användare" -#: core/models.py:1028 +#: core/models.py:1036 msgid "promo code" msgstr "Kampanjkod" -#: core/models.py:1029 +#: core/models.py:1037 msgid "promo codes" msgstr "Kampanjkoder" -#: core/models.py:1044 +#: core/models.py:1052 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2102,16 +2114,16 @@ msgstr "" "Endast en typ av rabatt ska definieras (belopp eller procent), men inte båda" " eller ingendera." -#: core/models.py:1065 +#: core/models.py:1073 msgid "promocode already used" msgstr "Promokoden har redan använts" -#: core/models.py:1081 +#: core/models.py:1089 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Ogiltig rabattyp för promokod {self.uuid}!" -#: core/models.py:1090 +#: core/models.py:1098 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 +2140,136 @@ msgstr "" "faktureringsuppgifter kan uppdateras. På samma sätt stöder funktionaliteten " "hanteringen av produkterna i orderns livscykel." -#: core/models.py:1107 +#: core/models.py:1115 msgid "the billing address used for this order" msgstr "Den faktureringsadress som används för denna order" -#: core/models.py:1115 +#: core/models.py:1123 msgid "optional promo code applied to this order" msgstr "Valfri kampanjkod tillämpas på denna beställning" -#: core/models.py:1116 +#: core/models.py:1124 msgid "applied promo code" msgstr "Tillämpad kampanjkod" -#: core/models.py:1124 +#: core/models.py:1132 msgid "the shipping address used for this order" msgstr "Den leveransadress som används för denna order" -#: core/models.py:1125 +#: core/models.py:1133 msgid "shipping address" msgstr "Leveransadress" -#: core/models.py:1131 +#: core/models.py:1139 msgid "current status of the order in its lifecycle" msgstr "Aktuell status för ordern i dess livscykel" -#: core/models.py:1132 +#: core/models.py:1140 msgid "order status" msgstr "Orderstatus" -#: core/models.py:1137 core/models.py:1618 +#: core/models.py:1145 core/models.py:1626 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:1143 +#: core/models.py:1151 msgid "json representation of order attributes for this order" msgstr "JSON-representation av orderattribut för denna order" -#: core/models.py:1149 +#: core/models.py:1157 msgid "the user who placed the order" msgstr "Användaren som gjorde beställningen" -#: core/models.py:1150 +#: core/models.py:1158 msgid "user" msgstr "Användare" -#: core/models.py:1156 +#: core/models.py:1164 msgid "the timestamp when the order was finalized" msgstr "Tidsstämpel när ordern slutfördes" -#: core/models.py:1157 +#: core/models.py:1165 msgid "buy time" msgstr "Köp tid" -#: core/models.py:1164 +#: core/models.py:1172 msgid "a human-readable identifier for the order" msgstr "En mänskligt läsbar identifierare för ordern" -#: core/models.py:1165 +#: core/models.py:1173 msgid "human readable id" msgstr "mänskligt läsbart ID" -#: core/models.py:1171 +#: core/models.py:1179 msgid "order" msgstr "Beställning" -#: core/models.py:1209 +#: core/models.py:1217 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:1249 +#: core/models.py:1257 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:1254 +#: core/models.py:1262 msgid "you cannot add inactive products to order" msgstr "Du kan inte lägga till inaktiva produkter i ordern" -#: core/models.py:1271 +#: core/models.py:1279 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:1293 core/models.py:1318 core/models.py:1326 +#: core/models.py:1301 core/models.py:1326 core/models.py:1334 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:1314 +#: core/models.py:1322 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} finns inte med frågan <{query}>!" -#: core/models.py:1346 +#: core/models.py:1354 msgid "promocode does not exist" msgstr "Promokoden finns inte" -#: core/models.py:1352 +#: core/models.py:1360 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:1371 +#: core/models.py:1379 msgid "address does not exist" msgstr "Adressen finns inte" -#: core/models.py:1392 core/models.py:1461 +#: core/models.py:1400 core/models.py:1469 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:1395 core/models.py:1457 +#: core/models.py:1403 core/models.py:1465 msgid "invalid force value" msgstr "Ogiltigt kraftvärde" -#: core/models.py:1401 core/models.py:1464 +#: core/models.py:1409 core/models.py:1472 msgid "you cannot purchase an empty order!" msgstr "Du kan inte köpa en tom order!" -#: core/models.py:1420 +#: core/models.py:1428 msgid "you cannot buy an order without a user" msgstr "Du kan inte köpa en order utan en användare!" -#: core/models.py:1434 +#: core/models.py:1442 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:1439 +#: core/models.py:1447 msgid "insufficient funds to complete the order" msgstr "Otillräckliga medel för att slutföra ordern" -#: core/models.py:1473 +#: core/models.py:1481 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2265,14 +2277,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:1482 +#: core/models.py:1490 #, 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:1591 +#: core/models.py:1599 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2294,108 +2306,108 @@ msgstr "" " digitala produkter. Modellen integreras med Order- och Product-modellerna " "och lagrar en referens till dem." -#: core/models.py:1606 +#: core/models.py:1614 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:1607 +#: core/models.py:1615 msgid "purchase price at order time" msgstr "Inköpspris vid ordertillfället" -#: core/models.py:1612 +#: core/models.py:1620 msgid "internal comments for admins about this ordered product" msgstr "Interna kommentarer för administratörer om denna beställda produkt" -#: core/models.py:1613 +#: core/models.py:1621 msgid "internal comments" msgstr "Interna kommentarer" -#: core/models.py:1619 +#: core/models.py:1627 msgid "user notifications" msgstr "Meddelanden till användare" -#: core/models.py:1624 +#: core/models.py:1632 msgid "json representation of this item's attributes" msgstr "JSON-representation av detta objekts attribut" -#: core/models.py:1625 +#: core/models.py:1633 msgid "ordered product attributes" msgstr "Sorterade produktattribut" -#: core/models.py:1630 +#: core/models.py:1638 msgid "reference to the parent order that contains this product" msgstr "Referens till den överordnade order som innehåller denna produkt" -#: core/models.py:1631 +#: core/models.py:1639 msgid "parent order" msgstr "Föräldraorder" -#: core/models.py:1640 +#: core/models.py:1648 msgid "the specific product associated with this order line" msgstr "Den specifika produkt som är kopplad till denna orderrad" -#: core/models.py:1647 +#: core/models.py:1655 msgid "quantity of this specific product in the order" msgstr "Antal av denna specifika produkt i ordern" -#: core/models.py:1648 +#: core/models.py:1656 msgid "product quantity" msgstr "Produktens kvantitet" -#: core/models.py:1655 +#: core/models.py:1663 msgid "current status of this product in the order" msgstr "Aktuell status för denna produkt i ordern" -#: core/models.py:1656 +#: core/models.py:1664 msgid "product line status" msgstr "Status för produktlinje" -#: core/models.py:1719 +#: core/models.py:1727 msgid "order product must have an order" msgstr "Orderprodukt måste ha en tillhörande order!" -#: core/models.py:1721 +#: core/models.py:1729 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Fel åtgärd angiven för återkoppling: {action}!" -#: core/models.py:1735 +#: core/models.py:1743 msgid "you cannot feedback an order which is not received" msgstr "du kan inte återkoppla en order som inte mottagits" -#: core/models.py:1741 +#: core/models.py:1749 msgid "name" msgstr "Namn" -#: core/models.py:1742 +#: core/models.py:1750 msgid "URL of the integration" msgstr "URL för integrationen" -#: core/models.py:1743 +#: core/models.py:1751 msgid "authentication credentials" msgstr "Autentiseringsuppgifter" -#: core/models.py:1765 +#: core/models.py:1773 msgid "you can only have one default CRM provider" msgstr "Du kan bara ha en CRM-leverantör som standard" -#: core/models.py:1775 +#: core/models.py:1783 msgid "CRM" msgstr "CRM" -#: core/models.py:1776 +#: core/models.py:1784 msgid "CRMs" msgstr "CRM-system" -#: core/models.py:1788 +#: core/models.py:1796 msgid "order CRM link" msgstr "Beställningens CRM-länk" -#: core/models.py:1789 +#: core/models.py:1797 msgid "orders CRM links" msgstr "Beställningarnas CRM-länkar" -#: core/models.py:1794 +#: core/models.py:1802 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2412,15 +2424,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:1808 +#: core/models.py:1816 msgid "download" msgstr "Nedladdningar" -#: core/models.py:1809 +#: core/models.py:1817 msgid "downloads" msgstr "Nedladdningar" -#: core/models.py:1823 +#: core/models.py:1831 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2435,30 +2447,30 @@ msgstr "" " betyg. Klassen använder databasfält för att effektivt modellera och hantera" " feedbackdata." -#: core/models.py:1835 +#: core/models.py:1843 msgid "user-provided comments about their experience with the product" msgstr "Kommentarer från användare om deras erfarenhet av produkten" -#: core/models.py:1836 +#: core/models.py:1844 msgid "feedback comments" msgstr "Återkoppling av kommentarer" -#: core/models.py:1843 +#: core/models.py:1851 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:1844 +#: core/models.py:1852 msgid "related order product" msgstr "Relaterad order produkt" -#: core/models.py:1849 +#: core/models.py:1857 msgid "user-assigned rating for the product" msgstr "Användartilldelat betyg för produkten" -#: core/models.py:1850 +#: core/models.py:1858 msgid "product rating" msgstr "Produktbetyg" @@ -2676,22 +2688,22 @@ msgstr "Både data och timeout krävs" msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "Ogiltigt timeout-värde, det måste vara mellan 0 och 216000 sekunder" -#: core/utils/emailing.py:25 +#: core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | kontakta oss initierad" -#: core/utils/emailing.py:74 +#: core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Orderbekräftelse" -#: core/utils/emailing.py:109 +#: core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Beställning levererad" -#: core/utils/emailing.py:197 +#: core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | promocode beviljad" @@ -2936,7 +2948,7 @@ msgstr "" "basen `EvibesViewSet` och använder Djangos filtreringssystem för att fråga " "data." -#: core/viewsets.py:593 +#: core/viewsets.py:594 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2955,7 +2967,7 @@ msgstr "" "åtgärd som utförs och verkställer behörigheter i enlighet med detta vid " "interaktion med orderdata." -#: core/viewsets.py:782 +#: core/viewsets.py:784 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2970,11 +2982,11 @@ msgstr "" "åtgärden. Dessutom innehåller den en detaljerad åtgärd för att hantera " "feedback på OrderProduct-instanser" -#: core/viewsets.py:833 +#: core/viewsets.py:835 msgid "Manages operations related to Product images in the application. " msgstr "Hanterar åtgärder relaterade till produktbilder i applikationen." -#: core/viewsets.py:845 +#: core/viewsets.py:847 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -2982,15 +2994,15 @@ msgstr "" "Hanterar hämtning och hantering av PromoCode-instanser genom olika API-" "åtgärder." -#: core/viewsets.py:866 +#: core/viewsets.py:868 msgid "Represents a view set for managing promotions. " msgstr "Representerar en vyuppsättning för hantering av kampanjer." -#: core/viewsets.py:878 +#: core/viewsets.py:880 msgid "Handles operations related to Stock data in the system." msgstr "Hanterar åtgärder relaterade till lagerdata i systemet." -#: core/viewsets.py:892 +#: core/viewsets.py:894 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3008,7 +3020,7 @@ msgstr "" "integrerade för att säkerställa att användare endast kan hantera sina egna " "önskelistor om inte uttryckliga behörigheter beviljas." -#: core/viewsets.py:1007 +#: core/viewsets.py:1009 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3022,12 +3034,12 @@ msgstr "" "innehåller specialiserade beteenden för olika HTTP-metoder, serializer-" "överskrivningar och behörighetshantering baserat på förfrågningskontexten." -#: core/viewsets.py:1074 +#: core/viewsets.py:1076 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Fel i geokodningen: {e}" -#: core/viewsets.py:1081 +#: core/viewsets.py:1083 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/th_TH/LC_MESSAGES/django.mo b/core/locale/th_TH/LC_MESSAGES/django.mo index 4dbb5873..b32192f8 100644 Binary files a/core/locale/th_TH/LC_MESSAGES/django.mo and b/core/locale/th_TH/LC_MESSAGES/django.mo differ diff --git a/core/locale/th_TH/LC_MESSAGES/django.po b/core/locale/th_TH/LC_MESSAGES/django.po index 03fd88cc..7067d43b 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -49,82 +49,86 @@ msgstr "แก้ไขแล้ว" msgid "when the object was last modified" msgstr "เมื่อครั้งล่าสุดที่มีการแก้ไขวัตถุ" -#: core/admin.py:63 +#: core/admin.py:68 msgid "translations" msgstr "การแปล" -#: core/admin.py:67 +#: core/admin.py:72 msgid "general" msgstr "ทั่วไป" -#: core/admin.py:69 +#: core/admin.py:74 msgid "relations" msgstr "ความสัมพันธ์" -#: core/admin.py:87 +#: core/admin.py:76 +msgid "additional info" +msgstr "ข้อมูลเพิ่มเติม" + +#: core/admin.py:94 msgid "metadata" msgstr "เมตาดาตา" -#: core/admin.py:94 +#: core/admin.py:101 msgid "timestamps" msgstr "เวลาที่บันทึก" -#: core/admin.py:109 +#: core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "เปิดใช้งานที่เลือกไว้ %(verbose_name_plural)s" -#: core/admin.py:114 +#: core/admin.py:121 msgid "selected items have been activated." msgstr "รายการที่เลือกไว้ได้รับการเปิดใช้งานแล้ว!" -#: core/admin.py:120 +#: core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "ยกเลิกการใช้งานที่เลือกไว้ %(verbose_name_plural)s" -#: core/admin.py:125 +#: core/admin.py:132 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:701 core/models.py:709 +#: core/admin.py:144 core/graphene/object_types.py:609 +#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 msgid "attribute value" msgstr "ค่าคุณสมบัติ" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 +#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718 msgid "attribute values" msgstr "ค่าของแอตทริบิวต์" -#: core/admin.py:146 +#: core/admin.py:153 msgid "image" msgstr "ภาพ" -#: core/admin.py:147 core/graphene/object_types.py:501 +#: core/admin.py:154 core/graphene/object_types.py:501 msgid "images" msgstr "รูปภาพ" -#: core/admin.py:155 core/models.py:459 +#: core/admin.py:162 core/models.py:467 msgid "stock" msgstr "สต็อก" -#: core/admin.py:156 core/graphene/object_types.py:663 +#: core/admin.py:163 core/graphene/object_types.py:663 msgid "stocks" msgstr "หุ้น" -#: core/admin.py:166 core/models.py:1667 +#: core/admin.py:173 core/models.py:1675 msgid "order product" msgstr "สั่งซื้อสินค้า" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 msgid "order products" msgstr "สั่งซื้อสินค้า" -#: core/admin.py:180 core/admin.py:181 +#: core/admin.py:187 core/admin.py:188 msgid "children" msgstr "เด็ก" -#: core/admin.py:566 +#: core/admin.py:940 msgid "Config" msgstr "การกำหนดค่า" @@ -723,23 +727,23 @@ msgid "add or remove feedback on an order–product relation" msgstr "" "เพิ่มหรือลบความคิดเห็นเกี่ยวกับความสัมพันธ์ระหว่างคำสั่งซื้อและผลิตภัณฑ์" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 msgid "no search term provided." msgstr "ไม่พบคำค้นหา" -#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +#: core/filters.py:65 core/filters.py:399 core/filters.py:526 msgid "Search" msgstr "ค้นหา" -#: core/filters.py:66 core/filters.py:554 core/filters.py:583 +#: core/filters.py:66 core/filters.py:556 core/filters.py:585 msgid "UUID" msgstr "ยูไอไอดี" -#: core/filters.py:67 core/filters.py:399 core/filters.py:526 +#: core/filters.py:67 core/filters.py:401 core/filters.py:528 msgid "Name" msgstr "ชื่อ" -#: core/filters.py:68 core/filters.py:528 +#: core/filters.py:68 core/filters.py:530 msgid "Categories" msgstr "หมวดหมู่" @@ -747,7 +751,7 @@ msgstr "หมวดหมู่" msgid "Categories Slugs" msgstr "หมวดหมู่ slug" -#: core/filters.py:71 core/filters.py:407 +#: core/filters.py:71 core/filters.py:409 msgid "Tags" msgstr "แท็ก" @@ -775,8 +779,8 @@ msgstr "คุณลักษณะ" msgid "Quantity" msgstr "ปริมาณ" -#: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:301 core/models.py:383 core/models.py:536 +#: core/filters.py:78 core/filters.py:403 core/filters.py:529 +#: core/models.py:309 core/models.py:391 core/models.py:544 msgid "Slug" msgstr "ทาก" @@ -792,7 +796,7 @@ msgstr "รวมหมวดหมู่ย่อย" msgid "Include personal ordered" msgstr "รวมสินค้าสั่งทำส่วนตัว" -#: core/filters.py:85 core/models.py:540 +#: core/filters.py:85 core/models.py:548 msgid "SKU" msgstr "SKU" @@ -800,48 +804,48 @@ msgstr "SKU" msgid "there must be a category_uuid to use include_subcategories flag" msgstr "ต้องมี category_uuid เพื่อใช้แฟล็ก include_subcategories" -#: core/filters.py:324 +#: core/filters.py:326 msgid "Search (ID, product name or part number)" msgstr "ค้นหา (รหัส, ชื่อผลิตภัณฑ์ หรือหมายเลขชิ้นส่วน)" -#: core/filters.py:327 +#: core/filters.py:329 msgid "Bought after (inclusive)" msgstr "ซื้อหลังจาก (รวมแล้ว)" -#: core/filters.py:328 +#: core/filters.py:330 msgid "Bought before (inclusive)" msgstr "ซื้อมาก่อน (รวมแล้ว)" -#: core/filters.py:331 core/filters.py:378 core/filters.py:585 +#: core/filters.py:333 core/filters.py:380 core/filters.py:587 msgid "User email" msgstr "อีเมลผู้ใช้" -#: core/filters.py:332 core/filters.py:379 core/filters.py:563 -#: core/filters.py:584 +#: core/filters.py:334 core/filters.py:381 core/filters.py:565 +#: core/filters.py:586 msgid "User UUID" msgstr "รหัสผู้ใช้ UUID" -#: core/filters.py:333 +#: core/filters.py:335 msgid "Status" msgstr "สถานะ" -#: core/filters.py:337 +#: core/filters.py:339 msgid "Human Readable ID" msgstr "รหัสที่มนุษย์อ่านได้" -#: core/filters.py:400 +#: core/filters.py:402 msgid "Parent" msgstr "ผู้ปกครอง" -#: core/filters.py:404 +#: core/filters.py:406 msgid "Whole category(has at least 1 product or not)" msgstr "หมวดหมู่ทั้งหมด (มีอย่างน้อย 1 ผลิตภัณฑ์หรือไม่)" -#: core/filters.py:408 +#: core/filters.py:410 msgid "Level" msgstr "ระดับ" -#: core/filters.py:558 +#: core/filters.py:560 msgid "Product UUID" msgstr "รหัส UUID ของผลิตภัณฑ์" @@ -897,7 +901,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:679 +#: core/graphene/mutations.py:527 core/viewsets.py:680 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "ประเภทไม่ถูกต้องมาจากเมธอด order.buy(): {type(instance)!s}" @@ -972,9 +976,9 @@ msgstr "ไม่พบคำสั่งซื้อสินค้า {order_p msgid "original address string provided by the user" msgstr "สตริงที่อยู่ต้นฉบับที่ผู้ใช้ให้มา" -#: 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 +#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 +#: core/models.py:1289 core/models.py:1318 core/models.py:1343 +#: core/viewsets.py:683 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} ไม่พบ: {uuid}!" @@ -988,8 +992,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:672 core/models.py:1144 -#: core/models.py:1744 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 +#: core/models.py:1752 msgid "attributes" msgstr "คุณลักษณะ" @@ -1002,11 +1006,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:326 core/models.py:626 +#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 msgid "categories" msgstr "หมวดหมู่" -#: core/graphene/object_types.py:124 core/models.py:397 +#: core/graphene/object_types.py:124 core/models.py:405 msgid "brands" msgstr "แบรนด์" @@ -1015,7 +1019,7 @@ msgid "category image url" msgstr "หมวดหมู่" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:263 +#: core/models.py:271 msgid "markup percentage" msgstr "เปอร์เซ็นต์มาร์กอัป" @@ -1036,7 +1040,7 @@ msgstr "แท็กสำหรับหมวดหมู่นี้" msgid "products in this category" msgstr "สินค้าในหมวดหมู่" -#: core/graphene/object_types.py:351 core/models.py:169 +#: core/graphene/object_types.py:351 core/models.py:177 msgid "vendors" msgstr "ผู้ขาย" @@ -1061,7 +1065,7 @@ msgid "represents feedback from a user." msgstr "แสดงความคิดเห็นจากผู้ใช้" #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1138 +#: core/models.py:1146 msgid "notifications" msgstr "การแจ้งเตือน" @@ -1069,7 +1073,7 @@ msgstr "การแจ้งเตือน" msgid "download url for this order product if applicable" msgstr "ดาวน์โหลด url สำหรับคำสั่งซื้อสินค้านี้ หากมี" -#: core/graphene/object_types.py:400 core/models.py:1860 +#: core/graphene/object_types.py:400 core/models.py:1868 msgid "feedback" msgstr "ข้อเสนอแนะ" @@ -1077,7 +1081,7 @@ msgstr "ข้อเสนอแนะ" msgid "a list of order products in this order" msgstr "รายการสินค้าที่สั่งซื้อในคำสั่งซื้อนี้" -#: core/graphene/object_types.py:436 core/models.py:1108 +#: core/graphene/object_types.py:436 core/models.py:1116 msgid "billing address" msgstr "ที่อยู่สำหรับออกใบแจ้งหนี้" @@ -1105,7 +1109,7 @@ msgstr "สินค้าทั้งหมดในคำสั่งซื้ msgid "transactions for this order" msgstr "รายการธุรกรรมสำหรับคำสั่งนี้" -#: core/graphene/object_types.py:465 core/models.py:1172 +#: core/graphene/object_types.py:465 core/models.py:1180 msgid "orders" msgstr "คำสั่ง" @@ -1117,19 +1121,19 @@ msgstr "URL ของรูปภาพ" msgid "product's images" msgstr "รูปภาพของสินค้า" -#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 +#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 msgid "category" msgstr "หมวดหมู่" -#: core/graphene/object_types.py:502 core/models.py:1861 +#: core/graphene/object_types.py:502 core/models.py:1869 msgid "feedbacks" msgstr "ข้อเสนอแนะ" -#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 +#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 msgid "brand" msgstr "แบรนด์" -#: core/graphene/object_types.py:504 core/models.py:101 +#: core/graphene/object_types.py:504 core/models.py:102 msgid "attribute groups" msgstr "กลุ่มคุณลักษณะ" @@ -1157,7 +1161,7 @@ msgstr "จำนวนความคิดเห็น" msgid "only available for personal orders" msgstr "สินค้าที่มีจำหน่ายเฉพาะการสั่งซื้อส่วนบุคคลเท่านั้น" -#: core/graphene/object_types.py:534 core/models.py:550 +#: core/graphene/object_types.py:534 core/models.py:558 msgid "products" msgstr "ผลิตภัณฑ์" @@ -1169,15 +1173,15 @@ msgstr "รหัสส่งเสริมการขาย" msgid "products on sale" msgstr "สินค้าลดราคา" -#: core/graphene/object_types.py:651 core/models.py:798 +#: core/graphene/object_types.py:651 core/models.py:806 msgid "promotions" msgstr "โปรโมชั่น" -#: core/graphene/object_types.py:655 core/models.py:168 +#: core/graphene/object_types.py:655 core/models.py:176 msgid "vendor" msgstr "ผู้ขาย" -#: core/graphene/object_types.py:656 core/models.py:549 +#: core/graphene/object_types.py:656 core/models.py:557 #: 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 +1189,11 @@ msgstr "ผู้ขาย" msgid "product" msgstr "สินค้า" -#: core/graphene/object_types.py:667 core/models.py:821 +#: core/graphene/object_types.py:667 core/models.py:829 msgid "wishlisted products" msgstr "สินค้าที่อยู่ในรายการต้องการ" -#: core/graphene/object_types.py:673 core/models.py:838 +#: core/graphene/object_types.py:673 core/models.py:846 msgid "wishlists" msgstr "รายการสิ่งที่ต้องการ" @@ -1197,7 +1201,7 @@ msgstr "รายการสิ่งที่ต้องการ" msgid "tagged products" msgstr "สินค้าที่ติดแท็ก" -#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 +#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 msgid "product tags" msgstr "แท็กสินค้า" @@ -1282,7 +1286,7 @@ msgstr "ผลการค้นหาสินค้า" msgid "posts search results" msgstr "ผลการค้นหาสินค้า" -#: core/models.py:70 +#: core/models.py:71 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1294,23 +1298,23 @@ msgstr "" "กลุ่มแอตทริบิวต์สามารถมีกลุ่มแม่ได้ ทำให้เกิดโครงสร้างลำดับชั้น " "ซึ่งสามารถมีประโยชน์ในการจัดหมวดหมู่และจัดการแอตทริบิวต์ได้อย่างมีประสิทธิภาพมากขึ้นในระบบที่ซับซ้อน" -#: core/models.py:86 +#: core/models.py:87 msgid "parent of this group" msgstr "ผู้ปกครองของกลุ่มนี้" -#: core/models.py:87 +#: core/models.py:88 msgid "parent attribute group" msgstr "กลุ่มแอตทริบิวต์ของพ่อแม่" -#: core/models.py:91 core/models.py:92 +#: core/models.py:92 core/models.py:93 msgid "attribute group's name" msgstr "ชื่อกลุ่มคุณสมบัติ" -#: core/models.py:100 core/models.py:634 +#: core/models.py:101 core/models.py:642 msgid "attribute group" msgstr "กลุ่มคุณลักษณะ" -#: core/models.py:106 +#: core/models.py:107 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1327,32 +1331,40 @@ msgstr "" "โมเดลนี้ยังรักษาข้อมูลเมตาเพิ่มเติมและข้อจำกัด " "ทำให้เหมาะสำหรับการใช้งานในระบบที่มีการโต้ตอบกับผู้ขายภายนอก" -#: core/models.py:119 +#: core/models.py:120 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "เก็บรักษาข้อมูลประจำตัวและจุดสิ้นสุดที่จำเป็นสำหรับการสื่อสาร API ของผู้ขาย" -#: core/models.py:120 +#: core/models.py:121 msgid "authentication info" msgstr "ข้อมูลการยืนยันตัวตน" -#: core/models.py:125 +#: core/models.py:126 msgid "define the markup for products retrieved from this vendor" msgstr "กำหนดมาร์กอัปสำหรับสินค้าที่ดึงมาจากผู้ขายรายนี้" -#: core/models.py:126 +#: core/models.py:127 msgid "vendor markup percentage" msgstr "เปอร์เซ็นต์การบวกกำไรของผู้ขาย" -#: core/models.py:130 +#: core/models.py:131 msgid "name of this vendor" msgstr "ชื่อของผู้ขายนี้" -#: core/models.py:131 +#: core/models.py:132 msgid "vendor name" msgstr "ชื่อผู้ขาย" -#: core/models.py:177 +#: core/models.py:143 +msgid "response file" +msgstr "ไฟล์การตอบสนอง" + +#: core/models.py:144 +msgid "vendor's last processing response" +msgstr "การตอบกลับการประมวลผลครั้งสุดท้ายของผู้ขาย" + +#: core/models.py:185 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1365,27 +1377,27 @@ msgstr "" " รองรับการดำเนินการที่ส่งออกผ่าน mixins " "และให้การปรับแต่งเมตาดาต้าสำหรับวัตถุประสงค์ในการบริหารจัดการ" -#: core/models.py:189 core/models.py:220 +#: core/models.py:197 core/models.py:228 msgid "internal tag identifier for the product tag" msgstr "ตัวระบุแท็กภายในสำหรับแท็กสินค้า" -#: core/models.py:190 core/models.py:221 +#: core/models.py:198 core/models.py:229 msgid "tag name" msgstr "ชื่อวัน" -#: core/models.py:194 core/models.py:225 +#: core/models.py:202 core/models.py:233 msgid "user-friendly name for the product tag" msgstr "ชื่อที่เป็นมิตรกับผู้ใช้สำหรับแท็กสินค้า" -#: core/models.py:195 core/models.py:226 +#: core/models.py:203 core/models.py:234 msgid "tag display name" msgstr "แสดงชื่อแท็ก" -#: core/models.py:203 +#: core/models.py:211 msgid "product tag" msgstr "แท็กสินค้า" -#: core/models.py:209 +#: core/models.py:217 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 +1407,15 @@ msgstr "" "คลาสนี้จำลองแท็กหมวดหมู่ที่สามารถใช้เพื่อเชื่อมโยงและจัดประเภทผลิตภัณฑ์ได้ " "รวมถึงแอตทริบิวต์สำหรับตัวระบุแท็กภายในและชื่อแสดงผลที่เป็นมิตรกับผู้ใช้" -#: core/models.py:234 +#: core/models.py:242 msgid "category tag" msgstr "แท็กหมวดหมู่" -#: core/models.py:235 core/models.py:307 +#: core/models.py:243 core/models.py:315 msgid "category tags" msgstr "แท็กหมวดหมู่" -#: core/models.py:240 +#: core/models.py:248 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1423,51 +1435,51 @@ msgstr "" " ช่วยให้ผู้ใช้หรือผู้ดูแลระบบสามารถระบุชื่อ คำอธิบาย และลำดับชั้นของหมวดหมู่" " รวมถึงกำหนดคุณลักษณะต่างๆ เช่น รูปภาพ แท็ก หรือความสำคัญ" -#: core/models.py:254 +#: core/models.py:262 msgid "upload an image representing this category" msgstr "อัปโหลดรูปภาพที่แสดงถึงหมวดหมู่นี้" -#: core/models.py:257 +#: core/models.py:265 msgid "category image" msgstr "ภาพหมวดหมู่" -#: core/models.py:262 +#: core/models.py:270 msgid "define a markup percentage for products in this category" msgstr "กำหนดเปอร์เซ็นต์มาร์กอัปสำหรับสินค้าในหมวดหมู่นี้" -#: core/models.py:271 +#: core/models.py:279 msgid "parent of this category to form a hierarchical structure" msgstr "ผู้ปกครองของหมวดหมู่นี้เพื่อสร้างโครงสร้างลำดับชั้น" -#: core/models.py:272 +#: core/models.py:280 msgid "parent category" msgstr "หมวดหมู่หลัก" -#: core/models.py:277 +#: core/models.py:285 msgid "category name" msgstr "ชื่อหมวดหมู่" -#: core/models.py:278 +#: core/models.py:286 msgid "provide a name for this category" msgstr "กรุณาตั้งชื่อสำหรับหมวดหมู่นี้" -#: core/models.py:285 +#: core/models.py:293 msgid "add a detailed description for this category" msgstr "เพิ่มคำอธิบายโดยละเอียดสำหรับหมวดหมู่นี้" -#: core/models.py:286 +#: core/models.py:294 msgid "category description" msgstr "หมวดหมู่คำอธิบาย" -#: core/models.py:306 +#: core/models.py:314 msgid "tags that help describe or group this category" msgstr "แท็กที่ช่วยอธิบายหรือจัดกลุ่มหมวดหมู่นี้" -#: core/models.py:313 core/models.py:389 +#: core/models.py:321 core/models.py:397 msgid "priority" msgstr "ลำดับความสำคัญ" -#: core/models.py:332 +#: core/models.py:340 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 +1491,47 @@ msgstr "" "รวมถึงชื่อ โลโก้ คำอธิบาย หมวดหมู่ที่เกี่ยวข้อง สลักเฉพาะ และลำดับความสำคัญ " "ช่วยให้สามารถจัดระเบียบและแสดงข้อมูลที่เกี่ยวข้องกับแบรนด์ภายในแอปพลิเคชันได้" -#: core/models.py:342 +#: core/models.py:350 msgid "name of this brand" msgstr "ชื่อของแบรนด์นี้" -#: core/models.py:343 +#: core/models.py:351 msgid "brand name" msgstr "ชื่อแบรนด์" -#: core/models.py:350 +#: core/models.py:358 msgid "upload a logo representing this brand" msgstr "อัปโหลดโลโก้ที่เป็นตัวแทนของแบรนด์นี้" -#: core/models.py:352 +#: core/models.py:360 msgid "brand small image" msgstr "แบรนด์รูปภาพขนาดเล็ก" -#: core/models.py:358 +#: core/models.py:366 msgid "upload a big logo representing this brand" msgstr "อัปโหลดโลโก้ขนาดใหญ่ที่เป็นตัวแทนของแบรนด์นี้" -#: core/models.py:360 +#: core/models.py:368 msgid "brand big image" msgstr "แบรนด์ภาพใหญ่" -#: core/models.py:365 +#: core/models.py:373 msgid "add a detailed description of the brand" msgstr "เพิ่มคำอธิบายรายละเอียดของแบรนด์" -#: core/models.py:366 +#: core/models.py:374 msgid "brand description" msgstr "คำอธิบายแบรนด์" -#: core/models.py:371 +#: core/models.py:379 msgid "optional categories that this brand is associated with" msgstr "หมวดหมู่เพิ่มเติมที่แบรนด์นี้เกี่ยวข้อง" -#: core/models.py:372 +#: core/models.py:380 msgid "associated categories" msgstr "หมวดหมู่" -#: core/models.py:402 +#: core/models.py:410 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 +1547,68 @@ msgstr "" "เป็นส่วนหนึ่งของระบบการจัดการสินค้าคงคลังเพื่อให้สามารถติดตามและประเมินสินค้าที่มีจากผู้จำหน่ายต่างๆ" " ได้" -#: core/models.py:414 +#: core/models.py:422 msgid "the vendor supplying this product stock" msgstr "ผู้จัดจำหน่ายที่จัดหาสินค้าคงคลังนี้" -#: core/models.py:415 +#: core/models.py:423 msgid "associated vendor" msgstr "ผู้ขายที่เกี่ยวข้อง" -#: core/models.py:419 +#: core/models.py:427 msgid "final price to the customer after markups" msgstr "ราคาสุดท้ายที่ลูกค้าต้องชำระหลังจากการบวกกำไร" -#: core/models.py:420 +#: core/models.py:428 msgid "selling price" msgstr "ราคาขาย" -#: core/models.py:425 +#: core/models.py:433 msgid "the product associated with this stock entry" msgstr "สินค้าที่เกี่ยวข้องกับรายการสินค้าคงคลังนี้" -#: core/models.py:426 core/models.py:697 core/models.py:744 -#: core/models.py:1641 +#: core/models.py:434 core/models.py:705 core/models.py:752 +#: core/models.py:1649 msgid "associated product" msgstr "ผลิตภัณฑ์ที่เกี่ยวข้อง" -#: core/models.py:433 +#: core/models.py:441 msgid "the price paid to the vendor for this product" msgstr "ราคาที่จ่ายให้กับผู้ขายสำหรับสินค้านี้" -#: core/models.py:434 +#: core/models.py:442 msgid "vendor purchase price" msgstr "ราคาซื้อจากผู้ขาย" -#: core/models.py:438 +#: core/models.py:446 msgid "available quantity of the product in stock" msgstr "จำนวนสินค้าที่มีในสต็อก" -#: core/models.py:439 +#: core/models.py:447 msgid "quantity in stock" msgstr "จำนวนในสต็อก" -#: core/models.py:443 +#: core/models.py:451 msgid "vendor-assigned SKU for identifying the product" msgstr "รหัสสินค้าที่ผู้ขายกำหนดเพื่อระบุตัวผลิตภัณฑ์" -#: core/models.py:444 +#: core/models.py:452 msgid "vendor sku" msgstr "รหัสสินค้าของผู้ขาย" -#: core/models.py:450 +#: core/models.py:458 msgid "digital file associated with this stock if applicable" msgstr "ไฟล์ดิจิทัลที่เกี่ยวข้องกับสต็อกนี้ หากมี" -#: core/models.py:451 +#: core/models.py:459 msgid "digital file" msgstr "ไฟล์ดิจิทัล" -#: core/models.py:460 +#: core/models.py:468 msgid "stock entries" msgstr "รายการสินค้าคงคลัง" -#: core/models.py:465 +#: core/models.py:473 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1616,55 +1628,55 @@ msgstr "" " " "และจัดการการแคชสำหรับคุณสมบัติที่เข้าถึงบ่อยเพื่อปรับปรุงประสิทธิภาพใช้เพื่อกำหนดและจัดการข้อมูลผลิตภัณฑ์และข้อมูลที่เกี่ยวข้องภายในแอปพลิเคชัน" -#: core/models.py:478 +#: core/models.py:486 msgid "category this product belongs to" msgstr "หมวดหมู่ที่สินค้านี้จัดอยู่ใน" -#: core/models.py:487 +#: core/models.py:495 msgid "optionally associate this product with a brand" msgstr "เลือกเชื่อมโยงผลิตภัณฑ์นี้กับแบรนด์" -#: core/models.py:493 +#: core/models.py:501 msgid "tags that help describe or group this product" msgstr "แท็กที่ช่วยอธิบายหรือจัดกลุ่มผลิตภัณฑ์นี้" -#: core/models.py:498 +#: core/models.py:506 msgid "indicates whether this product is digitally delivered" msgstr "บ่งชี้ว่าสินค้านี้จัดส่งในรูปแบบดิจิทัลหรือไม่" -#: core/models.py:499 +#: core/models.py:507 msgid "is product digital" msgstr "สินค้าเป็นดิจิทัล" -#: core/models.py:505 +#: core/models.py:513 msgid "provide a clear identifying name for the product" msgstr "ระบุชื่อที่ชัดเจนสำหรับผลิตภัณฑ์" -#: core/models.py:506 +#: core/models.py:514 msgid "product name" msgstr "ชื่อสินค้า" -#: core/models.py:511 core/models.py:786 +#: core/models.py:519 core/models.py:794 msgid "add a detailed description of the product" msgstr "เพิ่มคำอธิบายรายละเอียดของสินค้า" -#: core/models.py:512 +#: core/models.py:520 msgid "product description" msgstr "รายละเอียดสินค้า" -#: core/models.py:519 +#: core/models.py:527 msgid "part number for this product" msgstr "หมายเลขชิ้นส่วนสำหรับสินค้านี้" -#: core/models.py:520 +#: core/models.py:528 msgid "part number" msgstr "หมายเลขชิ้นส่วน" -#: core/models.py:539 +#: core/models.py:547 msgid "stock keeping unit for this product" msgstr "หน่วยเก็บสินค้าสำหรับสินค้านี้" -#: core/models.py:613 +#: core/models.py:621 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 +1692,68 @@ msgstr "" "อาร์เรย์, และออบเจ็กต์. " "ซึ่งช่วยให้สามารถจัดโครงสร้างข้อมูลได้ไดนามิกและยืดหยุ่น." -#: core/models.py:625 +#: core/models.py:633 msgid "category of this attribute" msgstr "หมวดหมู่ของแอตทริบิวต์นี้" -#: core/models.py:633 +#: core/models.py:641 msgid "group of this attribute" msgstr "กลุ่มของแอตทริบิวต์นี้" -#: core/models.py:639 +#: core/models.py:647 msgid "string" msgstr "สตริง" -#: core/models.py:640 +#: core/models.py:648 msgid "integer" msgstr "ความซื่อสัตย์" -#: core/models.py:641 +#: core/models.py:649 msgid "float" msgstr "ลอย" -#: core/models.py:642 +#: core/models.py:650 msgid "boolean" msgstr "บูลีน" -#: core/models.py:643 +#: core/models.py:651 msgid "array" msgstr "อาร์เรย์" -#: core/models.py:644 +#: core/models.py:652 msgid "object" msgstr "วัตถุ" -#: core/models.py:646 +#: core/models.py:654 msgid "type of the attribute's value" msgstr "ประเภทของค่าของแอตทริบิวต์" -#: core/models.py:647 +#: core/models.py:655 msgid "value type" msgstr "ประเภทของค่า" -#: core/models.py:652 +#: core/models.py:660 msgid "name of this attribute" msgstr "ชื่อของแอตทริบิวต์นี้" -#: core/models.py:653 +#: core/models.py:661 msgid "attribute's name" msgstr "ชื่อของแอตทริบิวต์" -#: core/models.py:659 +#: core/models.py:667 msgid "is filterable" msgstr "สามารถกรองได้" -#: core/models.py:660 +#: core/models.py:668 msgid "designates whether this attribute can be used for filtering or not" msgstr "กำหนดว่าแอตทริบิวต์นี้สามารถใช้สำหรับการกรองหรือไม่" -#: core/models.py:671 core/models.py:689 +#: core/models.py:679 core/models.py:697 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "คุณสมบัติ" -#: core/models.py:677 +#: core/models.py:685 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 +1763,19 @@ msgstr "" "กับ 'ค่า' ที่ไม่ซ้ำกัน " "ทำให้การจัดระเบียบและการแสดงลักษณะของผลิตภัณฑ์เป็นไปอย่างมีประสิทธิภาพและยืดหยุ่นมากขึ้น" -#: core/models.py:688 +#: core/models.py:696 msgid "attribute of this value" msgstr "คุณลักษณะของค่านี้" -#: core/models.py:696 +#: core/models.py:704 msgid "the specific product associated with this attribute's value" msgstr "ผลิตภัณฑ์เฉพาะที่เกี่ยวข้องกับค่าของแอตทริบิวต์นี้" -#: core/models.py:702 +#: core/models.py:710 msgid "the specific value for this attribute" msgstr "ค่าเฉพาะสำหรับคุณสมบัตินี้" -#: core/models.py:715 +#: core/models.py:723 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 +1790,39 @@ msgstr "" "นอกจากนี้ยังมีคุณสมบัติการเข้าถึงสำหรับผู้ใช้ที่มีความต้องการพิเศษ " "โดยให้ข้อความทางเลือกสำหรับภาพ." -#: core/models.py:726 +#: core/models.py:734 msgid "provide alternative text for the image for accessibility" msgstr "ให้ข้อความทางเลือกสำหรับภาพเพื่อการเข้าถึง" -#: core/models.py:727 +#: core/models.py:735 msgid "image alt text" msgstr "ข้อความแสดงแทนภาพ" -#: core/models.py:730 +#: core/models.py:738 msgid "upload the image file for this product" msgstr "อัปโหลดไฟล์รูปภาพสำหรับสินค้านี้" -#: core/models.py:731 core/models.py:756 +#: core/models.py:739 core/models.py:764 msgid "product image" msgstr "รูปภาพสินค้า" -#: core/models.py:737 +#: core/models.py:745 msgid "determines the order in which images are displayed" msgstr "กำหนดลำดับการแสดงผลของภาพ" -#: core/models.py:738 +#: core/models.py:746 msgid "display priority" msgstr "ลำดับความสำคัญในการแสดงผล" -#: core/models.py:743 +#: core/models.py:751 msgid "the product that this image represents" msgstr "สินค้าที่ภาพนี้แทน" -#: core/models.py:757 +#: core/models.py:765 msgid "product images" msgstr "รูปภาพสินค้า" -#: core/models.py:762 +#: core/models.py:770 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 +1837,39 @@ msgstr "" "ให้รายละเอียดเกี่ยวกับโปรโมชั่น, และเชื่อมโยงกับสินค้าที่เกี่ยวข้อง. " "คลาสนี้ผสานการทำงานกับแคตตาล็อกสินค้าเพื่อกำหนดสินค้าที่ได้รับผลกระทบในแคมเปญ." -#: core/models.py:774 +#: core/models.py:782 msgid "percentage discount for the selected products" msgstr "เปอร์เซ็นต์ส่วนลดสำหรับสินค้าที่เลือก" -#: core/models.py:775 +#: core/models.py:783 msgid "discount percentage" msgstr "เปอร์เซ็นต์ส่วนลด" -#: core/models.py:780 +#: core/models.py:788 msgid "provide a unique name for this promotion" msgstr "กรุณาตั้งชื่อที่ไม่ซ้ำกันสำหรับการส่งเสริมการขายนี้" -#: core/models.py:781 +#: core/models.py:789 msgid "promotion name" msgstr "ชื่อโปรโมชั่น" -#: core/models.py:787 +#: core/models.py:795 msgid "promotion description" msgstr "รายละเอียดโปรโมชั่น" -#: core/models.py:792 +#: core/models.py:800 msgid "select which products are included in this promotion" msgstr "เลือกผลิตภัณฑ์ที่รวมอยู่ในโปรโมชั่นนี้" -#: core/models.py:793 +#: core/models.py:801 msgid "included products" msgstr "สินค้าที่รวมอยู่" -#: core/models.py:797 +#: core/models.py:805 msgid "promotion" msgstr "โปรโมชั่น" -#: core/models.py:808 +#: core/models.py:816 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 +1881,23 @@ msgstr "" "ซึ่งรวมถึงการเพิ่มและลบสินค้าออกจากคอลเลกชัน " "ตลอดจนการเพิ่มและลบสินค้าหลายรายการพร้อมกัน" -#: core/models.py:820 +#: core/models.py:828 msgid "products that the user has marked as wanted" msgstr "สินค้าที่ผู้ใช้ได้ทำเครื่องหมายว่าต้องการ" -#: core/models.py:828 +#: core/models.py:836 msgid "user who owns this wishlist" msgstr "ผู้ใช้ที่เป็นเจ้าของรายการความปรารถนา" -#: core/models.py:829 +#: core/models.py:837 msgid "wishlist owner" msgstr "เจ้าของรายการที่อยากได้" -#: core/models.py:837 +#: core/models.py:845 msgid "wishlist" msgstr "รายการสิ่งที่ต้องการ" -#: core/models.py:879 +#: core/models.py:887 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1901,19 +1913,19 @@ msgstr "" " คลาสนี้ขยายฟังก์ชันการทำงานจากมิกซ์อินเฉพาะ " "และให้คุณสมบัติเพิ่มเติมตามความต้องการ." -#: core/models.py:892 +#: core/models.py:900 msgid "documentary" msgstr "สารคดี" -#: core/models.py:893 +#: core/models.py:901 msgid "documentaries" msgstr "สารคดี" -#: core/models.py:903 +#: core/models.py:911 msgid "unresolved" msgstr "ยังไม่ได้รับการแก้ไข" -#: core/models.py:908 +#: core/models.py:916 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1934,59 +1946,59 @@ msgstr "" "ดิบเพื่อการประมวลผลหรือตรวจสอบเพิ่มเติมได้คลาสนี้ยังอนุญาตให้เชื่อมโยงที่อยู่กับผู้ใช้ได้" " ซึ่งช่วยให้การจัดการข้อมูลส่วนบุคคลเป็นไปอย่างสะดวก" -#: core/models.py:923 +#: core/models.py:931 msgid "address line for the customer" msgstr "ที่อยู่สำหรับลูกค้า" -#: core/models.py:924 +#: core/models.py:932 msgid "address line" msgstr "บรรทัดที่อยู่" -#: core/models.py:926 +#: core/models.py:934 msgid "street" msgstr "ถนน" -#: core/models.py:927 +#: core/models.py:935 msgid "district" msgstr "เขต" -#: core/models.py:928 +#: core/models.py:936 msgid "city" msgstr "เมือง" -#: core/models.py:929 +#: core/models.py:937 msgid "region" msgstr "ภูมิภาค" -#: core/models.py:930 +#: core/models.py:938 msgid "postal code" msgstr "รหัสไปรษณีย์" -#: core/models.py:931 +#: core/models.py:939 msgid "country" msgstr "ประเทศ" -#: core/models.py:938 +#: core/models.py:946 msgid "geolocation point: (longitude, latitude)" msgstr "จุดพิกัดภูมิศาสตร์ (ลองจิจูด, ละติจูด)" -#: core/models.py:941 +#: core/models.py:949 msgid "full JSON response from geocoder for this address" msgstr "การตอบกลับ JSON แบบเต็มจากตัวแปลงที่อยู่ทางภูมิศาสตร์สำหรับที่อยู่นี้" -#: core/models.py:946 +#: core/models.py:954 msgid "stored JSON response from the geocoding service" msgstr "เก็บคำตอบ JSON จากบริการการแปลงที่อยู่ทางภูมิศาสตร์" -#: core/models.py:954 +#: core/models.py:962 msgid "address" msgstr "ที่อยู่" -#: core/models.py:955 +#: core/models.py:963 msgid "addresses" msgstr "ที่อยู่" -#: core/models.py:967 +#: core/models.py:975 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 +2015,71 @@ msgstr "" "รวมถึงฟังก์ชันการทำงานเพื่อตรวจสอบและใช้รหัสโปรโมชั่นกับคำสั่งซื้อในขณะที่ตรวจสอบให้แน่ใจว่าข้อจำกัดต่างๆ" " ได้รับการปฏิบัติตาม" -#: core/models.py:981 +#: core/models.py:989 msgid "unique code used by a user to redeem a discount" msgstr "รหัสเฉพาะที่ผู้ใช้ใช้เพื่อแลกรับส่วนลด" -#: core/models.py:982 +#: core/models.py:990 msgid "promo code identifier" msgstr "รหัสโปรโมชั่น" -#: core/models.py:989 +#: core/models.py:997 msgid "fixed discount amount applied if percent is not used" msgstr "จำนวนส่วนลดคงที่ที่ใช้หากไม่ได้ใช้เปอร์เซ็นต์" -#: core/models.py:990 +#: core/models.py:998 msgid "fixed discount amount" msgstr "จำนวนส่วนลดคงที่" -#: core/models.py:996 +#: core/models.py:1004 msgid "percentage discount applied if fixed amount is not used" msgstr "ส่วนลดเป็นเปอร์เซ็นต์ที่ใช้เมื่อไม่ได้ใช้จำนวนเงินคงที่" -#: core/models.py:997 +#: core/models.py:1005 msgid "percentage discount" msgstr "เปอร์เซ็นต์ส่วนลด" -#: core/models.py:1002 +#: core/models.py:1010 msgid "timestamp when the promocode expires" msgstr "เวลาที่โค้ดโปรโมชั่นหมดอายุ" -#: core/models.py:1003 +#: core/models.py:1011 msgid "end validity time" msgstr "เวลาสิ้นสุดความถูกต้อง" -#: core/models.py:1008 +#: core/models.py:1016 msgid "timestamp from which this promocode is valid" msgstr "เวลาที่ตราไว้ซึ่งรหัสโปรโมชั่นนี้ใช้ได้" -#: core/models.py:1009 +#: core/models.py:1017 msgid "start validity time" msgstr "เวลาเริ่มต้นความถูกต้อง" -#: core/models.py:1014 +#: core/models.py:1022 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "เวลาที่ตราประทับเมื่อใช้รหัสโปรโมชั่น, ว่างเปล่าหากยังไม่ได้ใช้" -#: core/models.py:1015 +#: core/models.py:1023 msgid "usage timestamp" msgstr "เวลาการใช้งาน" -#: core/models.py:1020 +#: core/models.py:1028 msgid "user assigned to this promocode if applicable" msgstr "ผู้ใช้ที่ได้รับมอบหมายให้ใช้รหัสโปรโมชั่นนี้ หากมี" -#: core/models.py:1021 +#: core/models.py:1029 msgid "assigned user" msgstr "ผู้ใช้ที่ได้รับมอบหมาย" -#: core/models.py:1028 +#: core/models.py:1036 msgid "promo code" msgstr "รหัสโปรโมชั่น" -#: core/models.py:1029 +#: core/models.py:1037 msgid "promo codes" msgstr "รหัสส่งเสริมการขาย" -#: core/models.py:1044 +#: core/models.py:1052 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2075,16 +2087,16 @@ msgstr "" "ควรกำหนดประเภทส่วนลดเพียงประเภทเดียว (จำนวนเงินหรือเปอร์เซ็นต์) เท่านั้น " "ไม่ควรกำหนดทั้งสองประเภทหรือไม่ได้กำหนดเลย" -#: core/models.py:1065 +#: core/models.py:1073 msgid "promocode already used" msgstr "รหัสโปรโมชั่นถูกใช้ไปแล้ว" -#: core/models.py:1081 +#: core/models.py:1089 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "ประเภทส่วนลดไม่ถูกต้องสำหรับรหัสโปรโมชั่น {self.uuid}!" -#: core/models.py:1090 +#: core/models.py:1098 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 +2114,138 @@ msgstr "" "และรายละเอียดการจัดส่งหรือการเรียกเก็บเงินสามารถอัปเดตได้เช่นกัน นอกจากนี้ " "ฟังก์ชันการทำงานยังรองรับการจัดการสินค้าในวงจรชีวิตของคำสั่งซื้อ" -#: core/models.py:1107 +#: core/models.py:1115 msgid "the billing address used for this order" msgstr "ที่อยู่สำหรับเรียกเก็บเงินที่ใช้สำหรับคำสั่งซื้อนี้" -#: core/models.py:1115 +#: core/models.py:1123 msgid "optional promo code applied to this order" msgstr "รหัสโปรโมชั่นเสริมใช้กับคำสั่งซื้อนี้แล้ว" -#: core/models.py:1116 +#: core/models.py:1124 msgid "applied promo code" msgstr "ใช้รหัสโปรโมชั่น" -#: core/models.py:1124 +#: core/models.py:1132 msgid "the shipping address used for this order" msgstr "ที่อยู่สำหรับจัดส่งที่ใช้สำหรับคำสั่งซื้อนี้" -#: core/models.py:1125 +#: core/models.py:1133 msgid "shipping address" msgstr "ที่อยู่สำหรับจัดส่ง" -#: core/models.py:1131 +#: core/models.py:1139 msgid "current status of the order in its lifecycle" msgstr "สถานะปัจจุบันของคำสั่งซื้อในวงจรชีวิต" -#: core/models.py:1132 +#: core/models.py:1140 msgid "order status" msgstr "สถานะการสั่งซื้อ" -#: core/models.py:1137 core/models.py:1618 +#: core/models.py:1145 core/models.py:1626 msgid "json structure of notifications to display to users" msgstr "" "โครงสร้าง JSON ของการแจ้งเตือนที่จะแสดงให้ผู้ใช้เห็น ใน UI " "ของผู้ดูแลระบบจะใช้การแสดงผลแบบตาราง" -#: core/models.py:1143 +#: core/models.py:1151 msgid "json representation of order attributes for this order" msgstr "การแสดงผล JSON ของคุณลักษณะคำสั่งซื้อสำหรับคำสั่งซื้อนี้" -#: core/models.py:1149 +#: core/models.py:1157 msgid "the user who placed the order" msgstr "ผู้ใช้ที่ทำการสั่งซื้อ" -#: core/models.py:1150 +#: core/models.py:1158 msgid "user" msgstr "ผู้ใช้" -#: core/models.py:1156 +#: core/models.py:1164 msgid "the timestamp when the order was finalized" msgstr "เวลาที่คำสั่งซื้อได้รับการยืนยัน" -#: core/models.py:1157 +#: core/models.py:1165 msgid "buy time" msgstr "ซื้อเวลา" -#: core/models.py:1164 +#: core/models.py:1172 msgid "a human-readable identifier for the order" msgstr "ตัวระบุที่มนุษย์อ่านได้สำหรับคำสั่ง" -#: core/models.py:1165 +#: core/models.py:1173 msgid "human readable id" msgstr "รหัสที่สามารถอ่านได้โดยมนุษย์" -#: core/models.py:1171 +#: core/models.py:1179 msgid "order" msgstr "คำสั่ง" -#: core/models.py:1209 +#: core/models.py:1217 msgid "a user must have only one pending order at a time" msgstr "" "ผู้ใช้ต้องมีคำสั่งซื้อที่รอดำเนินการเพียงหนึ่งรายการเท่านั้นในแต่ละครั้ง!" -#: core/models.py:1249 +#: core/models.py:1257 msgid "you cannot add products to an order that is not a pending one" msgstr "" "คุณไม่สามารถเพิ่มสินค้าในคำสั่งซื้อที่ไม่ใช่คำสั่งซื้อที่รอดำเนินการได้" -#: core/models.py:1254 +#: core/models.py:1262 msgid "you cannot add inactive products to order" msgstr "คุณไม่สามารถเพิ่มสินค้าที่ไม่ใช้งานในคำสั่งซื้อได้" -#: core/models.py:1271 +#: core/models.py:1279 msgid "you cannot add more products than available in stock" msgstr "คุณไม่สามารถเพิ่มสินค้าได้มากกว่าที่มีในสต็อก" -#: core/models.py:1293 core/models.py:1318 core/models.py:1326 +#: core/models.py:1301 core/models.py:1326 core/models.py:1334 msgid "you cannot remove products from an order that is not a pending one" msgstr "" "คุณไม่สามารถลบสินค้าออกจากคำสั่งซื้อที่ไม่ใช่คำสั่งซื้อที่อยู่ในสถานะรอดำเนินการได้" -#: core/models.py:1314 +#: core/models.py:1322 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} ไม่มีอยู่จริงกับคำค้นหา <{query}>!" -#: core/models.py:1346 +#: core/models.py:1354 msgid "promocode does not exist" msgstr "รหัสโปรโมชั่นไม่มีอยู่" -#: core/models.py:1352 +#: core/models.py:1360 msgid "you can only buy physical products with shipping address specified" msgstr "" "คุณสามารถซื้อได้เฉพาะสินค้าทางกายภาพที่มีที่อยู่สำหรับจัดส่งระบุไว้เท่านั้น!" -#: core/models.py:1371 +#: core/models.py:1379 msgid "address does not exist" msgstr "ไม่มีที่อยู่" -#: core/models.py:1392 core/models.py:1461 +#: core/models.py:1400 core/models.py:1469 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "ขณะนี้คุณไม่สามารถซื้อได้ กรุณาลองใหม่อีกครั้งในอีกไม่กี่นาที" -#: core/models.py:1395 core/models.py:1457 +#: core/models.py:1403 core/models.py:1465 msgid "invalid force value" msgstr "ค่าแรงบังคับไม่ถูกต้อง" -#: core/models.py:1401 core/models.py:1464 +#: core/models.py:1409 core/models.py:1472 msgid "you cannot purchase an empty order!" msgstr "คุณไม่สามารถซื้อคำสั่งซื้อที่ว่างเปล่าได้!" -#: core/models.py:1420 +#: core/models.py:1428 msgid "you cannot buy an order without a user" msgstr "คุณไม่สามารถซื้อคำสั่งซื้อได้หากไม่มีผู้ใช้!" -#: core/models.py:1434 +#: core/models.py:1442 msgid "a user without a balance cannot buy with balance" msgstr "ผู้ใช้ที่ไม่มียอดคงเหลือไม่สามารถซื้อด้วยยอดคงเหลือได้!" -#: core/models.py:1439 +#: core/models.py:1447 msgid "insufficient funds to complete the order" msgstr "เงินไม่เพียงพอในการทำรายการให้เสร็จสมบูรณ์" -#: core/models.py:1473 +#: core/models.py:1481 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2241,14 +2253,14 @@ msgstr "" "คุณไม่สามารถซื้อได้หากไม่มีการลงทะเบียน กรุณาให้ข้อมูลต่อไปนี้: ชื่อลูกค้า, " "อีเมลลูกค้า, หมายเลขโทรศัพท์ลูกค้า" -#: core/models.py:1482 +#: core/models.py:1490 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "วิธีการชำระเงินไม่ถูกต้อง: {payment_method} จาก {available_payment_methods}!" -#: core/models.py:1591 +#: core/models.py:1599 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2270,108 +2282,108 @@ msgstr "" "โมเดลนี้ผสานรวมกับโมเดล Order และ Product " "และเก็บการอ้างอิงถึงโมเดลเหล่านี้ไว้" -#: core/models.py:1606 +#: core/models.py:1614 msgid "the price paid by the customer for this product at purchase time" msgstr "ราคาที่ลูกค้าชำระสำหรับสินค้านี้ ณ เวลาที่ซื้อ" -#: core/models.py:1607 +#: core/models.py:1615 msgid "purchase price at order time" msgstr "ราคาซื้อ ณ เวลาที่สั่งซื้อ" -#: core/models.py:1612 +#: core/models.py:1620 msgid "internal comments for admins about this ordered product" msgstr "ความคิดเห็นภายในสำหรับผู้ดูแลระบบเกี่ยวกับสินค้าที่สั่งซื้อ" -#: core/models.py:1613 +#: core/models.py:1621 msgid "internal comments" msgstr "ความคิดเห็นภายใน" -#: core/models.py:1619 +#: core/models.py:1627 msgid "user notifications" msgstr "การแจ้งเตือนผู้ใช้" -#: core/models.py:1624 +#: core/models.py:1632 msgid "json representation of this item's attributes" msgstr "การแสดงผล JSON ของคุณลักษณะของรายการนี้" -#: core/models.py:1625 +#: core/models.py:1633 msgid "ordered product attributes" msgstr "จัดเรียงคุณลักษณะของสินค้า" -#: core/models.py:1630 +#: core/models.py:1638 msgid "reference to the parent order that contains this product" msgstr "การอ้างอิงถึงคำสั่งซื้อหลักที่มีสินค้านี้อยู่" -#: core/models.py:1631 +#: core/models.py:1639 msgid "parent order" msgstr "ลำดับของผู้ปกครอง" -#: core/models.py:1640 +#: core/models.py:1648 msgid "the specific product associated with this order line" msgstr "สินค้าเฉพาะที่เกี่ยวข้องกับรายการคำสั่งซื้อนี้" -#: core/models.py:1647 +#: core/models.py:1655 msgid "quantity of this specific product in the order" msgstr "ปริมาณของสินค้าชนิดนี้ในคำสั่งซื้อ" -#: core/models.py:1648 +#: core/models.py:1656 msgid "product quantity" msgstr "จำนวนสินค้า" -#: core/models.py:1655 +#: core/models.py:1663 msgid "current status of this product in the order" msgstr "สถานะปัจจุบันของสินค้านี้ในคำสั่งซื้อ" -#: core/models.py:1656 +#: core/models.py:1664 msgid "product line status" msgstr "สถานะสายผลิตภัณฑ์" -#: core/models.py:1719 +#: core/models.py:1727 msgid "order product must have an order" msgstr "Orderproduct ต้องมีการสั่งซื้อที่เกี่ยวข้อง!" -#: core/models.py:1721 +#: core/models.py:1729 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "ระบุการกระทำที่ไม่ถูกต้องสำหรับข้อเสนอแนะ: {action}!" -#: core/models.py:1735 +#: core/models.py:1743 msgid "you cannot feedback an order which is not received" msgstr "คุณไม่สามารถให้ข้อเสนอแนะเกี่ยวกับคำสั่งซื้อที่ไม่ได้รับ" -#: core/models.py:1741 +#: core/models.py:1749 msgid "name" msgstr "ชื่อ" -#: core/models.py:1742 +#: core/models.py:1750 msgid "URL of the integration" msgstr "URL ของการผสานรวม" -#: core/models.py:1743 +#: core/models.py:1751 msgid "authentication credentials" msgstr "ข้อมูลประจำตัวสำหรับการยืนยันตัวตน" -#: core/models.py:1765 +#: core/models.py:1773 msgid "you can only have one default CRM provider" msgstr "คุณสามารถมีผู้ให้บริการ CRM เริ่มต้นได้เพียงรายเดียวเท่านั้น" -#: core/models.py:1775 +#: core/models.py:1783 msgid "CRM" msgstr "ระบบบริหารความสัมพันธ์ลูกค้า" -#: core/models.py:1776 +#: core/models.py:1784 msgid "CRMs" msgstr "ระบบบริหารความสัมพันธ์ลูกค้า" -#: core/models.py:1788 +#: core/models.py:1796 msgid "order CRM link" msgstr "ลิงก์ CRM ของคำสั่ง" -#: core/models.py:1789 +#: core/models.py:1797 msgid "orders CRM links" msgstr "ลิงก์ CRM ของคำสั่งซื้อ" -#: core/models.py:1794 +#: core/models.py:1802 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2387,15 +2399,15 @@ msgstr "" "และว่าสินทรัพย์นั้นสามารถมองเห็นได้สาธารณะหรือไม่ รวมถึงวิธีการสร้าง URL " "สำหรับการดาวน์โหลดสินทรัพย์เมื่อคำสั่งซื้อที่เกี่ยวข้องอยู่ในสถานะเสร็จสมบูรณ์" -#: core/models.py:1808 +#: core/models.py:1816 msgid "download" msgstr "ดาวน์โหลด" -#: core/models.py:1809 +#: core/models.py:1817 msgid "downloads" msgstr "ดาวน์โหลด" -#: core/models.py:1823 +#: core/models.py:1831 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2409,28 +2421,28 @@ msgstr "" "การอ้างอิงถึงผลิตภัณฑ์ที่เกี่ยวข้องในคำสั่งซื้อ และคะแนนที่ผู้ใช้กำหนด " "คลาสนี้ใช้ฟิลด์ในฐานข้อมูลเพื่อสร้างแบบจำลองและจัดการข้อมูลข้อเสนอแนะอย่างมีประสิทธิภาพ" -#: core/models.py:1835 +#: core/models.py:1843 msgid "user-provided comments about their experience with the product" msgstr "ความคิดเห็นที่ผู้ใช้ให้ไว้เกี่ยวกับประสบการณ์ของพวกเขาต่อผลิตภัณฑ์" -#: core/models.py:1836 +#: core/models.py:1844 msgid "feedback comments" msgstr "ความคิดเห็นจากผู้ตอบแบบสอบถาม" -#: core/models.py:1843 +#: core/models.py:1851 msgid "" "references the specific product in an order that this feedback is about" msgstr "อ้างอิงถึงผลิตภัณฑ์เฉพาะในคำสั่งซื้อที่ความคิดเห็นนี้เกี่ยวข้อง" -#: core/models.py:1844 +#: core/models.py:1852 msgid "related order product" msgstr "สินค้าที่เกี่ยวข้อง" -#: core/models.py:1849 +#: core/models.py:1857 msgid "user-assigned rating for the product" msgstr "คะแนนที่ผู้ใช้กำหนดให้กับผลิตภัณฑ์" -#: core/models.py:1850 +#: core/models.py:1858 msgid "product rating" msgstr "การให้คะแนนสินค้า" @@ -2639,22 +2651,22 @@ msgstr "จำเป็นต้องมีทั้งข้อมูลแล msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "ค่าหมดเวลาไม่ถูกต้อง ต้องอยู่ระหว่าง 0 ถึง 216000 วินาที" -#: core/utils/emailing.py:25 +#: core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | ติดต่อเรา เริ่มต้น" -#: core/utils/emailing.py:74 +#: core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | ยืนยันการสั่งซื้อ" -#: core/utils/emailing.py:109 +#: core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | จัดส่งเรียบร้อย" -#: core/utils/emailing.py:197 +#: core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | รหัสโปรโมชั่นได้รับแล้ว" @@ -2899,7 +2911,7 @@ msgstr "" " และจัดการวัตถุข้อเสนอแนะที่เข้าถึงได้บนพื้นฐานของสิทธิ์ มันขยายคลาสพื้นฐาน " "`EvibesViewSet` และใช้ระบบกรองของ Django สำหรับการสืบค้นข้อมูล" -#: core/viewsets.py:593 +#: core/viewsets.py:594 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2917,7 +2929,7 @@ msgstr "" "และการดึงคำสั่งซื้อที่รอดำเนินการของผู้ใช้ที่เข้าสู่ระบบปัจจุบัน ViewSet " "ใช้ตัวแปลงข้อมูลหลายแบบตามการกระทำที่เฉพาะเจาะจงและบังคับใช้สิทธิ์การเข้าถึงอย่างเหมาะสมขณะโต้ตอบกับข้อมูลคำสั่งซื้อ" -#: core/viewsets.py:782 +#: core/viewsets.py:784 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2932,26 +2944,26 @@ msgstr "" "นอกจากนี้ยังมีรายละเอียดการดำเนินการสำหรับการจัดการข้อเสนอแนะเกี่ยวกับอินสแตนซ์ของ" " OrderProduct" -#: core/viewsets.py:833 +#: core/viewsets.py:835 msgid "Manages operations related to Product images in the application. " msgstr "จัดการการดำเนินงานที่เกี่ยวข้องกับภาพผลิตภัณฑ์ในแอปพลิเคชัน" -#: core/viewsets.py:845 +#: core/viewsets.py:847 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "" "จัดการการดึงและการจัดการของตัวอย่าง PromoCode ผ่านการกระทำของ API ต่าง ๆ" -#: core/viewsets.py:866 +#: core/viewsets.py:868 msgid "Represents a view set for managing promotions. " msgstr "แสดงมุมมองที่ตั้งค่าไว้สำหรับการจัดการโปรโมชั่น" -#: core/viewsets.py:878 +#: core/viewsets.py:880 msgid "Handles operations related to Stock data in the system." msgstr "จัดการการดำเนินงานที่เกี่ยวข้องกับข้อมูลสต็อกในระบบ" -#: core/viewsets.py:892 +#: core/viewsets.py:894 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -2969,7 +2981,7 @@ msgstr "" "มีการตรวจสอบสิทธิ์เพื่อรับรองว่าผู้ใช้สามารถจัดการรายการที่ต้องการของตนเองเท่านั้น" " เว้นแต่จะได้รับสิทธิ์อนุญาตอย่างชัดเจน" -#: core/viewsets.py:1007 +#: core/viewsets.py:1009 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -2983,12 +2995,12 @@ msgstr "" "รวมถึงพฤติกรรมเฉพาะสำหรับวิธีการ HTTP ที่แตกต่างกัน การแทนที่ตัวแปลงข้อมูล " "และการจัดการสิทธิ์ตามบริบทของคำขอ" -#: core/viewsets.py:1074 +#: core/viewsets.py:1076 #, python-brace-format msgid "Geocoding error: {e}" msgstr "ข้อผิดพลาดในการแปลงพิกัดภูมิศาสตร์: {e}" -#: core/viewsets.py:1081 +#: core/viewsets.py:1083 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/tr_TR/LC_MESSAGES/django.mo b/core/locale/tr_TR/LC_MESSAGES/django.mo index 1d537405..4cff1ece 100644 Binary files a/core/locale/tr_TR/LC_MESSAGES/django.mo and b/core/locale/tr_TR/LC_MESSAGES/django.mo differ diff --git a/core/locale/tr_TR/LC_MESSAGES/django.po b/core/locale/tr_TR/LC_MESSAGES/django.po index 6b2897d7..8dd75886 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -51,82 +51,86 @@ msgstr "Değiştirilmiş" msgid "when the object was last modified" msgstr "Nesne en son ne zaman düzenlendi" -#: core/admin.py:63 +#: core/admin.py:68 msgid "translations" msgstr "Çeviriler" -#: core/admin.py:67 +#: core/admin.py:72 msgid "general" msgstr "Genel" -#: core/admin.py:69 +#: core/admin.py:74 msgid "relations" msgstr "İlişkiler" -#: core/admin.py:87 +#: core/admin.py:76 +msgid "additional info" +msgstr "EK BİLGİ" + +#: core/admin.py:94 msgid "metadata" msgstr "Metadata" -#: core/admin.py:94 +#: core/admin.py:101 msgid "timestamps" msgstr "Zaman Damgaları" -#: core/admin.py:109 +#: core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Seçili %(verbose_name_plural)s'ı etkinleştirin" -#: core/admin.py:114 +#: core/admin.py:121 msgid "selected items have been activated." msgstr "Seçilen öğeler etkinleştirildi!" -#: core/admin.py:120 +#: core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Seçili %(verbose_name_plural)s'ı devre dışı bırak" -#: core/admin.py:125 +#: core/admin.py:132 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:701 core/models.py:709 +#: core/admin.py:144 core/graphene/object_types.py:609 +#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 msgid "attribute value" msgstr "Öznitelik Değeri" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 +#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718 msgid "attribute values" msgstr "Öznitelik Değerleri" -#: core/admin.py:146 +#: core/admin.py:153 msgid "image" msgstr "Resim" -#: core/admin.py:147 core/graphene/object_types.py:501 +#: core/admin.py:154 core/graphene/object_types.py:501 msgid "images" msgstr "Görüntüler" -#: core/admin.py:155 core/models.py:459 +#: core/admin.py:162 core/models.py:467 msgid "stock" msgstr "Stok" -#: core/admin.py:156 core/graphene/object_types.py:663 +#: core/admin.py:163 core/graphene/object_types.py:663 msgid "stocks" msgstr "Stoklar" -#: core/admin.py:166 core/models.py:1667 +#: core/admin.py:173 core/models.py:1675 msgid "order product" msgstr "Ürün Siparişi" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 msgid "order products" msgstr "Sipariş Ürünleri" -#: core/admin.py:180 core/admin.py:181 +#: core/admin.py:187 core/admin.py:188 msgid "children" msgstr "Çocuklar" -#: core/admin.py:566 +#: core/admin.py:940 msgid "Config" msgstr "Konfigürasyon" @@ -743,23 +747,23 @@ 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:118 core/elasticsearch/__init__.py:498 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 msgid "no search term provided." msgstr "Arama terimi belirtilmemiştir." -#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +#: core/filters.py:65 core/filters.py:399 core/filters.py:526 msgid "Search" msgstr "Arama" -#: core/filters.py:66 core/filters.py:554 core/filters.py:583 +#: core/filters.py:66 core/filters.py:556 core/filters.py:585 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:399 core/filters.py:526 +#: core/filters.py:67 core/filters.py:401 core/filters.py:528 msgid "Name" msgstr "İsim" -#: core/filters.py:68 core/filters.py:528 +#: core/filters.py:68 core/filters.py:530 msgid "Categories" msgstr "Kategoriler" @@ -767,7 +771,7 @@ msgstr "Kategoriler" msgid "Categories Slugs" msgstr "Kategoriler Sümüklüböcekler" -#: core/filters.py:71 core/filters.py:407 +#: core/filters.py:71 core/filters.py:409 msgid "Tags" msgstr "Etiketler" @@ -795,8 +799,8 @@ msgstr "Nitelikler" msgid "Quantity" msgstr "Miktar" -#: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:301 core/models.py:383 core/models.py:536 +#: core/filters.py:78 core/filters.py:403 core/filters.py:529 +#: core/models.py:309 core/models.py:391 core/models.py:544 msgid "Slug" msgstr "Sümüklüböcek" @@ -812,7 +816,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:540 +#: core/filters.py:85 core/models.py:548 msgid "SKU" msgstr "SKU" @@ -821,48 +825,48 @@ 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:324 +#: core/filters.py:326 msgid "Search (ID, product name or part number)" msgstr "Arama (ID, ürün adı veya parça numarası)" -#: core/filters.py:327 +#: core/filters.py:329 msgid "Bought after (inclusive)" msgstr "Sonra satın alındı (dahil)" -#: core/filters.py:328 +#: core/filters.py:330 msgid "Bought before (inclusive)" msgstr "Daha önce satın alındı (dahil)" -#: core/filters.py:331 core/filters.py:378 core/filters.py:585 +#: core/filters.py:333 core/filters.py:380 core/filters.py:587 msgid "User email" msgstr "Kullanıcı e-postası" -#: core/filters.py:332 core/filters.py:379 core/filters.py:563 -#: core/filters.py:584 +#: core/filters.py:334 core/filters.py:381 core/filters.py:565 +#: core/filters.py:586 msgid "User UUID" msgstr "Kullanıcı UUID'si" -#: core/filters.py:333 +#: core/filters.py:335 msgid "Status" msgstr "Durum" -#: core/filters.py:337 +#: core/filters.py:339 msgid "Human Readable ID" msgstr "İnsan Tarafından Okunabilir Kimlik" -#: core/filters.py:400 +#: core/filters.py:402 msgid "Parent" msgstr "Ebeveyn" -#: core/filters.py:404 +#: core/filters.py:406 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:408 +#: core/filters.py:410 msgid "Level" msgstr "Seviye" -#: core/filters.py:558 +#: core/filters.py:560 msgid "Product UUID" msgstr "Ürün UUID'si" @@ -919,7 +923,7 @@ msgstr "" " dışlayan bilgiler!" #: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:679 +#: core/graphene/mutations.py:527 core/viewsets.py:680 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "order.buy() metodundan yanlış tip geldi: {type(instance)!s}" @@ -995,9 +999,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:849 core/models.py:862 -#: core/models.py:1281 core/models.py:1310 core/models.py:1335 -#: core/viewsets.py:682 +#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 +#: core/models.py:1289 core/models.py:1318 core/models.py:1343 +#: core/viewsets.py:683 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} mevcut değil: {uuid}!" @@ -1011,8 +1015,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:672 core/models.py:1144 -#: core/models.py:1744 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 +#: core/models.py:1752 msgid "attributes" msgstr "Nitelikler" @@ -1025,11 +1029,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:326 core/models.py:626 +#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 msgid "categories" msgstr "Kategoriler" -#: core/graphene/object_types.py:124 core/models.py:397 +#: core/graphene/object_types.py:124 core/models.py:405 msgid "brands" msgstr "Markalar" @@ -1038,7 +1042,7 @@ msgid "category image url" msgstr "Kategoriler" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:263 +#: core/models.py:271 msgid "markup percentage" msgstr "İşaretleme Yüzdesi" @@ -1060,7 +1064,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:169 +#: core/graphene/object_types.py:351 core/models.py:177 msgid "vendors" msgstr "Satıcılar" @@ -1085,7 +1089,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:1138 +#: core/models.py:1146 msgid "notifications" msgstr "Bildirimler" @@ -1093,7 +1097,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:1860 +#: core/graphene/object_types.py:400 core/models.py:1868 msgid "feedback" msgstr "Geri bildirim" @@ -1101,7 +1105,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:1108 +#: core/graphene/object_types.py:436 core/models.py:1116 msgid "billing address" msgstr "Fatura adresi" @@ -1129,7 +1133,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:1172 +#: core/graphene/object_types.py:465 core/models.py:1180 msgid "orders" msgstr "Siparişler" @@ -1141,19 +1145,19 @@ msgstr "Resim URL'si" msgid "product's images" msgstr "Ürün görselleri" -#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 +#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 msgid "category" msgstr "Kategori" -#: core/graphene/object_types.py:502 core/models.py:1861 +#: core/graphene/object_types.py:502 core/models.py:1869 msgid "feedbacks" msgstr "Geri Bildirimler" -#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 +#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 msgid "brand" msgstr "Marka" -#: core/graphene/object_types.py:504 core/models.py:101 +#: core/graphene/object_types.py:504 core/models.py:102 msgid "attribute groups" msgstr "Öznitelik grupları" @@ -1181,7 +1185,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:550 +#: core/graphene/object_types.py:534 core/models.py:558 msgid "products" msgstr "Ürünler" @@ -1193,15 +1197,15 @@ msgstr "Promosyon Kodları" msgid "products on sale" msgstr "Satıştaki ürünler" -#: core/graphene/object_types.py:651 core/models.py:798 +#: core/graphene/object_types.py:651 core/models.py:806 msgid "promotions" msgstr "Promosyonlar" -#: core/graphene/object_types.py:655 core/models.py:168 +#: core/graphene/object_types.py:655 core/models.py:176 msgid "vendor" msgstr "Satıcı" -#: core/graphene/object_types.py:656 core/models.py:549 +#: core/graphene/object_types.py:656 core/models.py:557 #: 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 +1213,11 @@ msgstr "Satıcı" msgid "product" msgstr "Ürün" -#: core/graphene/object_types.py:667 core/models.py:821 +#: core/graphene/object_types.py:667 core/models.py:829 msgid "wishlisted products" msgstr "İstek listesindeki ürünler" -#: core/graphene/object_types.py:673 core/models.py:838 +#: core/graphene/object_types.py:673 core/models.py:846 msgid "wishlists" msgstr "Dilek Listeleri" @@ -1221,7 +1225,7 @@ msgstr "Dilek Listeleri" msgid "tagged products" msgstr "Etiketlenmiş ürünler" -#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 +#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 msgid "product tags" msgstr "Ürün etiketleri" @@ -1306,7 +1310,7 @@ msgstr "Ürünler arama sonuçları" msgid "posts search results" msgstr "Ürünler arama sonuçları" -#: core/models.py:70 +#: core/models.py:71 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1319,23 +1323,23 @@ msgstr "" " sistemde öznitelikleri daha etkili bir şekilde kategorize etmek ve yönetmek" " için yararlı olabilir." -#: core/models.py:86 +#: core/models.py:87 msgid "parent of this group" msgstr "Bu grubun ebeveyni" -#: core/models.py:87 +#: core/models.py:88 msgid "parent attribute group" msgstr "Üst öznitelik grubu" -#: core/models.py:91 core/models.py:92 +#: core/models.py:92 core/models.py:93 msgid "attribute group's name" msgstr "Öznitelik grubunun adı" -#: core/models.py:100 core/models.py:634 +#: core/models.py:101 core/models.py:642 msgid "attribute group" msgstr "Öznitelik grubu" -#: core/models.py:106 +#: core/models.py:107 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1353,33 +1357,41 @@ msgstr "" "meta verileri ve kısıtlamaları da muhafaza ederek üçüncü taraf satıcılarla " "etkileşime giren sistemlerde kullanıma uygun hale getirir." -#: core/models.py:119 +#: core/models.py:120 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Satıcının API iletişimi için gerekli kimlik bilgilerini ve uç noktaları " "depolar" -#: core/models.py:120 +#: core/models.py:121 msgid "authentication info" msgstr "Kimlik doğrulama bilgisi" -#: core/models.py:125 +#: core/models.py:126 msgid "define the markup for products retrieved from this vendor" msgstr "Bu satıcıdan alınan ürünler için işaretlemeyi tanımlayın" -#: core/models.py:126 +#: core/models.py:127 msgid "vendor markup percentage" msgstr "Satıcı kar payı yüzdesi" -#: core/models.py:130 +#: core/models.py:131 msgid "name of this vendor" msgstr "Bu satıcının adı" -#: core/models.py:131 +#: core/models.py:132 msgid "vendor name" msgstr "Satıcı adı" -#: core/models.py:177 +#: core/models.py:143 +msgid "response file" +msgstr "yanıt dosyası" + +#: core/models.py:144 +msgid "vendor's last processing response" +msgstr "satıcının son işlem yanıtı" + +#: core/models.py:185 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1394,27 +1406,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:189 core/models.py:220 +#: core/models.py:197 core/models.py:228 msgid "internal tag identifier for the product tag" msgstr "Ürün etiketi için dahili etiket tanımlayıcısı" -#: core/models.py:190 core/models.py:221 +#: core/models.py:198 core/models.py:229 msgid "tag name" msgstr "Etiket adı" -#: core/models.py:194 core/models.py:225 +#: core/models.py:202 core/models.py:233 msgid "user-friendly name for the product tag" msgstr "Ürün etiketi için kullanıcı dostu ad" -#: core/models.py:195 core/models.py:226 +#: core/models.py:203 core/models.py:234 msgid "tag display name" msgstr "Etiket görünen adı" -#: core/models.py:203 +#: core/models.py:211 msgid "product tag" msgstr "Ürün etiketi" -#: core/models.py:209 +#: core/models.py:217 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 +1437,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:234 +#: core/models.py:242 msgid "category tag" msgstr "kategori etiketi" -#: core/models.py:235 core/models.py:307 +#: core/models.py:243 core/models.py:315 msgid "category tags" msgstr "kategori etiketleri" -#: core/models.py:240 +#: core/models.py:248 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1455,51 +1467,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:254 +#: core/models.py:262 msgid "upload an image representing this category" msgstr "Bu kategoriyi temsil eden bir resim yükleyin" -#: core/models.py:257 +#: core/models.py:265 msgid "category image" msgstr "Kategori görüntüsü" -#: core/models.py:262 +#: core/models.py:270 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:271 +#: core/models.py:279 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:272 +#: core/models.py:280 msgid "parent category" msgstr "Ana kategori" -#: core/models.py:277 +#: core/models.py:285 msgid "category name" msgstr "Kategori adı" -#: core/models.py:278 +#: core/models.py:286 msgid "provide a name for this category" msgstr "Bu kategori için bir ad girin" -#: core/models.py:285 +#: core/models.py:293 msgid "add a detailed description for this category" msgstr "Bu kategori için ayrıntılı bir açıklama ekleyin" -#: core/models.py:286 +#: core/models.py:294 msgid "category description" msgstr "Kategori açıklaması" -#: core/models.py:306 +#: core/models.py:314 msgid "tags that help describe or group this category" msgstr "bu kategoriyi tanımlamaya veya gruplandırmaya yardımcı olan etiketler" -#: core/models.py:313 core/models.py:389 +#: core/models.py:321 core/models.py:397 msgid "priority" msgstr "Öncelik" -#: core/models.py:332 +#: core/models.py:340 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 +1525,47 @@ msgstr "" "Uygulama içinde markayla ilgili verilerin düzenlenmesini ve temsil " "edilmesini sağlar." -#: core/models.py:342 +#: core/models.py:350 msgid "name of this brand" msgstr "Bu markanın adı" -#: core/models.py:343 +#: core/models.py:351 msgid "brand name" msgstr "Marka adı" -#: core/models.py:350 +#: core/models.py:358 msgid "upload a logo representing this brand" msgstr "Bu markayı temsil eden bir logo yükleyin" -#: core/models.py:352 +#: core/models.py:360 msgid "brand small image" msgstr "Marka küçük imajı" -#: core/models.py:358 +#: core/models.py:366 msgid "upload a big logo representing this brand" msgstr "Bu markayı temsil eden büyük bir logo yükleyin" -#: core/models.py:360 +#: core/models.py:368 msgid "brand big image" msgstr "Marka büyük imaj" -#: core/models.py:365 +#: core/models.py:373 msgid "add a detailed description of the brand" msgstr "Markanın ayrıntılı bir açıklamasını ekleyin" -#: core/models.py:366 +#: core/models.py:374 msgid "brand description" msgstr "Marka açıklaması" -#: core/models.py:371 +#: core/models.py:379 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:372 +#: core/models.py:380 msgid "associated categories" msgstr "Kategoriler" -#: core/models.py:402 +#: core/models.py:410 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 +1581,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:414 +#: core/models.py:422 msgid "the vendor supplying this product stock" msgstr "Bu ürün stokunu tedarik eden satıcı" -#: core/models.py:415 +#: core/models.py:423 msgid "associated vendor" msgstr "İlişkili satıcı" -#: core/models.py:419 +#: core/models.py:427 msgid "final price to the customer after markups" msgstr "Fiyat artışlarından sonra müşteriye verilen nihai fiyat" -#: core/models.py:420 +#: core/models.py:428 msgid "selling price" msgstr "Satış fiyatı" -#: core/models.py:425 +#: core/models.py:433 msgid "the product associated with this stock entry" msgstr "Bu stok girişi ile ilişkili ürün" -#: core/models.py:426 core/models.py:697 core/models.py:744 -#: core/models.py:1641 +#: core/models.py:434 core/models.py:705 core/models.py:752 +#: core/models.py:1649 msgid "associated product" msgstr "İlişkili ürün" -#: core/models.py:433 +#: core/models.py:441 msgid "the price paid to the vendor for this product" msgstr "Bu ürün için satıcıya ödenen fiyat" -#: core/models.py:434 +#: core/models.py:442 msgid "vendor purchase price" msgstr "Satıcı satın alma fiyatı" -#: core/models.py:438 +#: core/models.py:446 msgid "available quantity of the product in stock" msgstr "Stoktaki mevcut ürün miktarı" -#: core/models.py:439 +#: core/models.py:447 msgid "quantity in stock" msgstr "Stoktaki miktar" -#: core/models.py:443 +#: core/models.py:451 msgid "vendor-assigned SKU for identifying the product" msgstr "Ürünü tanımlamak için satıcı tarafından atanan SKU" -#: core/models.py:444 +#: core/models.py:452 msgid "vendor sku" msgstr "Satıcının SKU'su" -#: core/models.py:450 +#: core/models.py:458 msgid "digital file associated with this stock if applicable" msgstr "Varsa bu stokla ilişkili dijital dosya" -#: core/models.py:451 +#: core/models.py:459 msgid "digital file" msgstr "Dijital dosya" -#: core/models.py:460 +#: core/models.py:468 msgid "stock entries" msgstr "Stok girişleri" -#: core/models.py:465 +#: core/models.py:473 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1651,55 +1663,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:478 +#: core/models.py:486 msgid "category this product belongs to" msgstr "Bu ürünün ait olduğu kategori" -#: core/models.py:487 +#: core/models.py:495 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:493 +#: core/models.py:501 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:498 +#: core/models.py:506 msgid "indicates whether this product is digitally delivered" msgstr "Bu ürünün dijital olarak teslim edilip edilmediğini belirtir" -#: core/models.py:499 +#: core/models.py:507 msgid "is product digital" msgstr "Ürün dijital mi" -#: core/models.py:505 +#: core/models.py:513 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:506 +#: core/models.py:514 msgid "product name" msgstr "Ürün adı" -#: core/models.py:511 core/models.py:786 +#: core/models.py:519 core/models.py:794 msgid "add a detailed description of the product" msgstr "Ürünün ayrıntılı bir açıklamasını ekleyin" -#: core/models.py:512 +#: core/models.py:520 msgid "product description" msgstr "Ürün Açıklaması" -#: core/models.py:519 +#: core/models.py:527 msgid "part number for this product" msgstr "Bu ürün için parça numarası" -#: core/models.py:520 +#: core/models.py:528 msgid "part number" msgstr "Parça numarası" -#: core/models.py:539 +#: core/models.py:547 msgid "stock keeping unit for this product" msgstr "Bu ürün için Stok Tutma Birimi" -#: core/models.py:613 +#: core/models.py:621 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 +1727,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:625 +#: core/models.py:633 msgid "category of this attribute" msgstr "Bu niteliğin kategorisi" -#: core/models.py:633 +#: core/models.py:641 msgid "group of this attribute" msgstr "Bu niteliğin grubu" -#: core/models.py:639 +#: core/models.py:647 msgid "string" msgstr "String" -#: core/models.py:640 +#: core/models.py:648 msgid "integer" msgstr "Tamsayı" -#: core/models.py:641 +#: core/models.py:649 msgid "float" msgstr "Yüzer" -#: core/models.py:642 +#: core/models.py:650 msgid "boolean" msgstr "Boolean" -#: core/models.py:643 +#: core/models.py:651 msgid "array" msgstr "Dizi" -#: core/models.py:644 +#: core/models.py:652 msgid "object" msgstr "Nesne" -#: core/models.py:646 +#: core/models.py:654 msgid "type of the attribute's value" msgstr "Özniteliğin değerinin türü" -#: core/models.py:647 +#: core/models.py:655 msgid "value type" msgstr "Değer türü" -#: core/models.py:652 +#: core/models.py:660 msgid "name of this attribute" msgstr "Bu niteliğin adı" -#: core/models.py:653 +#: core/models.py:661 msgid "attribute's name" msgstr "Özniteliğin adı" -#: core/models.py:659 +#: core/models.py:667 msgid "is filterable" msgstr "filtrelenebilir" -#: core/models.py:660 +#: core/models.py:668 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:671 core/models.py:689 +#: core/models.py:679 core/models.py:697 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Öznitelik" -#: core/models.py:677 +#: core/models.py:685 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 +1799,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:688 +#: core/models.py:696 msgid "attribute of this value" msgstr "Bu değerin niteliği" -#: core/models.py:696 +#: core/models.py:704 msgid "the specific product associated with this attribute's value" msgstr "Bu özniteliğin değeriyle ilişkili belirli ürün" -#: core/models.py:702 +#: core/models.py:710 msgid "the specific value for this attribute" msgstr "Bu öznitelik için özel değer" -#: core/models.py:715 +#: core/models.py:723 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 +1825,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:726 +#: core/models.py:734 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:727 +#: core/models.py:735 msgid "image alt text" msgstr "Resim alt metni" -#: core/models.py:730 +#: core/models.py:738 msgid "upload the image file for this product" msgstr "Bu ürün için resim dosyasını yükleyin" -#: core/models.py:731 core/models.py:756 +#: core/models.py:739 core/models.py:764 msgid "product image" msgstr "Ürün görseli" -#: core/models.py:737 +#: core/models.py:745 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:738 +#: core/models.py:746 msgid "display priority" msgstr "Ekran önceliği" -#: core/models.py:743 +#: core/models.py:751 msgid "the product that this image represents" msgstr "Bu görselin temsil ettiği ürün" -#: core/models.py:757 +#: core/models.py:765 msgid "product images" msgstr "Ürün görselleri" -#: core/models.py:762 +#: core/models.py:770 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 +1873,39 @@ msgstr "" "öznitelikler içerir. Kampanyadaki etkilenen ürünleri belirlemek için ürün " "kataloğu ile entegre olur." -#: core/models.py:774 +#: core/models.py:782 msgid "percentage discount for the selected products" msgstr "Seçilen ürünler için yüzde indirim" -#: core/models.py:775 +#: core/models.py:783 msgid "discount percentage" msgstr "İndirim yüzdesi" -#: core/models.py:780 +#: core/models.py:788 msgid "provide a unique name for this promotion" msgstr "Bu promosyon için benzersiz bir ad girin" -#: core/models.py:781 +#: core/models.py:789 msgid "promotion name" msgstr "Promosyon adı" -#: core/models.py:787 +#: core/models.py:795 msgid "promotion description" msgstr "Promosyon açıklaması" -#: core/models.py:792 +#: core/models.py:800 msgid "select which products are included in this promotion" msgstr "Bu promosyona hangi ürünlerin dahil olduğunu seçin" -#: core/models.py:793 +#: core/models.py:801 msgid "included products" msgstr "Dahil olan ürünler" -#: core/models.py:797 +#: core/models.py:805 msgid "promotion" msgstr "Promosyon" -#: core/models.py:808 +#: core/models.py:816 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 +1917,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:820 +#: core/models.py:828 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:828 +#: core/models.py:836 msgid "user who owns this wishlist" msgstr "Bu istek listesine sahip olan kullanıcı" -#: core/models.py:829 +#: core/models.py:837 msgid "wishlist owner" msgstr "Dilek Listesi Sahibi" -#: core/models.py:837 +#: core/models.py:845 msgid "wishlist" msgstr "İstek Listesi" -#: core/models.py:879 +#: core/models.py:887 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1936,19 +1948,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:892 +#: core/models.py:900 msgid "documentary" msgstr "Belgesel" -#: core/models.py:893 +#: core/models.py:901 msgid "documentaries" msgstr "Belgeseller" -#: core/models.py:903 +#: core/models.py:911 msgid "unresolved" msgstr "Çözümlenmemiş" -#: core/models.py:908 +#: core/models.py:916 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1969,59 +1981,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:923 +#: core/models.py:931 msgid "address line for the customer" msgstr "Müşteri için adres satırı" -#: core/models.py:924 +#: core/models.py:932 msgid "address line" msgstr "Adres hattı" -#: core/models.py:926 +#: core/models.py:934 msgid "street" msgstr "Sokak" -#: core/models.py:927 +#: core/models.py:935 msgid "district" msgstr "Bölge" -#: core/models.py:928 +#: core/models.py:936 msgid "city" msgstr "Şehir" -#: core/models.py:929 +#: core/models.py:937 msgid "region" msgstr "Bölge" -#: core/models.py:930 +#: core/models.py:938 msgid "postal code" msgstr "Posta kodu" -#: core/models.py:931 +#: core/models.py:939 msgid "country" msgstr "Ülke" -#: core/models.py:938 +#: core/models.py:946 msgid "geolocation point: (longitude, latitude)" msgstr "Coğrafi Konum Noktası(Boylam, Enlem)" -#: core/models.py:941 +#: core/models.py:949 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:946 +#: core/models.py:954 msgid "stored JSON response from the geocoding service" msgstr "Coğrafi kodlama hizmetinden depolanan JSON yanıtı" -#: core/models.py:954 +#: core/models.py:962 msgid "address" msgstr "Adres" -#: core/models.py:955 +#: core/models.py:963 msgid "addresses" msgstr "Adresler" -#: core/models.py:967 +#: core/models.py:975 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 +2050,74 @@ msgstr "" "karşılandığından emin olurken promosyon kodunu doğrulamak ve siparişe " "uygulamak için işlevsellik içerir." -#: core/models.py:981 +#: core/models.py:989 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:982 +#: core/models.py:990 msgid "promo code identifier" msgstr "Promosyon kodu tanımlayıcı" -#: core/models.py:989 +#: core/models.py:997 msgid "fixed discount amount applied if percent is not used" msgstr "Yüzde kullanılmazsa uygulanan sabit indirim tutarı" -#: core/models.py:990 +#: core/models.py:998 msgid "fixed discount amount" msgstr "Sabit iskonto tutarı" -#: core/models.py:996 +#: core/models.py:1004 msgid "percentage discount applied if fixed amount is not used" msgstr "Sabit tutar kullanılmazsa uygulanan yüzde indirimi" -#: core/models.py:997 +#: core/models.py:1005 msgid "percentage discount" msgstr "Yüzde indirim" -#: core/models.py:1002 +#: core/models.py:1010 msgid "timestamp when the promocode expires" msgstr "Promosyon kodunun sona erdiği zaman damgası" -#: core/models.py:1003 +#: core/models.py:1011 msgid "end validity time" msgstr "Geçerlilik süresi sonu" -#: core/models.py:1008 +#: core/models.py:1016 msgid "timestamp from which this promocode is valid" msgstr "Bu promosyon kodunun geçerli olduğu zaman damgası" -#: core/models.py:1009 +#: core/models.py:1017 msgid "start validity time" msgstr "Geçerlilik süresini başlat" -#: core/models.py:1014 +#: core/models.py:1022 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:1015 +#: core/models.py:1023 msgid "usage timestamp" msgstr "Kullanım zaman damgası" -#: core/models.py:1020 +#: core/models.py:1028 msgid "user assigned to this promocode if applicable" msgstr "Varsa bu promosyon koduna atanan kullanıcı" -#: core/models.py:1021 +#: core/models.py:1029 msgid "assigned user" msgstr "Atanmış kullanıcı" -#: core/models.py:1028 +#: core/models.py:1036 msgid "promo code" msgstr "Promosyon kodu" -#: core/models.py:1029 +#: core/models.py:1037 msgid "promo codes" msgstr "Promosyon kodları" -#: core/models.py:1044 +#: core/models.py:1052 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2113,16 +2125,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:1065 +#: core/models.py:1073 msgid "promocode already used" msgstr "Promosyon kodu zaten kullanılmış" -#: core/models.py:1081 +#: core/models.py:1089 #, 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:1090 +#: core/models.py:1098 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 +2151,136 @@ msgstr "" "güncellenebilir. Aynı şekilde işlevsellik, sipariş yaşam döngüsündeki " "ürünlerin yönetilmesini de destekler." -#: core/models.py:1107 +#: core/models.py:1115 msgid "the billing address used for this order" msgstr "Bu sipariş için kullanılan fatura adresi" -#: core/models.py:1115 +#: core/models.py:1123 msgid "optional promo code applied to this order" msgstr "Bu siparişe isteğe bağlı promosyon kodu uygulanır" -#: core/models.py:1116 +#: core/models.py:1124 msgid "applied promo code" msgstr "Uygulanan promosyon kodu" -#: core/models.py:1124 +#: core/models.py:1132 msgid "the shipping address used for this order" msgstr "Bu sipariş için kullanılan gönderim adresi" -#: core/models.py:1125 +#: core/models.py:1133 msgid "shipping address" msgstr "Nakliye adresi" -#: core/models.py:1131 +#: core/models.py:1139 msgid "current status of the order in its lifecycle" msgstr "Siparişin yaşam döngüsündeki mevcut durumu" -#: core/models.py:1132 +#: core/models.py:1140 msgid "order status" msgstr "Sipariş durumu" -#: core/models.py:1137 core/models.py:1618 +#: core/models.py:1145 core/models.py:1626 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:1143 +#: core/models.py:1151 msgid "json representation of order attributes for this order" msgstr "Bu sipariş için sipariş özniteliklerinin JSON gösterimi" -#: core/models.py:1149 +#: core/models.py:1157 msgid "the user who placed the order" msgstr "Siparişi veren kullanıcı" -#: core/models.py:1150 +#: core/models.py:1158 msgid "user" msgstr "Kullanıcı" -#: core/models.py:1156 +#: core/models.py:1164 msgid "the timestamp when the order was finalized" msgstr "Siparişin sonlandırıldığı zaman damgası" -#: core/models.py:1157 +#: core/models.py:1165 msgid "buy time" msgstr "Zaman satın alın" -#: core/models.py:1164 +#: core/models.py:1172 msgid "a human-readable identifier for the order" msgstr "Sipariş için insan tarafından okunabilir bir tanımlayıcı" -#: core/models.py:1165 +#: core/models.py:1173 msgid "human readable id" msgstr "insan tarafından okunabilir kimlik" -#: core/models.py:1171 +#: core/models.py:1179 msgid "order" msgstr "Sipariş" -#: core/models.py:1209 +#: core/models.py:1217 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:1249 +#: core/models.py:1257 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:1254 +#: core/models.py:1262 msgid "you cannot add inactive products to order" msgstr "Aktif olmayan ürünleri siparişe ekleyemezsiniz" -#: core/models.py:1271 +#: core/models.py:1279 msgid "you cannot add more products than available in stock" msgstr "Stokta mevcut olandan daha fazla ürün ekleyemezsiniz" -#: core/models.py:1293 core/models.py:1318 core/models.py:1326 +#: core/models.py:1301 core/models.py:1326 core/models.py:1334 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:1314 +#: core/models.py:1322 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} <{query}> sorgusu ile mevcut değil!" -#: core/models.py:1346 +#: core/models.py:1354 msgid "promocode does not exist" msgstr "Promosyon kodu mevcut değil" -#: core/models.py:1352 +#: core/models.py:1360 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:1371 +#: core/models.py:1379 msgid "address does not exist" msgstr "Adres mevcut değil" -#: core/models.py:1392 core/models.py:1461 +#: core/models.py:1400 core/models.py:1469 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:1395 core/models.py:1457 +#: core/models.py:1403 core/models.py:1465 msgid "invalid force value" msgstr "Geçersiz kuvvet değeri" -#: core/models.py:1401 core/models.py:1464 +#: core/models.py:1409 core/models.py:1472 msgid "you cannot purchase an empty order!" msgstr "Boş bir sipariş satın alamazsınız!" -#: core/models.py:1420 +#: core/models.py:1428 msgid "you cannot buy an order without a user" msgstr "Kullanıcı olmadan sipariş alamazsınız!" -#: core/models.py:1434 +#: core/models.py:1442 msgid "a user without a balance cannot buy with balance" msgstr "Bakiyesi olmayan bir kullanıcı bakiye ile satın alamaz!" -#: core/models.py:1439 +#: core/models.py:1447 msgid "insufficient funds to complete the order" msgstr "Siparişi tamamlamak için yeterli fon yok" -#: core/models.py:1473 +#: core/models.py:1481 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2276,14 +2288,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:1482 +#: core/models.py:1490 #, 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:1591 +#: core/models.py:1599 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2305,108 +2317,108 @@ msgstr "" "destekleyen yöntemler ve özellikler sağlar. Model, Sipariş ve Ürün " "modelleriyle entegre olur ve bunlara referans depolar." -#: core/models.py:1606 +#: core/models.py:1614 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:1607 +#: core/models.py:1615 msgid "purchase price at order time" msgstr "Sipariş anındaki satın alma fiyatı" -#: core/models.py:1612 +#: core/models.py:1620 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:1613 +#: core/models.py:1621 msgid "internal comments" msgstr "Dahili yorumlar" -#: core/models.py:1619 +#: core/models.py:1627 msgid "user notifications" msgstr "Kullanıcı bildirimleri" -#: core/models.py:1624 +#: core/models.py:1632 msgid "json representation of this item's attributes" msgstr "Bu öğenin özniteliklerinin JSON gösterimi" -#: core/models.py:1625 +#: core/models.py:1633 msgid "ordered product attributes" msgstr "Sıralı ürün özellikleri" -#: core/models.py:1630 +#: core/models.py:1638 msgid "reference to the parent order that contains this product" msgstr "Bu ürünü içeren ana siparişe referans" -#: core/models.py:1631 +#: core/models.py:1639 msgid "parent order" msgstr "Ana sipariş" -#: core/models.py:1640 +#: core/models.py:1648 msgid "the specific product associated with this order line" msgstr "Bu sipariş satırıyla ilişkili belirli ürün" -#: core/models.py:1647 +#: core/models.py:1655 msgid "quantity of this specific product in the order" msgstr "Siparişteki bu belirli ürünün miktarı" -#: core/models.py:1648 +#: core/models.py:1656 msgid "product quantity" msgstr "Ürün miktarı" -#: core/models.py:1655 +#: core/models.py:1663 msgid "current status of this product in the order" msgstr "Bu ürünün siparişteki mevcut durumu" -#: core/models.py:1656 +#: core/models.py:1664 msgid "product line status" msgstr "Ürün hattı durumu" -#: core/models.py:1719 +#: core/models.py:1727 msgid "order product must have an order" msgstr "Orderproduct ilişkili bir siparişe sahip olmalıdır!" -#: core/models.py:1721 +#: core/models.py:1729 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Geri bildirim için yanlış eylem belirtildi: {action}!" -#: core/models.py:1735 +#: core/models.py:1743 msgid "you cannot feedback an order which is not received" msgstr "alınmamış bir siparişe geri bildirim yapamazsınız" -#: core/models.py:1741 +#: core/models.py:1749 msgid "name" msgstr "İsim" -#: core/models.py:1742 +#: core/models.py:1750 msgid "URL of the integration" msgstr "Entegrasyonun URL'si" -#: core/models.py:1743 +#: core/models.py:1751 msgid "authentication credentials" msgstr "Kimlik doğrulama bilgileri" -#: core/models.py:1765 +#: core/models.py:1773 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:1775 +#: core/models.py:1783 msgid "CRM" msgstr "CRM" -#: core/models.py:1776 +#: core/models.py:1784 msgid "CRMs" msgstr "CRM'ler" -#: core/models.py:1788 +#: core/models.py:1796 msgid "order CRM link" msgstr "Siparişin CRM bağlantısı" -#: core/models.py:1789 +#: core/models.py:1797 msgid "orders CRM links" msgstr "Siparişlerin CRM bağlantıları" -#: core/models.py:1794 +#: core/models.py:1802 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2422,15 +2434,15 @@ msgstr "" " sipariş tamamlandı durumundayken varlığın indirilmesi için bir URL " "oluşturmaya yönelik bir yöntem içerir." -#: core/models.py:1808 +#: core/models.py:1816 msgid "download" msgstr "İndir" -#: core/models.py:1809 +#: core/models.py:1817 msgid "downloads" msgstr "İndirmeler" -#: core/models.py:1823 +#: core/models.py:1831 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2445,31 +2457,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:1835 +#: core/models.py:1843 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:1836 +#: core/models.py:1844 msgid "feedback comments" msgstr "Geri bildirim yorumları" -#: core/models.py:1843 +#: core/models.py:1851 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:1844 +#: core/models.py:1852 msgid "related order product" msgstr "İlgili sipariş ürünü" -#: core/models.py:1849 +#: core/models.py:1857 msgid "user-assigned rating for the product" msgstr "Ürün için kullanıcı tarafından atanan derecelendirme" -#: core/models.py:1850 +#: core/models.py:1858 msgid "product rating" msgstr "Ürün değerlendirmesi" @@ -2687,22 +2699,22 @@ msgstr "Hem veri hem de zaman aşımı gereklidir" msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "Geçersiz zaman aşımı değeri, 0 ile 216000 saniye arasında olmalıdır" -#: core/utils/emailing.py:25 +#: core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | bi̇zi̇mle i̇leti̇şi̇me geçi̇n" -#: core/utils/emailing.py:74 +#: core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Sipariş Onayı" -#: core/utils/emailing.py:109 +#: core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Sipariş Teslim Edildi" -#: core/utils/emailing.py:197 +#: core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | verilen promosyon kodu" @@ -2952,7 +2964,7 @@ msgstr "" "genişletir ve verileri sorgulamak için Django'nun filtreleme sistemini " "kullanır." -#: core/viewsets.py:593 +#: core/viewsets.py:594 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2971,7 +2983,7 @@ msgstr "" "birden fazla serileştirici kullanır ve sipariş verileriyle etkileşime " "girerken izinleri buna göre zorlar." -#: core/viewsets.py:782 +#: core/viewsets.py:784 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2985,11 +2997,11 @@ msgstr "" " serileştirici değiştirme içerir. Ayrıca, OrderProduct örnekleriyle ilgili " "geri bildirimleri işlemek için ayrıntılı bir eylem sağlar" -#: core/viewsets.py:833 +#: core/viewsets.py:835 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 +#: core/viewsets.py:847 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -2997,15 +3009,15 @@ msgstr "" "Çeşitli API eylemleri aracılığıyla PromoCode örneklerinin alınmasını ve " "işlenmesini yönetir." -#: core/viewsets.py:866 +#: core/viewsets.py:868 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 +#: core/viewsets.py:880 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 +#: core/viewsets.py:894 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3023,7 +3035,7 @@ msgstr "" "verilmediği sürece kullanıcıların yalnızca kendi istek listelerini " "yönetebilmelerini sağlamak için entegre edilmiştir." -#: core/viewsets.py:1007 +#: core/viewsets.py:1009 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3037,12 +3049,12 @@ msgstr "" "serileştirici geçersiz kılmaları ve istek bağlamına dayalı izin işleme için " "özel davranışlar içerir." -#: core/viewsets.py:1074 +#: core/viewsets.py:1076 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Coğrafi kodlama hatası: {e}" -#: core/viewsets.py:1081 +#: core/viewsets.py:1083 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/vi_VN/LC_MESSAGES/django.mo b/core/locale/vi_VN/LC_MESSAGES/django.mo index 6ac0d9d6..07aed3fe 100644 Binary files a/core/locale/vi_VN/LC_MESSAGES/django.mo and b/core/locale/vi_VN/LC_MESSAGES/django.mo differ diff --git a/core/locale/vi_VN/LC_MESSAGES/django.po b/core/locale/vi_VN/LC_MESSAGES/django.po index 967cb096..6a3b0088 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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -51,82 +51,86 @@ msgstr "Đã sửa đổi" msgid "when the object was last modified" msgstr "Khi đối tượng được chỉnh sửa lần cuối" -#: core/admin.py:63 +#: core/admin.py:68 msgid "translations" msgstr "Dịch thuật" -#: core/admin.py:67 +#: core/admin.py:72 msgid "general" msgstr "Tổng quát" -#: core/admin.py:69 +#: core/admin.py:74 msgid "relations" msgstr "Quan hệ" -#: core/admin.py:87 +#: core/admin.py:76 +msgid "additional info" +msgstr "Thông tin bổ sung" + +#: core/admin.py:94 msgid "metadata" msgstr "Siêu dữ liệu" -#: core/admin.py:94 +#: core/admin.py:101 msgid "timestamps" msgstr "Dấu thời gian" -#: core/admin.py:109 +#: core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Kích hoạt %(verbose_name_plural)s đã chọn" -#: core/admin.py:114 +#: core/admin.py:121 msgid "selected items have been activated." msgstr "Các mục đã được chọn đã được kích hoạt!" -#: core/admin.py:120 +#: core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Vô hiệu hóa các mục đã chọn %(verbose_name_plural)s" -#: core/admin.py:125 +#: core/admin.py:132 msgid "selected items have been deactivated." msgstr "Các mục đã chọn đã bị vô hiệu hóa!" -#: core/admin.py:137 core/graphene/object_types.py:609 -#: core/graphene/object_types.py:616 core/models.py:701 core/models.py:709 +#: core/admin.py:144 core/graphene/object_types.py:609 +#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 msgid "attribute value" msgstr "Giá trị thuộc tính" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 +#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718 msgid "attribute values" msgstr "Giá trị thuộc tính" -#: core/admin.py:146 +#: core/admin.py:153 msgid "image" msgstr "Hình ảnh" -#: core/admin.py:147 core/graphene/object_types.py:501 +#: core/admin.py:154 core/graphene/object_types.py:501 msgid "images" msgstr "Hình ảnh" -#: core/admin.py:155 core/models.py:459 +#: core/admin.py:162 core/models.py:467 msgid "stock" msgstr "Cổ phiếu" -#: core/admin.py:156 core/graphene/object_types.py:663 +#: core/admin.py:163 core/graphene/object_types.py:663 msgid "stocks" msgstr "Cổ phiếu" -#: core/admin.py:166 core/models.py:1667 +#: core/admin.py:173 core/models.py:1675 msgid "order product" msgstr "Đặt hàng sản phẩm" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 msgid "order products" msgstr "Đặt hàng sản phẩm" -#: core/admin.py:180 core/admin.py:181 +#: core/admin.py:187 core/admin.py:188 msgid "children" msgstr "Trẻ em" -#: core/admin.py:566 +#: core/admin.py:940 msgid "Config" msgstr "Cấu hình" @@ -749,23 +753,23 @@ 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:118 core/elasticsearch/__init__.py:498 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 msgid "no search term provided." msgstr "Không có từ khóa tìm kiếm được cung cấp." -#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +#: core/filters.py:65 core/filters.py:399 core/filters.py:526 msgid "Search" msgstr "Tìm kiếm" -#: core/filters.py:66 core/filters.py:554 core/filters.py:583 +#: core/filters.py:66 core/filters.py:556 core/filters.py:585 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:399 core/filters.py:526 +#: core/filters.py:67 core/filters.py:401 core/filters.py:528 msgid "Name" msgstr "Tên" -#: core/filters.py:68 core/filters.py:528 +#: core/filters.py:68 core/filters.py:530 msgid "Categories" msgstr "Các danh mục" @@ -773,7 +777,7 @@ msgstr "Các danh mục" msgid "Categories Slugs" msgstr "Thể loại Tiêu đề" -#: core/filters.py:71 core/filters.py:407 +#: core/filters.py:71 core/filters.py:409 msgid "Tags" msgstr "Thẻ" @@ -801,8 +805,8 @@ msgstr "Thuộc tính" msgid "Quantity" msgstr "Số lượng" -#: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:301 core/models.py:383 core/models.py:536 +#: core/filters.py:78 core/filters.py:403 core/filters.py:529 +#: core/models.py:309 core/models.py:391 core/models.py:544 msgid "Slug" msgstr "Sên" @@ -818,7 +822,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:540 +#: core/filters.py:85 core/models.py:548 msgid "SKU" msgstr "Mã sản phẩm" @@ -826,48 +830,48 @@ msgstr "Mã sản phẩm" 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:324 +#: core/filters.py:326 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:327 +#: core/filters.py:329 msgid "Bought after (inclusive)" msgstr "Được mua sau (bao gồm)" -#: core/filters.py:328 +#: core/filters.py:330 msgid "Bought before (inclusive)" msgstr "Đã mua trước đó (bao gồm)" -#: core/filters.py:331 core/filters.py:378 core/filters.py:585 +#: core/filters.py:333 core/filters.py:380 core/filters.py:587 msgid "User email" msgstr "Địa chỉ email của người dùng" -#: core/filters.py:332 core/filters.py:379 core/filters.py:563 -#: core/filters.py:584 +#: core/filters.py:334 core/filters.py:381 core/filters.py:565 +#: core/filters.py:586 msgid "User UUID" msgstr "UUID người dùng" -#: core/filters.py:333 +#: core/filters.py:335 msgid "Status" msgstr "Trạng thái" -#: core/filters.py:337 +#: core/filters.py:339 msgid "Human Readable ID" msgstr "Mã định danh dễ đọc cho con người" -#: core/filters.py:400 +#: core/filters.py:402 msgid "Parent" msgstr "Cha mẹ" -#: core/filters.py:404 +#: core/filters.py:406 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:408 +#: core/filters.py:410 msgid "Level" msgstr "Cấp độ" -#: core/filters.py:558 +#: core/filters.py:560 msgid "Product UUID" msgstr "Mã định danh duy nhất của sản phẩm (UUID)" @@ -925,7 +929,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:679 +#: core/graphene/mutations.py:527 core/viewsets.py:680 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 +1007,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:849 core/models.py:862 -#: core/models.py:1281 core/models.py:1310 core/models.py:1335 -#: core/viewsets.py:682 +#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 +#: core/models.py:1289 core/models.py:1318 core/models.py:1343 +#: core/viewsets.py:683 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} không tồn tại: {uuid}!" @@ -1019,8 +1023,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:672 core/models.py:1144 -#: core/models.py:1744 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 +#: core/models.py:1752 msgid "attributes" msgstr "Thuộc tính" @@ -1033,11 +1037,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:326 core/models.py:626 +#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 msgid "categories" msgstr "Các danh mục" -#: core/graphene/object_types.py:124 core/models.py:397 +#: core/graphene/object_types.py:124 core/models.py:405 msgid "brands" msgstr "Thương hiệu" @@ -1046,7 +1050,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:263 +#: core/models.py:271 msgid "markup percentage" msgstr "Tỷ lệ phần trăm đánh dấu" @@ -1069,7 +1073,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:169 +#: core/graphene/object_types.py:351 core/models.py:177 msgid "vendors" msgstr "Nhà cung cấp" @@ -1096,7 +1100,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:1138 +#: core/models.py:1146 msgid "notifications" msgstr "Thông báo" @@ -1104,7 +1108,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:1860 +#: core/graphene/object_types.py:400 core/models.py:1868 msgid "feedback" msgstr "Phản hồi" @@ -1112,7 +1116,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:1108 +#: core/graphene/object_types.py:436 core/models.py:1116 msgid "billing address" msgstr "Địa chỉ thanh toán" @@ -1141,7 +1145,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:1172 +#: core/graphene/object_types.py:465 core/models.py:1180 msgid "orders" msgstr "Đơn hàng" @@ -1153,19 +1157,19 @@ 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:325 core/models.py:479 +#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 msgid "category" msgstr "Thể loại" -#: core/graphene/object_types.py:502 core/models.py:1861 +#: core/graphene/object_types.py:502 core/models.py:1869 msgid "feedbacks" msgstr "Phản hồi" -#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 +#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 msgid "brand" msgstr "Thương hiệu" -#: core/graphene/object_types.py:504 core/models.py:101 +#: core/graphene/object_types.py:504 core/models.py:102 msgid "attribute groups" msgstr "Nhóm thuộc tính" @@ -1193,7 +1197,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:550 +#: core/graphene/object_types.py:534 core/models.py:558 msgid "products" msgstr "Sản phẩm" @@ -1205,15 +1209,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:798 +#: core/graphene/object_types.py:651 core/models.py:806 msgid "promotions" msgstr "Khuyến mãi" -#: core/graphene/object_types.py:655 core/models.py:168 +#: core/graphene/object_types.py:655 core/models.py:176 msgid "vendor" msgstr "Nhà cung cấp" -#: core/graphene/object_types.py:656 core/models.py:549 +#: core/graphene/object_types.py:656 core/models.py:557 #: 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 +1225,11 @@ msgstr "Nhà cung cấp" msgid "product" msgstr "Sản phẩm" -#: core/graphene/object_types.py:667 core/models.py:821 +#: core/graphene/object_types.py:667 core/models.py:829 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:838 +#: core/graphene/object_types.py:673 core/models.py:846 msgid "wishlists" msgstr "Danh sách mong muốn" @@ -1233,7 +1237,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:204 core/models.py:494 +#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 msgid "product tags" msgstr "Thẻ sản phẩm" @@ -1319,7 +1323,7 @@ msgstr "Kết quả tìm kiếm sản phẩm" msgid "posts search results" msgstr "Kết quả tìm kiếm sản phẩm" -#: core/models.py:70 +#: core/models.py:71 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1332,23 +1336,23 @@ msgstr "" " việc phân loại và quản lý các thuộc tính một cách hiệu quả hơn trong một hệ" " thống phức tạp." -#: core/models.py:86 +#: core/models.py:87 msgid "parent of this group" msgstr "Cha mẹ của nhóm này" -#: core/models.py:87 +#: core/models.py:88 msgid "parent attribute group" msgstr "Nhóm thuộc tính cha" -#: core/models.py:91 core/models.py:92 +#: core/models.py:92 core/models.py:93 msgid "attribute group's name" msgstr "Tên nhóm thuộc tính" -#: core/models.py:100 core/models.py:634 +#: core/models.py:101 core/models.py:642 msgid "attribute group" msgstr "Nhóm thuộc tính" -#: core/models.py:106 +#: core/models.py:107 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1367,34 +1371,42 @@ msgstr "" " bổ sung, khiến nó phù hợp để sử dụng trong các hệ thống tương tác với các " "nhà cung cấp bên thứ ba." -#: core/models.py:119 +#: core/models.py:120 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Lưu trữ thông tin đăng nhập và các điểm cuối cần thiết cho việc giao tiếp " "API của nhà cung cấp." -#: core/models.py:120 +#: core/models.py:121 msgid "authentication info" msgstr "Thông tin xác thực" -#: core/models.py:125 +#: core/models.py:126 msgid "define the markup for products retrieved from this vendor" msgstr "" "Xác định định dạng đánh dấu cho các sản phẩm được lấy từ nhà cung cấp này." -#: core/models.py:126 +#: core/models.py:127 msgid "vendor markup percentage" msgstr "Tỷ lệ chiết khấu của nhà cung cấp" -#: core/models.py:130 +#: core/models.py:131 msgid "name of this vendor" msgstr "Tên của nhà cung cấp này" -#: core/models.py:131 +#: core/models.py:132 msgid "vendor name" msgstr "Tên nhà cung cấp" -#: core/models.py:177 +#: core/models.py:143 +msgid "response file" +msgstr "Tệp phản hồi" + +#: core/models.py:144 +msgid "vendor's last processing response" +msgstr "Phản hồi xử lý cuối cùng của nhà cung cấp" + +#: core/models.py:185 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1408,27 +1420,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:189 core/models.py:220 +#: core/models.py:197 core/models.py:228 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:190 core/models.py:221 +#: core/models.py:198 core/models.py:229 msgid "tag name" msgstr "Tên ngày" -#: core/models.py:194 core/models.py:225 +#: core/models.py:202 core/models.py:233 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:195 core/models.py:226 +#: core/models.py:203 core/models.py:234 msgid "tag display name" msgstr "Hiển thị tên thẻ" -#: core/models.py:203 +#: core/models.py:211 msgid "product tag" msgstr "Thẻ sản phẩm" -#: core/models.py:209 +#: core/models.py:217 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 +1451,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:234 +#: core/models.py:242 msgid "category tag" msgstr "Thẻ danh mục" -#: core/models.py:235 core/models.py:307 +#: core/models.py:243 core/models.py:315 msgid "category tags" msgstr "Thẻ danh mục" -#: core/models.py:240 +#: core/models.py:248 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1468,52 +1480,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:254 +#: core/models.py:262 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:257 +#: core/models.py:265 msgid "category image" msgstr "Hình ảnh danh mục" -#: core/models.py:262 +#: core/models.py:270 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:271 +#: core/models.py:279 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:272 +#: core/models.py:280 msgid "parent category" msgstr "Danh mục cha" -#: core/models.py:277 +#: core/models.py:285 msgid "category name" msgstr "Tên danh mục" -#: core/models.py:278 +#: core/models.py:286 msgid "provide a name for this category" msgstr "Đặt tên cho danh mục này." -#: core/models.py:285 +#: core/models.py:293 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:286 +#: core/models.py:294 msgid "category description" msgstr "Mô tả danh mục" -#: core/models.py:306 +#: core/models.py:314 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:313 core/models.py:389 +#: core/models.py:321 core/models.py:397 msgid "priority" msgstr "Ưu tiên" -#: core/models.py:332 +#: core/models.py:340 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 +1538,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:342 +#: core/models.py:350 msgid "name of this brand" msgstr "Tên của thương hiệu này" -#: core/models.py:343 +#: core/models.py:351 msgid "brand name" msgstr "Tên thương hiệu" -#: core/models.py:350 +#: core/models.py:358 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:352 +#: core/models.py:360 msgid "brand small image" msgstr "Hình ảnh nhỏ của thương hiệu" -#: core/models.py:358 +#: core/models.py:366 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:360 +#: core/models.py:368 msgid "brand big image" msgstr "Hình ảnh thương hiệu lớn" -#: core/models.py:365 +#: core/models.py:373 msgid "add a detailed description of the brand" msgstr "Thêm mô tả chi tiết về thương hiệu" -#: core/models.py:366 +#: core/models.py:374 msgid "brand description" msgstr "Mô tả thương hiệu" -#: core/models.py:371 +#: core/models.py:379 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:372 +#: core/models.py:380 msgid "associated categories" msgstr "Các danh mục" -#: core/models.py:402 +#: core/models.py:410 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 +1594,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:414 +#: core/models.py:422 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:415 +#: core/models.py:423 msgid "associated vendor" msgstr "Nhà cung cấp liên kết" -#: core/models.py:419 +#: core/models.py:427 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:420 +#: core/models.py:428 msgid "selling price" msgstr "Giá bán" -#: core/models.py:425 +#: core/models.py:433 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:426 core/models.py:697 core/models.py:744 -#: core/models.py:1641 +#: core/models.py:434 core/models.py:705 core/models.py:752 +#: core/models.py:1649 msgid "associated product" msgstr "Sản phẩm liên quan" -#: core/models.py:433 +#: core/models.py:441 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:434 +#: core/models.py:442 msgid "vendor purchase price" msgstr "Giá mua của nhà cung cấp" -#: core/models.py:438 +#: core/models.py:446 msgid "available quantity of the product in stock" msgstr "Số lượng sản phẩm hiện có trong kho" -#: core/models.py:439 +#: core/models.py:447 msgid "quantity in stock" msgstr "Số lượng hàng tồn kho" -#: core/models.py:443 +#: core/models.py:451 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:444 +#: core/models.py:452 msgid "vendor sku" msgstr "Mã SKU của nhà cung cấp" -#: core/models.py:450 +#: core/models.py:458 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:451 +#: core/models.py:459 msgid "digital file" msgstr "Tệp tin kỹ thuật số" -#: core/models.py:460 +#: core/models.py:468 msgid "stock entries" msgstr "Nhập kho" -#: core/models.py:465 +#: core/models.py:473 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1664,56 +1676,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:478 +#: core/models.py:486 msgid "category this product belongs to" msgstr "Danh mục mà sản phẩm này thuộc về" -#: core/models.py:487 +#: core/models.py:495 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:493 +#: core/models.py:501 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:498 +#: core/models.py:506 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:499 +#: core/models.py:507 msgid "is product digital" msgstr "Sản phẩm có phải là sản phẩm số không?" -#: core/models.py:505 +#: core/models.py:513 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:506 +#: core/models.py:514 msgid "product name" msgstr "Tên sản phẩm" -#: core/models.py:511 core/models.py:786 +#: core/models.py:519 core/models.py:794 msgid "add a detailed description of the product" msgstr "Thêm mô tả chi tiết về sản phẩm" -#: core/models.py:512 +#: core/models.py:520 msgid "product description" msgstr "Mô tả sản phẩm" -#: core/models.py:519 +#: core/models.py:527 msgid "part number for this product" msgstr "Số hiệu sản phẩm cho sản phẩm này" -#: core/models.py:520 +#: core/models.py:528 msgid "part number" msgstr "Số hiệu linh kiện" -#: core/models.py:539 +#: core/models.py:547 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:613 +#: core/models.py:621 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 +1741,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:625 +#: core/models.py:633 msgid "category of this attribute" msgstr "Loại của thuộc tính này" -#: core/models.py:633 +#: core/models.py:641 msgid "group of this attribute" msgstr "Nhóm có thuộc tính này" -#: core/models.py:639 +#: core/models.py:647 msgid "string" msgstr "Dây" -#: core/models.py:640 +#: core/models.py:648 msgid "integer" msgstr "Chính trực" -#: core/models.py:641 +#: core/models.py:649 msgid "float" msgstr "Nổi" -#: core/models.py:642 +#: core/models.py:650 msgid "boolean" msgstr "Boolean" -#: core/models.py:643 +#: core/models.py:651 msgid "array" msgstr "Mảng" -#: core/models.py:644 +#: core/models.py:652 msgid "object" msgstr "Đối tượng" -#: core/models.py:646 +#: core/models.py:654 msgid "type of the attribute's value" msgstr "Loại giá trị của thuộc tính" -#: core/models.py:647 +#: core/models.py:655 msgid "value type" msgstr "Kiểu giá trị" -#: core/models.py:652 +#: core/models.py:660 msgid "name of this attribute" msgstr "Tên của thuộc tính này" -#: core/models.py:653 +#: core/models.py:661 msgid "attribute's name" msgstr "Tên thuộc tính" -#: core/models.py:659 +#: core/models.py:667 msgid "is filterable" msgstr "có thể lọc được" -#: core/models.py:660 +#: core/models.py:668 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:671 core/models.py:689 +#: core/models.py:679 core/models.py:697 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Thuộc tính" -#: core/models.py:677 +#: core/models.py:685 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 +1812,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:688 +#: core/models.py:696 msgid "attribute of this value" msgstr "Thuộc tính của giá trị này" -#: core/models.py:696 +#: core/models.py:704 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:702 +#: core/models.py:710 msgid "the specific value for this attribute" msgstr "Giá trị cụ thể cho thuộc tính này" -#: core/models.py:715 +#: core/models.py:723 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 +1838,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:726 +#: core/models.py:734 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:727 +#: core/models.py:735 msgid "image alt text" msgstr "Nội dung thay thế cho hình ảnh" -#: core/models.py:730 +#: core/models.py:738 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:731 core/models.py:756 +#: core/models.py:739 core/models.py:764 msgid "product image" msgstr "Hình ảnh sản phẩm" -#: core/models.py:737 +#: core/models.py:745 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:738 +#: core/models.py:746 msgid "display priority" msgstr "Ưu tiên hiển thị" -#: core/models.py:743 +#: core/models.py:751 msgid "the product that this image represents" msgstr "Sản phẩm mà hình ảnh này đại diện" -#: core/models.py:757 +#: core/models.py:765 msgid "product images" msgstr "Hình ảnh sản phẩm" -#: core/models.py:762 +#: core/models.py:770 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 +1886,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:774 +#: core/models.py:782 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:775 +#: core/models.py:783 msgid "discount percentage" msgstr "Tỷ lệ giảm giá" -#: core/models.py:780 +#: core/models.py:788 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:781 +#: core/models.py:789 msgid "promotion name" msgstr "Tên chương trình khuyến mãi" -#: core/models.py:787 +#: core/models.py:795 msgid "promotion description" msgstr "Mô tả chương trình khuyến mãi" -#: core/models.py:792 +#: core/models.py:800 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:793 +#: core/models.py:801 msgid "included products" msgstr "Các sản phẩm được bao gồm" -#: core/models.py:797 +#: core/models.py:805 msgid "promotion" msgstr "Khuyến mãi" -#: core/models.py:808 +#: core/models.py:816 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 +1930,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:820 +#: core/models.py:828 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:828 +#: core/models.py:836 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:829 +#: core/models.py:837 msgid "wishlist owner" msgstr "Chủ sở hữu Danh sách mong muốn" -#: core/models.py:837 +#: core/models.py:845 msgid "wishlist" msgstr "Danh sách mong muốn" -#: core/models.py:879 +#: core/models.py:887 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1950,19 +1962,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:892 +#: core/models.py:900 msgid "documentary" msgstr "Phim tài liệu" -#: core/models.py:893 +#: core/models.py:901 msgid "documentaries" msgstr "Phim tài liệu" -#: core/models.py:903 +#: core/models.py:911 msgid "unresolved" msgstr "Chưa được giải quyết" -#: core/models.py:908 +#: core/models.py:916 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1982,59 +1994,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:923 +#: core/models.py:931 msgid "address line for the customer" msgstr "Địa chỉ của khách hàng" -#: core/models.py:924 +#: core/models.py:932 msgid "address line" msgstr "Dòng địa chỉ" -#: core/models.py:926 +#: core/models.py:934 msgid "street" msgstr "Phố" -#: core/models.py:927 +#: core/models.py:935 msgid "district" msgstr "Quận" -#: core/models.py:928 +#: core/models.py:936 msgid "city" msgstr "Thành phố" -#: core/models.py:929 +#: core/models.py:937 msgid "region" msgstr "Khu vực" -#: core/models.py:930 +#: core/models.py:938 msgid "postal code" msgstr "Mã bưu chính" -#: core/models.py:931 +#: core/models.py:939 msgid "country" msgstr "Quốc gia" -#: core/models.py:938 +#: core/models.py:946 msgid "geolocation point: (longitude, latitude)" msgstr "Điểm định vị địa lý (Kinh độ, Vĩ độ)" -#: core/models.py:941 +#: core/models.py:949 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:946 +#: core/models.py:954 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:954 +#: core/models.py:962 msgid "address" msgstr "Địa chỉ" -#: core/models.py:955 +#: core/models.py:963 msgid "addresses" msgstr "Địa chỉ" -#: core/models.py:967 +#: core/models.py:975 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 +2062,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:981 +#: core/models.py:989 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:982 +#: core/models.py:990 msgid "promo code identifier" msgstr "Mã khuyến mãi" -#: core/models.py:989 +#: core/models.py:997 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:990 +#: core/models.py:998 msgid "fixed discount amount" msgstr "Số tiền giảm giá cố định" -#: core/models.py:996 +#: core/models.py:1004 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:997 +#: core/models.py:1005 msgid "percentage discount" msgstr "Giảm giá theo phần trăm" -#: core/models.py:1002 +#: core/models.py:1010 msgid "timestamp when the promocode expires" msgstr "Thời gian hết hạn của mã khuyến mãi" -#: core/models.py:1003 +#: core/models.py:1011 msgid "end validity time" msgstr "Thời hạn hiệu lực kết thúc" -#: core/models.py:1008 +#: core/models.py:1016 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:1009 +#: core/models.py:1017 msgid "start validity time" msgstr "Thời gian bắt đầu có hiệu lực" -#: core/models.py:1014 +#: core/models.py:1022 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:1015 +#: core/models.py:1023 msgid "usage timestamp" msgstr "Dấu thời gian sử dụng" -#: core/models.py:1020 +#: core/models.py:1028 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:1021 +#: core/models.py:1029 msgid "assigned user" msgstr "Người dùng được chỉ định" -#: core/models.py:1028 +#: core/models.py:1036 msgid "promo code" msgstr "Mã khuyến mãi" -#: core/models.py:1029 +#: core/models.py:1037 msgid "promo codes" msgstr "Mã khuyến mãi" -#: core/models.py:1044 +#: core/models.py:1052 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2123,16 +2135,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:1065 +#: core/models.py:1073 msgid "promocode already used" msgstr "Mã khuyến mãi đã được sử dụng." -#: core/models.py:1081 +#: core/models.py:1089 #, 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:1090 +#: core/models.py:1098 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 +2161,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:1107 +#: core/models.py:1115 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:1115 +#: core/models.py:1123 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:1116 +#: core/models.py:1124 msgid "applied promo code" msgstr "Đã áp dụng mã khuyến mãi" -#: core/models.py:1124 +#: core/models.py:1132 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:1125 +#: core/models.py:1133 msgid "shipping address" msgstr "Địa chỉ giao hàng" -#: core/models.py:1131 +#: core/models.py:1139 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:1132 +#: core/models.py:1140 msgid "order status" msgstr "Tình trạng đơn hàng" -#: core/models.py:1137 core/models.py:1618 +#: core/models.py:1145 core/models.py:1626 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:1143 +#: core/models.py:1151 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:1149 +#: core/models.py:1157 msgid "the user who placed the order" msgstr "Người dùng đã đặt đơn hàng" -#: core/models.py:1150 +#: core/models.py:1158 msgid "user" msgstr "Người dùng" -#: core/models.py:1156 +#: core/models.py:1164 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:1157 +#: core/models.py:1165 msgid "buy time" msgstr "Mua thời gian" -#: core/models.py:1164 +#: core/models.py:1172 msgid "a human-readable identifier for the order" msgstr "Một định danh dễ đọc cho đơn hàng" -#: core/models.py:1165 +#: core/models.py:1173 msgid "human readable id" msgstr "ID dễ đọc cho con người" -#: core/models.py:1171 +#: core/models.py:1179 msgid "order" msgstr "Đặt hàng" -#: core/models.py:1209 +#: core/models.py:1217 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:1249 +#: core/models.py:1257 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:1254 +#: core/models.py:1262 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:1271 +#: core/models.py:1279 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:1293 core/models.py:1318 core/models.py:1326 +#: core/models.py:1301 core/models.py:1326 core/models.py:1334 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:1314 +#: core/models.py:1322 #, 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:1346 +#: core/models.py:1354 msgid "promocode does not exist" msgstr "Mã khuyến mãi không tồn tại" -#: core/models.py:1352 +#: core/models.py:1360 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:1371 +#: core/models.py:1379 msgid "address does not exist" msgstr "Địa chỉ không tồn tại" -#: core/models.py:1392 core/models.py:1461 +#: core/models.py:1400 core/models.py:1469 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:1395 core/models.py:1457 +#: core/models.py:1403 core/models.py:1465 msgid "invalid force value" msgstr "Giá trị lực không hợp lệ" -#: core/models.py:1401 core/models.py:1464 +#: core/models.py:1409 core/models.py:1472 msgid "you cannot purchase an empty order!" msgstr "Bạn không thể đặt hàng trống!" -#: core/models.py:1420 +#: core/models.py:1428 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:1434 +#: core/models.py:1442 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:1439 +#: core/models.py:1447 msgid "insufficient funds to complete the order" msgstr "Không đủ số tiền để hoàn tất đơn hàng." -#: core/models.py:1473 +#: core/models.py:1481 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2291,7 +2303,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:1482 +#: core/models.py:1490 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2299,7 +2311,7 @@ msgstr "" "Phương thức thanh toán không hợp lệ: {payment_method} từ " "{available_payment_methods}!" -#: core/models.py:1591 +#: core/models.py:1599 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2321,108 +2333,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:1606 +#: core/models.py:1614 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:1607 +#: core/models.py:1615 msgid "purchase price at order time" msgstr "Giá mua tại thời điểm đặt hàng" -#: core/models.py:1612 +#: core/models.py:1620 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:1613 +#: core/models.py:1621 msgid "internal comments" msgstr "Nhận xét nội bộ" -#: core/models.py:1619 +#: core/models.py:1627 msgid "user notifications" msgstr "Thông báo cho người dùng" -#: core/models.py:1624 +#: core/models.py:1632 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:1625 +#: core/models.py:1633 msgid "ordered product attributes" msgstr "Thuộc tính sản phẩm đã đặt hàng" -#: core/models.py:1630 +#: core/models.py:1638 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:1631 +#: core/models.py:1639 msgid "parent order" msgstr "Đơn đặt hàng của phụ huynh" -#: core/models.py:1640 +#: core/models.py:1648 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:1647 +#: core/models.py:1655 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:1648 +#: core/models.py:1656 msgid "product quantity" msgstr "Số lượng sản phẩm" -#: core/models.py:1655 +#: core/models.py:1663 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:1656 +#: core/models.py:1664 msgid "product line status" msgstr "Tình trạng dòng sản phẩm" -#: core/models.py:1719 +#: core/models.py:1727 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:1721 +#: core/models.py:1729 #, 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:1735 +#: core/models.py:1743 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:1741 +#: core/models.py:1749 msgid "name" msgstr "Tên" -#: core/models.py:1742 +#: core/models.py:1750 msgid "URL of the integration" msgstr "Đường dẫn URL của tích hợp" -#: core/models.py:1743 +#: core/models.py:1751 msgid "authentication credentials" msgstr "Thông tin xác thực" -#: core/models.py:1765 +#: core/models.py:1773 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:1775 +#: core/models.py:1783 msgid "CRM" msgstr "Hệ thống Quản lý Quan hệ Khách hàng" -#: core/models.py:1776 +#: core/models.py:1784 msgid "CRMs" msgstr "Hệ thống Quản lý Quan hệ Khách hàng (CR" -#: core/models.py:1788 +#: core/models.py:1796 msgid "order CRM link" msgstr "Liên kết CRM của đơn hàng" -#: core/models.py:1789 +#: core/models.py:1797 msgid "orders CRM links" msgstr "Liên kết CRM của đơn hàng" -#: core/models.py:1794 +#: core/models.py:1802 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2438,15 +2450,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:1808 +#: core/models.py:1816 msgid "download" msgstr "Tải xuống" -#: core/models.py:1809 +#: core/models.py:1817 msgid "downloads" msgstr "Tải xuống" -#: core/models.py:1823 +#: core/models.py:1831 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2461,30 +2473,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:1835 +#: core/models.py:1843 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:1836 +#: core/models.py:1844 msgid "feedback comments" msgstr "Phản hồi" -#: core/models.py:1843 +#: core/models.py:1851 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:1844 +#: core/models.py:1852 msgid "related order product" msgstr "Sản phẩm liên quan đến đơn hàng" -#: core/models.py:1849 +#: core/models.py:1857 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:1850 +#: core/models.py:1858 msgid "product rating" msgstr "Đánh giá sản phẩm" @@ -2700,22 +2712,22 @@ msgstr "" "Giá trị thời gian chờ không hợp lệ, nó phải nằm trong khoảng từ 0 đến " "216.000 giây." -#: core/utils/emailing.py:25 +#: core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | Liên hệ với chúng tôi đã được khởi tạo" -#: core/utils/emailing.py:74 +#: core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Xác nhận đơn hàng" -#: core/utils/emailing.py:109 +#: core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Đơn hàng đã được giao" -#: core/utils/emailing.py:197 +#: core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | mã khuyến mãi được cấp" @@ -2967,7 +2979,7 @@ msgstr "" "với các đối tượng Feedback có thể truy cập. Nó kế thừa từ lớp cơ sở " "`EvibesViewSet` và sử dụng hệ thống lọc của Django để truy vấn dữ liệu." -#: core/viewsets.py:593 +#: core/viewsets.py:594 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2986,7 +2998,7 @@ msgstr "" "serializer khác nhau tùy thuộc vào hành động cụ thể đang được thực hiện và " "áp dụng quyền truy cập tương ứng khi tương tác với dữ liệu đơn hàng." -#: core/viewsets.py:782 +#: core/viewsets.py:784 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3001,11 +3013,11 @@ msgstr "" "hành động được yêu cầu. Ngoài ra, nó cung cấp một hành động chi tiết để xử " "lý phản hồi cho các thực thể OrderProduct." -#: core/viewsets.py:833 +#: core/viewsets.py:835 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 +#: core/viewsets.py:847 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3013,15 +3025,15 @@ msgstr "" "Quản lý việc truy xuất và xử lý các thực thể PromoCode thông qua các hành " "động API khác nhau." -#: core/viewsets.py:866 +#: core/viewsets.py:868 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 +#: core/viewsets.py:880 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 +#: core/viewsets.py:894 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3040,7 +3052,7 @@ msgstr "" " bảo rằng người dùng chỉ có thể quản lý danh sách mong muốn của chính mình " "trừ khi được cấp quyền rõ ràng." -#: core/viewsets.py:1007 +#: core/viewsets.py:1009 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3054,12 +3066,12 @@ msgstr "" "chuyên biệt cho các phương thức HTTP khác nhau, các tùy chỉnh serializer và " "xử lý quyền truy cập dựa trên bối cảnh yêu cầu." -#: core/viewsets.py:1074 +#: core/viewsets.py:1076 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Lỗi địa chỉ địa lý: {e}" -#: core/viewsets.py:1081 +#: core/viewsets.py:1083 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/zh_Hans/LC_MESSAGES/django.mo b/core/locale/zh_Hans/LC_MESSAGES/django.mo index cc8d86d0..9dd63ea9 100644 Binary files a/core/locale/zh_Hans/LC_MESSAGES/django.mo and b/core/locale/zh_Hans/LC_MESSAGES/django.mo differ diff --git a/core/locale/zh_Hans/LC_MESSAGES/django.po b/core/locale/zh_Hans/LC_MESSAGES/django.po index 834b3aab..34a11a6c 100644 --- a/core/locale/zh_Hans/LC_MESSAGES/django.po +++ b/core/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-10-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -47,82 +47,86 @@ msgstr "改装" msgid "when the object was last modified" msgstr "对象最后一次编辑的时间" -#: core/admin.py:63 +#: core/admin.py:68 msgid "translations" msgstr "翻译" -#: core/admin.py:67 +#: core/admin.py:72 msgid "general" msgstr "一般情况" -#: core/admin.py:69 +#: core/admin.py:74 msgid "relations" msgstr "关系" -#: core/admin.py:87 +#: core/admin.py:76 +msgid "additional info" +msgstr "其他信息" + +#: core/admin.py:94 msgid "metadata" msgstr "元数据" -#: core/admin.py:94 +#: core/admin.py:101 msgid "timestamps" msgstr "时间戳" -#: core/admin.py:109 +#: core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "激活选定的 %(verbose_name_plural)s" -#: core/admin.py:114 +#: core/admin.py:121 msgid "selected items have been activated." msgstr "所选项目已激活!" -#: core/admin.py:120 +#: core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "停用选定的 %(verbose_name_plural)s" -#: core/admin.py:125 +#: core/admin.py:132 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:701 core/models.py:709 +#: core/admin.py:144 core/graphene/object_types.py:609 +#: core/graphene/object_types.py:616 core/models.py:709 core/models.py:717 msgid "attribute value" msgstr "属性值" -#: core/admin.py:138 core/graphene/object_types.py:75 core/models.py:710 +#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:718 msgid "attribute values" msgstr "属性值" -#: core/admin.py:146 +#: core/admin.py:153 msgid "image" msgstr "图片" -#: core/admin.py:147 core/graphene/object_types.py:501 +#: core/admin.py:154 core/graphene/object_types.py:501 msgid "images" msgstr "图片" -#: core/admin.py:155 core/models.py:459 +#: core/admin.py:162 core/models.py:467 msgid "stock" msgstr "库存" -#: core/admin.py:156 core/graphene/object_types.py:663 +#: core/admin.py:163 core/graphene/object_types.py:663 msgid "stocks" msgstr "股票" -#: core/admin.py:166 core/models.py:1667 +#: core/admin.py:173 core/models.py:1675 msgid "order product" msgstr "订购产品" -#: core/admin.py:167 core/graphene/object_types.py:416 core/models.py:1668 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 msgid "order products" msgstr "订购产品" -#: core/admin.py:180 core/admin.py:181 +#: core/admin.py:187 core/admin.py:188 msgid "children" msgstr "儿童" -#: core/admin.py:566 +#: core/admin.py:940 msgid "Config" msgstr "配置" @@ -687,23 +691,23 @@ msgstr "删除订单-产品关系" msgid "add or remove feedback on an order–product relation" msgstr "添加或删除订单与产品关系中的反馈信息" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:498 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 msgid "no search term provided." msgstr "未提供搜索条件。" -#: core/filters.py:65 core/filters.py:397 core/filters.py:524 +#: core/filters.py:65 core/filters.py:399 core/filters.py:526 msgid "Search" msgstr "搜索" -#: core/filters.py:66 core/filters.py:554 core/filters.py:583 +#: core/filters.py:66 core/filters.py:556 core/filters.py:585 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:399 core/filters.py:526 +#: core/filters.py:67 core/filters.py:401 core/filters.py:528 msgid "Name" msgstr "名称" -#: core/filters.py:68 core/filters.py:528 +#: core/filters.py:68 core/filters.py:530 msgid "Categories" msgstr "类别" @@ -711,7 +715,7 @@ msgstr "类别" msgid "Categories Slugs" msgstr "类别 蛞蝓" -#: core/filters.py:71 core/filters.py:407 +#: core/filters.py:71 core/filters.py:409 msgid "Tags" msgstr "标签" @@ -739,8 +743,8 @@ msgstr "属性" msgid "Quantity" msgstr "数量" -#: core/filters.py:78 core/filters.py:401 core/filters.py:527 -#: core/models.py:301 core/models.py:383 core/models.py:536 +#: core/filters.py:78 core/filters.py:403 core/filters.py:529 +#: core/models.py:309 core/models.py:391 core/models.py:544 msgid "Slug" msgstr "蛞蝓" @@ -756,7 +760,7 @@ msgstr "包括子类别" msgid "Include personal ordered" msgstr "包括个人订购的产品" -#: core/filters.py:85 core/models.py:540 +#: core/filters.py:85 core/models.py:548 msgid "SKU" msgstr "商品编号" @@ -764,48 +768,48 @@ msgstr "商品编号" msgid "there must be a category_uuid to use include_subcategories flag" msgstr "必须有 category_uuid 才能使用 include_subcategories 标志" -#: core/filters.py:324 +#: core/filters.py:326 msgid "Search (ID, product name or part number)" msgstr "搜索(ID、产品名称或零件编号)" -#: core/filters.py:327 +#: core/filters.py:329 msgid "Bought after (inclusive)" msgstr "之后购买(含)" -#: core/filters.py:328 +#: core/filters.py:330 msgid "Bought before (inclusive)" msgstr "之前购买(含)" -#: core/filters.py:331 core/filters.py:378 core/filters.py:585 +#: core/filters.py:333 core/filters.py:380 core/filters.py:587 msgid "User email" msgstr "用户电子邮件" -#: core/filters.py:332 core/filters.py:379 core/filters.py:563 -#: core/filters.py:584 +#: core/filters.py:334 core/filters.py:381 core/filters.py:565 +#: core/filters.py:586 msgid "User UUID" msgstr "用户 UUID" -#: core/filters.py:333 +#: core/filters.py:335 msgid "Status" msgstr "现状" -#: core/filters.py:337 +#: core/filters.py:339 msgid "Human Readable ID" msgstr "人可读 ID" -#: core/filters.py:400 +#: core/filters.py:402 msgid "Parent" msgstr "家长" -#: core/filters.py:404 +#: core/filters.py:406 msgid "Whole category(has at least 1 product or not)" msgstr "整个类别(是否至少有 1 个产品)" -#: core/filters.py:408 +#: core/filters.py:410 msgid "Level" msgstr "级别" -#: core/filters.py:558 +#: core/filters.py:560 msgid "Product UUID" msgstr "产品 UUID" @@ -860,7 +864,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:679 +#: core/graphene/mutations.py:527 core/viewsets.py:680 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "order.buy() 方法中的类型有误:{type(instance)!s}" @@ -934,9 +938,9 @@ msgstr "未找到订购产品 {order_product_uuid}!" msgid "original address string provided by the user" msgstr "用户提供的原始地址字符串" -#: 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 +#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 +#: core/models.py:1289 core/models.py:1318 core/models.py:1343 +#: core/viewsets.py:683 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} 不存在:{uuid}!" @@ -950,8 +954,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:672 core/models.py:1144 -#: core/models.py:1744 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 +#: core/models.py:1752 msgid "attributes" msgstr "属性" @@ -964,11 +968,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:326 core/models.py:626 +#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 msgid "categories" msgstr "类别" -#: core/graphene/object_types.py:124 core/models.py:397 +#: core/graphene/object_types.py:124 core/models.py:405 msgid "brands" msgstr "品牌" @@ -977,7 +981,7 @@ msgid "category image url" msgstr "类别" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:263 +#: core/models.py:271 msgid "markup percentage" msgstr "加价百分比" @@ -998,7 +1002,7 @@ msgstr "此类别的标签" msgid "products in this category" msgstr "该类别中的产品" -#: core/graphene/object_types.py:351 core/models.py:169 +#: core/graphene/object_types.py:351 core/models.py:177 msgid "vendors" msgstr "供应商" @@ -1023,7 +1027,7 @@ msgid "represents feedback from a user." msgstr "代表用户的反馈意见。" #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1138 +#: core/models.py:1146 msgid "notifications" msgstr "通知" @@ -1031,7 +1035,7 @@ msgstr "通知" msgid "download url for this order product if applicable" msgstr "此订单产品的下载网址(如适用" -#: core/graphene/object_types.py:400 core/models.py:1860 +#: core/graphene/object_types.py:400 core/models.py:1868 msgid "feedback" msgstr "反馈意见" @@ -1039,7 +1043,7 @@ msgstr "反馈意见" msgid "a list of order products in this order" msgstr "该订单中的订单产品列表" -#: core/graphene/object_types.py:436 core/models.py:1108 +#: core/graphene/object_types.py:436 core/models.py:1116 msgid "billing address" msgstr "账单地址" @@ -1065,7 +1069,7 @@ msgstr "订单中的所有产品都是数字产品吗?" msgid "transactions for this order" msgstr "此订单的交易" -#: core/graphene/object_types.py:465 core/models.py:1172 +#: core/graphene/object_types.py:465 core/models.py:1180 msgid "orders" msgstr "订单" @@ -1077,19 +1081,19 @@ msgstr "图片 URL" msgid "product's images" msgstr "产品图片" -#: core/graphene/object_types.py:500 core/models.py:325 core/models.py:479 +#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 msgid "category" msgstr "类别" -#: core/graphene/object_types.py:502 core/models.py:1861 +#: core/graphene/object_types.py:502 core/models.py:1869 msgid "feedbacks" msgstr "反馈意见" -#: core/graphene/object_types.py:503 core/models.py:396 core/models.py:488 +#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 msgid "brand" msgstr "品牌" -#: core/graphene/object_types.py:504 core/models.py:101 +#: core/graphene/object_types.py:504 core/models.py:102 msgid "attribute groups" msgstr "属性组" @@ -1117,7 +1121,7 @@ msgstr "反馈数量" msgid "only available for personal orders" msgstr "仅限个人订购的产品" -#: core/graphene/object_types.py:534 core/models.py:550 +#: core/graphene/object_types.py:534 core/models.py:558 msgid "products" msgstr "产品" @@ -1129,15 +1133,15 @@ msgstr "促销代码" msgid "products on sale" msgstr "销售产品" -#: core/graphene/object_types.py:651 core/models.py:798 +#: core/graphene/object_types.py:651 core/models.py:806 msgid "promotions" msgstr "促销活动" -#: core/graphene/object_types.py:655 core/models.py:168 +#: core/graphene/object_types.py:655 core/models.py:176 msgid "vendor" msgstr "供应商" -#: core/graphene/object_types.py:656 core/models.py:549 +#: core/graphene/object_types.py:656 core/models.py:557 #: 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 +1149,11 @@ msgstr "供应商" msgid "product" msgstr "产品" -#: core/graphene/object_types.py:667 core/models.py:821 +#: core/graphene/object_types.py:667 core/models.py:829 msgid "wishlisted products" msgstr "心愿单上的产品" -#: core/graphene/object_types.py:673 core/models.py:838 +#: core/graphene/object_types.py:673 core/models.py:846 msgid "wishlists" msgstr "愿望清单" @@ -1157,7 +1161,7 @@ msgstr "愿望清单" msgid "tagged products" msgstr "标签产品" -#: core/graphene/object_types.py:684 core/models.py:204 core/models.py:494 +#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 msgid "product tags" msgstr "产品标签" @@ -1242,7 +1246,7 @@ msgstr "产品搜索结果" msgid "posts search results" msgstr "产品搜索结果" -#: core/models.py:70 +#: core/models.py:71 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1251,23 +1255,23 @@ msgid "" msgstr "" "代表一组属性,可以是分层的。该类用于管理和组织属性组。一个属性组可以有一个父组,从而形成一个层次结构。这有助于在复杂的系统中更有效地分类和管理属性。" -#: core/models.py:86 +#: core/models.py:87 msgid "parent of this group" msgstr "本组家长" -#: core/models.py:87 +#: core/models.py:88 msgid "parent attribute group" msgstr "父属性组" -#: core/models.py:91 core/models.py:92 +#: core/models.py:92 core/models.py:93 msgid "attribute group's name" msgstr "属性组名称" -#: core/models.py:100 core/models.py:634 +#: core/models.py:101 core/models.py:642 msgid "attribute group" msgstr "属性组" -#: core/models.py:106 +#: core/models.py:107 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1279,31 +1283,39 @@ msgid "" msgstr "" "代表一个供应商实体,能够存储有关外部供应商及其交互要求的信息。供应商类用于定义和管理与外部供应商相关的信息。它存储供应商的名称、通信所需的身份验证详细信息,以及从供应商处检索产品时所应用的百分比标记。该模型还维护附加的元数据和约束,使其适用于与第三方供应商交互的系统。" -#: core/models.py:119 +#: core/models.py:120 msgid "stores credentials and endpoints required for vendor communication" msgstr "存储供应商应用程序接口通信所需的凭证和端点" -#: core/models.py:120 +#: core/models.py:121 msgid "authentication info" msgstr "认证信息" -#: core/models.py:125 +#: core/models.py:126 msgid "define the markup for products retrieved from this vendor" msgstr "定义从该供应商获取的产品的标记" -#: core/models.py:126 +#: core/models.py:127 msgid "vendor markup percentage" msgstr "供应商加价百分比" -#: core/models.py:130 +#: core/models.py:131 msgid "name of this vendor" msgstr "供应商名称" -#: core/models.py:131 +#: core/models.py:132 msgid "vendor name" msgstr "供应商名称" -#: core/models.py:177 +#: core/models.py:143 +msgid "response file" +msgstr "回复文件" + +#: core/models.py:144 +msgid "vendor's last processing response" +msgstr "供应商最后的处理回复" + +#: core/models.py:185 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1314,42 +1326,42 @@ msgstr "" "代表用于分类或识别产品的产品标签。ProductTag " "类旨在通过内部标签标识符和用户友好显示名称的组合,对产品进行唯一标识和分类。它支持通过混合功能导出的操作,并为管理目的提供元数据定制功能。" -#: core/models.py:189 core/models.py:220 +#: core/models.py:197 core/models.py:228 msgid "internal tag identifier for the product tag" msgstr "产品标签的内部标签标识符" -#: core/models.py:190 core/models.py:221 +#: core/models.py:198 core/models.py:229 msgid "tag name" msgstr "标签名称" -#: core/models.py:194 core/models.py:225 +#: core/models.py:202 core/models.py:233 msgid "user-friendly name for the product tag" msgstr "方便用户使用的产品标签名称" -#: core/models.py:195 core/models.py:226 +#: core/models.py:203 core/models.py:234 msgid "tag display name" msgstr "标签显示名称" -#: core/models.py:203 +#: core/models.py:211 msgid "product tag" msgstr "产品标签" -#: core/models.py:209 +#: core/models.py:217 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:234 +#: core/models.py:242 msgid "category tag" msgstr "类别标签" -#: core/models.py:235 core/models.py:307 +#: core/models.py:243 core/models.py:315 msgid "category tags" msgstr "类别标签" -#: core/models.py:240 +#: core/models.py:248 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1363,51 +1375,51 @@ msgid "" msgstr "" "代表类别实体,用于在分层结构中组织和分组相关项目。类别可与其他类别建立层次关系,支持父子关系。该类包括元数据和可视化表示字段,是类别相关功能的基础。该类通常用于定义和管理应用程序中的产品类别或其他类似分组,允许用户或管理员指定类别的名称、描述和层次结构,以及分配图像、标记或优先级等属性。" -#: core/models.py:254 +#: core/models.py:262 msgid "upload an image representing this category" msgstr "上传代表该类别的图片" -#: core/models.py:257 +#: core/models.py:265 msgid "category image" msgstr "类别 图像" -#: core/models.py:262 +#: core/models.py:270 msgid "define a markup percentage for products in this category" msgstr "定义该类别产品的加价百分比" -#: core/models.py:271 +#: core/models.py:279 msgid "parent of this category to form a hierarchical structure" msgstr "该类别的父类别,形成等级结构" -#: core/models.py:272 +#: core/models.py:280 msgid "parent category" msgstr "父类" -#: core/models.py:277 +#: core/models.py:285 msgid "category name" msgstr "类别名称" -#: core/models.py:278 +#: core/models.py:286 msgid "provide a name for this category" msgstr "提供该类别的名称" -#: core/models.py:285 +#: core/models.py:293 msgid "add a detailed description for this category" msgstr "为该类别添加详细说明" -#: core/models.py:286 +#: core/models.py:294 msgid "category description" msgstr "类别说明" -#: core/models.py:306 +#: core/models.py:314 msgid "tags that help describe or group this category" msgstr "有助于描述或归类该类别的标签" -#: core/models.py:313 core/models.py:389 +#: core/models.py:321 core/models.py:397 msgid "priority" msgstr "优先权" -#: core/models.py:332 +#: core/models.py:340 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 +1429,47 @@ msgid "" msgstr "" "代表系统中的品牌对象。该类用于处理与品牌相关的信息和属性,包括名称、徽标、描述、相关类别、唯一标签和优先顺序。它允许在应用程序中组织和表示与品牌相关的数据。" -#: core/models.py:342 +#: core/models.py:350 msgid "name of this brand" msgstr "品牌名称" -#: core/models.py:343 +#: core/models.py:351 msgid "brand name" msgstr "品牌名称" -#: core/models.py:350 +#: core/models.py:358 msgid "upload a logo representing this brand" msgstr "上传代表该品牌的徽标" -#: core/models.py:352 +#: core/models.py:360 msgid "brand small image" msgstr "品牌小形象" -#: core/models.py:358 +#: core/models.py:366 msgid "upload a big logo representing this brand" msgstr "上传代表该品牌的大徽标" -#: core/models.py:360 +#: core/models.py:368 msgid "brand big image" msgstr "品牌大形象" -#: core/models.py:365 +#: core/models.py:373 msgid "add a detailed description of the brand" msgstr "添加品牌的详细描述" -#: core/models.py:366 +#: core/models.py:374 msgid "brand description" msgstr "品牌描述" -#: core/models.py:371 +#: core/models.py:379 msgid "optional categories that this brand is associated with" msgstr "与该品牌相关的可选类别" -#: core/models.py:372 +#: core/models.py:380 msgid "associated categories" msgstr "类别" -#: core/models.py:402 +#: core/models.py:410 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 +1481,68 @@ msgstr "" "代表系统中管理的产品库存。该类提供有关供应商、产品及其库存信息之间关系的详细信息,以及与库存相关的属性,如价格、购买价格、数量、SKU " "和数字资产。它是库存管理系统的一部分,用于跟踪和评估不同供应商提供的产品。" -#: core/models.py:414 +#: core/models.py:422 msgid "the vendor supplying this product stock" msgstr "提供该产品库存的供应商" -#: core/models.py:415 +#: core/models.py:423 msgid "associated vendor" msgstr "相关供应商" -#: core/models.py:419 +#: core/models.py:427 msgid "final price to the customer after markups" msgstr "加价后给客户的最终价格" -#: core/models.py:420 +#: core/models.py:428 msgid "selling price" msgstr "销售价格" -#: core/models.py:425 +#: core/models.py:433 msgid "the product associated with this stock entry" msgstr "与该库存条目相关的产品" -#: core/models.py:426 core/models.py:697 core/models.py:744 -#: core/models.py:1641 +#: core/models.py:434 core/models.py:705 core/models.py:752 +#: core/models.py:1649 msgid "associated product" msgstr "相关产品" -#: core/models.py:433 +#: core/models.py:441 msgid "the price paid to the vendor for this product" msgstr "为该产品支付给供应商的价格" -#: core/models.py:434 +#: core/models.py:442 msgid "vendor purchase price" msgstr "供应商购买价格" -#: core/models.py:438 +#: core/models.py:446 msgid "available quantity of the product in stock" msgstr "产品的可用库存量" -#: core/models.py:439 +#: core/models.py:447 msgid "quantity in stock" msgstr "库存数量" -#: core/models.py:443 +#: core/models.py:451 msgid "vendor-assigned SKU for identifying the product" msgstr "供应商指定的 SKU,用于识别产品" -#: core/models.py:444 +#: core/models.py:452 msgid "vendor sku" msgstr "供应商 SKU" -#: core/models.py:450 +#: core/models.py:458 msgid "digital file associated with this stock if applicable" msgstr "与该库存相关的数字文件(如适用" -#: core/models.py:451 +#: core/models.py:459 msgid "digital file" msgstr "数字文件" -#: core/models.py:460 +#: core/models.py:468 msgid "stock entries" msgstr "库存条目" -#: core/models.py:465 +#: core/models.py:473 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1544,55 +1556,55 @@ msgstr "" "代表产品的属性,如类别、品牌、标签、数字状态、名称、描述、零件编号和标签。提供相关的实用属性,以检索评级、反馈计数、价格、数量和订单总数。设计用于处理电子商务或库存管理的系统。该类可与相关模型(如类别、品牌和" " ProductTag)交互,并对频繁访问的属性进行缓存管理,以提高性能。它用于在应用程序中定义和操作产品数据及其相关信息。" -#: core/models.py:478 +#: core/models.py:486 msgid "category this product belongs to" msgstr "该产品所属类别" -#: core/models.py:487 +#: core/models.py:495 msgid "optionally associate this product with a brand" msgstr "可选择将该产品与某个品牌联系起来" -#: core/models.py:493 +#: core/models.py:501 msgid "tags that help describe or group this product" msgstr "有助于描述或归类该产品的标签" -#: core/models.py:498 +#: core/models.py:506 msgid "indicates whether this product is digitally delivered" msgstr "表示该产品是否以数字方式交付" -#: core/models.py:499 +#: core/models.py:507 msgid "is product digital" msgstr "产品是否数字化" -#: core/models.py:505 +#: core/models.py:513 msgid "provide a clear identifying name for the product" msgstr "为产品提供一个明确的标识名称" -#: core/models.py:506 +#: core/models.py:514 msgid "product name" msgstr "产品名称" -#: core/models.py:511 core/models.py:786 +#: core/models.py:519 core/models.py:794 msgid "add a detailed description of the product" msgstr "添加产品的详细描述" -#: core/models.py:512 +#: core/models.py:520 msgid "product description" msgstr "产品说明" -#: core/models.py:519 +#: core/models.py:527 msgid "part number for this product" msgstr "该产品的零件编号" -#: core/models.py:520 +#: core/models.py:528 msgid "part number" msgstr "部件编号" -#: core/models.py:539 +#: core/models.py:547 msgid "stock keeping unit for this product" msgstr "该产品的库存单位" -#: core/models.py:613 +#: core/models.py:621 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 +1615,87 @@ msgid "" msgstr "" "代表系统中的一个属性。该类用于定义和管理属性,属性是可与其他实体关联的自定义数据块。属性有相关的类别、组、值类型和名称。该模型支持多种类型的值,包括字符串、整数、浮点数、布尔值、数组和对象。这样就可以实现动态、灵活的数据结构。" -#: core/models.py:625 +#: core/models.py:633 msgid "category of this attribute" msgstr "该属性的类别" -#: core/models.py:633 +#: core/models.py:641 msgid "group of this attribute" msgstr "该属性的组" -#: core/models.py:639 +#: core/models.py:647 msgid "string" msgstr "字符串" -#: core/models.py:640 +#: core/models.py:648 msgid "integer" msgstr "整数" -#: core/models.py:641 +#: core/models.py:649 msgid "float" msgstr "浮动" -#: core/models.py:642 +#: core/models.py:650 msgid "boolean" msgstr "布尔型" -#: core/models.py:643 +#: core/models.py:651 msgid "array" msgstr "阵列" -#: core/models.py:644 +#: core/models.py:652 msgid "object" msgstr "对象" -#: core/models.py:646 +#: core/models.py:654 msgid "type of the attribute's value" msgstr "属性值的类型" -#: core/models.py:647 +#: core/models.py:655 msgid "value type" msgstr "价值类型" -#: core/models.py:652 +#: core/models.py:660 msgid "name of this attribute" msgstr "该属性的名称" -#: core/models.py:653 +#: core/models.py:661 msgid "attribute's name" msgstr "属性名称" -#: core/models.py:659 +#: core/models.py:667 msgid "is filterable" msgstr "可过滤" -#: core/models.py:660 +#: core/models.py:668 msgid "designates whether this attribute can be used for filtering or not" msgstr "指定该属性是否可用于筛选" -#: core/models.py:671 core/models.py:689 +#: core/models.py:679 core/models.py:697 #: core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "属性" -#: core/models.py:677 +#: core/models.py:685 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:688 +#: core/models.py:696 msgid "attribute of this value" msgstr "该值的属性" -#: core/models.py:696 +#: core/models.py:704 msgid "the specific product associated with this attribute's value" msgstr "与该属性值相关的特定产品" -#: core/models.py:702 +#: core/models.py:710 msgid "the specific value for this attribute" msgstr "该属性的具体值" -#: core/models.py:715 +#: core/models.py:723 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 +1705,39 @@ msgid "" msgstr "" "代表与系统中产品相关联的产品图片。该类用于管理产品图片,包括上传图片文件、将图片与特定产品关联以及确定图片显示顺序等功能。它还包括一个为图像提供替代文本的可访问性功能。" -#: core/models.py:726 +#: core/models.py:734 msgid "provide alternative text for the image for accessibility" msgstr "为图像提供替代文字,以便于访问" -#: core/models.py:727 +#: core/models.py:735 msgid "image alt text" msgstr "图片 alt 文本" -#: core/models.py:730 +#: core/models.py:738 msgid "upload the image file for this product" msgstr "上传该产品的图片文件" -#: core/models.py:731 core/models.py:756 +#: core/models.py:739 core/models.py:764 msgid "product image" msgstr "产品图片" -#: core/models.py:737 +#: core/models.py:745 msgid "determines the order in which images are displayed" msgstr "确定图像的显示顺序" -#: core/models.py:738 +#: core/models.py:746 msgid "display priority" msgstr "显示优先级" -#: core/models.py:743 +#: core/models.py:751 msgid "the product that this image represents" msgstr "该图片所代表的产品" -#: core/models.py:757 +#: core/models.py:765 msgid "product images" msgstr "产品图片" -#: core/models.py:762 +#: core/models.py:770 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 +1748,39 @@ msgid "" msgstr "" "代表有折扣的产品促销活动。该类用于定义和管理为产品提供百分比折扣的促销活动。该类包括用于设置折扣率、提供促销详情以及将其链接到适用产品的属性。它与产品目录集成,以确定促销活动中受影响的产品。" -#: core/models.py:774 +#: core/models.py:782 msgid "percentage discount for the selected products" msgstr "所选产品的折扣百分比" -#: core/models.py:775 +#: core/models.py:783 msgid "discount percentage" msgstr "折扣百分比" -#: core/models.py:780 +#: core/models.py:788 msgid "provide a unique name for this promotion" msgstr "为该促销活动提供一个独特的名称" -#: core/models.py:781 +#: core/models.py:789 msgid "promotion name" msgstr "推广名称" -#: core/models.py:787 +#: core/models.py:795 msgid "promotion description" msgstr "促销说明" -#: core/models.py:792 +#: core/models.py:800 msgid "select which products are included in this promotion" msgstr "选择促销活动包括哪些产品" -#: core/models.py:793 +#: core/models.py:801 msgid "included products" msgstr "包括产品" -#: core/models.py:797 +#: core/models.py:805 msgid "promotion" msgstr "促销活动" -#: core/models.py:808 +#: core/models.py:816 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 +1788,23 @@ msgid "" "operations for adding and removing multiple products at once." msgstr "代表用户用于存储和管理所需产品的愿望清单。该类提供管理产品集合的功能,支持添加和删除产品等操作,还支持同时添加和删除多个产品的操作。" -#: core/models.py:820 +#: core/models.py:828 msgid "products that the user has marked as wanted" msgstr "用户标记为想要的产品" -#: core/models.py:828 +#: core/models.py:836 msgid "user who owns this wishlist" msgstr "拥有此愿望清单的用户" -#: core/models.py:829 +#: core/models.py:837 msgid "wishlist owner" msgstr "心愿单所有者" -#: core/models.py:837 +#: core/models.py:845 msgid "wishlist" msgstr "愿望清单" -#: core/models.py:879 +#: core/models.py:887 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1803,19 +1815,19 @@ msgid "" msgstr "" "代表与产品相关的文档记录。该类用于存储与特定产品相关的文档信息,包括文件上传及其元数据。它包含处理文件类型和文档文件存储路径的方法和属性。它扩展了特定混合类的功能,并提供了额外的自定义功能。" -#: core/models.py:892 +#: core/models.py:900 msgid "documentary" msgstr "纪录片" -#: core/models.py:893 +#: core/models.py:901 msgid "documentaries" msgstr "纪录片" -#: core/models.py:903 +#: core/models.py:911 msgid "unresolved" msgstr "未解决" -#: core/models.py:908 +#: core/models.py:916 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1829,59 +1841,59 @@ msgstr "" "代表一个地址实体,其中包括位置详情以及与用户的关联。提供地理和地址数据存储功能,以及与地理编码服务集成的功能。该类旨在存储详细的地址信息,包括街道、城市、地区、国家和地理位置(经度和纬度)等组件。它支持与地理编码" " API 集成,可存储原始 API 响应,以便进一步处理或检查。该类还可以将地址与用户关联起来,方便个性化数据处理。" -#: core/models.py:923 +#: core/models.py:931 msgid "address line for the customer" msgstr "客户地址栏" -#: core/models.py:924 +#: core/models.py:932 msgid "address line" msgstr "地址栏" -#: core/models.py:926 +#: core/models.py:934 msgid "street" msgstr "街道" -#: core/models.py:927 +#: core/models.py:935 msgid "district" msgstr "地区" -#: core/models.py:928 +#: core/models.py:936 msgid "city" msgstr "城市" -#: core/models.py:929 +#: core/models.py:937 msgid "region" msgstr "地区" -#: core/models.py:930 +#: core/models.py:938 msgid "postal code" msgstr "邮政编码" -#: core/models.py:931 +#: core/models.py:939 msgid "country" msgstr "国家" -#: core/models.py:938 +#: core/models.py:946 msgid "geolocation point: (longitude, latitude)" msgstr "地理位置点(经度、纬度)" -#: core/models.py:941 +#: core/models.py:949 msgid "full JSON response from geocoder for this address" msgstr "地理编码器对此地址的完整 JSON 响应" -#: core/models.py:946 +#: core/models.py:954 msgid "stored JSON response from the geocoding service" msgstr "存储的来自地理编码服务的 JSON 响应" -#: core/models.py:954 +#: core/models.py:962 msgid "address" msgstr "地址" -#: core/models.py:955 +#: core/models.py:963 msgid "addresses" msgstr "地址" -#: core/models.py:967 +#: core/models.py:975 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 +1905,86 @@ msgstr "" "代表可用于折扣的促销代码,管理其有效期、折扣类型和应用。PromoCode " "类存储促销代码的详细信息,包括其唯一标识符、折扣属性(金额或百分比)、有效期、关联用户(如有)及其使用状态。该类包含验证促销代码并将其应用于订单的功能,同时确保符合约束条件。" -#: core/models.py:981 +#: core/models.py:989 msgid "unique code used by a user to redeem a discount" msgstr "用户用于兑换折扣的唯一代码" -#: core/models.py:982 +#: core/models.py:990 msgid "promo code identifier" msgstr "促销代码标识符" -#: core/models.py:989 +#: core/models.py:997 msgid "fixed discount amount applied if percent is not used" msgstr "如果不使用百分比,则使用固定折扣额" -#: core/models.py:990 +#: core/models.py:998 msgid "fixed discount amount" msgstr "固定折扣额" -#: core/models.py:996 +#: core/models.py:1004 msgid "percentage discount applied if fixed amount is not used" msgstr "未使用固定金额时适用的折扣百分比" -#: core/models.py:997 +#: core/models.py:1005 msgid "percentage discount" msgstr "折扣百分比" -#: core/models.py:1002 +#: core/models.py:1010 msgid "timestamp when the promocode expires" msgstr "促销代码过期的时间戳" -#: core/models.py:1003 +#: core/models.py:1011 msgid "end validity time" msgstr "结束有效时间" -#: core/models.py:1008 +#: core/models.py:1016 msgid "timestamp from which this promocode is valid" msgstr "该促销代码有效的时间戳" -#: core/models.py:1009 +#: core/models.py:1017 msgid "start validity time" msgstr "开始有效时间" -#: core/models.py:1014 +#: core/models.py:1022 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "使用促销代码的时间戳,如果尚未使用,则留空" -#: core/models.py:1015 +#: core/models.py:1023 msgid "usage timestamp" msgstr "使用时间戳" -#: core/models.py:1020 +#: core/models.py:1028 msgid "user assigned to this promocode if applicable" msgstr "分配给此促销代码的用户(如适用" -#: core/models.py:1021 +#: core/models.py:1029 msgid "assigned user" msgstr "指定用户" -#: core/models.py:1028 +#: core/models.py:1036 msgid "promo code" msgstr "促销代码" -#: core/models.py:1029 +#: core/models.py:1037 msgid "promo codes" msgstr "促销代码" -#: core/models.py:1044 +#: core/models.py:1052 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "只能定义一种折扣类型(金额或百分比),而不能同时定义两种类型或两者都不定义。" -#: core/models.py:1065 +#: core/models.py:1073 msgid "promocode already used" msgstr "促销代码已被使用" -#: core/models.py:1081 +#: core/models.py:1089 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "促销代码 {self.uuid} 的折扣类型无效!" -#: core/models.py:1090 +#: core/models.py:1098 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 +1995,144 @@ msgid "" msgstr "" "代表用户下达的订单。该类在应用程序中模拟订单,包括订单的各种属性,如账单和发货信息、状态、关联用户、通知和相关操作。订单可以有关联的产品,可以应用促销活动,设置地址,更新发货或账单详情。同样,该功能还支持在订单生命周期中管理产品。" -#: core/models.py:1107 +#: core/models.py:1115 msgid "the billing address used for this order" msgstr "该订单使用的账单地址" -#: core/models.py:1115 +#: core/models.py:1123 msgid "optional promo code applied to this order" msgstr "此订单可选择使用促销代码" -#: core/models.py:1116 +#: core/models.py:1124 msgid "applied promo code" msgstr "应用促销代码" -#: core/models.py:1124 +#: core/models.py:1132 msgid "the shipping address used for this order" msgstr "该订单使用的送货地址" -#: core/models.py:1125 +#: core/models.py:1133 msgid "shipping address" msgstr "送货地址" -#: core/models.py:1131 +#: core/models.py:1139 msgid "current status of the order in its lifecycle" msgstr "订单在其生命周期中的当前状态" -#: core/models.py:1132 +#: core/models.py:1140 msgid "order status" msgstr "订单状态" -#: core/models.py:1137 core/models.py:1618 +#: core/models.py:1145 core/models.py:1626 msgid "json structure of notifications to display to users" msgstr "向用户显示的通知的 JSON 结构,在管理用户界面中使用表格视图" -#: core/models.py:1143 +#: core/models.py:1151 msgid "json representation of order attributes for this order" msgstr "该订单属性的 JSON 表示形式" -#: core/models.py:1149 +#: core/models.py:1157 msgid "the user who placed the order" msgstr "下订单的用户" -#: core/models.py:1150 +#: core/models.py:1158 msgid "user" msgstr "用户" -#: core/models.py:1156 +#: core/models.py:1164 msgid "the timestamp when the order was finalized" msgstr "订单确定的时间戳" -#: core/models.py:1157 +#: core/models.py:1165 msgid "buy time" msgstr "购买时间" -#: core/models.py:1164 +#: core/models.py:1172 msgid "a human-readable identifier for the order" msgstr "订单的人工可读标识符" -#: core/models.py:1165 +#: core/models.py:1173 msgid "human readable id" msgstr "人类可读 ID" -#: core/models.py:1171 +#: core/models.py:1179 msgid "order" msgstr "订购" -#: core/models.py:1209 +#: core/models.py:1217 msgid "a user must have only one pending order at a time" msgstr "用户每次只能有一个挂单!" -#: core/models.py:1249 +#: core/models.py:1257 msgid "you cannot add products to an order that is not a pending one" msgstr "您不能向非待处理订单添加产品" -#: core/models.py:1254 +#: core/models.py:1262 msgid "you cannot add inactive products to order" msgstr "您不能在订单中添加非活动产品" -#: core/models.py:1271 +#: core/models.py:1279 msgid "you cannot add more products than available in stock" msgstr "添加的产品数量不能超过现有库存" -#: core/models.py:1293 core/models.py:1318 core/models.py:1326 +#: core/models.py:1301 core/models.py:1326 core/models.py:1334 msgid "you cannot remove products from an order that is not a pending one" msgstr "您不能从非待处理订单中删除产品" -#: core/models.py:1314 +#: core/models.py:1322 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "查询 <{query}> 时,{name} 不存在!" -#: core/models.py:1346 +#: core/models.py:1354 msgid "promocode does not exist" msgstr "促销代码不存在" -#: core/models.py:1352 +#: core/models.py:1360 msgid "you can only buy physical products with shipping address specified" msgstr "您只能购买指定送货地址的实物产品!" -#: core/models.py:1371 +#: core/models.py:1379 msgid "address does not exist" msgstr "地址不存在" -#: core/models.py:1392 core/models.py:1461 +#: core/models.py:1400 core/models.py:1469 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "您现在无法购买,请稍后再试。" -#: core/models.py:1395 core/models.py:1457 +#: core/models.py:1403 core/models.py:1465 msgid "invalid force value" msgstr "力值无效" -#: core/models.py:1401 core/models.py:1464 +#: core/models.py:1409 core/models.py:1472 msgid "you cannot purchase an empty order!" msgstr "您不能购买空单!" -#: core/models.py:1420 +#: core/models.py:1428 msgid "you cannot buy an order without a user" msgstr "没有用户就无法购买订单!" -#: core/models.py:1434 +#: core/models.py:1442 msgid "a user without a balance cannot buy with balance" msgstr "没有余额的用户不能使用余额购买!" -#: core/models.py:1439 +#: core/models.py:1447 msgid "insufficient funds to complete the order" msgstr "资金不足,无法完成订单" -#: core/models.py:1473 +#: core/models.py:1481 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "未经注册不能购买,请提供以下信息:客户姓名、客户电子邮件、客户电话号码" -#: core/models.py:1482 +#: core/models.py:1490 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "付款方式无效:来自 {available_payment_methods} 的 {payment_method} !" -#: core/models.py:1591 +#: core/models.py:1599 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2136,108 +2148,108 @@ msgstr "" "模型维护订单中产品的相关信息,包括购买价格、数量、产品属性和状态等详细信息。它为用户和管理员管理通知,并处理返回产品余额或添加反馈等操作。该模型还提供支持业务逻辑的方法和属性,如计算总价或为数字产品生成下载" " URL。该模型与订单和产品模型集成,并存储对它们的引用。" -#: core/models.py:1606 +#: core/models.py:1614 msgid "the price paid by the customer for this product at purchase time" msgstr "客户购买该产品时支付的价格" -#: core/models.py:1607 +#: core/models.py:1615 msgid "purchase price at order time" msgstr "订购时的购买价格" -#: core/models.py:1612 +#: core/models.py:1620 msgid "internal comments for admins about this ordered product" msgstr "管理员对该订购产品的内部评论" -#: core/models.py:1613 +#: core/models.py:1621 msgid "internal comments" msgstr "内部意见" -#: core/models.py:1619 +#: core/models.py:1627 msgid "user notifications" msgstr "用户通知" -#: core/models.py:1624 +#: core/models.py:1632 msgid "json representation of this item's attributes" msgstr "该项属性的 JSON 表示形式" -#: core/models.py:1625 +#: core/models.py:1633 msgid "ordered product attributes" msgstr "有序的产品属性" -#: core/models.py:1630 +#: core/models.py:1638 msgid "reference to the parent order that contains this product" msgstr "对包含该产品的父订单的引用" -#: core/models.py:1631 +#: core/models.py:1639 msgid "parent order" msgstr "父顺序" -#: core/models.py:1640 +#: core/models.py:1648 msgid "the specific product associated with this order line" msgstr "与该订单项目相关的具体产品" -#: core/models.py:1647 +#: core/models.py:1655 msgid "quantity of this specific product in the order" msgstr "订单中该特定产品的数量" -#: core/models.py:1648 +#: core/models.py:1656 msgid "product quantity" msgstr "产品数量" -#: core/models.py:1655 +#: core/models.py:1663 msgid "current status of this product in the order" msgstr "订单中该产品的当前状态" -#: core/models.py:1656 +#: core/models.py:1664 msgid "product line status" msgstr "产品系列状态" -#: core/models.py:1719 +#: core/models.py:1727 msgid "order product must have an order" msgstr "订单产品必须有相关的订单!" -#: core/models.py:1721 +#: core/models.py:1729 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "为反馈指定了错误的操作:{action}!" -#: core/models.py:1735 +#: core/models.py:1743 msgid "you cannot feedback an order which is not received" msgstr "您不能反馈未收到的订单" -#: core/models.py:1741 +#: core/models.py:1749 msgid "name" msgstr "名称" -#: core/models.py:1742 +#: core/models.py:1750 msgid "URL of the integration" msgstr "集成的 URL" -#: core/models.py:1743 +#: core/models.py:1751 msgid "authentication credentials" msgstr "认证证书" -#: core/models.py:1765 +#: core/models.py:1773 msgid "you can only have one default CRM provider" msgstr "只能有一个默认 CRM 提供商" -#: core/models.py:1775 +#: core/models.py:1783 msgid "CRM" msgstr "客户关系管理" -#: core/models.py:1776 +#: core/models.py:1784 msgid "CRMs" msgstr "客户关系管理" -#: core/models.py:1788 +#: core/models.py:1796 msgid "order CRM link" msgstr "订单的客户关系管理链接" -#: core/models.py:1789 +#: core/models.py:1797 msgid "orders CRM links" msgstr "订单的客户关系管理链接" -#: core/models.py:1794 +#: core/models.py:1802 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2250,15 +2262,15 @@ msgstr "" "类提供了管理和访问与订单产品相关的下载的功能。该类维护相关订单产品的信息、下载次数以及资产是否公开可见。当相关订单处于完成状态时,该类包含一个生成用于下载资产的" " URL 的方法。" -#: core/models.py:1808 +#: core/models.py:1816 msgid "download" msgstr "下载" -#: core/models.py:1809 +#: core/models.py:1817 msgid "downloads" msgstr "下载" -#: core/models.py:1823 +#: core/models.py:1831 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2268,28 +2280,28 @@ msgid "" msgstr "" "管理产品的用户反馈。该类用于捕获和存储用户对其购买的特定产品的反馈。它包含用于存储用户评论的属性、订单中相关产品的引用以及用户指定的评分。该类使用数据库字段对反馈数据进行有效建模和管理。" -#: core/models.py:1835 +#: core/models.py:1843 msgid "user-provided comments about their experience with the product" msgstr "用户提供的产品使用体验评论" -#: core/models.py:1836 +#: core/models.py:1844 msgid "feedback comments" msgstr "反馈意见" -#: core/models.py:1843 +#: core/models.py:1851 msgid "" "references the specific product in an order that this feedback is about" msgstr "引用该反馈意见涉及的订单中的具体产品" -#: core/models.py:1844 +#: core/models.py:1852 msgid "related order product" msgstr "相关订购产品" -#: core/models.py:1849 +#: core/models.py:1857 msgid "user-assigned rating for the product" msgstr "用户对产品的评分" -#: core/models.py:1850 +#: core/models.py:1858 msgid "product rating" msgstr "产品评级" @@ -2494,22 +2506,22 @@ msgstr "需要数据和超时" msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "超时值无效,必须介于 0 和 216000 秒之间" -#: core/utils/emailing.py:25 +#: core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME}| 联系我们" -#: core/utils/emailing.py:74 +#: core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME}| 订单确认" -#: core/utils/emailing.py:109 +#: core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | 订单已送达" -#: core/utils/emailing.py:197 +#: core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | 授予的促销代码" @@ -2713,7 +2725,7 @@ msgstr "" "处理反馈对象的视图集的表示。该类管理与反馈对象相关的操作,包括列出、筛选和检索详细信息。该视图集的目的是为不同的操作提供不同的序列化器,并对可访问的反馈对象实施基于权限的处理。它扩展了基本的" " `EvibesViewSet` 并使用 Django 的过滤系统来查询数据。" -#: core/viewsets.py:593 +#: core/viewsets.py:594 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2727,7 +2739,7 @@ msgstr "" "ViewSet。该类提供了检索、修改和管理订单对象的功能。它包括用于处理订单操作的各种端点,如添加或删除产品、为注册用户和未注册用户执行购买操作,以及检索当前已验证用户的待处理订单。ViewSet" " 根据正在执行的特定操作使用多个序列化器,并在与订单数据交互时执行相应的权限。" -#: core/viewsets.py:782 +#: core/viewsets.py:784 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2739,25 +2751,25 @@ msgstr "" "模型的自定义操作。它包括过滤、权限检查和根据请求的操作切换序列化器。此外,它还提供了一个详细的操作,用于处理有关 OrderProduct " "实例的反馈信息" -#: core/viewsets.py:833 +#: core/viewsets.py:835 msgid "Manages operations related to Product images in the application. " msgstr "管理应用程序中与产品图像相关的操作。" -#: core/viewsets.py:845 +#: core/viewsets.py:847 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "通过各种 API 操作管理 PromoCode 实例的检索和处理。" -#: core/viewsets.py:866 +#: core/viewsets.py:868 msgid "Represents a view set for managing promotions. " msgstr "代表用于管理促销活动的视图集。" -#: core/viewsets.py:878 +#: core/viewsets.py:880 msgid "Handles operations related to Stock data in the system." msgstr "处理系统中与库存数据有关的操作。" -#: core/viewsets.py:892 +#: core/viewsets.py:894 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -2770,7 +2782,7 @@ msgstr "" "用于管理愿望清单操作的 ViewSet。WishlistViewSet 提供了与用户愿望清单交互的端点,允许检索、修改和定制愿望清单中的产品。该 " "ViewSet 支持添加、删除和批量操作愿望清单产品等功能。此外,还集成了权限检查功能,以确保用户只能管理自己的愿望清单,除非获得明确的权限。" -#: core/viewsets.py:1007 +#: core/viewsets.py:1009 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -2781,12 +2793,12 @@ msgstr "" "该类为管理 \"地址 \"对象提供了视图集功能。AddressViewSet 类支持与地址实体相关的 CRUD 操作、过滤和自定义操作。它包括针对不同 " "HTTP 方法的专门行为、序列化器重载以及基于请求上下文的权限处理。" -#: core/viewsets.py:1074 +#: core/viewsets.py:1076 #, python-brace-format msgid "Geocoding error: {e}" msgstr "地理编码错误:{e}" -#: core/viewsets.py:1081 +#: core/viewsets.py:1083 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/management/commands/await_services.py b/core/management/commands/await_services.py index 1eff88df..de564423 100644 --- a/core/management/commands/await_services.py +++ b/core/management/commands/await_services.py @@ -1,6 +1,7 @@ import os import threading import time +from typing import Any import redis from django.core.management.base import BaseCommand @@ -11,10 +12,10 @@ from redis.exceptions import ConnectionError # noqa: A004 class Command(BaseCommand): - def handle(self, *args, **options): + def handle(self, *args: list[Any], **options: dict[Any, Any]) -> None: self.stdout.write("Waiting for services...") - def wait_for_db(): + def wait_for_db() -> None: db_up = False while not db_up: try: @@ -31,7 +32,7 @@ class Command(BaseCommand): time.sleep(1) self.stdout.write(self.style.SUCCESS("Database available!")) - def wait_for_redis(): + def wait_for_redis() -> None: redis_up = False while not redis_up: try: diff --git a/core/management/commands/check_translated.py b/core/management/commands/check_translated.py index 3137fe36..bfefc7b5 100644 --- a/core/management/commands/check_translated.py +++ b/core/management/commands/check_translated.py @@ -1,7 +1,9 @@ import contextlib import os import re +from argparse import ArgumentParser from tempfile import NamedTemporaryFile +from typing import Any import polib from django.apps import apps @@ -64,7 +66,7 @@ def load_po_sanitized(path: str) -> polib.POFile: class Command(BaseCommand): help = "Scan target-language .po files and report any placeholder mismatches, grouped by app." - def add_arguments(self, parser): + def add_arguments(self, parser: ArgumentParser) -> None: parser.add_argument( "-l", "--language", @@ -92,14 +94,14 @@ class Command(BaseCommand): help="Root path prefix to adjust file links", ) - def handle(self, *args, **options) -> None: - langs: list[str] = options["target_languages"] + def handle(self, *args: list[Any], **options: dict[str, str | list[str]]) -> None: + langs: list[str] = options.get("target_languages", []) # type: ignore [assignment] if "ALL" in langs: langs = list(dict(settings.LANGUAGES).keys()) apps_to_scan: set[str] = set(options["target_apps"]) if "ALL" in apps_to_scan: apps_to_scan = set(TRANSLATABLE_APPS) - root_path: str = options.get("root_path") or "/app/" + root_path: str = options.get("root_path") or "/app/" # type: ignore [assignment] configs = list(apps.get_app_configs()) # noinspection PyTypeChecker diff --git a/core/management/commands/clear_unwanted.py b/core/management/commands/clear_unwanted.py index 65d0d074..fbdad57e 100644 --- a/core/management/commands/clear_unwanted.py +++ b/core/management/commands/clear_unwanted.py @@ -1,4 +1,5 @@ from collections import defaultdict +from typing import Any from django.core.management.base import BaseCommand @@ -6,17 +7,16 @@ from core.models import Category, Product, Stock class Command(BaseCommand): - def handle(self, *args, **options): + def handle(self, *args: list[Any], **options: dict[Any, Any]) -> None: self.stdout.write(self.style.SUCCESS("Starting clearing unwanted data...")) # 1. Clean up duplicate Stock entries per product and vendor: # Group stocks by (product, vendor) stocks_by_group = defaultdict(list) for stock in Stock.objects.all().order_by("modified"): - key = (stock.product_id, stock.vendor) - stocks_by_group[key].append(stock) + stocks_by_group[stock.product_pk].append(stock) - stock_deletions = [] + stock_deletions: list[str] = [] for group in stocks_by_group.values(): if len(group) <= 1: continue @@ -32,20 +32,20 @@ class Command(BaseCommand): # Mark all stocks (except the designated one) for deletion. for s in group: - if s.id != record_to_keep.id: - stock_deletions.append(s.id) + if s.uuid != record_to_keep.uuid: + stock_deletions.append(str(s.uuid)) if stock_deletions: - Stock.objects.filter(id__in=stock_deletions).delete() + Stock.objects.filter(uuid__in=stock_deletions).delete() self.stdout.write(self.style.SUCCESS(f"Deleted {len(stock_deletions)} duplicate stock entries.")) # 2. Clean up duplicate Category entries based on name (case-insensitive) category_groups = defaultdict(list) for cat in Category.objects.all().order_by("modified"): - key = cat.name.lower() + key: str = cat.name.lower() category_groups[key].append(cat) - categories_to_delete = [] + categories_to_delete: list[str] = [] total_product_updates = 0 for cat_list in category_groups.values(): if len(cat_list) <= 1: @@ -59,13 +59,13 @@ class Command(BaseCommand): keep_category = max(cat_list, key=lambda c: c.modified) for duplicate in cat_list: - if duplicate.id == keep_category.id: + if duplicate.uuid == keep_category.uuid: continue total_product_updates += Product.objects.filter(category=duplicate).update(category=keep_category) - categories_to_delete.append(duplicate.id) + categories_to_delete.append(str(duplicate.uuid)) if categories_to_delete: - Category.objects.filter(id__in=categories_to_delete).delete() + Category.objects.filter(uuid__in=categories_to_delete).delete() self.stdout.write( self.style.SUCCESS( f"Replaced category for {total_product_updates} product(s) " @@ -74,7 +74,7 @@ class Command(BaseCommand): ) # 3. For Products without stocks: set is_active = False. - inactive_products = Product.objects.filter(stock__isnull=True) + inactive_products = Product.objects.filter(stocks__isnull=True) count_inactive = inactive_products.count() if count_inactive: inactive_products.update(is_active=False) diff --git a/core/management/commands/deepl_translate.py b/core/management/commands/deepl_translate.py index b7075ae2..16dde6e6 100644 --- a/core/management/commands/deepl_translate.py +++ b/core/management/commands/deepl_translate.py @@ -1,13 +1,15 @@ import os import re +from argparse import ArgumentParser from tempfile import NamedTemporaryFile +from typing import Any import polib import requests from django.apps import apps from django.core.management.base import BaseCommand, CommandError -from core.management.commands import RootDirectory, DEEPL_TARGET_LANGUAGES_MAPPING, TRANSLATABLE_APPS +from core.management.commands import DEEPL_TARGET_LANGUAGES_MAPPING, TRANSLATABLE_APPS, RootDirectory # Patterns to identify placeholders PLACEHOLDER_REGEXES = [ @@ -23,7 +25,7 @@ def placeholderize(text: str) -> tuple[str, list[str]]: """ placeholders: list[str] = [] - def _repl(match: re.Match) -> str: + def _repl(match: re.Match) -> str: # type: ignore [type-arg] idx = len(placeholders) placeholders.append(match.group(0)) return f"__PH_{idx}__" @@ -77,7 +79,7 @@ def load_po_sanitized(path: str) -> polib.POFile | None: class Command(BaseCommand): help = "Merge msgid/msgstr from en_GB PO into target-language POs via DeepL, preserving placeholders." - def add_arguments(self, parser): + def add_arguments(self, parser: ArgumentParser) -> None: parser.add_argument( "-l", "--language", @@ -97,10 +99,10 @@ class Command(BaseCommand): help="App label for translation, e.g. core, payments. Use ALL to translate all apps.", ) - def handle(self, *args, **options) -> None: - target_langs = options["target_languages"] + def handle(self, *args: list[Any], **options: dict[Any, Any]) -> None: + target_langs: list[str] = options["target_languages"] # type: ignore [assignment] if "ALL" in target_langs: - target_langs = DEEPL_TARGET_LANGUAGES_MAPPING.keys() + target_langs = DEEPL_TARGET_LANGUAGES_MAPPING.keys() # type: ignore [assignment] target_apps = set(options["target_apps"]) if "ALL" in target_apps: target_apps = { @@ -152,9 +154,9 @@ class Command(BaseCommand): default = e.msgid if readline: - def hook(): - readline.insert_text(default) # noqa: B023 - readline.redisplay() + def hook() -> None: + readline.insert_text(default) # type: ignore [attr-defined] # noqa: B023 + readline.redisplay() # type: ignore [attr-defined] readline.set_pre_input_hook(hook) # type: ignore [attr-defined] diff --git a/core/management/commands/delete_never_ordered_products.py b/core/management/commands/delete_never_ordered_products.py index ce15bf30..e3d63c6b 100644 --- a/core/management/commands/delete_never_ordered_products.py +++ b/core/management/commands/delete_never_ordered_products.py @@ -1,3 +1,6 @@ +from argparse import ArgumentParser +from typing import Any + from django.core.management.base import BaseCommand from core.models import AttributeValue, Product, ProductImage @@ -6,7 +9,7 @@ from core.models import AttributeValue, Product, ProductImage class Command(BaseCommand): help = "Delete Product rows with no OrderProduct, in batches" - def add_arguments(self, parser): + def add_arguments(self, parser: ArgumentParser): parser.add_argument( "-s", "--size", @@ -15,8 +18,8 @@ class Command(BaseCommand): help="Chunk size to delete", ) - def handle(self, *args, **options): - size = options["size"] + def handle(self, *args: list[Any], **options: dict[Any, Any]) -> None: + size: int = options["size"] # type: ignore [assignment] while True: batch_ids = list(Product.objects.filter(orderproduct__isnull=True).values_list("pk", flat=True)[:size]) if not batch_ids: diff --git a/core/management/commands/delete_products_by_description.py b/core/management/commands/delete_products_by_description.py index ffa66f54..51ad1f5b 100644 --- a/core/management/commands/delete_products_by_description.py +++ b/core/management/commands/delete_products_by_description.py @@ -1,3 +1,6 @@ +from argparse import ArgumentParser +from typing import Any + from django.core.management.base import BaseCommand from core.models import AttributeValue, Product, ProductImage @@ -6,7 +9,7 @@ from core.models import AttributeValue, Product, ProductImage class Command(BaseCommand): help = "Delete Product rows with special description, in batches" - def add_arguments(self, parser): + def add_arguments(self, parser: ArgumentParser) -> None: parser.add_argument( "-s", "--size", @@ -15,8 +18,8 @@ class Command(BaseCommand): help="Chunk size to delete", ) - def handle(self, *args, **options): - size = options["size"] + def handle(self, *args: list[Any], **options: dict[Any, Any]) -> None: + size: int = options["size"] # type: ignore [assignment] while True: batch_ids = list( Product.objects.filter(description__iexact="EVIBES_DELETED_PRODUCT").values_list("pk", flat=True)[:size] diff --git a/core/management/commands/fetch_products.py b/core/management/commands/fetch_products.py index 3fff1b63..4df69765 100644 --- a/core/management/commands/fetch_products.py +++ b/core/management/commands/fetch_products.py @@ -1,12 +1,14 @@ +from typing import Any + from django.core.management.base import BaseCommand from core.tasks import update_products_task class Command(BaseCommand): - def handle(self, *args, **options): + def handle(self, *args: list[Any], **options: dict[Any, Any]) -> None: self.stdout.write(self.style.SUCCESS("Starting fetching products task in worker container...")) - update_products_task.delay() + update_products_task.delay() # type: ignore [attr-defined] self.stdout.write(self.style.SUCCESS("Started fetching products task in worker container without errors!")) diff --git a/core/management/commands/fix_prices.py b/core/management/commands/fix_prices.py index 6a077690..420c6148 100644 --- a/core/management/commands/fix_prices.py +++ b/core/management/commands/fix_prices.py @@ -1,4 +1,5 @@ import logging +from typing import Any from django.core.management.base import BaseCommand @@ -9,7 +10,7 @@ logger = logging.getLogger("django") class Command(BaseCommand): - def handle(self, *args, **options): + def handle(self, *args: list[Any], **options: dict[Any, Any]) -> None: self.stdout.write(self.style.SUCCESS("Starting fixing stocks' prices...")) for product in Product.objects.filter(stocks__isnull=False): diff --git a/core/management/commands/rebuild_slugs.py b/core/management/commands/rebuild_slugs.py index ba653c9f..5db3283c 100644 --- a/core/management/commands/rebuild_slugs.py +++ b/core/management/commands/rebuild_slugs.py @@ -1,5 +1,8 @@ +from typing import Any + from django.core.management.base import BaseCommand from django.db import transaction +from django.db.models import QuerySet from django.utils.crypto import get_random_string from core.models import Brand, Category, Product @@ -9,7 +12,7 @@ from core.models import Brand, Category, Product class Command(BaseCommand): help = "Rebuild slug field for all slugified instances" - def reset_em(self, queryset): + def reset_em(self, queryset: QuerySet[Any]) -> None: total = queryset.count() self.stdout.write(f"Starting slug rebuilding for {total} {queryset.model._meta.verbose_name_plural}") for idx, instance in enumerate(queryset.iterator(), start=1): @@ -35,7 +38,7 @@ class Command(BaseCommand): ) ) - def handle(self, *args, **options): + def handle(self, *args: list[Any], **options: dict[Any, Any]) -> None: for queryset in [ Brand.objects.all(), Category.objects.all(), diff --git a/core/management/commands/set_default_caches.py b/core/management/commands/set_default_caches.py index 40722e6e..f1ea6850 100644 --- a/core/management/commands/set_default_caches.py +++ b/core/management/commands/set_default_caches.py @@ -1,10 +1,12 @@ +from typing import Any + from django.core.management.base import BaseCommand from core.utils.caching import set_default_cache class Command(BaseCommand): - def handle(self, *args, **options): + def handle(self, *args: list[Any], **options: dict[Any, Any]) -> None: self.stdout.write(self.style.SUCCESS("Started setting default cache values...")) set_default_cache() diff --git a/core/migrations/0044_vendor_last_processing_response.py b/core/migrations/0044_vendor_last_processing_response.py new file mode 100644 index 00000000..0dd24216 --- /dev/null +++ b/core/migrations/0044_vendor_last_processing_response.py @@ -0,0 +1,24 @@ +# Generated by Django 5.2 on 2025-10-13 12:15 + +import core.utils +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0043_attribute_is_filterable_and_more"), + ] + + operations = [ + migrations.AddField( + model_name="vendor", + name="last_processing_response", + field=models.FileField( + blank=True, + help_text="vendor's last processing response", + null=True, + upload_to=core.utils.get_vendor_name_as_path, + verbose_name="response file", + ), + ), + ] diff --git a/core/models.py b/core/models.py index 0bfa8f64..1ab647c6 100644 --- a/core/models.py +++ b/core/models.py @@ -54,6 +54,7 @@ from core.utils import ( generate_human_readable_token, get_product_uuid_as_path, get_random_code, + get_vendor_name_as_path, ) from core.utils.db import TweakedAutoSlugField, unicode_slugify_function from core.utils.lists import FAILED_STATUSES @@ -65,7 +66,7 @@ from payments.models import Transaction logger = logging.getLogger("django") -class AttributeGroup(ExportModelOperationsMixin("attribute_group"), NiceModel): # type: ignore [misc, django-manager-missing] +class AttributeGroup(ExportModelOperationsMixin("attribute_group"), NiceModel): # type: ignore [misc] __doc__ = _( # type: ignore "Represents a group of attributes, which can be hierarchical." " This class is used to manage and organize attribute groups." @@ -93,7 +94,7 @@ class AttributeGroup(ExportModelOperationsMixin("attribute_group"), NiceModel): unique=True, ) - def __str__(self): + def __str__(self) -> str: return self.name class Meta: @@ -101,7 +102,7 @@ class AttributeGroup(ExportModelOperationsMixin("attribute_group"), NiceModel): verbose_name_plural = _("attribute groups") -class Vendor(ExportModelOperationsMixin("vendor"), NiceModel): # type: ignore [misc, django-manager-missing] +class Vendor(ExportModelOperationsMixin("vendor"), NiceModel): # type: ignore [misc] __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." @@ -135,17 +136,24 @@ class Vendor(ExportModelOperationsMixin("vendor"), NiceModel): # type: ignore [ ) users = ManyToManyField(to="vibes_auth.User", related_name="vendors", blank=True) b2b_auth_token = CharField(default=generate_human_readable_token, max_length=20, null=True, blank=True) + last_processing_response = FileField( + upload_to=get_vendor_name_as_path, + blank=True, + null=True, + verbose_name=_("response file"), + help_text=_("vendor's last processing response"), + ) def __str__(self) -> str: return self.name - def save( + def save( # type: ignore [override] self, *, - force_insert=False, - force_update=False, - using=None, - update_fields=None, + force_insert: bool = False, + force_update: bool = False, + using: str | None = None, + update_fields: list[str] | tuple[str, ...] | None = None, update_modified: bool = True, ) -> None: users = self.users.filter(is_active=True) @@ -172,7 +180,7 @@ class Vendor(ExportModelOperationsMixin("vendor"), NiceModel): # type: ignore [ ] -class ProductTag(ExportModelOperationsMixin("product_tag"), NiceModel): # type: ignore [misc, django-manager-missing] +class ProductTag(ExportModelOperationsMixin("product_tag"), NiceModel): # type: ignore [misc] __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" @@ -204,7 +212,7 @@ class ProductTag(ExportModelOperationsMixin("product_tag"), NiceModel): # type: verbose_name_plural = _("product tags") -class CategoryTag(ExportModelOperationsMixin("category_tag"), NiceModel): # type: ignore [misc, django-manager-missing] +class CategoryTag(ExportModelOperationsMixin("category_tag"), NiceModel): # type: ignore [misc] __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." @@ -327,7 +335,7 @@ class Category(ExportModelOperationsMixin("category"), NiceModel, MPTTModel): # ordering = ["tree_id", "lft"] -class Brand(ExportModelOperationsMixin("brand"), NiceModel): # type: ignore [misc, django-manager-missing] +class Brand(ExportModelOperationsMixin("brand"), NiceModel): # type: ignore [misc] __doc__ = _( # type: ignore "Represents a Brand object in the system. " "This class handles information and attributes related to a brand, including its name, logos, " @@ -397,7 +405,7 @@ class Brand(ExportModelOperationsMixin("brand"), NiceModel): # type: ignore [mi verbose_name_plural = _("brands") -class Stock(ExportModelOperationsMixin("stock"), NiceModel): # type: ignore [misc, django-manager-missing] +class Stock(ExportModelOperationsMixin("stock"), NiceModel): # type: ignore [misc] __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, " @@ -460,7 +468,7 @@ class Stock(ExportModelOperationsMixin("stock"), NiceModel): # type: ignore [mi verbose_name_plural = _("stock entries") -class Product(ExportModelOperationsMixin("product"), NiceModel): # type: ignore [misc, django-manager-missing] +class Product(ExportModelOperationsMixin("product"), NiceModel): # type: ignore [misc] __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." @@ -553,21 +561,21 @@ class Product(ExportModelOperationsMixin("product"), NiceModel): # type: ignore return self.name @property - def rating(self): + def rating(self) -> float: cache_key = f"product_rating_{self.pk}" rating = cache.get(cache_key) 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, 86400) - return round(rating, 2) + return float(round(rating, 2)) @rating.setter - def rating(self, value): + def rating(self, value: float): self.__dict__["rating"] = value @property - def feedbacks_count(self): + def feedbacks_count(self) -> int: cache_key = f"product_feedbacks_count_{self.pk}" feedbacks_count = cache.get(cache_key) if feedbacks_count is None: @@ -608,7 +616,7 @@ class Product(ExportModelOperationsMixin("product"), NiceModel): # type: ignore self.__dict__["personal_orders_only"] = value -class Attribute(ExportModelOperationsMixin("attribute"), NiceModel): # type: ignore [misc, django-manager-missing] +class Attribute(ExportModelOperationsMixin("attribute"), NiceModel): # type: ignore [misc] __doc__ = _( # type: ignore "Represents an attribute in the system." " This class is used to define and manage attributes," @@ -672,7 +680,7 @@ class Attribute(ExportModelOperationsMixin("attribute"), NiceModel): # type: ig verbose_name_plural = _("attributes") -class AttributeValue(ExportModelOperationsMixin("attribute_value"), NiceModel): # type: ignore [misc, django-manager-missing] +class AttributeValue(ExportModelOperationsMixin("attribute_value"), NiceModel): # type: ignore [misc] __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 " @@ -710,7 +718,7 @@ class AttributeValue(ExportModelOperationsMixin("attribute_value"), NiceModel): verbose_name_plural = _("attribute values") -class ProductImage(ExportModelOperationsMixin("product_image"), NiceModel): # type: ignore [misc, django-manager-missing] +class ProductImage(ExportModelOperationsMixin("product_image"), NiceModel): # type: ignore [misc] __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 " @@ -757,7 +765,7 @@ class ProductImage(ExportModelOperationsMixin("product_image"), NiceModel): # t verbose_name_plural = _("product images") -class Promotion(ExportModelOperationsMixin("promotion"), NiceModel): # type: ignore [misc, django-manager-missing] +class Promotion(ExportModelOperationsMixin("promotion"), NiceModel): # type: ignore [misc] __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 " @@ -803,7 +811,7 @@ class Promotion(ExportModelOperationsMixin("promotion"), NiceModel): # type: ig return str(self.id) -class Wishlist(ExportModelOperationsMixin("wishlist"), NiceModel): # type: ignore [misc, django-manager-missing] +class Wishlist(ExportModelOperationsMixin("wishlist"), NiceModel): # type: ignore [misc] __doc__ = _( # type: ignore "Represents a user's wishlist for storing and managing desired products. " "The class provides functionality to manage a collection of products, " @@ -874,7 +882,7 @@ class Wishlist(ExportModelOperationsMixin("wishlist"), NiceModel): # type: igno return self -class Documentary(ExportModelOperationsMixin("attribute_group"), NiceModel): # type: ignore [misc, django-manager-missing] +class Documentary(ExportModelOperationsMixin("attribute_group"), NiceModel): # type: ignore [misc] __doc__ = _( # type: ignore "Represents a documentary record tied to a product. " "This class is used to store information about documentaries related to specific " @@ -903,7 +911,7 @@ class Documentary(ExportModelOperationsMixin("attribute_group"), NiceModel): # return self.document.name.split(".")[-1] or _("unresolved") -class Address(ExportModelOperationsMixin("address"), NiceModel): # type: ignore [misc, django-manager-missing] +class Address(ExportModelOperationsMixin("address"), NiceModel): # type: ignore [misc] __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 " @@ -962,7 +970,7 @@ class Address(ExportModelOperationsMixin("address"), NiceModel): # type: ignore return f"{base} for {self.user.email}" if self.user else base -class PromoCode(ExportModelOperationsMixin("promocode"), NiceModel): # type: ignore [misc, django-manager-missing] +class PromoCode(ExportModelOperationsMixin("promocode"), NiceModel): # type: ignore [misc] __doc__ = _( # type: ignore "Represents a promotional code that can be used for discounts, managing its validity, " "type of discount, and application. " @@ -1085,7 +1093,7 @@ class PromoCode(ExportModelOperationsMixin("promocode"), NiceModel): # type: ig return promo_amount -class Order(ExportModelOperationsMixin("order"), NiceModel): # type: ignore [misc, django-manager-missing] +class Order(ExportModelOperationsMixin("order"), NiceModel): # type: ignore [misc] __doc__ = _( # type: ignore "Represents an order placed by a user." " This class models an order within the application," @@ -1172,7 +1180,7 @@ class Order(ExportModelOperationsMixin("order"), NiceModel): # type: ignore [mi verbose_name_plural = _("orders") def __str__(self) -> str: - return f"#{self.pk} for {self.user.email if self.user else 'unregistered user'}" + return f"#{self.human_readable_id} for {self.user.email if self.user else 'unregistered user'}" @property def is_business(self) -> bool: @@ -1586,7 +1594,7 @@ class Order(ExportModelOperationsMixin("order"), NiceModel): # type: ignore [mi return None -class OrderProduct(ExportModelOperationsMixin("order_product"), NiceModel): # type: ignore [misc, django-manager-missing] +class OrderProduct(ExportModelOperationsMixin("order_product"), NiceModel): # type: ignore [misc] __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, " @@ -1737,7 +1745,7 @@ class OrderProduct(ExportModelOperationsMixin("order_product"), NiceModel): # t return None -class CustomerRelationshipManagementProvider(ExportModelOperationsMixin("crm_provider"), NiceModel): # type: ignore [misc, django-manager-missing] +class CustomerRelationshipManagementProvider(ExportModelOperationsMixin("crm_provider"), NiceModel): # type: ignore [misc] 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")) @@ -1789,7 +1797,7 @@ class OrderCrmLink(ExportModelOperationsMixin("order_crm_link"), NiceModel): # verbose_name_plural = _("orders CRM links") -class DigitalAssetDownload(ExportModelOperationsMixin("attribute_group"), NiceModel): # type: ignore [misc, django-manager-missing] +class DigitalAssetDownload(ExportModelOperationsMixin("attribute_group"), NiceModel): # type: ignore [misc] __doc__ = _( # type: ignore "Represents the downloading functionality for digital assets associated with orders. " "The DigitalAssetDownload class provides the ability to manage and access " @@ -1818,7 +1826,7 @@ class DigitalAssetDownload(ExportModelOperationsMixin("attribute_group"), NiceMo ) -class Feedback(ExportModelOperationsMixin("feedback"), NiceModel): # type: ignore [misc, django-manager-missing] +class Feedback(ExportModelOperationsMixin("feedback"), NiceModel): # type: ignore [misc] __doc__ = _( # type: ignore "Manages user feedback for products. " "This class is designed to capture and store user feedback for specific products " diff --git a/core/serializers/simple.py b/core/serializers/simple.py index 2358fb5c..d9b4f157 100644 --- a/core/serializers/simple.py +++ b/core/serializers/simple.py @@ -26,7 +26,7 @@ from core.models import ( from core.serializers.utility import AddressSerializer -class AttributeGroupSimpleSerializer(ModelSerializer): +class AttributeGroupSimpleSerializer(ModelSerializer): # type: ignore [type-arg] parent = PrimaryKeyRelatedField(read_only=True) # type: ignore [assignment, var-annotated] children = PrimaryKeyRelatedField(many=True, read_only=True) # type: ignore [assignment, var-annotated] @@ -40,7 +40,7 @@ class AttributeGroupSimpleSerializer(ModelSerializer): ] -class CategorySimpleSerializer(ModelSerializer): +class CategorySimpleSerializer(ModelSerializer): # type: ignore [type-arg] children = SerializerMethodField() image = SerializerMethodField() @@ -56,10 +56,10 @@ class CategorySimpleSerializer(ModelSerializer): def get_image(self, obj: Category) -> str | None: with suppress(ValueError): - return obj.image.url + return str(obj.image.url) return None - def get_children(self, obj) -> Collection[Any]: + def get_children(self, obj: Category) -> Collection[Any]: request = self.context.get("request") if request is not None and request.user.has_perm("view_category"): children = obj.children.all() @@ -69,7 +69,7 @@ class CategorySimpleSerializer(ModelSerializer): return CategorySimpleSerializer(children, many=True, context=self.context).data if obj.children.exists() else [] -class BrandSimpleSerializer(ModelSerializer): +class BrandSimpleSerializer(ModelSerializer): # type: ignore [type-arg] small_logo = SerializerMethodField() big_logo = SerializerMethodField() @@ -84,16 +84,16 @@ class BrandSimpleSerializer(ModelSerializer): def get_small_logo(self, obj: Brand) -> str | None: with suppress(ValueError): - return obj.small_logo.url + return str(obj.small_logo.url) return None def get_big_logo(self, obj: Brand) -> str | None: with suppress(ValueError): - return obj.big_logo.url + return str(obj.big_logo.url) return None -class ProductTagSimpleSerializer(ModelSerializer): +class ProductTagSimpleSerializer(ModelSerializer): # type: ignore [type-arg] class Meta: model = ProductTag fields = [ @@ -103,8 +103,8 @@ class ProductTagSimpleSerializer(ModelSerializer): ] -class ProductImageSimpleSerializer(ModelSerializer): - product: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True) +class ProductImageSimpleSerializer(ModelSerializer): # type: ignore [type-arg] + product: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True) # type: ignore [type-arg] class Meta: model = ProductImage @@ -117,7 +117,7 @@ class ProductImageSimpleSerializer(ModelSerializer): ] -class AttributeSimpleSerializer(ModelSerializer): +class AttributeSimpleSerializer(ModelSerializer): # type: ignore [type-arg] group = AttributeGroupSimpleSerializer(read_only=True) class Meta: @@ -130,9 +130,9 @@ class AttributeSimpleSerializer(ModelSerializer): ] -class AttributeValueSimpleSerializer(ModelSerializer): +class AttributeValueSimpleSerializer(ModelSerializer): # type: ignore [type-arg] attribute = AttributeSimpleSerializer(read_only=True) - product: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True) + product: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True) # type: ignore [type-arg] class Meta: model = AttributeValue @@ -144,7 +144,7 @@ class AttributeValueSimpleSerializer(ModelSerializer): ] -class ProductSimpleSerializer(ModelSerializer): +class ProductSimpleSerializer(ModelSerializer): # type: ignore [type-arg] brand = BrandSimpleSerializer(read_only=True) category = CategorySimpleSerializer(read_only=True) tags = ProductTagSimpleSerializer(many=True, read_only=True) @@ -196,7 +196,7 @@ class ProductSimpleSerializer(ModelSerializer): return obj.personal_orders_only -class VendorSimpleSerializer(ModelSerializer): +class VendorSimpleSerializer(ModelSerializer): # type: ignore [type-arg] class Meta: model = Vendor fields = [ @@ -205,7 +205,7 @@ class VendorSimpleSerializer(ModelSerializer): ] -class StockSimpleSerializer(ModelSerializer): +class StockSimpleSerializer(ModelSerializer): # type: ignore [type-arg] vendor = VendorSimpleSerializer(read_only=True) product = ProductSimpleSerializer(read_only=True) @@ -222,7 +222,7 @@ class StockSimpleSerializer(ModelSerializer): ] -class PromoCodeSimpleSerializer(ModelSerializer): +class PromoCodeSimpleSerializer(ModelSerializer): # type: ignore [type-arg] class Meta: model = PromoCode fields = [ @@ -231,7 +231,7 @@ class PromoCodeSimpleSerializer(ModelSerializer): ] -class PromotionSimpleSerializer(ModelSerializer): +class PromotionSimpleSerializer(ModelSerializer): # type: ignore [type-arg] products = ProductSimpleSerializer(many=True, read_only=True) class Meta: @@ -244,8 +244,8 @@ class PromotionSimpleSerializer(ModelSerializer): ] -class WishlistSimpleSerializer(ModelSerializer): - user: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True) +class WishlistSimpleSerializer(ModelSerializer): # type: ignore [type-arg] + user: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True) # type: ignore [type-arg] products = ProductSimpleSerializer(many=True, read_only=True) class Meta: @@ -257,8 +257,8 @@ class WishlistSimpleSerializer(ModelSerializer): ] -class FeedbackSimpleSerializer(ModelSerializer): - order_product: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True) +class FeedbackSimpleSerializer(ModelSerializer): # type: ignore [type-arg] + order_product: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True) # type: ignore [type-arg] class Meta: model = Feedback @@ -269,7 +269,7 @@ class FeedbackSimpleSerializer(ModelSerializer): ] -class OrderProductSimpleSerializer(ModelSerializer): +class OrderProductSimpleSerializer(ModelSerializer): # type: ignore [type-arg] product = ProductSimpleSerializer(read_only=True) class Meta: @@ -283,8 +283,8 @@ class OrderProductSimpleSerializer(ModelSerializer): ] -class OrderSimpleSerializer(ModelSerializer): - user: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True) +class OrderSimpleSerializer(ModelSerializer): # type: ignore [type-arg] + user: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True) # type: ignore [type-arg] promo_code = PromoCodeSimpleSerializer(read_only=True) order_products = OrderProductSimpleSerializer(many=True, read_only=True) billing_address = AddressSerializer(read_only=True, required=False) diff --git a/core/serializers/utility.py b/core/serializers/utility.py index ec855c61..09f4ac20 100644 --- a/core/serializers/utility.py +++ b/core/serializers/utility.py @@ -1,3 +1,5 @@ +from typing import Any + from django.utils.translation import gettext_lazy as _ from rest_framework.exceptions import ValidationError from rest_framework.fields import ( @@ -16,19 +18,19 @@ from rest_framework.serializers import ListSerializer, ModelSerializer, Serializ from core.models import Address -class AddressAutocompleteInputSerializer(Serializer): +class AddressAutocompleteInputSerializer(Serializer): # type: ignore [type-arg] q = CharField(required=True) limit = IntegerField(required=False, min_value=1, max_value=10, default=5) -class AddressSuggestionSerializer(Serializer): +class AddressSuggestionSerializer(Serializer): # type: ignore [type-arg] display_name = CharField() lat = FloatField() lon = FloatField() address = DictField(child=CharField()) -class AddressSerializer(ModelSerializer): +class AddressSerializer(ModelSerializer): # type: ignore [type-arg] latitude = FloatField(source="location.y", read_only=True) longitude = FloatField(source="location.x", read_only=True) @@ -57,7 +59,7 @@ class AddressSerializer(ModelSerializer): ] -class AddressCreateSerializer(ModelSerializer): +class AddressCreateSerializer(ModelSerializer): # type: ignore [type-arg] raw_data = CharField( write_only=True, max_length=512, @@ -69,31 +71,32 @@ class AddressCreateSerializer(ModelSerializer): model = Address fields = ["raw_data", "address_line_1", "address_line_2"] - def create(self, validated_data): + def create(self, validated_data: dict[str, Any]) -> Address: raw = validated_data.pop("raw_data") user = None if self.context["request"].user.is_authenticated: user = self.context["request"].user - return Address.objects.create(raw_data=raw, user=user, **validated_data) + return Address.objects.create(raw_data=raw, user=user, **validated_data) # type: ignore [no-untyped-call] -class DoFeedbackSerializer(Serializer): +class DoFeedbackSerializer(Serializer): # type: ignore [type-arg] comment = CharField(required=True) rating = IntegerField(min_value=1, max_value=10, default=10) action = CharField(default="add") - def validate(self, data): + def validate(self, data: dict[str, Any]) -> dict[str, Any]: if data["action"] == "add" and not all([data["comment"], data["rating"]]): raise ValidationError(_("you must provide a comment, rating, and order product uuid to add feedback.")) + return data -class CacheOperatorSerializer(Serializer): +class CacheOperatorSerializer(Serializer): # type: ignore [type-arg] key = CharField(required=True) data = JSONField(required=False) # type: ignore [assignment] timeout = IntegerField(required=False) -class ContactUsSerializer(Serializer): +class ContactUsSerializer(Serializer): # type: ignore [type-arg] email = CharField(required=True) name = CharField(required=True) subject = CharField(required=True) @@ -101,14 +104,14 @@ class ContactUsSerializer(Serializer): message = CharField(required=True) -class LanguageSerializer(Serializer): +class LanguageSerializer(Serializer): # type: ignore [type-arg] code = CharField(required=True) name = CharField(required=True) flag = CharField() -class RecursiveField(Field): - def to_representation(self, value): +class RecursiveField(Field): # type: ignore [type-arg] + def to_representation(self, value: Any) -> Any: parent = self.parent if isinstance(parent, ListSerializer): parent = parent.parent @@ -116,45 +119,45 @@ class RecursiveField(Field): serializer_class = parent.__class__ return serializer_class(value, context=self.context).data - def to_internal_value(self, data): + def to_internal_value(self, data: Any) -> Any: return data -class AddOrderProductSerializer(Serializer): +class AddOrderProductSerializer(Serializer): # type: ignore [type-arg] product_uuid = CharField(required=True) attributes = ListField(required=False, child=DictField(), default=list) -class BulkAddOrderProductsSerializer(Serializer): +class BulkAddOrderProductsSerializer(Serializer): # type: ignore [type-arg] products = ListField(child=AddOrderProductSerializer(), required=True) -class RemoveOrderProductSerializer(Serializer): +class RemoveOrderProductSerializer(Serializer): # type: ignore [type-arg] product_uuid = CharField(required=True) attributes = JSONField(required=False, default=dict) -class BulkRemoveOrderProductsSerializer(Serializer): +class BulkRemoveOrderProductsSerializer(Serializer): # type: ignore [type-arg] products = ListField(child=RemoveOrderProductSerializer(), required=True) -class AddWishlistProductSerializer(Serializer): +class AddWishlistProductSerializer(Serializer): # type: ignore [type-arg] product_uuid = CharField(required=True) -class RemoveWishlistProductSerializer(Serializer): +class RemoveWishlistProductSerializer(Serializer): # type: ignore [type-arg] product_uuid = CharField(required=True) -class BulkAddWishlistProductSerializer(Serializer): +class BulkAddWishlistProductSerializer(Serializer): # type: ignore [type-arg] product_uuids = ListField(child=CharField(required=True), allow_empty=False, max_length=64) -class BulkRemoveWishlistProductSerializer(Serializer): +class BulkRemoveWishlistProductSerializer(Serializer): # type: ignore [type-arg] product_uuids = ListField(child=CharField(required=True), allow_empty=False, max_length=64) -class BuyOrderSerializer(Serializer): +class BuyOrderSerializer(Serializer): # type: ignore [type-arg] force_balance = BooleanField(required=False, default=False) force_payment = BooleanField(required=False, default=False) promocode_uuid = CharField(required=False) @@ -163,7 +166,7 @@ class BuyOrderSerializer(Serializer): chosen_products = AddOrderProductSerializer(many=True, required=False) -class BuyUnregisteredOrderSerializer(Serializer): +class BuyUnregisteredOrderSerializer(Serializer): # type: ignore [type-arg] products = AddOrderProductSerializer(many=True, required=True) promocode_uuid = UUIDField(required=False) customer_name = CharField(required=True) @@ -174,7 +177,7 @@ class BuyUnregisteredOrderSerializer(Serializer): payment_method = CharField(required=True) -class BuyAsBusinessOrderSerializer(Serializer): +class BuyAsBusinessOrderSerializer(Serializer): # type: ignore [type-arg] products = AddOrderProductSerializer(many=True, required=True) business_identificator = CharField(required=True) promocode_uuid = UUIDField(required=False) diff --git a/core/signals.py b/core/signals.py index e9f5b9e5..a6486047 100644 --- a/core/signals.py +++ b/core/signals.py @@ -1,6 +1,7 @@ import logging from contextlib import suppress from datetime import timedelta +from typing import Any from django.db import IntegrityError from django.db.models.signals import post_save @@ -13,7 +14,7 @@ from sentry_sdk import capture_exception from core.crm import any_crm_integrations from core.crm.exceptions import CRMException -from core.models import Category, Order, Product, PromoCode, Wishlist, DigitalAssetDownload +from core.models import Category, DigitalAssetDownload, Order, Product, PromoCode, Wishlist from core.utils import ( generate_human_readable_id, resolve_translations_for_elasticsearch, @@ -25,8 +26,9 @@ from vibes_auth.models import User logger = logging.getLogger("django") +# noinspection PyUnusedLocal @receiver(post_save, sender=User) -def create_order_on_user_creation_signal(instance, created, **_kwargs): +def create_order_on_user_creation_signal(instance: User, created: bool, **kwargs: dict[Any, Any]) -> None: if created: try: Order.objects.create(user=instance, status="PENDING") @@ -40,17 +42,23 @@ def create_order_on_user_creation_signal(instance, created, **_kwargs): break +# noinspection PyUnusedLocal @receiver(post_save, sender=User) -def create_wishlist_on_user_creation_signal(instance, created, **_kwargs): +def create_wishlist_on_user_creation_signal(instance: User, created: bool, **kwargs: dict[Any, Any]) -> None: if created: Wishlist.objects.create(user=instance) +# noinspection PyUnusedLocal @receiver(post_save, sender=User) -def create_promocode_on_user_referring(instance, created, **_kwargs): +def create_promocode_on_user_referring(instance: User, created: bool, **kwargs: dict[Any, Any]) -> None: try: + if not instance.attributes: + instance.attributes = {} + instance.save() + if created and instance.attributes.get("referrer", ""): - referrer_uuid = urlsafe_base64_decode(instance.attributes.get("referrer", "")) + referrer_uuid = urlsafe_base64_decode(instance.attributes.get("referrer", "")).decode() referrer = User.objects.get(uuid=referrer_uuid) code = f"WELCOME-{get_random_string(6)}" PromoCode.objects.create( @@ -65,8 +73,9 @@ def create_promocode_on_user_referring(instance, created, **_kwargs): logger.error(_(f"error during promocode creation: {e!s}")) +# noinspection PyUnusedLocal @receiver(post_save, sender=Order) -def process_order_changes(instance, created, **_kwargs): +def process_order_changes(instance: Order, created: bool, **kwargs: dict[Any, Any]): if type(instance.attributes) is not dict: instance.attributes = {} @@ -99,9 +108,12 @@ def process_order_changes(instance, created, **_kwargs): if instance.status in ["CREATED", "PAYMENT"]: if not instance.is_whole_digital: - send_order_created_email.delay(instance.uuid) + send_order_created_email.delay(instance.uuid) # type: ignore [attr-defined] for order_product in instance.order_products.filter(status="DELIVERING", product__is_digital=True): + if not order_product.product: + continue + stocks_qs = order_product.product.stocks.filter(digital_asset__isnull=False).exclude(digital_asset="") stock = stocks_qs.first() @@ -115,8 +127,8 @@ def process_order_changes(instance, created, **_kwargs): order_product.status = "FINISHED" 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.order.user.payments_balance.amount -= order_product.buy_price # type: ignore [union-attr, operator] + order_product.order.user.payments_balance.save() # type: ignore [union-attr] order_product.save() continue @@ -124,12 +136,12 @@ def process_order_changes(instance, created, **_kwargs): try: vendor_name = ( - order_product.product.stocks.filter(price=order_product.buy_price).first().vendor.name.lower() + order_product.product.stocks.filter(price=order_product.buy_price).first().vendor.name.lower() # type: ignore [union-attr, attr-defined, misc] ) vendor = create_object(f"core.vendors.{vendor_name}", f"{vendor_name.title()}Vendor") - vendor.buy_order_product(order_product) + vendor.buy_order_product(order_product) # type: ignore [attr-defined] except Exception as e: order_product.add_error(f"Failed to buy {order_product.uuid}. Reason: {e}...") @@ -144,26 +156,29 @@ def process_order_changes(instance, created, **_kwargs): if instance.status == "FINISHED" and not instance.attributes.get("system_email_sent", False): instance.attributes["system_email_sent"] = True instance.save() - send_order_finished_email.delay(instance.uuid) + send_order_finished_email.delay(instance.uuid) # type: ignore [attr-defined] +# noinspection PyUnusedLocal @receiver(post_save, sender=Product) -def update_product_name_lang(instance, created, **_kwargs): +def update_product_name_lang(instance: Product, created: bool, **kwargs: dict[Any, Any]) -> None: if created: pass resolve_translations_for_elasticsearch(instance, "name") resolve_translations_for_elasticsearch(instance, "description") +# noinspection PyUnusedLocal @receiver(post_save, sender=Category) -def update_category_name_lang(instance, created, **_kwargs): +def update_category_name_lang(instance: Category, created: bool, **kwargs: dict[Any, Any]) -> None: if created: pass resolve_translations_for_elasticsearch(instance, "name") resolve_translations_for_elasticsearch(instance, "description") +# noinspection PyUnusedLocal @receiver(post_save, sender=PromoCode) -def send_promocode_creation_email(instance, created, **_kwargs): +def send_promocode_creation_email(instance: PromoCode, created: bool, **kwargs: dict[Any, Any]) -> None: if created: - send_promocode_created_email.delay(instance.uuid) + send_promocode_created_email.delay(instance.uuid) # type: ignore [attr-defined] diff --git a/core/sitemaps.py b/core/sitemaps.py index a7d631fa..93ecd6ad 100644 --- a/core/sitemaps.py +++ b/core/sitemaps.py @@ -1,12 +1,13 @@ from django.conf import settings from django.contrib.sitemaps import Sitemap from django.utils.translation import gettext_lazy as _ + from core.models import Brand, Category, Product from core.utils.seo_builders import any_non_digital from evibes.settings import LANGUAGE_CODE -class StaticPagesSitemap(Sitemap): +class StaticPagesSitemap(Sitemap): # type: ignore [type-arg] protocol = "https" changefreq = "monthly" priority = 0.8 @@ -54,7 +55,7 @@ class StaticPagesSitemap(Sitemap): return obj.get("lastmod") -# class FeaturedProductsSitemap(Sitemap): +# class FeaturedProductsSitemap(Sitemap): # type: ignore [type-arg] # protocol = "https" # changefreq = "daily" # priority = 0.9 @@ -80,7 +81,7 @@ class StaticPagesSitemap(Sitemap): # return f"/{LANGUAGE_CODE}/product/{obj.slug}" -class ProductSitemap(Sitemap): +class ProductSitemap(Sitemap): # type: ignore [type-arg] protocol = "https" changefreq = "daily" priority = 0.9 @@ -106,7 +107,7 @@ class ProductSitemap(Sitemap): return f"/{LANGUAGE_CODE}/product/{obj.slug}" -class CategorySitemap(Sitemap): +class CategorySitemap(Sitemap): # type: ignore [type-arg] protocol = "https" changefreq = "weekly" priority = 0.7 @@ -122,7 +123,7 @@ class CategorySitemap(Sitemap): return f"/{LANGUAGE_CODE}/catalog/{obj.slug}" -class BrandSitemap(Sitemap): +class BrandSitemap(Sitemap): # type: ignore [type-arg] protocol = "https" changefreq = "weekly" priority = 0.6 diff --git a/core/tasks.py b/core/tasks.py index c71f5bdb..3792ad66 100644 --- a/core/tasks.py +++ b/core/tasks.py @@ -4,6 +4,7 @@ import shutil import uuid from datetime import date, timedelta from time import sleep +from typing import Any import requests from celery.app import shared_task @@ -38,7 +39,7 @@ def update_products_task() -> tuple[bool, str]: if not update_products_task_running: cache.set("update_products_task_running", True, 86400) - vendors_classes: list = [] + vendors_classes: list[Any] = [] for vendor_class in vendors_classes: vendor = vendor_class() @@ -69,7 +70,7 @@ def update_orderproducts_task() -> tuple[bool, str]: message confirming the successful execution of the task. :rtype: Tuple[bool, str] """ - vendors_classes: list = [] + vendors_classes: list[Any] = [] for vendor_class in vendors_classes: vendor = vendor_class() @@ -202,7 +203,7 @@ def process_promotions() -> tuple[bool, str]: if eligible_products.count() < 48: return False, "Not enough products to choose from [< 48]." - selected_products: list = [] + selected_products: list[Any] = [] while len(selected_products) < 48: product = eligible_products.order_by("?").first() diff --git a/core/templatetags/conditions.py b/core/templatetags/conditions.py index ca086a58..f2874ded 100644 --- a/core/templatetags/conditions.py +++ b/core/templatetags/conditions.py @@ -1,10 +1,12 @@ +from typing import Any + from django import template register = template.Library() @register.filter -def attributes_length(value, arg): +def attributes_length(value: Any, arg: int) -> bool: """Returns True if the value length is more than the argument.""" if isinstance(value, dict): count = 0 diff --git a/core/tests.py b/core/tests.py index e55d6890..e69de29b 100644 --- a/core/tests.py +++ b/core/tests.py @@ -1,3 +0,0 @@ -from django.test import TestCase # noqa: F401 - -# Create your tests here. diff --git a/core/urls.py b/core/urls.py index e8ac27db..a1b30b22 100644 --- a/core/urls.py +++ b/core/urls.py @@ -1 +1,3 @@ -urlpatterns: list = [] +from typing import Any + +urlpatterns: list[Any] = [] diff --git a/core/utils/__init__.py b/core/utils/__init__.py index a8416cfa..8357c26d 100644 --- a/core/utils/__init__.py +++ b/core/utils/__init__.py @@ -2,13 +2,18 @@ import logging import re import secrets from contextlib import contextmanager +from typing import Any, Generator from constance import config from django.conf import settings +from django.core import mail from django.core.cache import cache +from django.core.mail.backends.smtp import EmailBackend from django.db import transaction from django.utils.crypto import get_random_string from django.utils.translation import get_language +from graphene import Context +from rest_framework.request import Request from evibes.settings import DEBUG, EXPOSABLE_KEYS, LANGUAGE_CODE @@ -29,7 +34,7 @@ def graphene_current_lang() -> str: return (get_language() or settings.LANGUAGE_CODE).lower() -def graphene_abs(request, path_or_url: str) -> str: +def graphene_abs(request: Request | Context, path_or_url: str) -> str: """ Builds and returns an absolute URI for a given path or URL. @@ -63,16 +68,20 @@ def get_random_code() -> str: return get_random_string(20) -def get_product_uuid_as_path(instance, filename: str = "") -> str: +def get_product_uuid_as_path(instance, filename: str = "") -> str: # type: ignore [no-untyped-def] return "products" + "/" + str(instance.product.uuid) + "/" + filename -def get_brand_name_as_path(instance, filename: str = "") -> str: +def get_vendor_name_as_path(instance, filename: str = "") -> str: # type: ignore [no-untyped-def] + return "vendors_responses/" + str(instance.name) + "/" + filename + + +def get_brand_name_as_path(instance, filename: str = "") -> str: # type: ignore [no-untyped-def] return "brands/" + str(instance.name) + "/" + filename @contextmanager -def atomic_if_not_debug(): +def atomic_if_not_debug() -> Generator[None, None, None]: """ Context manager to wrap a block of code in an atomic transaction if the DEBUG setting is not enabled. @@ -93,7 +102,7 @@ def is_url_safe(url: str) -> bool: return bool(re.match(r"^https://", url, re.IGNORECASE)) -def format_attributes(attributes: str | None = None) -> dict: +def format_attributes(attributes: str | None = None) -> dict[str, Any]: """ Parses a string of attributes into a dictionary. @@ -121,7 +130,7 @@ def format_attributes(attributes: str | None = None) -> dict: return result -def get_project_parameters() -> dict: +def get_project_parameters() -> Any: """ Fetches project parameters from cache or configuration. @@ -130,7 +139,7 @@ def get_project_parameters() -> dict: configuration source, formats their keys to lowercase, and then stores them in the cache for a limited period. """ - parameters = cache.get("parameters", {}) + parameters = cache.get("parameters") if not parameters: for key in EXPOSABLE_KEYS: @@ -141,7 +150,7 @@ def get_project_parameters() -> dict: return parameters -def resolve_translations_for_elasticsearch(instance, field_name: str) -> None: +def resolve_translations_for_elasticsearch(instance, field_name: str) -> None: # type: ignore [no-untyped-def] """ Resolves translations for a given field in an Elasticsearch-compatible format. It checks if the localized version of the field contains data, @@ -195,3 +204,17 @@ def generate_human_readable_token() -> str: def is_status_code_success(status_code: int) -> bool: return 200 <= status_code < 300 + + +def get_dynamic_email_connection() -> EmailBackend: + return mail.get_connection( # type: ignore [no-any-return] + host=config.EMAIL_HOST, + port=config.EMAIL_PORT, + username=config.EMAIL_HOST_USER, + password=config.EMAIL_HOST_PASSWORD, + use_tls=config.EMAIL_USE_TLS, + use_ssl=config.EMAIL_USE_SSL, + timeout=30, + fail_silently=False, + backend=config.EMAIL_BACKEND, + ) diff --git a/core/utils/caching.py b/core/utils/caching.py index 737e1070..5827c6a7 100644 --- a/core/utils/caching.py +++ b/core/utils/caching.py @@ -1,10 +1,8 @@ import json import logging from pathlib import Path -from typing import Any +from typing import Any, Type -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 _ @@ -17,11 +15,11 @@ from vibes_auth.models import User logger = logging.getLogger("django") -def is_safe_cache_key(key: str): +def is_safe_cache_key(key: str) -> bool: return key not in UNSAFE_CACHE_KEYS -def get_cached_value(user: User, key: str, default=None) -> None | object: +def get_cached_value(user: Type[User], key: str, default: Any = None) -> Any: if user.is_staff or user.is_superuser: return cache.get(key, default) @@ -31,9 +29,7 @@ def get_cached_value(user: User, key: str, default=None) -> None | object: return None -def set_cached_value( - user: User | AbstractBaseUser | AnonymousUser, key: str, value: object, timeout: int = 3600 -) -> None | object: +def set_cached_value(user: Type[User], key: str, value: object, timeout: int = 3600) -> None | object: if user.is_staff or user.is_superuser: cache.set(key, value, timeout) return value @@ -41,14 +37,14 @@ def set_cached_value( return None -def web_cache(request: Request | Context, key: str, data: dict[str, Any], timeout: int): +def web_cache(request: Request | Context, key: str, data: dict[str, Any], timeout: int) -> dict[str, Any]: if not data and not timeout: - return {"data": get_cached_value(request.user, key)} + return {"data": get_cached_value(request.user, key)} # type: ignore [assignment, arg-type] if (data and not timeout) or (timeout and not data): raise BadRequest(_("both data and timeout are required")) if not 0 < int(timeout) < 216000: raise BadRequest(_("invalid timeout value, it must be between 0 and 216000 seconds")) - return {"data": set_cached_value(request.user, key, data, timeout)} + return {"data": set_cached_value(request.user, key, data, timeout)} # type: ignore [assignment, arg-type] def set_default_cache() -> None: diff --git a/core/utils/constance.py b/core/utils/constance.py deleted file mode 100644 index c1b6771e..00000000 --- a/core/utils/constance.py +++ /dev/null @@ -1,12 +0,0 @@ -from constance import config - -from evibes import settings - - -def set_email_settings(): - settings.EMAIL_HOST = config.EMAIL_HOST - settings.EMAIL_PORT = config.EMAIL_PORT - settings.EMAIL_HOST_USER = config.EMAIL_HOST_USER - settings.EMAIL_HOST_PASSWORD = config.EMAIL_HOST_PASSWORD - settings.EMAIL_USE_TLS = config.EMAIL_USE_TLS - settings.EMAIL_USE_SSL = config.EMAIL_USE_SSL diff --git a/core/utils/db.py b/core/utils/db.py index 601ee56d..476f1c08 100644 --- a/core/utils/db.py +++ b/core/utils/db.py @@ -1,5 +1,7 @@ import logging +from typing import Any, Callable +from django.db.models import Model from django.db.models.constants import LOOKUP_SEP from django_extensions.db.fields import AutoSlugField from slugify import slugify @@ -7,7 +9,7 @@ from slugify import slugify logger = logging.getLogger("django") -def unicode_slugify_function(content): +def unicode_slugify_function(content: Any) -> str: return slugify( text=str(content), allow_unicode=True, @@ -20,7 +22,7 @@ def unicode_slugify_function(content): class TweakedAutoSlugField(AutoSlugField): - def get_slug_fields(self, model_instance, lookup_value): + def get_slug_fields(self, model_instance: Model, lookup_value: str | Callable[[Any], Any]) -> str | Model: if callable(lookup_value): return f"{lookup_value(model_instance)}" @@ -29,9 +31,9 @@ class TweakedAutoSlugField(AutoSlugField): for elem in lookup_value_path: try: - attr = getattr(attr, elem) + attr: Any = getattr(attr, elem) except AttributeError: - attr = "" + attr: Any = "" if callable(attr): # noinspection PyCallingNonCallable return f"{attr()}" diff --git a/core/utils/emailing.py b/core/utils/emailing.py index 6eb1a50a..38109f87 100644 --- a/core/utils/emailing.py +++ b/core/utils/emailing.py @@ -4,22 +4,24 @@ from celery.app import shared_task from celery.utils.log import get_task_logger from constance import config from django.conf import settings -from django.core import mail from django.core.mail import EmailMessage from django.template.loader import render_to_string from django.utils.translation import activate from django.utils.translation import gettext_lazy as _ from core.models import Order, OrderProduct, PromoCode -from core.utils.constance import set_email_settings +from core.utils import get_dynamic_email_connection logger = get_task_logger(__name__) @shared_task(queue="default") -def contact_us_email(contact_info): - set_email_settings() - connection = mail.get_connection() +def contact_us_email(contact_info) -> tuple[bool, str]: + logger.debug( + "Contact us email sent to %s with subject %s", + contact_info.get("email"), + contact_info.get("subject", "Without subject"), + ) email = EmailMessage( _(f"{config.PROJECT_NAME} | contact us initiated"), @@ -36,7 +38,7 @@ def contact_us_email(contact_info): ), to=[config.EMAIL_FROM], from_email=f"{config.PROJECT_NAME} <{config.EMAIL_FROM}>", - connection=connection, + connection=get_dynamic_email_connection(), ) email.content_subtype = "html" email.send() @@ -66,9 +68,6 @@ def send_order_created_email(order_pk: str) -> tuple[bool, str]: activate(language) - set_email_settings() - connection = mail.get_connection() - if not order.is_whole_digital: email = EmailMessage( _(f"{config.PROJECT_NAME} | order confirmation"), @@ -83,7 +82,7 @@ def send_order_created_email(order_pk: str) -> tuple[bool, str]: ), to=[recipient], from_email=f"{config.PROJECT_NAME} <{config.EMAIL_FROM}>", - connection=connection, + connection=get_dynamic_email_connection(), ) email.content_subtype = "html" email.send() @@ -93,7 +92,7 @@ def send_order_created_email(order_pk: str) -> tuple[bool, str]: @shared_task(queue="default") def send_order_finished_email(order_pk: str) -> tuple[bool, str]: - def send_digital_assets_email(ops: list[OrderProduct]): + def send_digital_assets_email(ops: list[OrderProduct]) -> None: if len(ops) <= 0: return @@ -102,9 +101,6 @@ def send_order_finished_email(order_pk: str) -> tuple[bool, str]: activate(order.user.language) - set_email_settings() - connection = mail.get_connection() - email = EmailMessage( _(f"{config.PROJECT_NAME} | order delivered"), render_to_string( @@ -122,21 +118,19 @@ def send_order_finished_email(order_pk: str) -> tuple[bool, str]: ), to=[order.user.email], from_email=f"{config.PROJECT_NAME} <{config.EMAIL_FROM}>", - connection=connection, + connection=get_dynamic_email_connection(), ) email.content_subtype = "html" result = email.send() logger.debug("Order %s: Tried to send email to %s, resulted with %s", order.pk, order.user.email, result) - def send_thank_you_email(ops: list[OrderProduct]): + def send_thank_you_email(ops: list[OrderProduct]) -> None: if ops: pass if not order.user: return activate(order.user.language) - set_email_settings() - pass try: @@ -190,9 +184,6 @@ def send_promocode_created_email(promocode_pk: str) -> tuple[bool, str]: activate(promocode.user.language) - set_email_settings() - connection = mail.get_connection() - email = EmailMessage( _(f"{config.PROJECT_NAME} | promocode granted"), render_to_string( @@ -208,7 +199,7 @@ def send_promocode_created_email(promocode_pk: str) -> tuple[bool, str]: ), to=[promocode.user.email], from_email=f"{config.PROJECT_NAME} <{config.EMAIL_FROM}>", - connection=connection, + connection=get_dynamic_email_connection(), ) email.content_subtype = "html" result = email.send() diff --git a/core/utils/languages.py b/core/utils/languages.py index 8ab2d840..797b67c1 100644 --- a/core/utils/languages.py +++ b/core/utils/languages.py @@ -1,5 +1,5 @@ from constance import config -def get_flag_by_language(language): +def get_flag_by_language(language: str) -> str: return f"https://api.{config.BASE_DOMAIN}/static/flags/{language}.png" diff --git a/core/validators.py b/core/validators.py index 409c6496..b32d660d 100644 --- a/core/validators.py +++ b/core/validators.py @@ -3,12 +3,14 @@ from django.core.files.images import ImageFile, get_image_dimensions from django.utils.translation import gettext_lazy as _ -def validate_category_image_dimensions(image: ImageFile) -> None: - max_width = 99999 - max_height = 99999 +def validate_category_image_dimensions( + image: ImageFile, max_width: int | None = None, max_height: int | None = None +) -> None: + max_width = max_width or 7680 + max_height = max_height or 4320 if image: - width, height = get_image_dimensions(image.file) + width, height = get_image_dimensions(image.file) # type: ignore [arg-type] - if width > max_width or height > max_height: + if int(width) > max_width or int(height) > max_height: # type: ignore [arg-type] raise ValidationError(_(f"image dimensions should not exceed w{max_width} x h{max_height} pixels")) diff --git a/core/vendors/__init__.py b/core/vendors/__init__.py index 4f7bf541..da68d537 100644 --- a/core/vendors/__init__.py +++ b/core/vendors/__init__.py @@ -231,12 +231,12 @@ class AbstractVendor: def resolve_price_with_currency(self, price: float | int | Decimal, provider: str, currency: str = "") -> float: rates = get_rates(provider) - rate = rates.get(currency or self.currency) + rate = rates.get(currency or self.currency) if rates else 1 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 float(round(price, 2)) # type: ignore [arg-type] + return float(round(price / rate, 2)) if rate else float(round(price, 2)) # type: ignore [arg-type, operator] @staticmethod def round_price_marketologically(price: float) -> float: @@ -339,9 +339,9 @@ class AbstractVendor: Product.objects.filter(pk__in=batch_ids).delete() def delete_belongings(self) -> None: - self.get_products_queryset().delete() # type: ignore [union-attr] - self.get_stocks_queryset().delete() # type: ignore [union-attr] - self.get_attribute_values_queryset().delete() # type: ignore [union-attr] + self.get_products_queryset().delete() + self.get_stocks_queryset().delete() + self.get_attribute_values_queryset().delete() def get_or_create_attribute_safe(self, *, name: str, attr_group: AttributeGroup) -> Attribute: key = name[:255] @@ -393,12 +393,11 @@ class AbstractVendor: attribute = Attribute.objects.filter(name=key, group=attr_group).order_by("uuid").first() # type: ignore [assignment] attribute.is_active = True attribute.value_type = attr_value_type - attribute.save() # type: ignore [no-untyped-call] + attribute.save() except IntegrityError: return - attribute.categories.add(product.category) - attribute.save() # type: ignore [no-untyped-call] + attribute.save() if not is_created: return diff --git a/core/views.py b/core/views.py index 6cce9afb..68396451 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, HttpRequest, HttpResponseRedirect +from django.http import FileResponse, Http404, HttpRequest, HttpResponse, HttpResponseRedirect, JsonResponse from django.shortcuts import redirect from django.utils.decorators import method_decorator from django.utils.http import urlsafe_base64_decode @@ -181,9 +181,9 @@ class CacheOperatorView(APIView): return Response( data=web_cache( request, - request.data.get("key"), - request.data.get("data"), - request.data.get("timeout"), + request.data.get("key"), # type: ignore [arg-type] + request.data.get("data", {}), + request.data.get("timeout"), # type: ignore [arg-type] ), status=status.HTTP_200_OK, ) @@ -205,7 +205,7 @@ class ContactUsView(APIView): 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) + contact_us_email.delay(serializer.validated_data) # type: ignore [attr-defined] return Response(data=serializer.data, status=status.HTTP_200_OK) @@ -227,7 +227,7 @@ class RequestCursedURLView(APIView): @method_decorator(ratelimit(key="ip", rate="10/h")) def post(self, request: Request, *args, **kwargs) -> Response: url = request.data.get("url") - if not is_url_safe(url): + if not is_url_safe(str(url)): return Response( data={"error": _("only URLs starting with http(s):// are allowed")}, status=status.HTTP_400_BAD_REQUEST, @@ -235,7 +235,7 @@ class RequestCursedURLView(APIView): try: data = cache.get(url, None) if not data: - response = requests.get(url, headers={"content-type": "application/json"}) + response = requests.get(str(url), headers={"content-type": "application/json"}) response.raise_for_status() data = camelize(response.json()) cache.set(url, data, 86400) @@ -317,7 +317,10 @@ def download_digital_asset_view(request: HttpRequest, *args, **kwargs) -> FileRe download.num_downloads += 1 download.save() - file_path = download.order_product.product.stocks.first().digital_asset.path + if not download.order_product.product: + raise BadRequest(_("the order product does not have a product")) + + file_path = download.order_product.product.stocks.first().digital_asset.path # type: ignore [union-attr] content_type, encoding = mimetypes.guess_type(file_path) if not content_type: @@ -357,7 +360,7 @@ download_digital_asset_view.__doc__ = _( # type: ignore [assignment] ) -def favicon_view(request: HttpRequest, *args, **kwargs) -> FileResponse | Http404: +def favicon_view(request: HttpRequest, *args, **kwargs) -> HttpResponse | FileResponse: try: favicon_path = os.path.join(settings.BASE_DIR, "static/favicon.png") return FileResponse(open(favicon_path, "rb"), content_type="image/x-icon") @@ -373,7 +376,7 @@ favicon_view.__doc__ = _( # type: ignore [assignment] ) -def index(request: HttpRequest, *args, **kwargs) -> HttpResponseRedirect: +def index(request: HttpRequest, *args, **kwargs) -> HttpResponse | HttpResponseRedirect: return redirect("admin:index") diff --git a/core/viewsets.py b/core/viewsets.py index 01f88f9c..1fb12e6b 100644 --- a/core/viewsets.py +++ b/core/viewsets.py @@ -1,5 +1,6 @@ import logging import uuid +from typing import Type from uuid import UUID from constance import config @@ -20,6 +21,7 @@ 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.serializers import Serializer from rest_framework.viewsets import ModelViewSet from rest_framework_xml.renderers import XMLRenderer from rest_framework_yaml.renderers import YAMLRenderer @@ -132,13 +134,14 @@ class EvibesViewSet(ModelViewSet): "permissions, and rendering formats." ) - action_serializer_classes: dict = {} - additional: dict = {} + action_serializer_classes: dict[str, Type[Serializer]] = {} + additional: dict[str, str] = {} permission_classes = [EvibesPermission] renderer_classes = [CamelCaseJSONRenderer, MultiPartRenderer, XMLRenderer, YAMLRenderer] - def get_serializer_class(self): - return self.action_serializer_classes.get(self.action, super().get_serializer_class()) + def get_serializer_class(self) -> Type[Serializer]: + # noinspection PyTypeChecker + return self.action_serializer_classes.get(self.action, super().get_serializer_class()) # type: ignore [arg-type] @extend_schema_view(**ATTRIBUTE_GROUP_SCHEMA) @@ -587,6 +590,7 @@ class FeedbackViewSet(EvibesViewSet): return qs.filter(is_active=True) +# noinspection PyUnusedLocal @extend_schema_view(**ORDER_SCHEMA) class OrderViewSet(EvibesViewSet): __doc__ = _( @@ -659,9 +663,12 @@ class OrderViewSet(EvibesViewSet): 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) + order = self.get_object() + if not request.user or request.user.is_anonymous: + return Response( + status=status.HTTP_401_UNAUTHORIZED, + ) try: - order = Order.objects.get(user=request.user, uuid=lookup_val) instance = order.buy( force_balance=serializer.validated_data.get("force_balance"), force_payment=serializer.validated_data.get("force_payment"), @@ -709,9 +716,8 @@ class OrderViewSet(EvibesViewSet): 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) + order = self.get_object() try: - order = Order.objects.get(uuid=lookup_val) if not (request.user.has_perm("core.add_orderproduct") or request.user == order.user): raise PermissionDenied(permission_denied_message) @@ -727,9 +733,8 @@ class OrderViewSet(EvibesViewSet): 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) + order = self.get_object() try: - order = Order.objects.get(uuid=lookup_val) if not (request.user.has_perm("core.delete_orderproduct") or request.user == order.user): raise PermissionDenied(permission_denied_message) @@ -762,9 +767,8 @@ class OrderViewSet(EvibesViewSet): 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) + order = self.get_object() try: - order = Order.objects.get(uuid=lookup_val) if not (request.user.has_perm("core.delete_orderproduct") or request.user == order.user): raise PermissionDenied(permission_denied_message) @@ -776,6 +780,7 @@ class OrderViewSet(EvibesViewSet): return Response(status=status.HTTP_404_NOT_FOUND) +# noinspection PyUnusedLocal @extend_schema_view(**ORDER_PRODUCT_SCHEMA) class OrderProductViewSet(EvibesViewSet): __doc__ = _( @@ -810,7 +815,9 @@ class OrderProductViewSet(EvibesViewSet): serializer = self.get_serializer(request.data) serializer.is_valid(raise_exception=True) try: - order_product = OrderProduct.objects.get(uuid=kwargs.get("pk")) + order_product = OrderProduct.objects.get(uuid=str(kwargs.get("pk"))) + if not order_product.order: + return Response(status=status.HTTP_404_NOT_FOUND) if not (request.user.has_perm("core.change_orderproduct") or request.user == order_product.order.user): raise PermissionDenied(permission_denied_message) feedback = order_product.do_feedback( @@ -934,7 +941,7 @@ class WishlistViewSet(EvibesViewSet): serializer = AddWishlistProductSerializer(data=request.data) serializer.is_valid(raise_exception=True) try: - wishlist = Wishlist.objects.get(uuid=kwargs.get("pk")) + wishlist = self.get_object() if not (request.user.has_perm("core.change_wishlist") or request.user == wishlist.user): raise PermissionDenied(permission_denied_message) @@ -952,7 +959,7 @@ class WishlistViewSet(EvibesViewSet): serializer = RemoveWishlistProductSerializer(data=request.data) serializer.is_valid(raise_exception=True) try: - wishlist = Wishlist.objects.get(uuid=kwargs.get("pk")) + wishlist = self.get_object() if not (request.user.has_perm("core.change_wishlist") or request.user == wishlist.user): raise PermissionDenied(permission_denied_message) @@ -970,7 +977,7 @@ class WishlistViewSet(EvibesViewSet): serializer = BulkAddWishlistProductSerializer(data=request.data) serializer.is_valid(raise_exception=True) try: - wishlist = Wishlist.objects.get(uuid=kwargs.get("pk")) + wishlist = self.get_object() if not (request.user.has_perm("core.change_wishlist") or request.user == wishlist.user): raise PermissionDenied(permission_denied_message) @@ -988,7 +995,7 @@ class WishlistViewSet(EvibesViewSet): serializer = BulkRemoveWishlistProductSerializer(data=request.data) serializer.is_valid(raise_exception=True) try: - wishlist = Wishlist.objects.get(uuid=kwargs.get("pk")) + wishlist = self.get_object() if not (request.user.has_perm("core.change_wishlist") or request.user == wishlist.user): raise PermissionDenied(permission_denied_message) @@ -1035,7 +1042,7 @@ class AddressViewSet(EvibesViewSet): def retrieve(self, request: Request, *args, **kwargs) -> Response: try: - address = Address.objects.get(uuid=kwargs.get("pk")) + address = Address.objects.get(uuid=str(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) @@ -1064,9 +1071,9 @@ class AddressViewSet(EvibesViewSet): try: suggestions = fetch_address_suggestions(query=q, limit=limit) - serializer = AddressSuggestionSerializer(suggestions, many=True) + suggestion_serializer = AddressSuggestionSerializer(suggestions, many=True) return Response( - serializer.data, + suggestion_serializer.data, status=status.HTTP_200_OK, ) except Exception as e: diff --git a/core/widgets.py b/core/widgets.py index 6d673d8e..f2359f48 100644 --- a/core/widgets.py +++ b/core/widgets.py @@ -1,14 +1,17 @@ import json -from typing import Any +from typing import Any, Mapping from django import forms -from django.forms.renderers import DjangoTemplates +from django.core.files.uploadedfile import UploadedFile +from django.forms.renderers import BaseRenderer +from django.utils.datastructures import MultiValueDict +from django.utils.safestring import SafeString class JSONTableWidget(forms.Widget): template_name = "json_table_widget.html" - def format_value(self, value: str | dict[str, Any]): + def format_value(self, value: str | dict[str, Any]) -> str | dict[str, Any]: # type: ignore [override] if isinstance(value, dict): return value try: @@ -19,18 +22,23 @@ class JSONTableWidget(forms.Widget): return value def render( - self, name: str, value: str | dict[str, Any], attrs: dict | None = None, renderer: DjangoTemplates | None = None - ): + self, + name: str, + value: str | dict[str, Any], + attrs: dict[str, Any] | None = None, + renderer: BaseRenderer | None = None, + ) -> SafeString: value = self.format_value(value) return super().render(name, value, attrs, renderer) - # noinspection PyUnresolvedReferences - def value_from_datadict(self, data: dict[str, Any], files: list, name: str): + def value_from_datadict( + self, data: Mapping[str, Any], files: MultiValueDict[str, UploadedFile], name: str + ) -> str | None: json_data = {} try: - keys = data.getlist(f"{name}_key") - values = data.getlist(f"{name}_value") + keys = data.getlist(f"{name}_key") # type: ignore [attr-defined] + values = data.getlist(f"{name}_value") # type: ignore [attr-defined] for key, value in zip(keys, values, strict=True): if key.strip(): try: diff --git a/evibes/ftpstorage.py b/evibes/ftpstorage.py index 4e3ebc39..a0e736ff 100644 --- a/evibes/ftpstorage.py +++ b/evibes/ftpstorage.py @@ -1,3 +1,4 @@ +from typing import Any from urllib.parse import urlparse from storages.backends.ftp import FTPStorage @@ -7,7 +8,7 @@ class AbsoluteFTPStorage(FTPStorage): # type: ignore # noinspection PyProtectedMember # noinspection PyUnresolvedReferences - def _get_config(self): + def _get_config(self) -> Any: cfg = super()._get_config() url = urlparse(self.location) cfg["path"] = url.path or cfg["path"] diff --git a/evibes/locale/ar_AR/LC_MESSAGES/django.mo b/evibes/locale/ar_AR/LC_MESSAGES/django.mo index c8288f99..ffaeaeec 100644 Binary files a/evibes/locale/ar_AR/LC_MESSAGES/django.mo and b/evibes/locale/ar_AR/LC_MESSAGES/django.mo differ diff --git a/evibes/locale/ar_AR/LC_MESSAGES/django.po b/evibes/locale/ar_AR/LC_MESSAGES/django.po index 4173eba6..aa84c80f 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-10-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -38,101 +38,113 @@ msgid "Phone number of the company" msgstr "رقم هاتف الشركة" #: evibes/settings/constance.py:28 +msgid "!!!DO NOT CHANGE" +msgstr "!!!لا تغير" + +#: evibes/settings/constance.py:29 msgid "SMTP host" msgstr "مضيف SMTP" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "SMTP port" msgstr "منفذ SMTP" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "Use TLS (0=No, 1=Yes)" msgstr "استخدام TLS" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "Use SSL (0=No, 1=Yes)" msgstr "استخدام SSL" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP username" msgstr "اسم مستخدم SMTP" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "SMTP password" msgstr "كلمة مرور SMTP" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Mail from option" msgstr "عنوان مرسل البريد الإلكتروني" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "Payment gateway URL" msgstr "عنوان URL لبوابة الدفع" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Payment gateway token" msgstr "الرمز المميز لبوابة الدفع" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Payment gateway minimum amount" msgstr "الحد الأدنى لمبلغ بوابة الدفع" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "Payment gateway maximum amount" msgstr "الحد الأقصى لمبلغ بوابة الدفع" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "Exchange rate API key" msgstr "مفتاح API لسعر الصرف" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "OpenStreetMap Nominatim API URL" msgstr "عنوان URL لواجهة برمجة تطبيقات OpenStreetMap Nominatim" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenAI API Key" msgstr "مفتاح واجهة برمجة تطبيقات OpenAI" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "Abstract API Key" msgstr "مفتاح واجهة برمجة التطبيقات المجردة" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "HTTP Proxy" msgstr "وكيل HTTP" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Disable buy functionality" msgstr "تعطيل وظيفة الشراء" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "An entity for storing advertisiment data" msgstr "كيان لتخزين بيانات الإعلانات" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing analytics data" msgstr "كيان لتخزين بيانات التحليلات" -#: evibes/settings/constance.py:52 +#: evibes/settings/constance.py:48 +msgid "Save responses from vendors' APIs" +msgstr "حفظ الاستجابات من واجهات برمجة تطبيقات البائعين" + +#: evibes/settings/constance.py:54 msgid "General Options" msgstr "الخيارات العامة" -#: evibes/settings/constance.py:60 +#: evibes/settings/constance.py:62 msgid "Email Options" msgstr "خيارات البريد الإلكتروني" -#: evibes/settings/constance.py:69 +#: evibes/settings/constance.py:72 msgid "Payment Gateway Options" msgstr "خيارات بوابة الدفع" -#: evibes/settings/constance.py:76 +#: evibes/settings/constance.py:79 msgid "Features Options" msgstr "خيارات الميزات" -#: evibes/settings/constance.py:83 +#: evibes/settings/constance.py:86 msgid "SEO Options" msgstr "خيارات تحسين محركات البحث" +#: evibes/settings/constance.py:90 +msgid "Debugging Options" +msgstr "خيارات التصحيح" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "الصفحة الرئيسية" diff --git a/evibes/locale/cs_CZ/LC_MESSAGES/django.mo b/evibes/locale/cs_CZ/LC_MESSAGES/django.mo index 82338eec..90fc4e79 100644 Binary files a/evibes/locale/cs_CZ/LC_MESSAGES/django.mo and b/evibes/locale/cs_CZ/LC_MESSAGES/django.mo differ diff --git a/evibes/locale/cs_CZ/LC_MESSAGES/django.po b/evibes/locale/cs_CZ/LC_MESSAGES/django.po index 185a8354..ab21c4cf 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-10-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -38,101 +38,113 @@ msgid "Phone number of the company" msgstr "Telefonní číslo společnosti" #: evibes/settings/constance.py:28 +msgid "!!!DO NOT CHANGE" +msgstr "!!!NEMĚŇTE" + +#: evibes/settings/constance.py:29 msgid "SMTP host" msgstr "SMTP host" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "SMTP port" msgstr "Port SMTP" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "Use TLS (0=No, 1=Yes)" msgstr "Použití protokolu TLS" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "Use SSL (0=No, 1=Yes)" msgstr "Použití protokolu SSL" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP username" msgstr "Uživatelské jméno SMTP" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "SMTP password" msgstr "Heslo SMTP" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Mail from option" msgstr "Adresa odesílatele e-mailů" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "Payment gateway URL" msgstr "Adresa URL platební brány" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Payment gateway token" msgstr "Token platební brány" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Payment gateway minimum amount" msgstr "Minimální částka platební brány" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "Payment gateway maximum amount" msgstr "Maximální částka platební brány" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "Exchange rate API key" msgstr "Klíč API pro směnný kurz" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "OpenStreetMap Nominatim API URL" msgstr "URL rozhraní API OpenStreetMap Nominatim" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenAI API Key" msgstr "Klíč API OpenAI" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "Abstract API Key" msgstr "Abstraktní klíč API" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "HTTP Proxy" msgstr "Proxy server HTTP" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Disable buy functionality" msgstr "Zakázat funkci nákupu" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "An entity for storing advertisiment data" msgstr "Subjekt pro ukládání dat inzerátů" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing analytics data" msgstr "Subjekt pro ukládání analytických dat" -#: evibes/settings/constance.py:52 +#: evibes/settings/constance.py:48 +msgid "Save responses from vendors' APIs" +msgstr "Ukládání odpovědí z rozhraní API dodavatelů" + +#: evibes/settings/constance.py:54 msgid "General Options" msgstr "Obecné možnosti" -#: evibes/settings/constance.py:60 +#: evibes/settings/constance.py:62 msgid "Email Options" msgstr "Možnosti e-mailu" -#: evibes/settings/constance.py:69 +#: evibes/settings/constance.py:72 msgid "Payment Gateway Options" msgstr "Možnosti platební brány" -#: evibes/settings/constance.py:76 +#: evibes/settings/constance.py:79 msgid "Features Options" msgstr "Možnosti funkcí" -#: evibes/settings/constance.py:83 +#: evibes/settings/constance.py:86 msgid "SEO Options" msgstr "Možnosti SEO" +#: evibes/settings/constance.py:90 +msgid "Debugging Options" +msgstr "Možnosti ladění" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "Home" diff --git a/evibes/locale/da_DK/LC_MESSAGES/django.mo b/evibes/locale/da_DK/LC_MESSAGES/django.mo index 8af2373b..2d740464 100644 Binary files a/evibes/locale/da_DK/LC_MESSAGES/django.mo and b/evibes/locale/da_DK/LC_MESSAGES/django.mo differ diff --git a/evibes/locale/da_DK/LC_MESSAGES/django.po b/evibes/locale/da_DK/LC_MESSAGES/django.po index 0eca1e0f..94944578 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-10-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -38,101 +38,113 @@ msgid "Phone number of the company" msgstr "Virksomhedens telefonnummer" #: evibes/settings/constance.py:28 +msgid "!!!DO NOT CHANGE" +msgstr "!!!MÅ IKKE ÆNDRES" + +#: evibes/settings/constance.py:29 msgid "SMTP host" msgstr "SMTP-vært" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "SMTP port" msgstr "SMTP-port" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "Use TLS (0=No, 1=Yes)" msgstr "Brug TLS" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "Use SSL (0=No, 1=Yes)" msgstr "Brug SSL" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP username" msgstr "SMTP-brugernavn" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "SMTP password" msgstr "SMTP-adgangskode" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Mail from option" msgstr "Adressen på e-mailens afsender" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "Payment gateway URL" msgstr "URL til betalingsgateway" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Payment gateway token" msgstr "Token til betalingsgateway" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Payment gateway minimum amount" msgstr "Minimumsbeløb for betalingsgateway" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "Payment gateway maximum amount" msgstr "Betalingsgatewayens maksimale beløb" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "Exchange rate API key" msgstr "API-nøgle til valutakurs" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenAI API Key" msgstr "OpenAI API-nøgle" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "Abstract API Key" msgstr "Abstrakt API-nøgle" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "HTTP Proxy" msgstr "HTTP-proxy" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Disable buy functionality" msgstr "Deaktiver købsfunktionalitet" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "An entity for storing advertisiment data" msgstr "En enhed til lagring af annonceringsdata" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing analytics data" msgstr "En enhed til lagring af analysedata" -#: evibes/settings/constance.py:52 +#: evibes/settings/constance.py:48 +msgid "Save responses from vendors' APIs" +msgstr "Gem svar fra leverandørers API'er" + +#: evibes/settings/constance.py:54 msgid "General Options" msgstr "Generelle indstillinger" -#: evibes/settings/constance.py:60 +#: evibes/settings/constance.py:62 msgid "Email Options" msgstr "Indstillinger for e-mail" -#: evibes/settings/constance.py:69 +#: evibes/settings/constance.py:72 msgid "Payment Gateway Options" msgstr "Muligheder for betalingsgateway" -#: evibes/settings/constance.py:76 +#: evibes/settings/constance.py:79 msgid "Features Options" msgstr "Funktioner Indstillinger" -#: evibes/settings/constance.py:83 +#: evibes/settings/constance.py:86 msgid "SEO Options" msgstr "SEO-muligheder" +#: evibes/settings/constance.py:90 +msgid "Debugging Options" +msgstr "Indstillinger for fejlfinding" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "Hjem" diff --git a/evibes/locale/de_DE/LC_MESSAGES/django.mo b/evibes/locale/de_DE/LC_MESSAGES/django.mo index 143e6205..afe01b4b 100644 Binary files a/evibes/locale/de_DE/LC_MESSAGES/django.mo and b/evibes/locale/de_DE/LC_MESSAGES/django.mo differ diff --git a/evibes/locale/de_DE/LC_MESSAGES/django.po b/evibes/locale/de_DE/LC_MESSAGES/django.po index ad83d24d..a6e3ccb7 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-10-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -38,101 +38,113 @@ msgid "Phone number of the company" msgstr "Telefonnummer des Unternehmens" #: evibes/settings/constance.py:28 +msgid "!!!DO NOT CHANGE" +msgstr "!!!NICHT ÄNDERN" + +#: evibes/settings/constance.py:29 msgid "SMTP host" msgstr "SMTP-Host" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "SMTP port" msgstr "SMTP-Port" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "Use TLS (0=No, 1=Yes)" msgstr "Use TLS" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "Use SSL (0=No, 1=Yes)" msgstr "Use SSL" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP username" msgstr "SMTP-Benutzername" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "SMTP password" msgstr "SMTP-Kennwort" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Mail from option" msgstr "Die Adresse des Absenders der E-Mail" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "Payment gateway URL" msgstr "URL des Zahlungsgateways" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Payment gateway token" msgstr "Zahlungsgateway-Token" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Payment gateway minimum amount" msgstr "Mindestbetrag für das Zahlungsgateway" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "Payment gateway maximum amount" msgstr "Höchstbetrag des Zahlungsgateways" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "Exchange rate API key" msgstr "Wechselkurs-API-Schlüssel" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenAI API Key" msgstr "OpenAI API Key" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "Abstract API Key" msgstr "Abstrakter API-Schlüssel" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "HTTP Proxy" msgstr "HTTP-Proxy" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Disable buy functionality" msgstr "Kauffunktionalität deaktivieren" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "An entity for storing advertisiment data" msgstr "Eine Einheit zur Speicherung von Werbedaten" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing analytics data" msgstr "Eine Einheit zur Speicherung von Analysedaten" -#: evibes/settings/constance.py:52 +#: evibes/settings/constance.py:48 +msgid "Save responses from vendors' APIs" +msgstr "Speichern von Antworten aus den APIs von Anbietern" + +#: evibes/settings/constance.py:54 msgid "General Options" msgstr "Allgemeine Optionen" -#: evibes/settings/constance.py:60 +#: evibes/settings/constance.py:62 msgid "Email Options" msgstr "E-Mail-Optionen" -#: evibes/settings/constance.py:69 +#: evibes/settings/constance.py:72 msgid "Payment Gateway Options" msgstr "Zahlungs-Gateway-Optionen" -#: evibes/settings/constance.py:76 +#: evibes/settings/constance.py:79 msgid "Features Options" msgstr "Merkmale Optionen" -#: evibes/settings/constance.py:83 +#: evibes/settings/constance.py:86 msgid "SEO Options" msgstr "SEO-Optionen" +#: evibes/settings/constance.py:90 +msgid "Debugging Options" +msgstr "Debugging-Optionen" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "Startseite" diff --git a/evibes/locale/en_GB/LC_MESSAGES/django.mo b/evibes/locale/en_GB/LC_MESSAGES/django.mo index b86120e2..f3bbb6fa 100644 Binary files a/evibes/locale/en_GB/LC_MESSAGES/django.mo and b/evibes/locale/en_GB/LC_MESSAGES/django.mo differ diff --git a/evibes/locale/en_GB/LC_MESSAGES/django.po b/evibes/locale/en_GB/LC_MESSAGES/django.po index 6c4fe8c7..7ec96eea 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-10-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -42,101 +42,113 @@ msgid "Phone number of the company" msgstr "Phone number of the company" #: evibes/settings/constance.py:28 +msgid "!!!DO NOT CHANGE" +msgstr "!!!DO NOT CHANGE" + +#: evibes/settings/constance.py:29 msgid "SMTP host" msgstr "SMTP host" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "SMTP port" msgstr "SMTP port" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "Use TLS (0=No, 1=Yes)" msgstr "Use TLS" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "Use SSL (0=No, 1=Yes)" msgstr "Use SSL" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP username" msgstr "SMTP username" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "SMTP password" msgstr "SMTP password" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Mail from option" msgstr "The address of the emails sender" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "Payment gateway URL" msgstr "Payment gateway URL" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Payment gateway token" msgstr "Payment gateway token" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Payment gateway minimum amount" msgstr "Payment gateway minimum amount" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "Payment gateway maximum amount" msgstr "Payment gateway maximum amount" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "Exchange rate API key" msgstr "Exchange rate API key" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenAI API Key" msgstr "OpenAI API Key" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "Abstract API Key" msgstr "Abstract API Key" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "HTTP Proxy" msgstr "HTTP Proxy" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Disable buy functionality" msgstr "Disable buy functionality" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "An entity for storing advertisiment data" msgstr "An entity for storing advertisiment data" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing analytics data" msgstr "An entity for storing analytics data" -#: evibes/settings/constance.py:52 +#: evibes/settings/constance.py:48 +msgid "Save responses from vendors' APIs" +msgstr "Save responses from vendors' APIs" + +#: evibes/settings/constance.py:54 msgid "General Options" msgstr "General Options" -#: evibes/settings/constance.py:60 +#: evibes/settings/constance.py:62 msgid "Email Options" msgstr "Email Options" -#: evibes/settings/constance.py:69 +#: evibes/settings/constance.py:72 msgid "Payment Gateway Options" msgstr "Payment Gateway Options" -#: evibes/settings/constance.py:76 +#: evibes/settings/constance.py:79 msgid "Features Options" msgstr "Features Options" -#: evibes/settings/constance.py:83 +#: evibes/settings/constance.py:86 msgid "SEO Options" msgstr "SEO Options" +#: evibes/settings/constance.py:90 +msgid "Debugging Options" +msgstr "Debugging Options" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "Home" diff --git a/evibes/locale/en_US/LC_MESSAGES/django.mo b/evibes/locale/en_US/LC_MESSAGES/django.mo index f03eae6d..5a503738 100644 Binary files a/evibes/locale/en_US/LC_MESSAGES/django.mo and b/evibes/locale/en_US/LC_MESSAGES/django.mo differ diff --git a/evibes/locale/en_US/LC_MESSAGES/django.po b/evibes/locale/en_US/LC_MESSAGES/django.po index 9af5534f..17ce3137 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-10-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -38,101 +38,113 @@ msgid "Phone number of the company" msgstr "Phone number of the company" #: evibes/settings/constance.py:28 +msgid "!!!DO NOT CHANGE" +msgstr "!!!DO NOT CHANGE" + +#: evibes/settings/constance.py:29 msgid "SMTP host" msgstr "SMTP host" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "SMTP port" msgstr "SMTP port" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "Use TLS (0=No, 1=Yes)" msgstr "Use TLS" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "Use SSL (0=No, 1=Yes)" msgstr "Use SSL" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP username" msgstr "SMTP username" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "SMTP password" msgstr "SMTP password" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Mail from option" msgstr "The address of the emails sender" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "Payment gateway URL" msgstr "Payment gateway URL" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Payment gateway token" msgstr "Payment gateway token" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Payment gateway minimum amount" msgstr "Payment gateway minimum amount" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "Payment gateway maximum amount" msgstr "Payment gateway maximum amount" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "Exchange rate API key" msgstr "Exchange rate API key" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenAI API Key" msgstr "OpenAI API Key" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "Abstract API Key" msgstr "Abstract API Key" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "HTTP Proxy" msgstr "HTTP Proxy" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Disable buy functionality" msgstr "Disable buy functionality" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "An entity for storing advertisiment data" msgstr "An entity for storing advertisiment data" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing analytics data" msgstr "An entity for storing analytics data" -#: evibes/settings/constance.py:52 +#: evibes/settings/constance.py:48 +msgid "Save responses from vendors' APIs" +msgstr "Save responses from vendors' APIs" + +#: evibes/settings/constance.py:54 msgid "General Options" msgstr "General Options" -#: evibes/settings/constance.py:60 +#: evibes/settings/constance.py:62 msgid "Email Options" msgstr "Email Options" -#: evibes/settings/constance.py:69 +#: evibes/settings/constance.py:72 msgid "Payment Gateway Options" msgstr "Payment Gateway Options" -#: evibes/settings/constance.py:76 +#: evibes/settings/constance.py:79 msgid "Features Options" msgstr "Features Options" -#: evibes/settings/constance.py:83 +#: evibes/settings/constance.py:86 msgid "SEO Options" msgstr "SEO Options" +#: evibes/settings/constance.py:90 +msgid "Debugging Options" +msgstr "Debugging Options" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "Home" diff --git a/evibes/locale/es_ES/LC_MESSAGES/django.mo b/evibes/locale/es_ES/LC_MESSAGES/django.mo index 1dd8d649..57d145b6 100644 Binary files a/evibes/locale/es_ES/LC_MESSAGES/django.mo and b/evibes/locale/es_ES/LC_MESSAGES/django.mo differ diff --git a/evibes/locale/es_ES/LC_MESSAGES/django.po b/evibes/locale/es_ES/LC_MESSAGES/django.po index 139fc1ee..bac536da 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-10-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -38,101 +38,113 @@ msgid "Phone number of the company" msgstr "Número de teléfono de la empresa" #: evibes/settings/constance.py:28 +msgid "!!!DO NOT CHANGE" +msgstr "!!!NO CAMBIES" + +#: evibes/settings/constance.py:29 msgid "SMTP host" msgstr "Host SMTP" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "SMTP port" msgstr "Puerto SMTP" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "Use TLS (0=No, 1=Yes)" msgstr "Utilizar TLS" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "Use SSL (0=No, 1=Yes)" msgstr "Utilizar SSL" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP username" msgstr "Nombre de usuario SMTP" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "SMTP password" msgstr "Contraseña SMTP" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Mail from option" msgstr "Dirección del remitente del correo electrónico" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "Payment gateway URL" msgstr "URL de la pasarela de pago" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Payment gateway token" msgstr "Token de pasarela de pago" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Payment gateway minimum amount" msgstr "Importe mínimo de la pasarela de pago" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "Payment gateway maximum amount" msgstr "Importe máximo de la pasarela de pago" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "Exchange rate API key" msgstr "Clave API de tipo de cambio" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "OpenStreetMap Nominatim API URL" msgstr "URL de la API Nominatim de OpenStreetMap" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenAI API Key" msgstr "Clave API de OpenAI" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "Abstract API Key" msgstr "Clave API abstracta" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "HTTP Proxy" msgstr "Proxy HTTP" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Disable buy functionality" msgstr "Desactivar la función de compra" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "An entity for storing advertisiment data" msgstr "Una entidad para almacenar datos publicitarios" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing analytics data" msgstr "Una entidad para almacenar datos analíticos" -#: evibes/settings/constance.py:52 +#: evibes/settings/constance.py:48 +msgid "Save responses from vendors' APIs" +msgstr "Guardar las respuestas de las API de los proveedores" + +#: evibes/settings/constance.py:54 msgid "General Options" msgstr "Opciones generales" -#: evibes/settings/constance.py:60 +#: evibes/settings/constance.py:62 msgid "Email Options" msgstr "Opciones de correo electrónico" -#: evibes/settings/constance.py:69 +#: evibes/settings/constance.py:72 msgid "Payment Gateway Options" msgstr "Opciones de pasarela de pago" -#: evibes/settings/constance.py:76 +#: evibes/settings/constance.py:79 msgid "Features Options" msgstr "Características Opciones" -#: evibes/settings/constance.py:83 +#: evibes/settings/constance.py:86 msgid "SEO Options" msgstr "Opciones SEO" +#: evibes/settings/constance.py:90 +msgid "Debugging Options" +msgstr "Opciones de depuración" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "Inicio" diff --git a/evibes/locale/fa_IR/LC_MESSAGES/django.po b/evibes/locale/fa_IR/LC_MESSAGES/django.po index 4f089d97..4feadbd3 100644 --- a/evibes/locale/fa_IR/LC_MESSAGES/django.po +++ b/evibes/locale/fa_IR/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -41,101 +41,113 @@ msgid "Phone number of the company" msgstr "" #: evibes/settings/constance.py:28 -msgid "SMTP host" +msgid "!!!DO NOT CHANGE" msgstr "" #: evibes/settings/constance.py:29 -msgid "SMTP port" +msgid "SMTP host" msgstr "" #: evibes/settings/constance.py:30 -msgid "Use TLS (0=No, 1=Yes)" +msgid "SMTP port" msgstr "" #: evibes/settings/constance.py:31 -msgid "Use SSL (0=No, 1=Yes)" +msgid "Use TLS (0=No, 1=Yes)" msgstr "" #: evibes/settings/constance.py:32 -msgid "SMTP username" +msgid "Use SSL (0=No, 1=Yes)" msgstr "" #: evibes/settings/constance.py:33 -msgid "SMTP password" +msgid "SMTP username" msgstr "" #: evibes/settings/constance.py:34 -msgid "Mail from option" +msgid "SMTP password" msgstr "" #: evibes/settings/constance.py:35 -msgid "Payment gateway URL" +msgid "Mail from option" msgstr "" #: evibes/settings/constance.py:36 -msgid "Payment gateway token" +msgid "Payment gateway URL" msgstr "" #: evibes/settings/constance.py:37 -msgid "Payment gateway minimum amount" +msgid "Payment gateway token" msgstr "" #: evibes/settings/constance.py:38 -msgid "Payment gateway maximum amount" +msgid "Payment gateway minimum amount" msgstr "" #: evibes/settings/constance.py:39 -msgid "Exchange rate API key" +msgid "Payment gateway maximum amount" msgstr "" #: evibes/settings/constance.py:40 -msgid "OpenStreetMap Nominatim API URL" +msgid "Exchange rate API key" msgstr "" #: evibes/settings/constance.py:41 -msgid "OpenAI API Key" +msgid "OpenStreetMap Nominatim API URL" msgstr "" #: evibes/settings/constance.py:42 -msgid "Abstract API Key" +msgid "OpenAI API Key" msgstr "" #: evibes/settings/constance.py:43 -msgid "HTTP Proxy" +msgid "Abstract API Key" msgstr "" #: evibes/settings/constance.py:44 -msgid "Disable buy functionality" +msgid "HTTP Proxy" msgstr "" #: evibes/settings/constance.py:45 -msgid "An entity for storing advertisiment data" +msgid "Disable buy functionality" msgstr "" #: evibes/settings/constance.py:46 +msgid "An entity for storing advertisiment data" +msgstr "" + +#: evibes/settings/constance.py:47 msgid "An entity for storing analytics data" msgstr "" -#: evibes/settings/constance.py:52 +#: evibes/settings/constance.py:48 +msgid "Save responses from vendors' APIs" +msgstr "" + +#: evibes/settings/constance.py:54 msgid "General Options" msgstr "" -#: evibes/settings/constance.py:60 +#: evibes/settings/constance.py:62 msgid "Email Options" msgstr "" -#: evibes/settings/constance.py:69 +#: evibes/settings/constance.py:72 msgid "Payment Gateway Options" msgstr "" -#: evibes/settings/constance.py:76 +#: evibes/settings/constance.py:79 msgid "Features Options" msgstr "" -#: evibes/settings/constance.py:83 +#: evibes/settings/constance.py:86 msgid "SEO Options" msgstr "" +#: evibes/settings/constance.py:90 +msgid "Debugging Options" +msgstr "" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "" diff --git a/evibes/locale/fr_FR/LC_MESSAGES/django.mo b/evibes/locale/fr_FR/LC_MESSAGES/django.mo index 934a6290..1aca4009 100644 Binary files a/evibes/locale/fr_FR/LC_MESSAGES/django.mo and b/evibes/locale/fr_FR/LC_MESSAGES/django.mo differ diff --git a/evibes/locale/fr_FR/LC_MESSAGES/django.po b/evibes/locale/fr_FR/LC_MESSAGES/django.po index 9d2c39a9..1a4e65c5 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-10-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -38,101 +38,113 @@ msgid "Phone number of the company" msgstr "Numéro de téléphone de l'entreprise" #: evibes/settings/constance.py:28 +msgid "!!!DO NOT CHANGE" +msgstr "!!!NE PAS CHANGER" + +#: evibes/settings/constance.py:29 msgid "SMTP host" msgstr "Hôte SMTP" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "SMTP port" msgstr "SMTP port" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "Use TLS (0=No, 1=Yes)" msgstr "Utiliser TLS" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "Use SSL (0=No, 1=Yes)" msgstr "Use SSL" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP username" msgstr "Nom d'utilisateur SMTP" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "SMTP password" msgstr "Mot de passe SMTP" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Mail from option" msgstr "L'adresse de l'expéditeur du courrier électronique" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "Payment gateway URL" msgstr "URL de la passerelle de paiement" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Payment gateway token" msgstr "Jeton de passerelle de paiement" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Payment gateway minimum amount" msgstr "Montant minimum de la passerelle de paiement" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "Payment gateway maximum amount" msgstr "Montant maximum de la passerelle de paiement" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "Exchange rate API key" msgstr "Clé API pour le taux de change" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "OpenStreetMap Nominatim API URL" msgstr "URL de l'API OpenStreetMap Nominatim" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenAI API Key" msgstr "OpenAI API Key" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "Abstract API Key" msgstr "Clé API abstraite" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "HTTP Proxy" msgstr "HTTP Proxy" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Disable buy functionality" msgstr "Désactiver la fonctionnalité d'achat" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "An entity for storing advertisiment data" msgstr "Une entité pour stocker des données publicitaires" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing analytics data" msgstr "Une entité pour stocker des données analytiques" -#: evibes/settings/constance.py:52 +#: evibes/settings/constance.py:48 +msgid "Save responses from vendors' APIs" +msgstr "Sauvegarder les réponses des API des fournisseurs" + +#: evibes/settings/constance.py:54 msgid "General Options" msgstr "Options générales" -#: evibes/settings/constance.py:60 +#: evibes/settings/constance.py:62 msgid "Email Options" msgstr "Options de courrier électronique" -#: evibes/settings/constance.py:69 +#: evibes/settings/constance.py:72 msgid "Payment Gateway Options" msgstr "Options de passerelle de paiement" -#: evibes/settings/constance.py:76 +#: evibes/settings/constance.py:79 msgid "Features Options" msgstr "Caractéristiques Options" -#: evibes/settings/constance.py:83 +#: evibes/settings/constance.py:86 msgid "SEO Options" msgstr "Options de référencement" +#: evibes/settings/constance.py:90 +msgid "Debugging Options" +msgstr "Options de débogage" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "Accueil" diff --git a/evibes/locale/he_IL/LC_MESSAGES/django.mo b/evibes/locale/he_IL/LC_MESSAGES/django.mo index 39b85b16..7b018d39 100644 Binary files a/evibes/locale/he_IL/LC_MESSAGES/django.mo and b/evibes/locale/he_IL/LC_MESSAGES/django.mo differ diff --git a/evibes/locale/he_IL/LC_MESSAGES/django.po b/evibes/locale/he_IL/LC_MESSAGES/django.po index d1ed5731..260c02ce 100644 --- a/evibes/locale/he_IL/LC_MESSAGES/django.po +++ b/evibes/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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -38,101 +38,113 @@ msgid "Phone number of the company" msgstr "מספר הטלפון של החברה" #: evibes/settings/constance.py:28 +msgid "!!!DO NOT CHANGE" +msgstr "!!!אין לשנות" + +#: evibes/settings/constance.py:29 msgid "SMTP host" msgstr "מארח SMTP" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "SMTP port" msgstr "יציאת SMTP" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "Use TLS (0=No, 1=Yes)" msgstr "השתמש ב-TLS" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "Use SSL (0=No, 1=Yes)" msgstr "השתמש ב-SSL" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP username" msgstr "שם משתמש SMTP" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "SMTP password" msgstr "סיסמת SMTP" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Mail from option" msgstr "כתובת השולח של הודעות הדוא\"ל" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "Payment gateway URL" msgstr "כתובת URL של שער התשלומים" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Payment gateway token" msgstr "אסימון שער תשלום" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Payment gateway minimum amount" msgstr "סכום מינימום לשער תשלום" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "Payment gateway maximum amount" msgstr "סכום מקסימלי בשער התשלומים" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "Exchange rate API key" msgstr "מפתח API לשער החליפין" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "OpenStreetMap Nominatim API URL" msgstr "כתובת ה-API של OpenStreetMap Nominatim" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenAI API Key" msgstr "מפתח API של OpenAI" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "Abstract API Key" msgstr "מפתח API מופשט" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "HTTP Proxy" msgstr "פרוקסי HTTP" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Disable buy functionality" msgstr "השבת פונקציונליות הרכישה" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "An entity for storing advertisiment data" msgstr "ישות לאחסון נתוני פרסום" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing analytics data" msgstr "ישות לאחסון נתוני ניתוח" -#: evibes/settings/constance.py:52 +#: evibes/settings/constance.py:48 +msgid "Save responses from vendors' APIs" +msgstr "שמור תגובות מ-API של ספקים" + +#: evibes/settings/constance.py:54 msgid "General Options" msgstr "אפשרויות כלליות" -#: evibes/settings/constance.py:60 +#: evibes/settings/constance.py:62 msgid "Email Options" msgstr "אפשרויות דוא\"ל" -#: evibes/settings/constance.py:69 +#: evibes/settings/constance.py:72 msgid "Payment Gateway Options" msgstr "אפשרויות שער תשלום" -#: evibes/settings/constance.py:76 +#: evibes/settings/constance.py:79 msgid "Features Options" msgstr "אפשרויות תכונות" -#: evibes/settings/constance.py:83 +#: evibes/settings/constance.py:86 msgid "SEO Options" msgstr "אפשרויות SEO" +#: evibes/settings/constance.py:90 +msgid "Debugging Options" +msgstr "אפשרויות ניפוי באגים" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "בית" diff --git a/evibes/locale/hi_IN/LC_MESSAGES/django.po b/evibes/locale/hi_IN/LC_MESSAGES/django.po index 663652a1..1ebb926e 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-10-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -41,101 +41,113 @@ msgid "Phone number of the company" msgstr "" #: evibes/settings/constance.py:28 -msgid "SMTP host" +msgid "!!!DO NOT CHANGE" msgstr "" #: evibes/settings/constance.py:29 -msgid "SMTP port" +msgid "SMTP host" msgstr "" #: evibes/settings/constance.py:30 -msgid "Use TLS (0=No, 1=Yes)" +msgid "SMTP port" msgstr "" #: evibes/settings/constance.py:31 -msgid "Use SSL (0=No, 1=Yes)" +msgid "Use TLS (0=No, 1=Yes)" msgstr "" #: evibes/settings/constance.py:32 -msgid "SMTP username" +msgid "Use SSL (0=No, 1=Yes)" msgstr "" #: evibes/settings/constance.py:33 -msgid "SMTP password" +msgid "SMTP username" msgstr "" #: evibes/settings/constance.py:34 -msgid "Mail from option" +msgid "SMTP password" msgstr "" #: evibes/settings/constance.py:35 -msgid "Payment gateway URL" +msgid "Mail from option" msgstr "" #: evibes/settings/constance.py:36 -msgid "Payment gateway token" +msgid "Payment gateway URL" msgstr "" #: evibes/settings/constance.py:37 -msgid "Payment gateway minimum amount" +msgid "Payment gateway token" msgstr "" #: evibes/settings/constance.py:38 -msgid "Payment gateway maximum amount" +msgid "Payment gateway minimum amount" msgstr "" #: evibes/settings/constance.py:39 -msgid "Exchange rate API key" +msgid "Payment gateway maximum amount" msgstr "" #: evibes/settings/constance.py:40 -msgid "OpenStreetMap Nominatim API URL" +msgid "Exchange rate API key" msgstr "" #: evibes/settings/constance.py:41 -msgid "OpenAI API Key" +msgid "OpenStreetMap Nominatim API URL" msgstr "" #: evibes/settings/constance.py:42 -msgid "Abstract API Key" +msgid "OpenAI API Key" msgstr "" #: evibes/settings/constance.py:43 -msgid "HTTP Proxy" +msgid "Abstract API Key" msgstr "" #: evibes/settings/constance.py:44 -msgid "Disable buy functionality" +msgid "HTTP Proxy" msgstr "" #: evibes/settings/constance.py:45 -msgid "An entity for storing advertisiment data" +msgid "Disable buy functionality" msgstr "" #: evibes/settings/constance.py:46 +msgid "An entity for storing advertisiment data" +msgstr "" + +#: evibes/settings/constance.py:47 msgid "An entity for storing analytics data" msgstr "" -#: evibes/settings/constance.py:52 +#: evibes/settings/constance.py:48 +msgid "Save responses from vendors' APIs" +msgstr "" + +#: evibes/settings/constance.py:54 msgid "General Options" msgstr "" -#: evibes/settings/constance.py:60 +#: evibes/settings/constance.py:62 msgid "Email Options" msgstr "" -#: evibes/settings/constance.py:69 +#: evibes/settings/constance.py:72 msgid "Payment Gateway Options" msgstr "" -#: evibes/settings/constance.py:76 +#: evibes/settings/constance.py:79 msgid "Features Options" msgstr "" -#: evibes/settings/constance.py:83 +#: evibes/settings/constance.py:86 msgid "SEO Options" msgstr "" +#: evibes/settings/constance.py:90 +msgid "Debugging Options" +msgstr "" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "" diff --git a/evibes/locale/hr_HR/LC_MESSAGES/django.po b/evibes/locale/hr_HR/LC_MESSAGES/django.po index 4f089d97..4feadbd3 100644 --- a/evibes/locale/hr_HR/LC_MESSAGES/django.po +++ b/evibes/locale/hr_HR/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -41,101 +41,113 @@ msgid "Phone number of the company" msgstr "" #: evibes/settings/constance.py:28 -msgid "SMTP host" +msgid "!!!DO NOT CHANGE" msgstr "" #: evibes/settings/constance.py:29 -msgid "SMTP port" +msgid "SMTP host" msgstr "" #: evibes/settings/constance.py:30 -msgid "Use TLS (0=No, 1=Yes)" +msgid "SMTP port" msgstr "" #: evibes/settings/constance.py:31 -msgid "Use SSL (0=No, 1=Yes)" +msgid "Use TLS (0=No, 1=Yes)" msgstr "" #: evibes/settings/constance.py:32 -msgid "SMTP username" +msgid "Use SSL (0=No, 1=Yes)" msgstr "" #: evibes/settings/constance.py:33 -msgid "SMTP password" +msgid "SMTP username" msgstr "" #: evibes/settings/constance.py:34 -msgid "Mail from option" +msgid "SMTP password" msgstr "" #: evibes/settings/constance.py:35 -msgid "Payment gateway URL" +msgid "Mail from option" msgstr "" #: evibes/settings/constance.py:36 -msgid "Payment gateway token" +msgid "Payment gateway URL" msgstr "" #: evibes/settings/constance.py:37 -msgid "Payment gateway minimum amount" +msgid "Payment gateway token" msgstr "" #: evibes/settings/constance.py:38 -msgid "Payment gateway maximum amount" +msgid "Payment gateway minimum amount" msgstr "" #: evibes/settings/constance.py:39 -msgid "Exchange rate API key" +msgid "Payment gateway maximum amount" msgstr "" #: evibes/settings/constance.py:40 -msgid "OpenStreetMap Nominatim API URL" +msgid "Exchange rate API key" msgstr "" #: evibes/settings/constance.py:41 -msgid "OpenAI API Key" +msgid "OpenStreetMap Nominatim API URL" msgstr "" #: evibes/settings/constance.py:42 -msgid "Abstract API Key" +msgid "OpenAI API Key" msgstr "" #: evibes/settings/constance.py:43 -msgid "HTTP Proxy" +msgid "Abstract API Key" msgstr "" #: evibes/settings/constance.py:44 -msgid "Disable buy functionality" +msgid "HTTP Proxy" msgstr "" #: evibes/settings/constance.py:45 -msgid "An entity for storing advertisiment data" +msgid "Disable buy functionality" msgstr "" #: evibes/settings/constance.py:46 +msgid "An entity for storing advertisiment data" +msgstr "" + +#: evibes/settings/constance.py:47 msgid "An entity for storing analytics data" msgstr "" -#: evibes/settings/constance.py:52 +#: evibes/settings/constance.py:48 +msgid "Save responses from vendors' APIs" +msgstr "" + +#: evibes/settings/constance.py:54 msgid "General Options" msgstr "" -#: evibes/settings/constance.py:60 +#: evibes/settings/constance.py:62 msgid "Email Options" msgstr "" -#: evibes/settings/constance.py:69 +#: evibes/settings/constance.py:72 msgid "Payment Gateway Options" msgstr "" -#: evibes/settings/constance.py:76 +#: evibes/settings/constance.py:79 msgid "Features Options" msgstr "" -#: evibes/settings/constance.py:83 +#: evibes/settings/constance.py:86 msgid "SEO Options" msgstr "" +#: evibes/settings/constance.py:90 +msgid "Debugging Options" +msgstr "" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "" diff --git a/evibes/locale/id_ID/LC_MESSAGES/django.mo b/evibes/locale/id_ID/LC_MESSAGES/django.mo index b85a517a..93b5cec1 100644 Binary files a/evibes/locale/id_ID/LC_MESSAGES/django.mo and b/evibes/locale/id_ID/LC_MESSAGES/django.mo differ diff --git a/evibes/locale/id_ID/LC_MESSAGES/django.po b/evibes/locale/id_ID/LC_MESSAGES/django.po index 6e1cadeb..110e475d 100644 --- a/evibes/locale/id_ID/LC_MESSAGES/django.po +++ b/evibes/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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -38,101 +38,113 @@ msgid "Phone number of the company" msgstr "Nomor telepon perusahaan" #: evibes/settings/constance.py:28 +msgid "!!!DO NOT CHANGE" +msgstr "!!!JANGAN BERUBAH" + +#: evibes/settings/constance.py:29 msgid "SMTP host" msgstr "Host SMTP" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "SMTP port" msgstr "Port SMTP" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "Use TLS (0=No, 1=Yes)" msgstr "Gunakan TLS" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "Use SSL (0=No, 1=Yes)" msgstr "Gunakan SSL" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP username" msgstr "Nama pengguna SMTP" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "SMTP password" msgstr "Kata sandi SMTP" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Mail from option" msgstr "Alamat pengirim email" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "Payment gateway URL" msgstr "URL gateway pembayaran" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Payment gateway token" msgstr "Token gateway pembayaran" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Payment gateway minimum amount" msgstr "Jumlah minimum gateway pembayaran" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "Payment gateway maximum amount" msgstr "Jumlah maksimum gateway pembayaran" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "Exchange rate API key" msgstr "Kunci API nilai tukar" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "OpenStreetMap Nominatim API URL" msgstr "URL API OpenStreetMap Nominatim" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenAI API Key" msgstr "Kunci API OpenAI" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "Abstract API Key" msgstr "Kunci API Abstrak" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "HTTP Proxy" msgstr "Proksi HTTP" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Disable buy functionality" msgstr "Menonaktifkan fungsionalitas beli" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "An entity for storing advertisiment data" msgstr "Entitas untuk menyimpan data iklan" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing analytics data" msgstr "Entitas untuk menyimpan data analitik" -#: evibes/settings/constance.py:52 +#: evibes/settings/constance.py:48 +msgid "Save responses from vendors' APIs" +msgstr "Menyimpan tanggapan dari API vendor" + +#: evibes/settings/constance.py:54 msgid "General Options" msgstr "Opsi Umum" -#: evibes/settings/constance.py:60 +#: evibes/settings/constance.py:62 msgid "Email Options" msgstr "Opsi Email" -#: evibes/settings/constance.py:69 +#: evibes/settings/constance.py:72 msgid "Payment Gateway Options" msgstr "Opsi Gerbang Pembayaran" -#: evibes/settings/constance.py:76 +#: evibes/settings/constance.py:79 msgid "Features Options" msgstr "Opsi Fitur" -#: evibes/settings/constance.py:83 +#: evibes/settings/constance.py:86 msgid "SEO Options" msgstr "Opsi SEO" +#: evibes/settings/constance.py:90 +msgid "Debugging Options" +msgstr "Opsi Debugging" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "Beranda" diff --git a/evibes/locale/it_IT/LC_MESSAGES/django.mo b/evibes/locale/it_IT/LC_MESSAGES/django.mo index bb74b8cb..82dc635a 100644 Binary files a/evibes/locale/it_IT/LC_MESSAGES/django.mo and b/evibes/locale/it_IT/LC_MESSAGES/django.mo differ diff --git a/evibes/locale/it_IT/LC_MESSAGES/django.po b/evibes/locale/it_IT/LC_MESSAGES/django.po index e4041432..2d2c3c9f 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-10-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -38,101 +38,113 @@ msgid "Phone number of the company" msgstr "Numero di telefono dell'azienda" #: evibes/settings/constance.py:28 +msgid "!!!DO NOT CHANGE" +msgstr "NON CAMBIARE" + +#: evibes/settings/constance.py:29 msgid "SMTP host" msgstr "Host SMTP" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "SMTP port" msgstr "Porta SMTP" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "Use TLS (0=No, 1=Yes)" msgstr "Utilizzare TLS" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "Use SSL (0=No, 1=Yes)" msgstr "Utilizzare SSL" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP username" msgstr "Nome utente SMTP" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "SMTP password" msgstr "Password SMTP" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Mail from option" msgstr "L'indirizzo del mittente dell'e-mail" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "Payment gateway URL" msgstr "URL del gateway di pagamento" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Payment gateway token" msgstr "Token del gateway di pagamento" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Payment gateway minimum amount" msgstr "Importo minimo del gateway di pagamento" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "Payment gateway maximum amount" msgstr "Importo massimo del gateway di pagamento" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "Exchange rate API key" msgstr "Chiave API del tasso di cambio" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "OpenStreetMap Nominatim API URL" msgstr "URL dell'API OpenStreetMap Nominatim" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenAI API Key" msgstr "Chiave API OpenAI" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "Abstract API Key" msgstr "Chiave API astratta" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "HTTP Proxy" msgstr "Proxy HTTP" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Disable buy functionality" msgstr "Disattivare la funzionalità di acquisto" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "An entity for storing advertisiment data" msgstr "Un'entità per la memorizzazione dei dati pubblicitari" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing analytics data" msgstr "Un'entità per la memorizzazione dei dati analitici" -#: evibes/settings/constance.py:52 +#: evibes/settings/constance.py:48 +msgid "Save responses from vendors' APIs" +msgstr "Salvare le risposte dalle API dei fornitori" + +#: evibes/settings/constance.py:54 msgid "General Options" msgstr "Opzioni generali" -#: evibes/settings/constance.py:60 +#: evibes/settings/constance.py:62 msgid "Email Options" msgstr "Opzioni e-mail" -#: evibes/settings/constance.py:69 +#: evibes/settings/constance.py:72 msgid "Payment Gateway Options" msgstr "Opzioni di gateway di pagamento" -#: evibes/settings/constance.py:76 +#: evibes/settings/constance.py:79 msgid "Features Options" msgstr "Caratteristiche Opzioni" -#: evibes/settings/constance.py:83 +#: evibes/settings/constance.py:86 msgid "SEO Options" msgstr "Opzioni SEO" +#: evibes/settings/constance.py:90 +msgid "Debugging Options" +msgstr "Opzioni di debug" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "Casa" diff --git a/evibes/locale/ja_JP/LC_MESSAGES/django.mo b/evibes/locale/ja_JP/LC_MESSAGES/django.mo index f5e39b8c..e11945d6 100644 Binary files a/evibes/locale/ja_JP/LC_MESSAGES/django.mo and b/evibes/locale/ja_JP/LC_MESSAGES/django.mo differ diff --git a/evibes/locale/ja_JP/LC_MESSAGES/django.po b/evibes/locale/ja_JP/LC_MESSAGES/django.po index 443b7de8..0871c02c 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-10-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -38,101 +38,113 @@ msgid "Phone number of the company" msgstr "会社の電話番号" #: evibes/settings/constance.py:28 +msgid "!!!DO NOT CHANGE" +msgstr "変えないでくれ" + +#: evibes/settings/constance.py:29 msgid "SMTP host" msgstr "SMTPホスト" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "SMTP port" msgstr "SMTPポート" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "Use TLS (0=No, 1=Yes)" msgstr "TLSを使用する" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "Use SSL (0=No, 1=Yes)" msgstr "SSLの使用" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP username" msgstr "SMTPユーザー名" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "SMTP password" msgstr "SMTPパスワード" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Mail from option" msgstr "メール送信者のアドレス" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "Payment gateway URL" msgstr "決済ゲートウェイURL" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Payment gateway token" msgstr "ペイメントゲートウェイ・トークン" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Payment gateway minimum amount" msgstr "ペイメントゲートウェイの最低金額" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "Payment gateway maximum amount" msgstr "支払ゲートウェイ上限額" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "Exchange rate API key" msgstr "為替レートAPIキー" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenAI API Key" msgstr "OpenAI APIキー" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "Abstract API Key" msgstr "抽象APIキー" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "HTTP Proxy" msgstr "HTTPプロキシ" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Disable buy functionality" msgstr "購入機能を無効にする" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "An entity for storing advertisiment data" msgstr "広告データを保存するエンティティ" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing analytics data" msgstr "分析データを保存するエンティティ" -#: evibes/settings/constance.py:52 +#: evibes/settings/constance.py:48 +msgid "Save responses from vendors' APIs" +msgstr "ベンダーのAPIからの応答を保存する" + +#: evibes/settings/constance.py:54 msgid "General Options" msgstr "一般オプション" -#: evibes/settings/constance.py:60 +#: evibes/settings/constance.py:62 msgid "Email Options" msgstr "Eメールオプション" -#: evibes/settings/constance.py:69 +#: evibes/settings/constance.py:72 msgid "Payment Gateway Options" msgstr "ペイメントゲートウェイオプション" -#: evibes/settings/constance.py:76 +#: evibes/settings/constance.py:79 msgid "Features Options" msgstr "機能オプション" -#: evibes/settings/constance.py:83 +#: evibes/settings/constance.py:86 msgid "SEO Options" msgstr "SEOオプション" +#: evibes/settings/constance.py:90 +msgid "Debugging Options" +msgstr "デバッグ・オプション" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "ホーム" diff --git a/evibes/locale/kk_KZ/LC_MESSAGES/django.po b/evibes/locale/kk_KZ/LC_MESSAGES/django.po index 663652a1..1ebb926e 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-10-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -41,101 +41,113 @@ msgid "Phone number of the company" msgstr "" #: evibes/settings/constance.py:28 -msgid "SMTP host" +msgid "!!!DO NOT CHANGE" msgstr "" #: evibes/settings/constance.py:29 -msgid "SMTP port" +msgid "SMTP host" msgstr "" #: evibes/settings/constance.py:30 -msgid "Use TLS (0=No, 1=Yes)" +msgid "SMTP port" msgstr "" #: evibes/settings/constance.py:31 -msgid "Use SSL (0=No, 1=Yes)" +msgid "Use TLS (0=No, 1=Yes)" msgstr "" #: evibes/settings/constance.py:32 -msgid "SMTP username" +msgid "Use SSL (0=No, 1=Yes)" msgstr "" #: evibes/settings/constance.py:33 -msgid "SMTP password" +msgid "SMTP username" msgstr "" #: evibes/settings/constance.py:34 -msgid "Mail from option" +msgid "SMTP password" msgstr "" #: evibes/settings/constance.py:35 -msgid "Payment gateway URL" +msgid "Mail from option" msgstr "" #: evibes/settings/constance.py:36 -msgid "Payment gateway token" +msgid "Payment gateway URL" msgstr "" #: evibes/settings/constance.py:37 -msgid "Payment gateway minimum amount" +msgid "Payment gateway token" msgstr "" #: evibes/settings/constance.py:38 -msgid "Payment gateway maximum amount" +msgid "Payment gateway minimum amount" msgstr "" #: evibes/settings/constance.py:39 -msgid "Exchange rate API key" +msgid "Payment gateway maximum amount" msgstr "" #: evibes/settings/constance.py:40 -msgid "OpenStreetMap Nominatim API URL" +msgid "Exchange rate API key" msgstr "" #: evibes/settings/constance.py:41 -msgid "OpenAI API Key" +msgid "OpenStreetMap Nominatim API URL" msgstr "" #: evibes/settings/constance.py:42 -msgid "Abstract API Key" +msgid "OpenAI API Key" msgstr "" #: evibes/settings/constance.py:43 -msgid "HTTP Proxy" +msgid "Abstract API Key" msgstr "" #: evibes/settings/constance.py:44 -msgid "Disable buy functionality" +msgid "HTTP Proxy" msgstr "" #: evibes/settings/constance.py:45 -msgid "An entity for storing advertisiment data" +msgid "Disable buy functionality" msgstr "" #: evibes/settings/constance.py:46 +msgid "An entity for storing advertisiment data" +msgstr "" + +#: evibes/settings/constance.py:47 msgid "An entity for storing analytics data" msgstr "" -#: evibes/settings/constance.py:52 +#: evibes/settings/constance.py:48 +msgid "Save responses from vendors' APIs" +msgstr "" + +#: evibes/settings/constance.py:54 msgid "General Options" msgstr "" -#: evibes/settings/constance.py:60 +#: evibes/settings/constance.py:62 msgid "Email Options" msgstr "" -#: evibes/settings/constance.py:69 +#: evibes/settings/constance.py:72 msgid "Payment Gateway Options" msgstr "" -#: evibes/settings/constance.py:76 +#: evibes/settings/constance.py:79 msgid "Features Options" msgstr "" -#: evibes/settings/constance.py:83 +#: evibes/settings/constance.py:86 msgid "SEO Options" msgstr "" +#: evibes/settings/constance.py:90 +msgid "Debugging Options" +msgstr "" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "" diff --git a/evibes/locale/ko_KR/LC_MESSAGES/django.mo b/evibes/locale/ko_KR/LC_MESSAGES/django.mo index 34109327..c16cdecf 100644 Binary files a/evibes/locale/ko_KR/LC_MESSAGES/django.mo and b/evibes/locale/ko_KR/LC_MESSAGES/django.mo differ diff --git a/evibes/locale/ko_KR/LC_MESSAGES/django.po b/evibes/locale/ko_KR/LC_MESSAGES/django.po index 726a6f19..c76898a5 100644 --- a/evibes/locale/ko_KR/LC_MESSAGES/django.po +++ b/evibes/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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -38,101 +38,113 @@ msgid "Phone number of the company" msgstr "회사 전화번호" #: evibes/settings/constance.py:28 +msgid "!!!DO NOT CHANGE" +msgstr "!!!변경하지 마십시오" + +#: evibes/settings/constance.py:29 msgid "SMTP host" msgstr "SMTP 호스트" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "SMTP port" msgstr "SMTP 포트" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "Use TLS (0=No, 1=Yes)" msgstr "TLS 사용" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "Use SSL (0=No, 1=Yes)" msgstr "SSL 사용" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP username" msgstr "SMTP 사용자 이름" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "SMTP password" msgstr "SMTP 비밀번호" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Mail from option" msgstr "이메일 발신자의 주소" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "Payment gateway URL" msgstr "결제 게이트웨이 URL" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Payment gateway token" msgstr "결제 게이트웨이 토큰" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Payment gateway minimum amount" msgstr "결제 대행사 최소 금액" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "Payment gateway maximum amount" msgstr "전자결제 대행사 최대 금액" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "Exchange rate API key" msgstr "환율 API 키" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "OpenStreetMap Nominatim API URL" msgstr "오픈스트리트맵 노미나팀 API URL" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenAI API Key" msgstr "OpenAI API 키" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "Abstract API Key" msgstr "추상 API 키" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "HTTP Proxy" msgstr "HTTP 프록시" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Disable buy functionality" msgstr "구매 기능 비활성화" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "An entity for storing advertisiment data" msgstr "광고 데이터를 저장하는 엔티티" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing analytics data" msgstr "분석 데이터를 저장하는 엔티티" -#: evibes/settings/constance.py:52 +#: evibes/settings/constance.py:48 +msgid "Save responses from vendors' APIs" +msgstr "공급업체 API의 응답 저장하기" + +#: evibes/settings/constance.py:54 msgid "General Options" msgstr "일반 옵션" -#: evibes/settings/constance.py:60 +#: evibes/settings/constance.py:62 msgid "Email Options" msgstr "이메일 옵션" -#: evibes/settings/constance.py:69 +#: evibes/settings/constance.py:72 msgid "Payment Gateway Options" msgstr "결제 게이트웨이 옵션" -#: evibes/settings/constance.py:76 +#: evibes/settings/constance.py:79 msgid "Features Options" msgstr "기능 옵션" -#: evibes/settings/constance.py:83 +#: evibes/settings/constance.py:86 msgid "SEO Options" msgstr "SEO 옵션" +#: evibes/settings/constance.py:90 +msgid "Debugging Options" +msgstr "디버깅 옵션" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "홈" diff --git a/evibes/locale/nl_NL/LC_MESSAGES/django.mo b/evibes/locale/nl_NL/LC_MESSAGES/django.mo index def1f3a3..8ba012f9 100644 Binary files a/evibes/locale/nl_NL/LC_MESSAGES/django.mo and b/evibes/locale/nl_NL/LC_MESSAGES/django.mo differ diff --git a/evibes/locale/nl_NL/LC_MESSAGES/django.po b/evibes/locale/nl_NL/LC_MESSAGES/django.po index 50d20daa..ed214bbe 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-10-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -38,101 +38,113 @@ msgid "Phone number of the company" msgstr "Telefoonnummer van het bedrijf" #: evibes/settings/constance.py:28 +msgid "!!!DO NOT CHANGE" +msgstr "NIET VERANDEREN" + +#: evibes/settings/constance.py:29 msgid "SMTP host" msgstr "SMTP host" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "SMTP port" msgstr "SMTP poort" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "Use TLS (0=No, 1=Yes)" msgstr "TLS gebruiken" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "Use SSL (0=No, 1=Yes)" msgstr "SSL gebruiken" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP username" msgstr "SMTP gebruikersnaam" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "SMTP password" msgstr "SMTP wachtwoord" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Mail from option" msgstr "Het adres van de afzender van de e-mail" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "Payment gateway URL" msgstr "URL betalingsgateway" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Payment gateway token" msgstr "Betaal gateway token" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Payment gateway minimum amount" msgstr "Minimumbedrag betalingsgateway" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "Payment gateway maximum amount" msgstr "Maximumbedrag betalingsgateway" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "Exchange rate API key" msgstr "Wisselkoers API sleutel" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenAI API Key" msgstr "OpenAI API sleutel" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "Abstract API Key" msgstr "Abstracte API-sleutel" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "HTTP Proxy" msgstr "HTTP-proxy" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Disable buy functionality" msgstr "Koopfunctie uitschakelen" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "An entity for storing advertisiment data" msgstr "Een entiteit voor het opslaan van adverteerdersgegevens" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing analytics data" msgstr "Een entiteit voor het opslaan van analytische gegevens" -#: evibes/settings/constance.py:52 +#: evibes/settings/constance.py:48 +msgid "Save responses from vendors' APIs" +msgstr "Reacties opslaan van API's van leveranciers" + +#: evibes/settings/constance.py:54 msgid "General Options" msgstr "Algemene opties" -#: evibes/settings/constance.py:60 +#: evibes/settings/constance.py:62 msgid "Email Options" msgstr "E-mailopties" -#: evibes/settings/constance.py:69 +#: evibes/settings/constance.py:72 msgid "Payment Gateway Options" msgstr "Opties voor betalingsgateways" -#: evibes/settings/constance.py:76 +#: evibes/settings/constance.py:79 msgid "Features Options" msgstr "Functies Opties" -#: evibes/settings/constance.py:83 +#: evibes/settings/constance.py:86 msgid "SEO Options" msgstr "SEO Opties" +#: evibes/settings/constance.py:90 +msgid "Debugging Options" +msgstr "Debugopties" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "Home" diff --git a/evibes/locale/no_NO/LC_MESSAGES/django.mo b/evibes/locale/no_NO/LC_MESSAGES/django.mo index 30a56d7f..33066ed1 100644 Binary files a/evibes/locale/no_NO/LC_MESSAGES/django.mo and b/evibes/locale/no_NO/LC_MESSAGES/django.mo differ diff --git a/evibes/locale/no_NO/LC_MESSAGES/django.po b/evibes/locale/no_NO/LC_MESSAGES/django.po index 2c7db91d..737be3bb 100644 --- a/evibes/locale/no_NO/LC_MESSAGES/django.po +++ b/evibes/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-10-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -38,101 +38,113 @@ msgid "Phone number of the company" msgstr "Telefonnummer til selskapet" #: evibes/settings/constance.py:28 +msgid "!!!DO NOT CHANGE" +msgstr "!!! IKKE ENDRE" + +#: evibes/settings/constance.py:29 msgid "SMTP host" msgstr "SMTP-vert" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "SMTP port" msgstr "SMTP-port" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "Use TLS (0=No, 1=Yes)" msgstr "Bruk TLS" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "Use SSL (0=No, 1=Yes)" msgstr "Bruk SSL" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP username" msgstr "SMTP-brukernavn" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "SMTP password" msgstr "SMTP-passord" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Mail from option" msgstr "Adressen til avsenderen av e-posten" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "Payment gateway URL" msgstr "URL til betalingsgateway" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Payment gateway token" msgstr "Token for betalingsgateway" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Payment gateway minimum amount" msgstr "Minimumsbeløp for betalingsgateway" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "Payment gateway maximum amount" msgstr "Maksimumsbeløp for betalingsgateway" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "Exchange rate API key" msgstr "API-nøkkel for valutakurs" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenAI API Key" msgstr "OpenAI API-nøkkel" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "Abstract API Key" msgstr "Abstrakt API-nøkkel" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "HTTP Proxy" msgstr "HTTP-proxy" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Disable buy functionality" msgstr "Deaktiver kjøpsfunksjonalitet" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "An entity for storing advertisiment data" msgstr "En enhet for lagring av annonseringsdata" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing analytics data" msgstr "En enhet for lagring av analysedata" -#: evibes/settings/constance.py:52 +#: evibes/settings/constance.py:48 +msgid "Save responses from vendors' APIs" +msgstr "Lagre svar fra leverandørers API-er" + +#: evibes/settings/constance.py:54 msgid "General Options" msgstr "Generelle alternativer" -#: evibes/settings/constance.py:60 +#: evibes/settings/constance.py:62 msgid "Email Options" msgstr "E-postalternativer" -#: evibes/settings/constance.py:69 +#: evibes/settings/constance.py:72 msgid "Payment Gateway Options" msgstr "Alternativer for betalingsgateway" -#: evibes/settings/constance.py:76 +#: evibes/settings/constance.py:79 msgid "Features Options" msgstr "Funksjoner Alternativer" -#: evibes/settings/constance.py:83 +#: evibes/settings/constance.py:86 msgid "SEO Options" msgstr "SEO-alternativer" +#: evibes/settings/constance.py:90 +msgid "Debugging Options" +msgstr "Alternativer for feilsøking" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "Hjem" diff --git a/evibes/locale/pl_PL/LC_MESSAGES/django.mo b/evibes/locale/pl_PL/LC_MESSAGES/django.mo index 33b6928a..7b096549 100644 Binary files a/evibes/locale/pl_PL/LC_MESSAGES/django.mo and b/evibes/locale/pl_PL/LC_MESSAGES/django.mo differ diff --git a/evibes/locale/pl_PL/LC_MESSAGES/django.po b/evibes/locale/pl_PL/LC_MESSAGES/django.po index 3337b784..6100332b 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-10-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -38,101 +38,113 @@ msgid "Phone number of the company" msgstr "Numer telefonu firmy" #: evibes/settings/constance.py:28 +msgid "!!!DO NOT CHANGE" +msgstr "!!! NIE ZMIENIAJ" + +#: evibes/settings/constance.py:29 msgid "SMTP host" msgstr "Host SMTP" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "SMTP port" msgstr "Port SMTP" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "Use TLS (0=No, 1=Yes)" msgstr "Używanie TLS" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "Use SSL (0=No, 1=Yes)" msgstr "Używanie protokołu SSL" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP username" msgstr "Nazwa użytkownika SMTP" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "SMTP password" msgstr "Hasło SMTP" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Mail from option" msgstr "Adres nadawcy wiadomości e-mail" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "Payment gateway URL" msgstr "Adres URL bramki płatności" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Payment gateway token" msgstr "Token bramki płatności" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Payment gateway minimum amount" msgstr "Minimalna kwota bramki płatności" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "Payment gateway maximum amount" msgstr "Maksymalna kwota bramki płatności" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "Exchange rate API key" msgstr "Klucz API kursu wymiany" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "OpenStreetMap Nominatim API URL" msgstr "Adres URL interfejsu API OpenStreetMap Nominatim" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenAI API Key" msgstr "Klucz API OpenAI" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "Abstract API Key" msgstr "Abstrakcyjny klucz API" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "HTTP Proxy" msgstr "Serwer proxy HTTP" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Disable buy functionality" msgstr "Wyłączenie funkcji kupowania" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "An entity for storing advertisiment data" msgstr "Jednostka do przechowywania danych reklamowych" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing analytics data" msgstr "Jednostka do przechowywania danych analitycznych" -#: evibes/settings/constance.py:52 +#: evibes/settings/constance.py:48 +msgid "Save responses from vendors' APIs" +msgstr "Zapisywanie odpowiedzi z interfejsów API dostawców" + +#: evibes/settings/constance.py:54 msgid "General Options" msgstr "Opcje ogólne" -#: evibes/settings/constance.py:60 +#: evibes/settings/constance.py:62 msgid "Email Options" msgstr "Opcje e-mail" -#: evibes/settings/constance.py:69 +#: evibes/settings/constance.py:72 msgid "Payment Gateway Options" msgstr "Opcje bramki płatności" -#: evibes/settings/constance.py:76 +#: evibes/settings/constance.py:79 msgid "Features Options" msgstr "Opcje funkcji" -#: evibes/settings/constance.py:83 +#: evibes/settings/constance.py:86 msgid "SEO Options" msgstr "Opcje SEO" +#: evibes/settings/constance.py:90 +msgid "Debugging Options" +msgstr "Opcje debugowania" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "Strona główna" diff --git a/evibes/locale/pt_BR/LC_MESSAGES/django.mo b/evibes/locale/pt_BR/LC_MESSAGES/django.mo index 7e719a8d..866b9426 100644 Binary files a/evibes/locale/pt_BR/LC_MESSAGES/django.mo and b/evibes/locale/pt_BR/LC_MESSAGES/django.mo differ diff --git a/evibes/locale/pt_BR/LC_MESSAGES/django.po b/evibes/locale/pt_BR/LC_MESSAGES/django.po index 99915002..9fc7dca1 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-10-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -38,101 +38,113 @@ msgid "Phone number of the company" msgstr "Número de telefone da empresa" #: evibes/settings/constance.py:28 +msgid "!!!DO NOT CHANGE" +msgstr "!!!NÃO ALTERE" + +#: evibes/settings/constance.py:29 msgid "SMTP host" msgstr "Host SMTP" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "SMTP port" msgstr "Porta SMTP" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "Use TLS (0=No, 1=Yes)" msgstr "Usar TLS" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "Use SSL (0=No, 1=Yes)" msgstr "Usar SSL" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP username" msgstr "Nome de usuário SMTP" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "SMTP password" msgstr "Senha SMTP" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Mail from option" msgstr "O endereço do remetente do e-mail" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "Payment gateway URL" msgstr "URL do gateway de pagamento" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Payment gateway token" msgstr "Token de gateway de pagamento" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Payment gateway minimum amount" msgstr "Valor mínimo do gateway de pagamento" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "Payment gateway maximum amount" msgstr "Valor máximo do gateway de pagamento" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "Exchange rate API key" msgstr "Chave da API de taxa de câmbio" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "OpenStreetMap Nominatim API URL" msgstr "URL da API do OpenStreetMap Nominatim" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenAI API Key" msgstr "Chave da API da OpenAI" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "Abstract API Key" msgstr "Chave abstrata da API" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "HTTP Proxy" msgstr "Proxy HTTP" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Disable buy functionality" msgstr "Desativar a funcionalidade de compra" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "An entity for storing advertisiment data" msgstr "Uma entidade para armazenar dados de propaganda" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing analytics data" msgstr "Uma entidade para armazenar dados analíticos" -#: evibes/settings/constance.py:52 +#: evibes/settings/constance.py:48 +msgid "Save responses from vendors' APIs" +msgstr "Salvar respostas das APIs dos fornecedores" + +#: evibes/settings/constance.py:54 msgid "General Options" msgstr "Opções gerais" -#: evibes/settings/constance.py:60 +#: evibes/settings/constance.py:62 msgid "Email Options" msgstr "Opções de e-mail" -#: evibes/settings/constance.py:69 +#: evibes/settings/constance.py:72 msgid "Payment Gateway Options" msgstr "Opções de gateway de pagamento" -#: evibes/settings/constance.py:76 +#: evibes/settings/constance.py:79 msgid "Features Options" msgstr "Opções de recursos" -#: evibes/settings/constance.py:83 +#: evibes/settings/constance.py:86 msgid "SEO Options" msgstr "Opções de SEO" +#: evibes/settings/constance.py:90 +msgid "Debugging Options" +msgstr "Opções de depuração" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "Início" diff --git a/evibes/locale/ro_RO/LC_MESSAGES/django.mo b/evibes/locale/ro_RO/LC_MESSAGES/django.mo index cb576096..424dbf6f 100644 Binary files a/evibes/locale/ro_RO/LC_MESSAGES/django.mo and b/evibes/locale/ro_RO/LC_MESSAGES/django.mo differ diff --git a/evibes/locale/ro_RO/LC_MESSAGES/django.po b/evibes/locale/ro_RO/LC_MESSAGES/django.po index 30ad9ddf..cb9d1969 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-10-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -38,101 +38,113 @@ msgid "Phone number of the company" msgstr "Numărul de telefon al societății" #: evibes/settings/constance.py:28 +msgid "!!!DO NOT CHANGE" +msgstr "!!!NU MODIFICAȚI" + +#: evibes/settings/constance.py:29 msgid "SMTP host" msgstr "Gazdă SMTP" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "SMTP port" msgstr "Portul SMTP" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "Use TLS (0=No, 1=Yes)" msgstr "Utilizați TLS" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "Use SSL (0=No, 1=Yes)" msgstr "Utilizați SSL" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP username" msgstr "Nume utilizator SMTP" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "SMTP password" msgstr "Parola SMTP" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Mail from option" msgstr "Adresa expeditorului e-mailurilor" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "Payment gateway URL" msgstr "URL-ul gateway-ului de plată" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Payment gateway token" msgstr "Token pentru gateway-ul de plată" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Payment gateway minimum amount" msgstr "Suma minimă a gateway-ului de plată" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "Payment gateway maximum amount" msgstr "Suma maximă a gateway-ului de plată" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "Exchange rate API key" msgstr "Cheie API pentru rata de schimb" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenAI API Key" msgstr "Cheie API OpenAI" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "Abstract API Key" msgstr "Cheie API abstractă" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "HTTP Proxy" msgstr "Proxy HTTP" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Disable buy functionality" msgstr "Dezactivați funcționalitatea de cumpărare" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "An entity for storing advertisiment data" msgstr "O entitate pentru stocarea datelor privind publicitatea" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing analytics data" msgstr "O entitate pentru stocarea datelor analitice" -#: evibes/settings/constance.py:52 +#: evibes/settings/constance.py:48 +msgid "Save responses from vendors' APIs" +msgstr "Salvați răspunsurile de la API-urile furnizorilor" + +#: evibes/settings/constance.py:54 msgid "General Options" msgstr "Opțiuni generale" -#: evibes/settings/constance.py:60 +#: evibes/settings/constance.py:62 msgid "Email Options" msgstr "Opțiuni de e-mail" -#: evibes/settings/constance.py:69 +#: evibes/settings/constance.py:72 msgid "Payment Gateway Options" msgstr "Opțiuni pentru portalul de plăți" -#: evibes/settings/constance.py:76 +#: evibes/settings/constance.py:79 msgid "Features Options" msgstr "Caracteristici Opțiuni" -#: evibes/settings/constance.py:83 +#: evibes/settings/constance.py:86 msgid "SEO Options" msgstr "Opțiuni SEO" +#: evibes/settings/constance.py:90 +msgid "Debugging Options" +msgstr "Opțiuni de depanare" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "Acasă" diff --git a/evibes/locale/ru_RU/LC_MESSAGES/django.mo b/evibes/locale/ru_RU/LC_MESSAGES/django.mo index d018d4fb..5bef8948 100644 Binary files a/evibes/locale/ru_RU/LC_MESSAGES/django.mo and b/evibes/locale/ru_RU/LC_MESSAGES/django.mo differ diff --git a/evibes/locale/ru_RU/LC_MESSAGES/django.po b/evibes/locale/ru_RU/LC_MESSAGES/django.po index 0ce4c881..7e2308d7 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-10-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -38,101 +38,113 @@ msgid "Phone number of the company" msgstr "Номер телефона компании" #: evibes/settings/constance.py:28 +msgid "!!!DO NOT CHANGE" +msgstr "!!!НЕ МЕНЯЙТЕ" + +#: evibes/settings/constance.py:29 msgid "SMTP host" msgstr "SMTP-хост" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "SMTP port" msgstr "Порт SMTP" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "Use TLS (0=No, 1=Yes)" msgstr "Используйте TLS" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "Use SSL (0=No, 1=Yes)" msgstr "Используйте SSL" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP username" msgstr "Имя пользователя SMTP" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "SMTP password" msgstr "Пароль SMTP" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Mail from option" msgstr "Адрес отправителя электронного письма" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "Payment gateway URL" msgstr "URL-адрес платежного шлюза" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Payment gateway token" msgstr "Токен платежного шлюза" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Payment gateway minimum amount" msgstr "Минимальная сумма платежного шлюза" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "Payment gateway maximum amount" msgstr "Максимальная сумма платежного шлюза" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "Exchange rate API key" msgstr "Ключ API обменного курса" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "OpenStreetMap Nominatim API URL" msgstr "URL-адрес API OpenStreetMap Nominatim" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenAI API Key" msgstr "Ключ API OpenAI" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "Abstract API Key" msgstr "Абстрактный ключ API" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "HTTP Proxy" msgstr "HTTP-прокси" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Disable buy functionality" msgstr "Отключить функцию покупки" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "An entity for storing advertisiment data" msgstr "Устройство для хранения данных о рекламе" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing analytics data" msgstr "Сущность для хранения аналитических данных" -#: evibes/settings/constance.py:52 +#: evibes/settings/constance.py:48 +msgid "Save responses from vendors' APIs" +msgstr "Сохраняйте ответы от API поставщиков" + +#: evibes/settings/constance.py:54 msgid "General Options" msgstr "Общие параметры" -#: evibes/settings/constance.py:60 +#: evibes/settings/constance.py:62 msgid "Email Options" msgstr "Параметры электронной почты" -#: evibes/settings/constance.py:69 +#: evibes/settings/constance.py:72 msgid "Payment Gateway Options" msgstr "Варианты платежных шлюзов" -#: evibes/settings/constance.py:76 +#: evibes/settings/constance.py:79 msgid "Features Options" msgstr "Особенности Опции" -#: evibes/settings/constance.py:83 +#: evibes/settings/constance.py:86 msgid "SEO Options" msgstr "Параметры SEO" +#: evibes/settings/constance.py:90 +msgid "Debugging Options" +msgstr "Параметры отладки" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "Главная" diff --git a/evibes/locale/sv_SE/LC_MESSAGES/django.mo b/evibes/locale/sv_SE/LC_MESSAGES/django.mo index adb353b3..8dd6eaf6 100644 Binary files a/evibes/locale/sv_SE/LC_MESSAGES/django.mo and b/evibes/locale/sv_SE/LC_MESSAGES/django.mo differ diff --git a/evibes/locale/sv_SE/LC_MESSAGES/django.po b/evibes/locale/sv_SE/LC_MESSAGES/django.po index b2186398..c3320353 100644 --- a/evibes/locale/sv_SE/LC_MESSAGES/django.po +++ b/evibes/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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -38,101 +38,113 @@ msgid "Phone number of the company" msgstr "Telefonnummer till företaget" #: evibes/settings/constance.py:28 +msgid "!!!DO NOT CHANGE" +msgstr "!!!ÄNDRA INTE" + +#: evibes/settings/constance.py:29 msgid "SMTP host" msgstr "SMTP-värd" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "SMTP port" msgstr "SMTP-port" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "Use TLS (0=No, 1=Yes)" msgstr "Använd TLS" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "Use SSL (0=No, 1=Yes)" msgstr "Använd SSL" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP username" msgstr "SMTP-användarnamn" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "SMTP password" msgstr "SMTP-lösenord" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Mail from option" msgstr "Adressen till e-postmeddelandets avsändare" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "Payment gateway URL" msgstr "URL för betalningsgateway" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Payment gateway token" msgstr "Token för betalningsgateway" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Payment gateway minimum amount" msgstr "Minsta belopp för betalningsgateway" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "Payment gateway maximum amount" msgstr "Betalningsgatewayens maximala belopp" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "Exchange rate API key" msgstr "API-nyckel för växelkurs" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenAI API Key" msgstr "OpenAI API-nyckel" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "Abstract API Key" msgstr "Abstrakt API-nyckel" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "HTTP Proxy" msgstr "HTTP-proxy" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Disable buy functionality" msgstr "Inaktivera köpfunktionalitet" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "An entity for storing advertisiment data" msgstr "En enhet för lagring av annonseringsdata" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing analytics data" msgstr "En enhet för lagring av analysdata" -#: evibes/settings/constance.py:52 +#: evibes/settings/constance.py:48 +msgid "Save responses from vendors' APIs" +msgstr "Spara svar från leverantörers API:er" + +#: evibes/settings/constance.py:54 msgid "General Options" msgstr "Allmänna alternativ" -#: evibes/settings/constance.py:60 +#: evibes/settings/constance.py:62 msgid "Email Options" msgstr "Alternativ för e-post" -#: evibes/settings/constance.py:69 +#: evibes/settings/constance.py:72 msgid "Payment Gateway Options" msgstr "Alternativ för betalningsgateway" -#: evibes/settings/constance.py:76 +#: evibes/settings/constance.py:79 msgid "Features Options" msgstr "Funktioner Alternativ" -#: evibes/settings/constance.py:83 +#: evibes/settings/constance.py:86 msgid "SEO Options" msgstr "SEO-alternativ" +#: evibes/settings/constance.py:90 +msgid "Debugging Options" +msgstr "Alternativ för felsökning" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "Hem" diff --git a/evibes/locale/th_TH/LC_MESSAGES/django.mo b/evibes/locale/th_TH/LC_MESSAGES/django.mo index 9b387aa7..9320688c 100644 Binary files a/evibes/locale/th_TH/LC_MESSAGES/django.mo and b/evibes/locale/th_TH/LC_MESSAGES/django.mo differ diff --git a/evibes/locale/th_TH/LC_MESSAGES/django.po b/evibes/locale/th_TH/LC_MESSAGES/django.po index 84879c10..04550de8 100644 --- a/evibes/locale/th_TH/LC_MESSAGES/django.po +++ b/evibes/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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -38,101 +38,113 @@ msgid "Phone number of the company" msgstr "หมายเลขโทรศัพท์ของบริษัท" #: evibes/settings/constance.py:28 +msgid "!!!DO NOT CHANGE" +msgstr "!!!ห้ามเปลี่ยนแปลง" + +#: evibes/settings/constance.py:29 msgid "SMTP host" msgstr "โฮสต์ SMTP" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "SMTP port" msgstr "พอร์ต SMTP" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "Use TLS (0=No, 1=Yes)" msgstr "ใช้ TLS" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "Use SSL (0=No, 1=Yes)" msgstr "ใช้ SSL" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP username" msgstr "ชื่อผู้ใช้ SMTP" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "SMTP password" msgstr "รหัสผ่าน SMTP" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Mail from option" msgstr "ที่อยู่ของผู้ส่งอีเมล" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "Payment gateway URL" msgstr "URL ของเกตเวย์การชำระเงิน" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Payment gateway token" msgstr "โทเค็นเกตเวย์การชำระเงิน" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Payment gateway minimum amount" msgstr "จำนวนเงินขั้นต่ำของเกตเวย์การชำระเงิน" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "Payment gateway maximum amount" msgstr "จำนวนเงินสูงสุดของเกตเวย์การชำระเงิน" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "Exchange rate API key" msgstr "คีย์ API อัตราแลกเปลี่ยน" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "OpenStreetMap Nominatim API URL" msgstr "URL ของ API OpenStreetMap Nominatim" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenAI API Key" msgstr "คีย์ API ของ OpenAI" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "Abstract API Key" msgstr "คีย์ API แบบนามธรรม" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "HTTP Proxy" msgstr "HTTP พร็อกซี" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Disable buy functionality" msgstr "ปิดการใช้งานฟังก์ชันการซื้อ" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "An entity for storing advertisiment data" msgstr "หน่วยงานสำหรับเก็บข้อมูลโฆษณา" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing analytics data" msgstr "หน่วยงานสำหรับเก็บข้อมูลการวิเคราะห์" -#: evibes/settings/constance.py:52 +#: evibes/settings/constance.py:48 +msgid "Save responses from vendors' APIs" +msgstr "บันทึกการตอบกลับจาก API ของผู้ขาย" + +#: evibes/settings/constance.py:54 msgid "General Options" msgstr "ตัวเลือกทั่วไป" -#: evibes/settings/constance.py:60 +#: evibes/settings/constance.py:62 msgid "Email Options" msgstr "ตัวเลือกอีเมล" -#: evibes/settings/constance.py:69 +#: evibes/settings/constance.py:72 msgid "Payment Gateway Options" msgstr "ตัวเลือกเกตเวย์การชำระเงิน" -#: evibes/settings/constance.py:76 +#: evibes/settings/constance.py:79 msgid "Features Options" msgstr "คุณสมบัติ ตัวเลือก" -#: evibes/settings/constance.py:83 +#: evibes/settings/constance.py:86 msgid "SEO Options" msgstr "ตัวเลือก SEO" +#: evibes/settings/constance.py:90 +msgid "Debugging Options" +msgstr "ตัวเลือกการแก้ไขข้อผิดพลาด" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "หน้าแรก" diff --git a/evibes/locale/tr_TR/LC_MESSAGES/django.mo b/evibes/locale/tr_TR/LC_MESSAGES/django.mo index 60d2afc9..ec0f7d03 100644 Binary files a/evibes/locale/tr_TR/LC_MESSAGES/django.mo and b/evibes/locale/tr_TR/LC_MESSAGES/django.mo differ diff --git a/evibes/locale/tr_TR/LC_MESSAGES/django.po b/evibes/locale/tr_TR/LC_MESSAGES/django.po index 229995b7..2ee92d69 100644 --- a/evibes/locale/tr_TR/LC_MESSAGES/django.po +++ b/evibes/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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -38,101 +38,113 @@ msgid "Phone number of the company" msgstr "Şirketin telefon numarası" #: evibes/settings/constance.py:28 +msgid "!!!DO NOT CHANGE" +msgstr "!!!DEĞIŞTIRMEYIN" + +#: evibes/settings/constance.py:29 msgid "SMTP host" msgstr "SMTP ana bilgisayarı" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "SMTP port" msgstr "SMTP bağlantı noktası" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "Use TLS (0=No, 1=Yes)" msgstr "TLS kullanın" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "Use SSL (0=No, 1=Yes)" msgstr "SSL kullanın" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP username" msgstr "SMTP kullanıcı adı" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "SMTP password" msgstr "SMTP şifresi" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Mail from option" msgstr "E-posta göndericisinin adresi" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "Payment gateway URL" msgstr "Ödeme ağ geçidi URL'si" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Payment gateway token" msgstr "Ödeme ağ geçidi belirteci" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Payment gateway minimum amount" msgstr "Ödeme ağ geçidi minimum tutarı" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "Payment gateway maximum amount" msgstr "Ödeme ağ geçidi maksimum tutarı" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "Exchange rate API key" msgstr "Döviz kuru API anahtarı" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL'si" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenAI API Key" msgstr "OpenAI API Anahtarı" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "Abstract API Key" msgstr "Soyut API Anahtarı" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "HTTP Proxy" msgstr "HTTP Proxy" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Disable buy functionality" msgstr "Satın alma işlevini devre dışı bırakın" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "An entity for storing advertisiment data" msgstr "Reklam verilerini depolamak için bir varlık" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing analytics data" msgstr "Analitik verileri depolamak için bir varlık" -#: evibes/settings/constance.py:52 +#: evibes/settings/constance.py:48 +msgid "Save responses from vendors' APIs" +msgstr "Satıcıların API'lerinden gelen yanıtları kaydedin" + +#: evibes/settings/constance.py:54 msgid "General Options" msgstr "Genel Seçenekler" -#: evibes/settings/constance.py:60 +#: evibes/settings/constance.py:62 msgid "Email Options" msgstr "E-posta Seçenekleri" -#: evibes/settings/constance.py:69 +#: evibes/settings/constance.py:72 msgid "Payment Gateway Options" msgstr "Ödeme Geçidi Seçenekleri" -#: evibes/settings/constance.py:76 +#: evibes/settings/constance.py:79 msgid "Features Options" msgstr "Özellikler Seçenekler" -#: evibes/settings/constance.py:83 +#: evibes/settings/constance.py:86 msgid "SEO Options" msgstr "SEO Seçenekleri" +#: evibes/settings/constance.py:90 +msgid "Debugging Options" +msgstr "Hata Ayıklama Seçenekleri" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "Ev" diff --git a/evibes/locale/vi_VN/LC_MESSAGES/django.mo b/evibes/locale/vi_VN/LC_MESSAGES/django.mo index 969ce4be..2c49f2a4 100644 Binary files a/evibes/locale/vi_VN/LC_MESSAGES/django.mo and b/evibes/locale/vi_VN/LC_MESSAGES/django.mo differ diff --git a/evibes/locale/vi_VN/LC_MESSAGES/django.po b/evibes/locale/vi_VN/LC_MESSAGES/django.po index 2429ce45..da49ae76 100644 --- a/evibes/locale/vi_VN/LC_MESSAGES/django.po +++ b/evibes/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-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -38,101 +38,113 @@ msgid "Phone number of the company" msgstr "Số điện thoại của công ty" #: evibes/settings/constance.py:28 +msgid "!!!DO NOT CHANGE" +msgstr "!!!KHÔNG THAY ĐỔI" + +#: evibes/settings/constance.py:29 msgid "SMTP host" msgstr "Máy chủ SMTP" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "SMTP port" msgstr "Cổng SMTP" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "Use TLS (0=No, 1=Yes)" msgstr "Sử dụng TLS" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "Use SSL (0=No, 1=Yes)" msgstr "Sử dụng SSL" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP username" msgstr "Tên người dùng SMTP" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "SMTP password" msgstr "Mật khẩu SMTP" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Mail from option" msgstr "Địa chỉ email của người gửi" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "Payment gateway URL" msgstr "Đường dẫn URL cổng thanh toán" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Payment gateway token" msgstr "Token cổng thanh toán" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Payment gateway minimum amount" msgstr "Số tiền tối thiểu cho cổng thanh toán" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "Payment gateway maximum amount" msgstr "Giới hạn số tiền tối đa qua cổng thanh toán" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "Exchange rate API key" msgstr "Khóa API tỷ giá hối đoái" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "OpenStreetMap Nominatim API URL" msgstr "Địa chỉ URL API Nominatim của OpenStreetMap" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenAI API Key" msgstr "Khóa API OpenAI" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "Abstract API Key" msgstr "Tóm tắt Khóa API" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "HTTP Proxy" msgstr "Proxy HTTP" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Disable buy functionality" msgstr "Vô hiệu hóa chức năng mua hàng" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 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:46 +#: evibes/settings/constance.py:47 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:52 +#: evibes/settings/constance.py:48 +msgid "Save responses from vendors' APIs" +msgstr "Lưu trữ phản hồi từ các API của nhà cung cấp" + +#: evibes/settings/constance.py:54 msgid "General Options" msgstr "Tùy chọn chung" -#: evibes/settings/constance.py:60 +#: evibes/settings/constance.py:62 msgid "Email Options" msgstr "Tùy chọn email" -#: evibes/settings/constance.py:69 +#: evibes/settings/constance.py:72 msgid "Payment Gateway Options" msgstr "Các tùy chọn cổng thanh toán" -#: evibes/settings/constance.py:76 +#: evibes/settings/constance.py:79 msgid "Features Options" msgstr "Tính năng và tùy chọn" -#: evibes/settings/constance.py:83 +#: evibes/settings/constance.py:86 msgid "SEO Options" msgstr "Các tùy chọn SEO" +#: evibes/settings/constance.py:90 +msgid "Debugging Options" +msgstr "Các tùy chọn gỡ lỗi" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "Trang chủ" diff --git a/evibes/locale/zh_Hans/LC_MESSAGES/django.mo b/evibes/locale/zh_Hans/LC_MESSAGES/django.mo index b2dd5c32..8ba95180 100644 Binary files a/evibes/locale/zh_Hans/LC_MESSAGES/django.mo and b/evibes/locale/zh_Hans/LC_MESSAGES/django.mo differ diff --git a/evibes/locale/zh_Hans/LC_MESSAGES/django.po b/evibes/locale/zh_Hans/LC_MESSAGES/django.po index 78e3511a..13f62136 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-10-07 15:47+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -38,101 +38,113 @@ msgid "Phone number of the company" msgstr "公司电话号码" #: evibes/settings/constance.py:28 +msgid "!!!DO NOT CHANGE" +msgstr "不要更改" + +#: evibes/settings/constance.py:29 msgid "SMTP host" msgstr "SMTP 主机" -#: evibes/settings/constance.py:29 +#: evibes/settings/constance.py:30 msgid "SMTP port" msgstr "SMTP 端口" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "Use TLS (0=No, 1=Yes)" msgstr "使用 TLS" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "Use SSL (0=No, 1=Yes)" msgstr "使用 SSL" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP username" msgstr "SMTP 用户名" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "SMTP password" msgstr "SMTP 密码" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Mail from option" msgstr "邮件发件人地址" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "Payment gateway URL" msgstr "付款网关 URL" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "Payment gateway token" msgstr "支付网关令牌" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Payment gateway minimum amount" msgstr "支付网关最低金额" -#: evibes/settings/constance.py:38 +#: evibes/settings/constance.py:39 msgid "Payment gateway maximum amount" msgstr "支付网关最高限额" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "Exchange rate API key" msgstr "汇率 API 密钥" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "OpenAI API Key" msgstr "OpenAI API 密钥" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "Abstract API Key" msgstr "抽象应用程序接口密钥" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "HTTP Proxy" msgstr "HTTP 代理服务器" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Disable buy functionality" msgstr "禁用购买功能" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "An entity for storing advertisiment data" msgstr "存储广告数据的实体" -#: evibes/settings/constance.py:46 +#: evibes/settings/constance.py:47 msgid "An entity for storing analytics data" msgstr "存储分析数据的实体" -#: evibes/settings/constance.py:52 +#: evibes/settings/constance.py:48 +msgid "Save responses from vendors' APIs" +msgstr "保存来自供应商应用程序接口的响应" + +#: evibes/settings/constance.py:54 msgid "General Options" msgstr "一般选项" -#: evibes/settings/constance.py:60 +#: evibes/settings/constance.py:62 msgid "Email Options" msgstr "电子邮件选项" -#: evibes/settings/constance.py:69 +#: evibes/settings/constance.py:72 msgid "Payment Gateway Options" msgstr "支付网关选项" -#: evibes/settings/constance.py:76 +#: evibes/settings/constance.py:79 msgid "Features Options" msgstr "功能选项" -#: evibes/settings/constance.py:83 +#: evibes/settings/constance.py:86 msgid "SEO Options" msgstr "搜索引擎优化选项" +#: evibes/settings/constance.py:90 +msgid "Debugging Options" +msgstr "调试选项" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "首页" diff --git a/evibes/pagination.py b/evibes/pagination.py index 99a9bd17..5cd24bd5 100644 --- a/evibes/pagination.py +++ b/evibes/pagination.py @@ -1,3 +1,5 @@ +from typing import Any + from rest_framework.pagination import PageNumberPagination from rest_framework.response import Response @@ -5,7 +7,7 @@ from rest_framework.response import Response class CustomPagination(PageNumberPagination): page_size_query_param: str = "page_size" # name of the query parameter, you can use any - def get_paginated_response(self, data: dict) -> Response: + def get_paginated_response(self, data: dict[str, Any]) -> Response: return Response( { "links": {"forward": self.get_next_link(), "backward": self.get_previous_link()}, @@ -18,7 +20,7 @@ class CustomPagination(PageNumberPagination): } ) - def get_paginated_response_schema(self, data_schema: dict) -> dict: + def get_paginated_response_schema(self, data_schema: dict[str, Any]) -> dict[str, Any]: return { "type": "object", "properties": { diff --git a/evibes/settings/base.py b/evibes/settings/base.py index 1660156e..25c66bdf 100644 --- a/evibes/settings/base.py +++ b/evibes/settings/base.py @@ -2,8 +2,9 @@ import logging from datetime import datetime from os import getenv, name from pathlib import Path +from typing import Any -EVIBES_VERSION = "3.0.0" +EVIBES_VERSION = "3.1.0" RELEASE_DATE = datetime(2025, 9, 13) BASE_DIR = Path(__file__).resolve().parent.parent.parent @@ -29,9 +30,9 @@ else: for entry in getenv("ALLOWED_HOSTS", "").split(" "): ALLOWED_HOSTS.add(entry) -ALLOWED_HOSTS: tuple = tuple(ALLOWED_HOSTS) +ALLOWED_HOSTS: tuple[str, ...] = tuple(ALLOWED_HOSTS) -CSRF_TRUSTED_ORIGINS: set = { +CSRF_TRUSTED_ORIGINS: set[str] = { "http://127.0.0.1", "http://api.localhost", "http://b2b.localhost", @@ -40,12 +41,12 @@ CSRF_TRUSTED_ORIGINS: set = { for entry in getenv("CSRF_TRUSTED_ORIGINS", "").split(" "): CSRF_TRUSTED_ORIGINS.add(entry) -CSRF_TRUSTED_ORIGINS: tuple = tuple(CSRF_TRUSTED_ORIGINS) +CSRF_TRUSTED_ORIGINS: tuple[str, ...] = tuple(CSRF_TRUSTED_ORIGINS) if DEBUG: CORS_ALLOW_ALL_ORIGINS = True else: - CORS_ALLOWED_ORIGINS: set = { + CORS_ALLOWED_ORIGINS: set[str] = { "http://127.0.0.1", "http://api.localhost", "http://b2b.localhost", @@ -53,7 +54,7 @@ else: for entry in getenv("CORS_ALLOWED_ORIGINS", "").split(" "): CORS_ALLOWED_ORIGINS.add(entry) - CORS_ALLOWED_ORIGINS: tuple = tuple(CORS_ALLOWED_ORIGINS) + CORS_ALLOWED_ORIGINS: tuple[str, ...] = tuple(CORS_ALLOWED_ORIGINS) CORS_ALLOW_METHODS = ( "DELETE", @@ -166,7 +167,7 @@ MIDDLEWARE: list[str] = [ "django_prometheus.middleware.PrometheusAfterMiddleware", ] -TEMPLATES: list[dict] = [ +TEMPLATES: list[dict[str, str | list[str | Path] | dict[str, str | list[str]] | Path | bool]] = [ { "BACKEND": "django.template.backends.django.DjangoTemplates", "DIRS": [ @@ -244,7 +245,7 @@ CURRENCIES: tuple[tuple[str, str], ...] = ( CURRENCY_CODE: str = dict(CURRENCIES).get(LANGUAGE_CODE) # type: ignore [assignment] -MODELTRANSLATION_FALLBACK_LANGUAGES: tuple = (LANGUAGE_CODE, "en-us", "de-de") +MODELTRANSLATION_FALLBACK_LANGUAGES: tuple[str, ...] = (LANGUAGE_CODE, "en-us", "de-de") ROOT_URLCONF: str = "evibes.urls" @@ -296,10 +297,11 @@ if getenv("SENTRY_DSN"): from sentry_sdk.integrations.django import DjangoIntegration from sentry_sdk.integrations.logging import LoggingIntegration from sentry_sdk.integrations.redis import RedisIntegration + from sentry_sdk.types import Event, Hint - def scrub_sensitive(data): + def scrub_sensitive(data: dict[str, Any] | list[Any] | str) -> dict[str, Any] | list[Any] | str | None: if isinstance(data, dict): - cleaned = {} + cleaned: dict[str, Any] = {} for key, value in data.items(): if key.lower() in ("password", "confirm_password"): cleaned[key] = "[FILTERED]" @@ -310,12 +312,13 @@ if getenv("SENTRY_DSN"): return [scrub_sensitive(item) for item in data] return data - def before_send(event, hint): + def before_send(event: Event, hint: Hint) -> Event: if hint: pass request = event.get("request", {}) - if "data" in request: - request["data"] = scrub_sensitive(request["data"]) + data = request.get("data", {}) + if data: + request["data"] = scrub_sensitive(data) # type: ignore [arg-type] event["request"] = request return event diff --git a/evibes/settings/caches.py b/evibes/settings/caches.py index 722ca800..0216984b 100644 --- a/evibes/settings/caches.py +++ b/evibes/settings/caches.py @@ -1,6 +1,7 @@ import sys +from os import getenv -from evibes.settings.base import REDIS_PASSWORD, getenv +from evibes.settings.base import REDIS_PASSWORD CACHES = { "default": { diff --git a/evibes/settings/constance.py b/evibes/settings/constance.py index 1cec8f38..c286d8be 100644 --- a/evibes/settings/constance.py +++ b/evibes/settings/constance.py @@ -1,8 +1,8 @@ from collections import OrderedDict +from os import getenv -from django.utils.translation import gettext_lazy as _, gettext_noop - -from evibes.settings.base import getenv +from django.utils.translation import gettext_lazy as _ +from django.utils.translation import gettext_noop CONSTANCE_BACKEND = "constance.backends.database.DatabaseBackend" CONSTANCE_SUPERUSER_ONLY = False @@ -25,6 +25,7 @@ CONSTANCE_CONFIG = OrderedDict( ("COMPANY_NAME", (getenv("COMPANY_NAME"), _("Name of the company"))), ("COMPANY_ADDRESS", (getenv("COMPANY_ADDRESS"), _("Address of the company"))), ("COMPANY_PHONE_NUMBER", (getenv("COMPANY_PHONE_NUMBER"), _("Phone number of the company"))), + ("EMAIL_BACKEND", ("django.core.mail.backends.smtp.EmailBackend", _("!!!DO NOT CHANGE"))), ("EMAIL_HOST", (getenv("EMAIL_HOST", "smtp.404.org"), _("SMTP host"))), ("EMAIL_PORT", (int(getenv("EMAIL_PORT", "465")), _("SMTP port"))), ("EMAIL_USE_TLS", (bool(int(getenv("EMAIL_USE_TLS", 0))), _("Use TLS (0=No, 1=Yes)"))), @@ -44,6 +45,7 @@ CONSTANCE_CONFIG = OrderedDict( ("DISABLED_COMMERCE", (getenv("DISABLED_COMMERCE", False), _("Disable buy functionality"))), ("ADVERTSIMENT", (getenv("EVIBES_ADVERTISIMENT", ""), _("An entity for storing advertisiment data"), "json")), ("ANALYTICS", (getenv("EVIBES_ANALYTICS", ""), _("An entity for storing analytics data"), "json")), + ("SAVE_VENDORS_RESPONSES", (False, _("Save responses from vendors' APIs"))), ] ) @@ -58,6 +60,7 @@ CONSTANCE_CONFIG_FIELDSETS = OrderedDict( "COMPANY_PHONE_NUMBER", ), gettext_noop("Email Options"): ( + "EMAIL_BACKEND", "EMAIL_HOST", "EMAIL_PORT", "EMAIL_USE_TLS", @@ -84,6 +87,7 @@ CONSTANCE_CONFIG_FIELDSETS = OrderedDict( "ADVERTSIMENT", "ANALYTICS", ), + gettext_noop("Debugging Options"): ("SAVE_VENDORS_RESPONSES",), } ) diff --git a/evibes/settings/drf.py b/evibes/settings/drf.py index afd4ab65..1f3f636e 100644 --- a/evibes/settings/drf.py +++ b/evibes/settings/drf.py @@ -4,7 +4,7 @@ from os import getenv from evibes.settings.base import DEBUG, EVIBES_VERSION, SECRET_KEY from evibes.settings.constance import CONSTANCE_CONFIG -REST_FRAMEWORK: dict = { +REST_FRAMEWORK: dict[str, str | int | list[str] | tuple[str, ...] | dict[str, bool]] = { "DEFAULT_PAGINATION_CLASS": "evibes.pagination.CustomPagination", "PAGE_SIZE": 30, "DEFAULT_AUTHENTICATION_CLASSES": [ @@ -45,15 +45,14 @@ SIMPLE_JWT: dict[str, timedelta | str | bool] = { "AUTH_HEADER_NAME": "HTTP_X_EVIBES_AUTH", } -SPECTACULAR_B2B_DESCRIPTION = ( # type: ignore [index] - f""" +SPECTACULAR_B2B_DESCRIPTION = f""" Welcome to the { - CONSTANCE_CONFIG.get("PROJECT_NAME")[0] # type: ignore [index] - } B2B API documentation. + CONSTANCE_CONFIG.get("PROJECT_NAME")[0] # type: ignore [index] +} B2B API documentation. The { - CONSTANCE_CONFIG.get("PROJECT_NAME")[0] # type: ignore [index] - } B2B API is designed to provide seamless integration for merchants selling a wide range of electronics. Through this API, partnered merchants can manage products, orders, and inventory with ease, while accessing real-time stock levels. + CONSTANCE_CONFIG.get("PROJECT_NAME")[0] # type: ignore [index] +} B2B API is designed to provide seamless integration for merchants selling a wide range of electronics. Through this API, partnered merchants can manage products, orders, and inventory with ease, while accessing real-time stock levels. ## Key Features - **Product Management:** Easily create, update, and manage your product listings with detailed specifications. @@ -71,8 +70,7 @@ The { ## Version Current API version: {EVIBES_VERSION} -""" -) # noqa: E501, F405 +""" # noqa: E501, F405 SPECTACULAR_PLATFORM_DESCRIPTION = f""" Welcome to the { diff --git a/evibes/utils/misc.py b/evibes/utils/misc.py index 19d2c1b3..63c60fe3 100644 --- a/evibes/utils/misc.py +++ b/evibes/utils/misc.py @@ -1,7 +1,8 @@ from importlib import import_module +from typing import Any -def create_object(module_name, class_name, *args, **kwargs): +def create_object(module_name: str, class_name: str, *args: list[Any], **kwargs: dict[Any, Any]) -> object: module = import_module(module_name) cls = getattr(module, class_name) diff --git a/payments/admin.py b/payments/admin.py index d53f51b8..bc22b6dc 100644 --- a/payments/admin.py +++ b/payments/admin.py @@ -1,5 +1,7 @@ from django.contrib import admin from django.contrib.admin import ModelAdmin, register +from django.db.models import QuerySet +from django.http import HttpRequest from django.utils.translation import gettext_lazy as _ from core.admin import ActivationActionsMixin @@ -7,7 +9,7 @@ from payments.forms import TransactionForm from payments.models import Balance, Transaction -class TransactionInline(admin.TabularInline): +class TransactionInline(admin.TabularInline): # type: ignore [type-arg] model = Transaction form = TransactionForm extra = 1 @@ -15,25 +17,25 @@ class TransactionInline(admin.TabularInline): verbose_name = _("transaction") verbose_name_plural = _("transactions") - def get_queryset(self, request): + def get_queryset(self, request: HttpRequest) -> QuerySet[Transaction]: qs = super().get_queryset(request) return qs.select_related("order") @register(Balance) -class BalanceAdmin(ActivationActionsMixin, ModelAdmin): # type: ignore [misc] +class BalanceAdmin(ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] inlines = (TransactionInline,) list_display = ("user", "amount") search_fields = ("user__email",) ordering = ("user",) - def get_queryset(self, request): + def get_queryset(self, request: HttpRequest) -> QuerySet[Balance]: qs = super().get_queryset(request) return qs.prefetch_related("transactions", "user") @register(Transaction) -class TransactionAdmin(ActivationActionsMixin, ModelAdmin): # type: ignore [misc] +class TransactionAdmin(ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg] list_display = ("balance", "amount", "order", "modified", "created") search_fields = ("balance__user__email", "currency", "payment_method") list_filter = ("currency", "payment_method") diff --git a/payments/apps.py b/payments/apps.py index c4912bea..459bcbc8 100644 --- a/payments/apps.py +++ b/payments/apps.py @@ -10,5 +10,5 @@ class PaymentsConfig(AppConfig): priority = 87 hide = False - def ready(self): + def ready(self) -> None: import payments.signals # noqa: F401 diff --git a/payments/forms.py b/payments/forms.py index 100093a1..00952e67 100644 --- a/payments/forms.py +++ b/payments/forms.py @@ -4,7 +4,7 @@ from core.widgets import JSONTableWidget from payments.models import Transaction -class TransactionForm(forms.ModelForm): +class TransactionForm(forms.ModelForm): # type: ignore [type-arg] class Meta: model = Transaction fields = "__all__" diff --git a/payments/gateways/__init__.py b/payments/gateways/__init__.py index 4c935ff4..f4926b44 100644 --- a/payments/gateways/__init__.py +++ b/payments/gateways/__init__.py @@ -1,12 +1,15 @@ +from payments.models import Transaction + + class UnknownGatewayError(Exception): pass class AbstractGateway: @staticmethod - def process_transaction(transaction) -> None: + def process_transaction(transaction: Transaction) -> None: raise NotImplementedError @staticmethod - def process_callback(transaction) -> None: + def process_callback(transaction: Transaction) -> None: raise NotImplementedError diff --git a/payments/graphene/mutations.py b/payments/graphene/mutations.py index 2800c63a..aa162a04 100644 --- a/payments/graphene/mutations.py +++ b/payments/graphene/mutations.py @@ -18,6 +18,7 @@ class Deposit(BaseMutation): transaction = Transaction.objects.create( balance=info.context.user.payments_balance, amount=amount, currency="EUR" ) + # noinspection PyTypeChecker return Deposit(transaction=transaction) else: raise PermissionDenied(permission_denied_message) diff --git a/payments/locale/ar_AR/LC_MESSAGES/django.po b/payments/locale/ar_AR/LC_MESSAGES/django.po index f72f2e94..fe776b91 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-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+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" @@ -116,7 +116,7 @@ msgstr "مطلوب مزود للحصول على الأسعار من" msgid "couldn't find provider {provider}" msgstr "تعذر العثور على مزود {provider}" -#: payments/utils/emailing.py:31 +#: payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | إيداع الرصيد" diff --git a/payments/locale/cs_CZ/LC_MESSAGES/django.po b/payments/locale/cs_CZ/LC_MESSAGES/django.po index f0f56b99..0aba8fa9 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-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+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" @@ -116,7 +116,7 @@ msgstr "Je třeba mít poskytovatele, od kterého lze získat sazby" msgid "couldn't find provider {provider}" msgstr "Nepodařilo se najít poskytovatele {provider}" -#: payments/utils/emailing.py:31 +#: payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Zůstatek vkladu" diff --git a/payments/locale/da_DK/LC_MESSAGES/django.po b/payments/locale/da_DK/LC_MESSAGES/django.po index 222289e5..9548cd21 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-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+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" @@ -116,7 +116,7 @@ msgstr "Der er brug for en udbyder at få priser fra" msgid "couldn't find provider {provider}" msgstr "Kunne ikke finde udbyder {provider}." -#: payments/utils/emailing.py:31 +#: payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Saldoindbetaling" diff --git a/payments/locale/de_DE/LC_MESSAGES/django.po b/payments/locale/de_DE/LC_MESSAGES/django.po index 9511167f..0c622690 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-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+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 "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" @@ -116,7 +116,7 @@ msgstr "Sie benötigen einen Anbieter, bei dem Sie die Preise erfragen können." msgid "couldn't find provider {provider}" msgstr "Anbieter {provider} konnte nicht gefunden werden" -#: payments/utils/emailing.py:31 +#: payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Saldo Einzahlung" @@ -130,8 +130,8 @@ msgid "" "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 " +"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.po b/payments/locale/en_GB/LC_MESSAGES/django.po index 157566ef..8625fd57 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-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+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" @@ -120,7 +120,7 @@ msgstr "A provider to get rates from is required" msgid "couldn't find provider {provider}" msgstr "Couldn't find provider {provider}" -#: payments/utils/emailing.py:31 +#: payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Balance Deposit" diff --git a/payments/locale/en_US/LC_MESSAGES/django.po b/payments/locale/en_US/LC_MESSAGES/django.po index ad0de0d1..6e717825 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-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+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" @@ -116,7 +116,7 @@ msgstr "A provider to get rates from is required" msgid "couldn't find provider {provider}" msgstr "Couldn't find provider {provider}" -#: payments/utils/emailing.py:31 +#: payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Balance Deposit" diff --git a/payments/locale/es_ES/LC_MESSAGES/django.po b/payments/locale/es_ES/LC_MESSAGES/django.po index 20022a8a..ee25342d 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-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+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,7 +95,8 @@ 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 @@ -116,7 +117,7 @@ msgstr "Se necesita un proveedor del que obtener tarifas" msgid "couldn't find provider {provider}" msgstr "No se pudo encontrar el proveedor {provider}" -#: payments/utils/emailing.py:31 +#: payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Depósito de saldo" @@ -130,8 +131,8 @@ msgid "" "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 " +"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 d8345a6f..a27c2656 100644 --- a/payments/locale/fa_IR/LC_MESSAGES/django.po +++ b/payments/locale/fa_IR/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -113,7 +113,7 @@ msgstr "" msgid "couldn't find provider {provider}" msgstr "" -#: payments/utils/emailing.py:31 +#: payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "" diff --git a/payments/locale/fr_FR/LC_MESSAGES/django.po b/payments/locale/fr_FR/LC_MESSAGES/django.po index b05bd9a5..f3b39475 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-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+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,7 +95,8 @@ 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 @@ -109,15 +110,14 @@ 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 msgid "couldn't find provider {provider}" msgstr "Impossible de trouver le fournisseur {provider}" -#: payments/utils/emailing.py:31 +#: payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Dépôt de solde" diff --git a/payments/locale/he_IL/LC_MESSAGES/django.po b/payments/locale/he_IL/LC_MESSAGES/django.po index a876f195..80f88319 100644 --- a/payments/locale/he_IL/LC_MESSAGES/django.po +++ b/payments/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-13 18:49+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" @@ -113,7 +113,7 @@ msgstr "נדרש ספק ממנו ניתן לקבל תעריפים" msgid "couldn't find provider {provider}" msgstr "לא ניתן למצוא את הספק {provider}" -#: payments/utils/emailing.py:31 +#: payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | הפקדת יתרה" @@ -128,5 +128,5 @@ msgid "" msgstr "" "ViewSet לטיפול בפעולות לקריאה בלבד במודל העסקה. מחלקה זו מספקת ממשק לקריאה " "בלבד לצורך אינטראקציה עם נתוני העסקה. היא משתמשת ב-TransactionSerializer " -"לצורך סידור סדרתי ופירוק סדרתי של הנתונים. המחלקה מבטיחה שרק משתמשים מורשים," -" העומדים בהרשאות ספציפיות, יוכלו לגשת לעסקאות." +"לצורך סידור סדרתי ופירוק סדרתי של הנתונים. המחלקה מבטיחה שרק משתמשים מורשים, " +"העומדים בהרשאות ספציפיות, יוכלו לגשת לעסקאות." diff --git a/payments/locale/hi_IN/LC_MESSAGES/django.po b/payments/locale/hi_IN/LC_MESSAGES/django.po index 5cae172e..6c60edb2 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-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -113,7 +113,7 @@ msgstr "" msgid "couldn't find provider {provider}" msgstr "" -#: payments/utils/emailing.py:31 +#: payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "" diff --git a/payments/locale/hr_HR/LC_MESSAGES/django.po b/payments/locale/hr_HR/LC_MESSAGES/django.po index d8345a6f..a27c2656 100644 --- a/payments/locale/hr_HR/LC_MESSAGES/django.po +++ b/payments/locale/hr_HR/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -113,7 +113,7 @@ msgstr "" msgid "couldn't find provider {provider}" msgstr "" -#: payments/utils/emailing.py:31 +#: payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "" diff --git a/payments/locale/id_ID/LC_MESSAGES/django.po b/payments/locale/id_ID/LC_MESSAGES/django.po index c88bfd6c..665d1d34 100644 --- a/payments/locale/id_ID/LC_MESSAGES/django.po +++ b/payments/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-13 18:49+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,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 @@ -116,7 +118,7 @@ msgstr "Diperlukan penyedia layanan untuk mendapatkan tarif" msgid "couldn't find provider {provider}" msgstr "Tidak dapat menemukan penyedia {provider}" -#: payments/utils/emailing.py:31 +#: payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Setoran Saldo" diff --git a/payments/locale/it_IT/LC_MESSAGES/django.po b/payments/locale/it_IT/LC_MESSAGES/django.po index f5c02d0f..cbd317db 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-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+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,7 +95,8 @@ 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 @@ -116,7 +117,7 @@ msgstr "È necessario un fornitore da cui ottenere le tariffe" msgid "couldn't find provider {provider}" msgstr "Impossibile trovare il fornitore {provider}" -#: payments/utils/emailing.py:31 +#: payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Deposito a saldo" @@ -133,5 +134,5 @@ msgstr "" "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." +"utenti autorizzati, che soddisfano specifici permessi, possano accedere alle " +"transazioni." diff --git a/payments/locale/ja_JP/LC_MESSAGES/django.po b/payments/locale/ja_JP/LC_MESSAGES/django.po index 8b10e8c6..7b633e71 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-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -52,10 +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" @@ -115,7 +116,7 @@ msgstr "レートを取得するプロバイダーが必要" msgid "couldn't find provider {provider}" msgstr "プロバイダーが見つかりませんでした {provider} 。" -#: payments/utils/emailing.py:31 +#: payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME}| 預金残高" @@ -128,6 +129,8 @@ msgid "" "data. The class ensures that only authorized users, who meet specific " "permissions, can access the transactions." msgstr "" -"Transactionモデルの読み取り専用操作を扱うためのViewSet。このクラスは、トランザクション・データを操作するための読み取り専用インタフェースを提供します。データのシリアライズとデシリアライズには" -" TransactionSerializer " -"を使用します。このクラスは、特定のパーミッションを満たす許可されたユーザのみがトランザクションにアクセスできることを保証します。" +"Transactionモデルの読み取り専用操作を扱うためのViewSet。このクラスは、トラン" +"ザクション・データを操作するための読み取り専用インタフェースを提供します。" +"データのシリアライズとデシリアライズには TransactionSerializer を使用します。" +"このクラスは、特定のパーミッションを満たす許可されたユーザのみがトランザク" +"ションにアクセスできることを保証します。" diff --git a/payments/locale/kk_KZ/LC_MESSAGES/django.po b/payments/locale/kk_KZ/LC_MESSAGES/django.po index 5cae172e..6c60edb2 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-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -113,7 +113,7 @@ msgstr "" msgid "couldn't find provider {provider}" msgstr "" -#: payments/utils/emailing.py:31 +#: payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "" diff --git a/payments/locale/ko_KR/LC_MESSAGES/django.po b/payments/locale/ko_KR/LC_MESSAGES/django.po index 2fc24926..b23a48cb 100644 --- a/payments/locale/ko_KR/LC_MESSAGES/django.po +++ b/payments/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-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+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" @@ -116,7 +116,7 @@ msgstr "요금을 받을 공급업체가 필요합니다." msgid "couldn't find provider {provider}" msgstr "공급자를 찾을 수 없습니다 {provider}." -#: payments/utils/emailing.py:31 +#: payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | 잔액 입금" @@ -129,6 +129,8 @@ msgid "" "data. The class ensures that only authorized users, who meet specific " "permissions, can access the transactions." msgstr "" -"트랜잭션 모델에서 읽기 전용 작업을 처리하기 위한 뷰셋입니다. 이 클래스는 트랜잭션 데이터와 상호 작용하기 위한 읽기 전용 인터페이스를 " -"제공합니다. 데이터를 직렬화 및 역직렬화하기 위해 TransactionSerializer를 사용합니다. 이 클래스는 특정 권한을 충족하는" -" 권한이 있는 사용자만 트랜잭션에 액세스할 수 있도록 합니다." +"트랜잭션 모델에서 읽기 전용 작업을 처리하기 위한 뷰셋입니다. 이 클래스는 트랜" +"잭션 데이터와 상호 작용하기 위한 읽기 전용 인터페이스를 제공합니다. 데이터를 " +"직렬화 및 역직렬화하기 위해 TransactionSerializer를 사용합니다. 이 클래스는 " +"특정 권한을 충족하는 권한이 있는 사용자만 트랜잭션에 액세스할 수 있도록 합니" +"다." diff --git a/payments/locale/nl_NL/LC_MESSAGES/django.po b/payments/locale/nl_NL/LC_MESSAGES/django.po index 0245fd6d..139f7067 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-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+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 "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" @@ -116,7 +116,7 @@ msgstr "Een provider om tarieven van te krijgen is vereist" msgid "couldn't find provider {provider}" msgstr "Kon provider {provider} niet vinden." -#: payments/utils/emailing.py:31 +#: payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Saldo storting" diff --git a/payments/locale/no_NO/LC_MESSAGES/django.po b/payments/locale/no_NO/LC_MESSAGES/django.po index 748c4e16..2efd029b 100644 --- a/payments/locale/no_NO/LC_MESSAGES/django.po +++ b/payments/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-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+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" @@ -116,7 +116,7 @@ msgstr "Det kreves en leverandør å få priser fra" msgid "couldn't find provider {provider}" msgstr "Fant ikke leverandøren {provider}." -#: payments/utils/emailing.py:31 +#: payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Saldo innskudd" @@ -131,6 +131,6 @@ msgid "" 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 " +"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.po b/payments/locale/pl_PL/LC_MESSAGES/django.po index 062a6547..2024519a 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-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+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 "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,7 +95,8 @@ 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 @@ -116,7 +117,7 @@ msgstr "Wymagany jest dostawca, od którego można uzyskać stawki" msgid "couldn't find provider {provider}" msgstr "Nie można znaleźć dostawcy {provider}" -#: payments/utils/emailing.py:31 +#: payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Wpłata salda" @@ -130,7 +131,7 @@ msgid "" "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 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.po b/payments/locale/pt_BR/LC_MESSAGES/django.po index fd8709eb..9fdc5f4f 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-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+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" @@ -116,7 +116,7 @@ msgstr "É necessário um provedor para obter as tarifas" msgid "couldn't find provider {provider}" msgstr "Não foi possível encontrar o provedor {provider}" -#: payments/utils/emailing.py:31 +#: payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Depósito de saldo" diff --git a/payments/locale/ro_RO/LC_MESSAGES/django.po b/payments/locale/ro_RO/LC_MESSAGES/django.po index 5e50f2f1..0447ddf6 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-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+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" @@ -116,7 +116,7 @@ msgstr "Este necesar un furnizor de la care să se obțină tarife" msgid "couldn't find provider {provider}" msgstr "Nu am putut găsi furnizorul {provider}" -#: payments/utils/emailing.py:31 +#: payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Depozit sold" diff --git a/payments/locale/ru_RU/LC_MESSAGES/django.po b/payments/locale/ru_RU/LC_MESSAGES/django.po index da3f3388..e1c52505 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-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+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" @@ -116,7 +116,7 @@ msgstr "Требуется поставщик, у которого можно п msgid "couldn't find provider {provider}" msgstr "Не удалось найти провайдера {provider}" -#: payments/utils/emailing.py:31 +#: payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Депозит баланса" @@ -129,8 +129,8 @@ msgid "" "data. The class ensures that only authorized users, who meet specific " "permissions, can access the transactions." msgstr "" -"ViewSet для обработки операций с моделью Transaction только для чтения. Этот" -" класс предоставляет интерфейс только для чтения для взаимодействия с " -"данными транзакции. Он использует TransactionSerializer для сериализации и " +"ViewSet для обработки операций с моделью Transaction только для чтения. Этот " +"класс предоставляет интерфейс только для чтения для взаимодействия с данными " +"транзакции. Он использует TransactionSerializer для сериализации и " "десериализации данных. Класс гарантирует, что доступ к транзакциям могут " "получить только авторизованные пользователи с определенными правами." diff --git a/payments/locale/sv_SE/LC_MESSAGES/django.po b/payments/locale/sv_SE/LC_MESSAGES/django.po index d1894ad3..3da424e9 100644 --- a/payments/locale/sv_SE/LC_MESSAGES/django.po +++ b/payments/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-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+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 "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" @@ -116,7 +116,7 @@ msgstr "En leverantör att få priser från krävs" msgid "couldn't find provider {provider}" msgstr "Kunde inte hitta leverantören {provider}" -#: payments/utils/emailing.py:31 +#: payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Saldo insättning" diff --git a/payments/locale/th_TH/LC_MESSAGES/django.po b/payments/locale/th_TH/LC_MESSAGES/django.po index 8cfc1143..79d7533f 100644 --- a/payments/locale/th_TH/LC_MESSAGES/django.po +++ b/payments/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-13 18:49+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" @@ -114,7 +114,7 @@ msgstr "จำเป็นต้องมีผู้ให้บริการ msgid "couldn't find provider {provider}" msgstr "ไม่พบผู้ให้บริการ {provider}" -#: payments/utils/emailing.py:31 +#: payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | ยอดเงินฝากคงเหลือ" @@ -128,7 +128,6 @@ msgid "" "permissions, can access the transactions." msgstr "" "ViewSet สำหรับการจัดการการดำเนินการแบบอ่านอย่างเดียวบนโมเดล Transaction " -"คลาสนี้ให้อินเทอร์เฟซแบบอ่านอย่างเดียวสำหรับการโต้ตอบกับข้อมูลธุรกรรม โดยใช้" -" TransactionSerializer สำหรับการแปลงข้อมูลเป็นลำดับและถอดลำดับข้อมูล " -"คลาสนี้รับรองว่ามีเพียงผู้ใช้ที่ได้รับอนุญาตเท่านั้น ซึ่งตรงตามสิทธิ์เฉพาะ " -"สามารถเข้าถึงธุรกรรมได้" +"คลาสนี้ให้อินเทอร์เฟซแบบอ่านอย่างเดียวสำหรับการโต้ตอบกับข้อมูลธุรกรรม โดยใช้ " +"TransactionSerializer สำหรับการแปลงข้อมูลเป็นลำดับและถอดลำดับข้อมูล " +"คลาสนี้รับรองว่ามีเพียงผู้ใช้ที่ได้รับอนุญาตเท่านั้น ซึ่งตรงตามสิทธิ์เฉพาะ สามารถเข้าถึงธุรกรรมได้" diff --git a/payments/locale/tr_TR/LC_MESSAGES/django.po b/payments/locale/tr_TR/LC_MESSAGES/django.po index ea2cf267..492a9e41 100644 --- a/payments/locale/tr_TR/LC_MESSAGES/django.po +++ b/payments/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-13 18:49+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -52,12 +52,11 @@ 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" @@ -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 @@ -117,7 +117,7 @@ msgstr "Fiyat almak için bir sağlayıcı gereklidir" msgid "couldn't find provider {provider}" msgstr "Sağlayıcı bulunamadı {provider}" -#: payments/utils/emailing.py:31 +#: payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Bakiye Yatırma" diff --git a/payments/locale/vi_VN/LC_MESSAGES/django.po b/payments/locale/vi_VN/LC_MESSAGES/django.po index 69a7e8e8..9b487eaf 100644 --- a/payments/locale/vi_VN/LC_MESSAGES/django.po +++ b/payments/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-13 18:49+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 "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 @@ -116,7 +116,7 @@ msgstr "Cần có nhà cung cấp để lấy báo giá." msgid "couldn't find provider {provider}" msgstr "Không thể tìm thấy nhà cung cấp {provider}" -#: payments/utils/emailing.py:31 +#: payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Số dư tiền gửi" diff --git a/payments/locale/zh_Hans/LC_MESSAGES/django.po b/payments/locale/zh_Hans/LC_MESSAGES/django.po index e3447569..dd12d1fc 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-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+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" @@ -116,7 +116,7 @@ msgstr "需要提供商提供费率" msgid "couldn't find provider {provider}" msgstr "找不到提供商 {provider}" -#: payments/utils/emailing.py:31 +#: payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME}| 余额存款" @@ -129,5 +129,6 @@ msgid "" "data. The class ensures that only authorized users, who meet specific " "permissions, can access the transactions." msgstr "" -"ViewSet 用于处理对事务模型的只读操作。该类提供了与事务数据交互的只读接口。它使用 TransactionSerializer " -"对数据进行序列化和反序列化。该类确保只有符合特定权限的授权用户才能访问事务。" +"ViewSet 用于处理对事务模型的只读操作。该类提供了与事务数据交互的只读接口。它" +"使用 TransactionSerializer 对数据进行序列化和反序列化。该类确保只有符合特定权" +"限的授权用户才能访问事务。" diff --git a/payments/serializers.py b/payments/serializers.py index faa92d4c..6062c3a0 100644 --- a/payments/serializers.py +++ b/payments/serializers.py @@ -4,17 +4,17 @@ from rest_framework.serializers import ModelSerializer, Serializer from payments.models import Transaction -class DepositSerializer(Serializer): +class DepositSerializer(Serializer): # type: ignore [type-arg] amount = FloatField(required=True) -class TransactionSerializer(ModelSerializer): +class TransactionSerializer(ModelSerializer): # type: ignore [type-arg] class Meta: model = Transaction fields = "__all__" -class TransactionProcessSerializer(ModelSerializer): +class TransactionProcessSerializer(ModelSerializer): # type: ignore [type-arg] process = JSONField(required=True) order_hr_id = SerializerMethodField(read_only=True, required=False) order_uuid = SerializerMethodField(read_only=True, required=False) diff --git a/payments/signals.py b/payments/signals.py index 922de735..dfaae48a 100644 --- a/payments/signals.py +++ b/payments/signals.py @@ -1,5 +1,6 @@ import logging import traceback +from typing import Any from django.db.models.signals import post_save from django.dispatch import receiver @@ -12,14 +13,16 @@ from vibes_auth.models import User logger = logging.getLogger("django") +# noinspection PyUnusedLocal @receiver(post_save, sender=User) -def create_balance_on_user_creation_signal(instance, created, **_kwargs): +def create_balance_on_user_creation_signal(instance: User, created: bool, **kwargs: dict[Any, Any]) -> None: if created: Balance.objects.create(user=instance) +# noinspection PyUnusedLocal @receiver(post_save, sender=Transaction) -def process_transaction_changes(instance, created, **_kwargs): +def process_transaction_changes(instance: Transaction, created: bool, **kwargs: dict[Any, Any]) -> None: if created: try: gateway = None @@ -39,4 +42,4 @@ def process_transaction_changes(instance, created, **_kwargs): success = instance.process.get("success", False) if ("success" in status or success) and (instance.process.get("notify", False)): - balance_deposit_email.delay(instance.uuid) + balance_deposit_email.delay(instance.uuid) # type: ignore [attr-defined] diff --git a/payments/tests.py b/payments/tests.py index 0a9babfe..e69de29b 100644 --- a/payments/tests.py +++ b/payments/tests.py @@ -1,193 +0,0 @@ -# payments/tests/test_payments.py - - -import graphene -from django.contrib.auth import get_user_model -from django.contrib.auth.models import AnonymousUser -from django.test import TestCase -from graphene.test import Client as GrapheneClient -from rest_framework import status -from rest_framework.test import APIRequestFactory, force_authenticate - -from payments.graphene.mutations import Deposit # the GraphQL Deposit mutation -from payments.models import Balance, Transaction -from payments.views import CallbackAPIView, DepositView - -############################################################################### -# Model Tests -############################################################################### - - -# noinspection PyArgumentList -class BalanceModelTests(TestCase): - def setUp(self): - self.user_model = get_user_model() - # Create a user – the post-save signal will auto-create a Balance. - self.user = self.user_model.objects.create_user(email="test@example.com", password="pass") - self.balance = Balance.objects.get(user=self.user) - - def test_balance_rounding(self): - """ - If the balance amount has more than two decimal places, - the save() method should round it to 2 decimals. - """ - self.balance.amount = 10.129 - self.balance.save() - self.balance.refresh_from_db() - # round(10.129, 2) == 10.13 - self.assertAlmostEqual(float(self.balance.amount), 10.13, places=2) - - -# noinspection PyArgumentList -class TransactionModelTests(TestCase): - def setUp(self): - self.user_model = get_user_model() - self.user = self.user_model.objects.create_user(email="trans_test@example.com", password="pass") - self.balance = Balance.objects.get(user=self.user) - - def test_transaction_rounding(self): - """ - When a Transaction is saved with an amount having more than two decimals, - it should be rounded to 2 decimal places. - """ - t = Transaction(balance=self.balance, amount=5.6789, currency="EUR", payment_method="card") - t.save() - self.assertAlmostEqual(t.amount, 5.68, places=2) - - def test_transaction_zero_amount_raises(self): - """ - Saving a Transaction with a 0 amount should raise a ValueError. - """ - with self.assertRaises(ValueError): - t = Transaction(balance=self.balance, amount=0.0, currency="EUR", payment_method="card") - t.save() - - -############################################################################### -# API (View) Tests -############################################################################### - - -# noinspection PyArgumentList -class DepositViewTests(TestCase): - def setUp(self): - self.factory = APIRequestFactory() - self.user_model = get_user_model() - self.user = self.user_model.objects.create_user(email="deposit@example.com", password="pass") - self.deposit_view = DepositView.as_view() - - def test_deposit_view_unauthenticated(self): - """ - An unauthenticated user should receive a 401 Unauthorized response. - """ - request = self.factory.post("/deposit/", {"amount": 100.0}) - # Do not attach a user to the request. - response = self.deposit_view(request) - self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED) - - def test_deposit_view_authenticated(self): - """ - An authenticated user posting a deposit should get a 201 Created response - and a transaction with processing details. - """ - request = self.factory.post("/deposit/", {"amount": 100.0}) - force_authenticate(request, user=self.user) - response = self.deposit_view(request) - self.assertEqual(response.status_code, status.HTTP_201_CREATED) - # The response should include the 'process' field. - self.assertIn("process", response.data) - - -class CallbackViewTests(TestCase): - def setUp(self): - self.factory = APIRequestFactory() - self.callback_view = CallbackAPIView.as_view() - - def test_callback_view_unknown_gateway(self): - """ - If an unknown gateway is specified, the callback should return a 500 error. - """ - data = {"sample": "data"} - request = self.factory.post("/callback/?gateway=unknown", data, format="json") - response = self.callback_view(request) - self.assertEqual(response.status_code, status.HTTP_500_INTERNAL_SERVER_ERROR) - - -############################################################################### -# Signal Tests -############################################################################### - - -# noinspection PyArgumentList -class SignalTests(TestCase): - def setUp(self): - self.user_model = get_user_model() - - def test_create_balance_on_user_creation(self): - """ - When a new User is created, the post_save signal should create an associated Balance. - """ - user = self.user_model.objects.create_user(email="signal@example.com", password="pass") - balance = Balance.objects.get(user=user) - self.assertIsNotNone(balance) - - -############################################################################### -# GraphQL Tests -############################################################################### - - -# noinspection PyArgumentList -class GraphQLDepositTests(TestCase): - def setUp(self): - self.user_model = get_user_model() - self.user = self.user_model.objects.create_user(email="graphql@example.com", password="pass") - # Ensure a Balance exists via the signal. - self.balance = Balance.objects.get(user=self.user) - - # Create a minimal schema including the Deposit mutation. - class Mutation(graphene.ObjectType): - deposit = Deposit.Field() - - self.schema = graphene.Schema(mutation=Mutation) - self.client = GrapheneClient(self.schema) - - def test_graphql_deposit_authenticated(self): - """ - An authenticated GraphQL deposit mutation should create a Transaction. - """ - mutation = """ - mutation Deposit($amount: Float!) { - deposit(amount: $amount) { - transaction { - id - amount - } - } - } - """ - result = self.client.post(mutation, variable_values={"amount": 100.0}, context_value={"user": self.user}) - # There should be no errors. - self.assertNotIn("errors", result) - transaction_data = result.get("data", "") - self.assertIsNotNone(transaction_data) - self.assertAlmostEqual(float(transaction_data), 100.0, places=2) - - def test_graphql_deposit_unauthenticated(self): - """ - An unauthenticated GraphQL deposit mutation should raise a permission error. - """ - mutation = """ - mutation Deposit($amount: Float!) { - deposit(amount: $amount) { - transaction { - id - amount - } - } - } - """ - result = self.client.post(mutation, variable_values={"amount": 100.0}, context_value={"user": AnonymousUser()}) - self.assertIn("errors", result) - error_message = result["errors"][0] - self.assertIn("permission", error_message.lower()) diff --git a/payments/utils/__init__.py b/payments/utils/__init__.py index 82d3e243..f8503c4a 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) -> dict[str, float]: +def get_rates(provider: str) -> dict[str, float] | None: 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 7911ca4d..09352bae 100644 --- a/payments/utils/cbr.py +++ b/payments/utils/cbr.py @@ -3,13 +3,13 @@ from django.core.cache import cache from sentry_sdk import capture_exception -def get_rates() -> dict[str, float]: +def get_rates() -> dict[str, float] | None: try: - rates = cache.get("cbr_rates", None) + rates: dict[str, float] | None = cache.get("cbr_rates") if not rates: response = requests.get("https://www.cbr-xml-daily.ru/latest.js") - rates = response.json().get("rates") + rates: dict[str, float] = response.json().get("rates") cache.set("cbr_rates", rates, 60 * 60 * 24) return rates diff --git a/payments/utils/currencies.py b/payments/utils/currencies.py index 95ab5833..23dc2a4e 100644 --- a/payments/utils/currencies.py +++ b/payments/utils/currencies.py @@ -1,9 +1,11 @@ +from decimal import Decimal + import requests from constance import config from django.core.cache import cache -def update_currencies_to_euro(currency, amount): +def update_currencies_to_euro(currency: str, amount: str | float | int | Decimal) -> float: rates = cache.get("rates", None) if not rates: diff --git a/payments/utils/emailing.py b/payments/utils/emailing.py index 34df0767..b804b9ee 100644 --- a/payments/utils/emailing.py +++ b/payments/utils/emailing.py @@ -2,13 +2,12 @@ from datetime import datetime from celery.app import shared_task from constance import config -from django.core import mail from django.core.mail import EmailMessage from django.template.loader import render_to_string from django.utils.translation import activate from django.utils.translation import gettext_lazy as _ -from core.utils.constance import set_email_settings +from core.utils import get_dynamic_email_connection from payments.models import Transaction @@ -24,9 +23,6 @@ def balance_deposit_email(transaction_pk: str) -> tuple[bool, str]: activate(transaction.balance.user.language) - set_email_settings() - connection = mail.get_connection() - email = EmailMessage( _(f"{config.PROJECT_NAME} | balance deposit"), render_to_string( @@ -42,7 +38,7 @@ def balance_deposit_email(transaction_pk: str) -> tuple[bool, str]: ), to=[transaction.balance.user.email], from_email=f"{config.PROJECT_NAME} <{config.EMAIL_FROM}>", - connection=connection, + connection=get_dynamic_email_connection(), ) email.content_subtype = "html" email.send() diff --git a/payments/views.py b/payments/views.py index 13904c47..a151d1c1 100644 --- a/payments/views.py +++ b/payments/views.py @@ -1,5 +1,6 @@ import logging import traceback +from typing import Any from drf_spectacular.utils import extend_schema, extend_schema_view from rest_framework import status @@ -33,7 +34,7 @@ class DepositView(APIView): user authentication, and creates a transaction. """ - def post(self, request: Request, *args, **kwargs) -> Response: + def post(self, request: Request, *args: list[Any], **kwargs: dict[Any, Any]) -> Response: logger.debug(request.__dict__) serializer = DepositSerializer(data=request.data) serializer.is_valid(raise_exception=True) @@ -41,6 +42,7 @@ class DepositView(APIView): if not request.user.is_authenticated: return Response(data=serializer.errors, status=status.HTTP_401_UNAUTHORIZED) + # noinspection PyUnresolvedReferences transaction = Transaction.objects.create( balance=request.user.payments_balance, amount=serializer.validated_data["amount"], currency="EUR" ) @@ -68,7 +70,7 @@ class CallbackAPIView(APIView): a server error response if an unknown gateway or other issues occur. """ - def post(self, request: Request, *args, **kwargs) -> Response: + def post(self, request: Request, *args: list[Any], **kwargs: dict[Any, Any]) -> Response: logger.debug(f"{request.__dict__}\n") try: gateway = kwargs.get("gateway", "") diff --git a/payments/viewsets.py b/payments/viewsets.py index 957c7c49..bb6a08ea 100644 --- a/payments/viewsets.py +++ b/payments/viewsets.py @@ -6,7 +6,7 @@ from payments.serializers import TransactionSerializer class TransactionViewSet(ReadOnlyModelViewSet): # type: ignore - __doc__ = _( + __doc__ = _( # type: ignore [assignment] "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 " diff --git a/poetry.lock b/poetry.lock index 03bdf774..19d9d361 100644 --- a/poetry.lock +++ b/poetry.lock @@ -143,13 +143,13 @@ test = ["dateparser (==1.*)", "pre-commit", "pytest", "pytest-cov", "pytest-mock [[package]] name = "asgiref" -version = "3.9.2" +version = "3.10.0" description = "ASGI specs, helper code, and adapters" optional = false python-versions = ">=3.9" files = [ - {file = "asgiref-3.9.2-py3-none-any.whl", hash = "sha256:0b61526596219d70396548fc003635056856dba5d0d086f86476f10b33c75960"}, - {file = "asgiref-3.9.2.tar.gz", hash = "sha256:a0249afacb66688ef258ffe503528360443e2b9a8d8c4581b6ebefa58c841ef1"}, + {file = "asgiref-3.10.0-py3-none-any.whl", hash = "sha256:aef8a81283a34d0ab31630c9b7dfe70c812c95eba78171367ca8745e88124734"}, + {file = "asgiref-3.10.0.tar.gz", hash = "sha256:d89f2d8cd8b56dada7d52fa7dc8075baa08fb836560710d38c292a7a3f78c04e"}, ] [package.extras] @@ -194,23 +194,15 @@ files = [ [[package]] name = "attrs" -version = "25.3.0" +version = "25.4.0" description = "Classes Without Boilerplate" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3"}, - {file = "attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b"}, + {file = "attrs-25.4.0-py3-none-any.whl", hash = "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373"}, + {file = "attrs-25.4.0.tar.gz", hash = "sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11"}, ] -[package.extras] -benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier"] -tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"] - [[package]] name = "babel" version = "2.17.0" @@ -508,13 +500,13 @@ typing-extensions = ">=4.2.0" [[package]] name = "certifi" -version = "2025.8.3" +version = "2025.10.5" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.7" files = [ - {file = "certifi-2025.8.3-py3-none-any.whl", hash = "sha256:f6c12493cfb1b06ba2ff328595af9350c65d6644968e5d3a2ffd78699af217a5"}, - {file = "certifi-2025.8.3.tar.gz", hash = "sha256:e564105f78ded564e3ae7c923924435e1daa7463faeab5bb932bc53ffae63407"}, + {file = "certifi-2025.10.5-py3-none-any.whl", hash = "sha256:0f212c2744a9bb6de0c56639a6f68afe01ecd92d91f14ae897c4fe7bbeeef0de"}, + {file = "certifi-2025.10.5.tar.gz", hash = "sha256:47c09d31ccf2acf0be3f701ea53595ee7e0b8fa08801c6624be771df09ae7b43"}, ] [[package]] @@ -1484,13 +1476,13 @@ redis = ["redis", "types-redis"] [[package]] name = "django-stubs-ext" -version = "5.2.5" +version = "5.2.7" description = "Monkey-patching and extensions for django-stubs" optional = false python-versions = ">=3.10" files = [ - {file = "django_stubs_ext-5.2.5-py3-none-any.whl", hash = "sha256:9b4b8ac9d32f7e6c304fd05477f8688fae6ed57f6a0f9f4d074f9e55b5a3da14"}, - {file = "django_stubs_ext-5.2.5.tar.gz", hash = "sha256:ecc628df29d36cede638567c4e33ff485dd7a99f1552ad0cece8c60e9c3a8872"}, + {file = "django_stubs_ext-5.2.7-py3-none-any.whl", hash = "sha256:0466a7132587d49c5bbe12082ac9824d117a0dedcad5d0ada75a6e0d3aca6f60"}, + {file = "django_stubs_ext-5.2.7.tar.gz", hash = "sha256:b690655bd4cb8a44ae57abb314e0995dc90414280db8f26fff0cb9fb367d1cac"}, ] [package.dependencies] @@ -1701,13 +1693,13 @@ sidecar = ["drf-spectacular-sidecar"] [[package]] name = "drf-spectacular-sidecar" -version = "2025.9.1" +version = "2025.10.1" description = "Serve self-contained distribution builds of Swagger UI and Redoc with Django" optional = false python-versions = ">=3.6" files = [ - {file = "drf_spectacular_sidecar-2025.9.1-py3-none-any.whl", hash = "sha256:8e80625209b8a23ff27616db305b9ab71c2e2d1069dacd99720a9c11e429af50"}, - {file = "drf_spectacular_sidecar-2025.9.1.tar.gz", hash = "sha256:da2aa45da48fff76de7a1e357b84d1eb0b9df40ca89ec19d5fe94ad1037bb3c8"}, + {file = "drf_spectacular_sidecar-2025.10.1-py3-none-any.whl", hash = "sha256:f1de343184d1a938179ce363d318258fe1e5f02f2f774625272364835f1c42bd"}, + {file = "drf_spectacular_sidecar-2025.10.1.tar.gz", hash = "sha256:506a5a21ce1ad7211c28acb4e2112e213f6dc095a2052ee6ed6db1ffe8eb5a7b"}, ] [package.dependencies] @@ -2039,13 +2031,13 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "identify" -version = "2.6.14" +version = "2.6.15" description = "File identification library for Python" optional = false python-versions = ">=3.9" files = [ - {file = "identify-2.6.14-py2.py3-none-any.whl", hash = "sha256:11a073da82212c6646b1f39bb20d4483bfb9543bd5566fec60053c4bb309bf2e"}, - {file = "identify-2.6.14.tar.gz", hash = "sha256:663494103b4f717cb26921c52f8751363dc89db64364cd836a9bf1535f53cd6a"}, + {file = "identify-2.6.15-py2.py3-none-any.whl", hash = "sha256:1181ef7608e00704db228516541eb83a88a9f94433a8c80bb9b5bd54b1d81757"}, + {file = "identify-2.6.15.tar.gz", hash = "sha256:e4f4864b96c6557ef2a1e1c951771838f4edc9df3a72ec7118b338801b11c7bf"}, ] [package.extras] @@ -2053,13 +2045,13 @@ license = ["ukkonen"] [[package]] name = "idna" -version = "3.10" +version = "3.11" description = "Internationalized Domain Names in Applications (IDNA)" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, - {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, + {file = "idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea"}, + {file = "idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902"}, ] [package.extras] @@ -2112,13 +2104,13 @@ files = [ [[package]] name = "ipykernel" -version = "6.30.1" +version = "7.0.0" description = "IPython Kernel for Jupyter" optional = true -python-versions = ">=3.9" +python-versions = ">=3.10" files = [ - {file = "ipykernel-6.30.1-py3-none-any.whl", hash = "sha256:aa6b9fb93dca949069d8b85b6c79b2518e32ac583ae9c7d37c51d119e18b3fb4"}, - {file = "ipykernel-6.30.1.tar.gz", hash = "sha256:6abb270161896402e76b91394fcdce5d1be5d45f456671e5080572f8505be39b"}, + {file = "ipykernel-7.0.0-py3-none-any.whl", hash = "sha256:28793cecaa6a669e3be80eb6d24803202388b6a955929b0a4e13404d8c92062b"}, + {file = "ipykernel-7.0.0.tar.gz", hash = "sha256:06aef83f27adbce00b23345aa70f749f907dc4ac6f4a41fe7bf5f780dc506225"}, ] [package.dependencies] @@ -2138,7 +2130,7 @@ traitlets = ">=5.4.0" [package.extras] cov = ["coverage[toml]", "matplotlib", "pytest-cov", "trio"] -docs = ["intersphinx-registry", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "trio"] +docs = ["intersphinx-registry", "myst-parser", "pydata-sphinx-theme", "sphinx (<8.2.0)", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "trio"] pyqt5 = ["pyqt5"] pyside6 = ["pyside6"] test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0,<9)", "pytest-asyncio (>=0.23.5)", "pytest-cov", "pytest-timeout"] @@ -3587,19 +3579,19 @@ xmp = ["defusedxml"] [[package]] name = "platformdirs" -version = "4.4.0" +version = "4.5.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" files = [ - {file = "platformdirs-4.4.0-py3-none-any.whl", hash = "sha256:abd01743f24e5287cd7a5db3752faf1a2d65353f38ec26d98e25a6db65958c85"}, - {file = "platformdirs-4.4.0.tar.gz", hash = "sha256:ca753cf4d81dc309bc67b0ea38fd15dc97bc30ce419a7f58d13eb3bf14c4febf"}, + {file = "platformdirs-4.5.0-py3-none-any.whl", hash = "sha256:e578a81bb873cbb89a41fcc904c7ef523cc18284b7e3b3ccf06aca1403b7ebd3"}, + {file = "platformdirs-4.5.0.tar.gz", hash = "sha256:70ddccdd7c99fc5942e9fc25636a8b34d04c24b335100223152c2803e4063312"}, ] [package.extras] -docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.1.3)", "sphinx-autodoc-typehints (>=3)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.4)", "pytest-cov (>=6)", "pytest-mock (>=3.14)"] -type = ["mypy (>=1.14.1)"] +docs = ["furo (>=2025.9.25)", "proselint (>=0.14)", "sphinx (>=8.2.3)", "sphinx-autodoc-typehints (>=3.2)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.4.2)", "pytest-cov (>=7)", "pytest-mock (>=3.15.1)"] +type = ["mypy (>=1.18.2)"] [[package]] name = "pluggy" @@ -4099,13 +4091,13 @@ six = ">=1.5" [[package]] name = "python-json-logger" -version = "3.3.0" +version = "4.0.0" description = "JSON Log Formatter for the Python Logging Package" optional = true python-versions = ">=3.8" files = [ - {file = "python_json_logger-3.3.0-py3-none-any.whl", hash = "sha256:dd980fae8cffb24c13caf6e158d3d61c0d6d22342f932cb6e9deedab3d35eec7"}, - {file = "python_json_logger-3.3.0.tar.gz", hash = "sha256:12b7e74b17775e7d565129296105bbe3910842d9d0eb083fc83a6a617aa8df84"}, + {file = "python_json_logger-4.0.0-py3-none-any.whl", hash = "sha256:af09c9daf6a813aa4cc7180395f50f2a9e5fa056034c9953aec92e381c5ba1e2"}, + {file = "python_json_logger-4.0.0.tar.gz", hash = "sha256:f58e68eb46e1faed27e0f574a55a0455eecd7b8a5b88b85a784519ba3cff047f"}, ] [package.extras] @@ -4170,18 +4162,20 @@ files = [ [[package]] name = "pywinpty" -version = "3.0.0" -description = "" +version = "3.0.2" +description = "Pseudo terminal support for Windows from Python." optional = true python-versions = ">=3.9" files = [ - {file = "pywinpty-3.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:327b6034e0dc38352c1c99a7c0b3e54941b4e506a5f21acce63609cd2ab6cce2"}, - {file = "pywinpty-3.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:29daa71ac5dcbe1496ef99f4cde85a732b1f0a3b71405d42177dbcf9ee405e5a"}, - {file = "pywinpty-3.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:1e0c4b01e5b03b1531d7c5d0e044b8c66dd0288c6d2b661820849f2a8d91aec3"}, - {file = "pywinpty-3.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:828cbe756b7e3d25d886fbd5691a1d523cd59c5fb79286bb32bb75c5221e7ba1"}, - {file = "pywinpty-3.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:de0cbe27b96e5a2cebd86c4a6b8b4139f978d9c169d44a8edc7e30e88e5d7a69"}, - {file = "pywinpty-3.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:007735316170ec1b6e773deadab5fe9ec4074dfdc06f27513fe87b8cfe45237d"}, - {file = "pywinpty-3.0.0.tar.gz", hash = "sha256:68f70e68a9f0766ffdea3fc500351cb7b9b012bcb8239a411f7ff0fc8f86dcb1"}, + {file = "pywinpty-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:65db57fd3387d71e8372b6a54269cbcd0f6dfa6d4616a29e0af749ec19f5c558"}, + {file = "pywinpty-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:327790d70e4c841ebd9d0f295a780177149aeb405bca44c7115a3de5c2054b23"}, + {file = "pywinpty-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:99fdd9b455f0ad6419aba6731a7a0d2f88ced83c3c94a80ff9533d95fa8d8a9e"}, + {file = "pywinpty-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:18f78b81e4cfee6aabe7ea8688441d30247b73e52cd9657138015c5f4ee13a51"}, + {file = "pywinpty-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:663383ecfab7fc382cc97ea5c4f7f0bb32c2f889259855df6ea34e5df42d305b"}, + {file = "pywinpty-3.0.2-cp314-cp314-win_amd64.whl", hash = "sha256:28297cecc37bee9f24d8889e47231972d6e9e84f7b668909de54f36ca785029a"}, + {file = "pywinpty-3.0.2-cp314-cp314t-win_amd64.whl", hash = "sha256:34b55ae9a1b671fe3eae071d86618110538e8eaad18fcb1531c0830b91a82767"}, + {file = "pywinpty-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:3962daf801bc38dd4de872108c424b5338c9a46c6efca5761854cd66370a9022"}, + {file = "pywinpty-3.0.2.tar.gz", hash = "sha256:1505cc4cb248af42cb6285a65c9c2086ee9e7e574078ee60933d5d7fa86fb004"}, ] [[package]] @@ -4495,13 +4489,13 @@ testing = ["pytest (>=8.3.5)"] [[package]] name = "rich" -version = "14.1.0" +version = "14.2.0" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false python-versions = ">=3.8.0" files = [ - {file = "rich-14.1.0-py3-none-any.whl", hash = "sha256:536f5f1785986d6dbdea3c75205c473f970777b4a0d6c6dd1b696aa05a3fa04f"}, - {file = "rich-14.1.0.tar.gz", hash = "sha256:e497a48b844b0320d45007cdebfeaeed8db2a4f4bcf49f15e455cfc4af11eaa8"}, + {file = "rich-14.2.0-py3-none-any.whl", hash = "sha256:76bc51fe2e57d2b1be1f96c524b890b816e334ab4c1e45888799bfaab0021edd"}, + {file = "rich-14.2.0.tar.gz", hash = "sha256:73ff50c7c0c1c77c8243079283f4edb376f0f6442433aecb8ce7e6d0b92d1fe4"}, ] [package.dependencies] @@ -4995,13 +4989,13 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0, [[package]] name = "types-python-dateutil" -version = "2.9.0.20250822" +version = "2.9.0.20251008" description = "Typing stubs for python-dateutil" optional = true python-versions = ">=3.9" files = [ - {file = "types_python_dateutil-2.9.0.20250822-py3-none-any.whl", hash = "sha256:849d52b737e10a6dc6621d2bd7940ec7c65fcb69e6aa2882acf4e56b2b508ddc"}, - {file = "types_python_dateutil-2.9.0.20250822.tar.gz", hash = "sha256:84c92c34bd8e68b117bff742bc00b692a1e8531262d4507b33afcc9f7716cd53"}, + {file = "types_python_dateutil-2.9.0.20251008-py3-none-any.whl", hash = "sha256:b9a5232c8921cf7661b29c163ccc56055c418ab2c6eabe8f917cbcc73a4c4157"}, + {file = "types_python_dateutil-2.9.0.20251008.tar.gz", hash = "sha256:c3826289c170c93ebd8360c3485311187df740166dbab9dd3b792e69f2bc1f9c"}, ] [[package]] @@ -5106,13 +5100,13 @@ files = [ [[package]] name = "virtualenv" -version = "20.34.0" +version = "20.35.3" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.8" files = [ - {file = "virtualenv-20.34.0-py3-none-any.whl", hash = "sha256:341f5afa7eee943e4984a9207c025feedd768baff6753cd660c857ceb3e36026"}, - {file = "virtualenv-20.34.0.tar.gz", hash = "sha256:44815b2c9dee7ed86e387b842a84f20b93f7f417f95886ca1996a72a4138eb1a"}, + {file = "virtualenv-20.35.3-py3-none-any.whl", hash = "sha256:63d106565078d8c8d0b206d48080f938a8b25361e19432d2c9db40d2899c810a"}, + {file = "virtualenv-20.35.3.tar.gz", hash = "sha256:4f1a845d131133bdff10590489610c98c168ff99dc75d6c96853801f7f67af44"}, ] [package.dependencies] @@ -5159,19 +5153,19 @@ files = [ [[package]] name = "websocket-client" -version = "1.8.0" +version = "1.9.0" description = "WebSocket client for Python with low level API options" optional = true -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "websocket_client-1.8.0-py3-none-any.whl", hash = "sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526"}, - {file = "websocket_client-1.8.0.tar.gz", hash = "sha256:3239df9f44da632f96012472805d40a23281a991027ce11d2f45a6f24ac4c3da"}, + {file = "websocket_client-1.9.0-py3-none-any.whl", hash = "sha256:af248a825037ef591efbf6ed20cc5faa03d3b47b9e5a2230a529eeee1c1fc3ef"}, + {file = "websocket_client-1.9.0.tar.gz", hash = "sha256:9e813624b6eb619999a97dc7958469217c3176312b3a16a4bd1bc7e08a46ec98"}, ] [package.extras] -docs = ["Sphinx (>=6.0)", "myst-parser (>=2.0.0)", "sphinx-rtd-theme (>=1.1.0)"] +docs = ["Sphinx (>=6.0)", "myst-parser (>=2.0.0)", "sphinx_rtd_theme (>=1.1.0)"] optional = ["python-socks", "wsaccel"] -test = ["websockets"] +test = ["pytest", "websockets"] [[package]] name = "widgetsnbextension" diff --git a/pyproject.toml b/pyproject.toml index 9f9cf002..559eb970 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [tool.poetry] name = "eVibes" -version = "3.0.0" -description = "eVibes is an open-source eCommerce backend service built with Django. It’s designed for flexibility, making it ideal for various use cases and learning Django skills. The project is easy to customize, allowing for straightforward editing and extension." +version = "3.1.0" +description = "eVibes — your store without the extra baggage. Everything works out of the box: storefront, product catalog, cart, and orders. Minimal complexity, maximum flexibility — install, adjust to your needs, and start selling." authors = ["fureunoir "] readme = "README.md" package-mode = false @@ -103,9 +103,9 @@ testing = ["pytest", "pytest-django", "coverage"] linting = ["black", "isort", "flake8", "bandit"] [tool.mypy] -strict = true +strict = false disable_error_code = ["import-untyped", "no-redef"] -exclude = ["storefront/*"] +exclude = "(^|[\\/])(migrations|storefront)([\\/]|$)" plugins = ["mypy_django_plugin.main", "mypy_drf_plugin.main"] [tool.django-stubs] diff --git a/vibes_auth/admin.py b/vibes_auth/admin.py index 7dc34ba1..551ab544 100644 --- a/vibes_auth/admin.py +++ b/vibes_auth/admin.py @@ -1,3 +1,5 @@ +from typing import Any + from django.contrib import admin from django.contrib.auth.admin import ( GroupAdmin as BaseGroupAdmin, @@ -7,7 +9,8 @@ from django.contrib.auth.admin import ( ) from django.contrib.auth.models import Group as BaseGroup from django.contrib.auth.models import Permission -from django.db.models import Prefetch +from django.db.models import Prefetch, QuerySet +from django.http import HttpRequest from django.utils.translation import gettext_lazy as _ from rest_framework_simplejwt.token_blacklist.admin import ( BlacklistedTokenAdmin as BaseBlacklistedTokenAdmin, @@ -29,7 +32,7 @@ from vibes_auth.forms import UserForm from vibes_auth.models import BlacklistedToken, Group, OutstandingToken, User -class BalanceInline(admin.TabularInline): +class BalanceInline(admin.TabularInline): # type: ignore [type-arg] model = Balance can_delete = False extra = 0 @@ -39,7 +42,7 @@ class BalanceInline(admin.TabularInline): icon = "fa-solid fa-wallet" -class OrderInline(admin.TabularInline): +class OrderInline(admin.TabularInline): # type: ignore [type-arg] model = Order extra = 0 verbose_name = _("order") @@ -48,7 +51,7 @@ class OrderInline(admin.TabularInline): icon = "fa-solid fa-cart-shopping" -class UserAdmin(ActivationActionsMixin, BaseUserAdmin): # type: ignore [misc] +class UserAdmin(ActivationActionsMixin, BaseUserAdmin): # type: ignore [misc, type-arg] inlines = (BalanceInline, OrderInline) fieldsets = ( (None, {"fields": ("email", "password")}), @@ -95,7 +98,7 @@ class UserAdmin(ActivationActionsMixin, BaseUserAdmin): # type: ignore [misc] readonly_fields = ("password",) form = UserForm - def get_queryset(self, request): + def get_queryset(self, request: HttpRequest) -> QuerySet[User]: qs = super().get_queryset(request) return qs.prefetch_related("groups", "payments_balance", "orders").prefetch_related( Prefetch( @@ -104,7 +107,7 @@ class UserAdmin(ActivationActionsMixin, BaseUserAdmin): # type: ignore [misc] ) ) - def save_model(self, request, obj, form, change): + def save_model(self, request: HttpRequest, obj: Any, form: UserForm, change: Any) -> None: if form.cleaned_data.get("attributes") is None: obj.attributes = None super().save_model(request, obj, form, change) diff --git a/vibes_auth/apps.py b/vibes_auth/apps.py index ae42c033..150780c2 100644 --- a/vibes_auth/apps.py +++ b/vibes_auth/apps.py @@ -10,5 +10,5 @@ class VibesAuthConfig(AppConfig): priority = 89 hide = False - def ready(self): + def ready(self) -> None: import vibes_auth.signals # noqa: F401 diff --git a/vibes_auth/forms.py b/vibes_auth/forms.py index 5330dc91..bd8f5e14 100644 --- a/vibes_auth/forms.py +++ b/vibes_auth/forms.py @@ -4,7 +4,7 @@ from core.widgets import JSONTableWidget from vibes_auth.models import User -class UserForm(ModelForm): +class UserForm(ModelForm): # type: ignore [type-arg] class Meta: model = User fields = "__all__" diff --git a/vibes_auth/graphene/mutations.py b/vibes_auth/graphene/mutations.py index 58c8931e..aaba1d36 100644 --- a/vibes_auth/graphene/mutations.py +++ b/vibes_auth/graphene/mutations.py @@ -70,10 +70,13 @@ class CreateUser(BaseMutation): language=language if language else LANGUAGE_CODE, attributes={"referrer": kwargs.get("referrer", "")} if kwargs.get("referrer", "") else {}, ) + # noinspection PyTypeChecker return CreateUser(success=True) else: + # noinspection PyTypeChecker return CreateUser(success=False) except IntegrityError: + # noinspection PyTypeChecker return CreateUser(success=True) except Exception as e: raise BadRequest(str(e)) from e @@ -179,6 +182,7 @@ class DeleteUser(BaseMutation): User.objects.get(email=email).delete() else: raise BadRequest("uuid or email must be specified") + # noinspection PyTypeChecker return DeleteUser(success=True) except User.DoesNotExist as dne: raise Http404(f"User with the given uuid: {uuid} or email: {email} does not exist.") from dne @@ -242,11 +246,13 @@ class VerifyJSONWebToken(BaseMutation): serializer.is_valid(raise_exception=True) user_uuid = serializer.validated_data["user"]["uuid"] user = User.objects.get(pk=user_uuid) + # noinspection PyTypeChecker return VerifyJSONWebToken( token_is_valid=True, user=user, ) except ValidationError: + # noinspection PyTypeChecker return VerifyJSONWebToken(token_is_valid=False, user=None) @@ -276,6 +282,7 @@ class ActivateUser(BaseMutation): except (TypeError, ValueError, OverflowError, User.DoesNotExist) as e: raise BadRequest(_(f"something went wrong: {e!s}")) from e + # noinspection PyTypeChecker return ActivateUser(success=True) @@ -289,10 +296,12 @@ class ResetPassword(BaseMutation): try: user = User.objects.get(email=email) except User.DoesNotExist: + # noinspection PyTypeChecker return ResetPassword(success=False) send_reset_password_email_task.delay(user_pk=user.uuid) + # noinspection PyTypeChecker return ResetPassword(success=True) @@ -323,6 +332,7 @@ class ConfirmResetPassword(BaseMutation): user.save() + # noinspection PyTypeChecker return ConfirmResetPassword(success=True) except (TypeError, ValueError, OverflowError, ValidationError, User.DoesNotExist) as e: diff --git a/vibes_auth/locale/ar_AR/LC_MESSAGES/django.mo b/vibes_auth/locale/ar_AR/LC_MESSAGES/django.mo index 13b44d22..8f57ecd2 100644 Binary files a/vibes_auth/locale/ar_AR/LC_MESSAGES/django.mo and b/vibes_auth/locale/ar_AR/LC_MESSAGES/django.mo differ diff --git a/vibes_auth/locale/ar_AR/LC_MESSAGES/django.po b/vibes_auth/locale/ar_AR/LC_MESSAGES/django.po index 93fae3b7..181c4930 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-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+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:82 +#: vibes_auth/viewsets.py:83 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:125 -#: vibes_auth/viewsets.py:144 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 +#: vibes_auth/viewsets.py:145 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:93 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 msgid "token is invalid!" msgstr "الرمز غير صالح!" @@ -173,7 +173,7 @@ msgid "" msgstr "" "المنتجات التي شاهدها هذا المستخدم مؤخرًا (بحد أقصى 48)، بترتيب زمني عكسي." -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:180 +#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 msgid "groups" msgstr "المجموعات" @@ -181,7 +181,7 @@ msgstr "المجموعات" msgid "wishlist" msgstr "قائمة الرغبات" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:102 +#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 msgid "avatar" msgstr "الصورة الرمزية" @@ -198,91 +198,108 @@ msgstr "اللغة هي واحدة من {LANGUAGES} مع {LANGUAGE_CODE} الا msgid "address set" msgstr "العناوين" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:30 +msgid "" +"Represents a User entity with customized fields and methods for extended " +"functionality. This class extends the AbstractUser model and integrates " +"additional features like custom email login, validation methods, " +"subscription status, verification, and attributes storage. It also provides " +"utilities for managing recently viewed items and token-based activation for " +"verifying accounts. The User model is designed to handle specific use cases " +"for enhanced user management." +msgstr "" +"يمثل كيان مستخدم مع حقول وأساليب مخصصة لوظائف موسعة. توسع هذه الفئة نموذج " +"AbstractUser وتدمج ميزات إضافية مثل تسجيل الدخول إلى البريد الإلكتروني " +"المخصص، وطرق التحقق من الصحة، وحالة الاشتراك، والتحقق، وتخزين السمات. كما " +"يوفر أيضًا أدوات مساعدة لإدارة العناصر التي تم عرضها مؤخرًا والتفعيل المستند" +" إلى الرمز المميز للتحقق من الحسابات. تم تصميم نموذج المستخدم للتعامل مع " +"حالات استخدام محددة لإدارة المستخدم المحسنة." + +#: vibes_auth/models.py:41 msgid "email" msgstr "البريد الإلكتروني" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:41 msgid "user email address" msgstr "عنوان البريد الإلكتروني للمستخدم" -#: vibes_auth/models.py:87 +#: vibes_auth/models.py:43 msgid "phone_number" msgstr "رقم الهاتف" -#: vibes_auth/models.py:92 +#: vibes_auth/models.py:48 msgid "user phone number" msgstr "رقم هاتف المستخدم" -#: vibes_auth/models.py:98 +#: vibes_auth/models.py:54 msgid "first_name" msgstr "الاسم الأول" -#: vibes_auth/models.py:99 +#: vibes_auth/models.py:55 msgid "last_name" msgstr "اسم العائلة" -#: vibes_auth/models.py:105 +#: vibes_auth/models.py:61 msgid "user profile image" msgstr "صورة ملف تعريف المستخدم" -#: vibes_auth/models.py:110 +#: vibes_auth/models.py:66 msgid "is verified" msgstr "تم التحقق" -#: vibes_auth/models.py:111 +#: vibes_auth/models.py:67 msgid "user verification status" msgstr "حالة التحقق من المستخدم" -#: vibes_auth/models.py:114 +#: vibes_auth/models.py:70 msgid "is_active" msgstr "نشط" -#: vibes_auth/models.py:116 +#: vibes_auth/models.py:72 msgid "unselect this instead of deleting accounts" msgstr "قم بإلغاء تحديد هذا بدلاً من حذف الحسابات" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "is_subscribed" msgstr "مشترك" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "user's newsletter subscription status" msgstr "حالة اشتراك المستخدم في النشرة الإخبارية" -#: vibes_auth/models.py:122 +#: vibes_auth/models.py:78 msgid "activation token" msgstr "رمز التفعيل" -#: vibes_auth/models.py:124 +#: vibes_auth/models.py:80 msgid "attributes" msgstr "السمات" -#: vibes_auth/models.py:158 +#: vibes_auth/models.py:110 msgid "user" msgstr "المستخدم" -#: vibes_auth/models.py:159 +#: vibes_auth/models.py:111 msgid "users" msgstr "المستخدمون" -#: vibes_auth/models.py:179 +#: vibes_auth/models.py:131 msgid "group" msgstr "المجموعة" -#: vibes_auth/models.py:196 +#: vibes_auth/models.py:148 msgid "outstanding token" msgstr "الرمز المميز" -#: vibes_auth/models.py:197 +#: vibes_auth/models.py:149 msgid "outstanding tokens" msgstr "الرموز المميزة المعلقة" -#: vibes_auth/models.py:215 +#: vibes_auth/models.py:167 msgid "blacklisted token" msgstr "الرمز المميز المدرج في القائمة السوداء" -#: vibes_auth/models.py:216 +#: vibes_auth/models.py:168 msgid "blacklisted tokens" msgstr "الرموز المميزة المدرجة في القائمة السوداء" @@ -409,12 +426,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "مع أطيب تحياتي،
فريق %(project_name)s" -#: vibes_auth/utils/emailing.py:27 +#: vibes_auth/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | تفعيل الحساب" -#: vibes_auth/utils/emailing.py:69 +#: vibes_auth/utils/emailing.py:63 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | إعادة تعيين كلمة المرور" @@ -466,7 +483,7 @@ msgstr "" msgid "the token is invalid" msgstr "الرمز المميز غير صالح" -#: vibes_auth/viewsets.py:43 +#: vibes_auth/viewsets.py:44 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." @@ -474,10 +491,10 @@ msgstr "" "تنفيذ مجموعة عرض المستخدم.\n" "يوفر مجموعة من الإجراءات التي تدير البيانات المتعلقة بالمستخدم مثل الإنشاء والاسترجاع والتحديثات والحذف والإجراءات المخصصة بما في ذلك إعادة تعيين كلمة المرور وتحميل الصورة الرمزية وتفعيل الحساب ودمج العناصر التي تم عرضها مؤخرًا. تعمل هذه الفئة على توسيع mixins و GenericViewSet لمعالجة واجهة برمجة التطبيقات القوية." -#: vibes_auth/viewsets.py:97 +#: vibes_auth/viewsets.py:98 msgid "password reset successfully" msgstr "تمت إعادة تعيين كلمة المرور بنجاح!" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:131 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 ac461395..ab2f99bb 100644 Binary files a/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.mo and b/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.mo differ diff --git a/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.po b/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.po index 8def8e3f..576ef676 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-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+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:82 +#: vibes_auth/viewsets.py:83 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:125 -#: vibes_auth/viewsets.py:144 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 +#: vibes_auth/viewsets.py:145 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:93 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 msgid "token is invalid!" msgstr "Token je neplatný!" @@ -172,7 +172,7 @@ msgstr "" "Produkty, které si tento uživatel prohlížel naposledy (max. 48), seřazené v " "opačném pořadí." -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:180 +#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 msgid "groups" msgstr "Skupiny" @@ -180,7 +180,7 @@ msgstr "Skupiny" msgid "wishlist" msgstr "Seznam přání" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:102 +#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 msgid "avatar" msgstr "Avatar" @@ -197,91 +197,109 @@ msgstr "Jazyk je jeden z {LANGUAGES} s výchozím {LANGUAGE_CODE}" msgid "address set" msgstr "Adresy" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:30 +msgid "" +"Represents a User entity with customized fields and methods for extended " +"functionality. This class extends the AbstractUser model and integrates " +"additional features like custom email login, validation methods, " +"subscription status, verification, and attributes storage. It also provides " +"utilities for managing recently viewed items and token-based activation for " +"verifying accounts. The User model is designed to handle specific use cases " +"for enhanced user management." +msgstr "" +"Reprezentuje entitu User s upravenými poli a metodami pro rozšířenou " +"funkčnost. Tato třída rozšiřuje model AbstractUser a integruje další funkce," +" jako je vlastní přihlašování e-mailem, ověřovací metody, stav odběru, " +"ověřování a ukládání atributů. Poskytuje také nástroje pro správu naposledy " +"zobrazených položek a aktivaci založenou na tokenu pro ověřování účtů. Model" +" User je navržen tak, aby zvládal specifické případy použití pro rozšířenou " +"správu uživatelů." + +#: vibes_auth/models.py:41 msgid "email" msgstr "E-mail" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:41 msgid "user email address" msgstr "E-mailová adresa uživatele" -#: vibes_auth/models.py:87 +#: vibes_auth/models.py:43 msgid "phone_number" msgstr "Telefonní číslo" -#: vibes_auth/models.py:92 +#: vibes_auth/models.py:48 msgid "user phone number" msgstr "Telefonní číslo uživatele" -#: vibes_auth/models.py:98 +#: vibes_auth/models.py:54 msgid "first_name" msgstr "Křestní jméno" -#: vibes_auth/models.py:99 +#: vibes_auth/models.py:55 msgid "last_name" msgstr "Příjmení" -#: vibes_auth/models.py:105 +#: vibes_auth/models.py:61 msgid "user profile image" msgstr "Obrázek profilu uživatele" -#: vibes_auth/models.py:110 +#: vibes_auth/models.py:66 msgid "is verified" msgstr "Je ověřeno" -#: vibes_auth/models.py:111 +#: vibes_auth/models.py:67 msgid "user verification status" msgstr "Stav ověření uživatele" -#: vibes_auth/models.py:114 +#: vibes_auth/models.py:70 msgid "is_active" msgstr "Je aktivní" -#: vibes_auth/models.py:116 +#: vibes_auth/models.py:72 msgid "unselect this instead of deleting accounts" msgstr "Zrušení výběru této možnosti místo odstranění účtů" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "is_subscribed" msgstr "Je přihlášena k odběru" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "user's newsletter subscription status" msgstr "Stav odběru newsletteru uživatele" -#: vibes_auth/models.py:122 +#: vibes_auth/models.py:78 msgid "activation token" msgstr "Aktivační token" -#: vibes_auth/models.py:124 +#: vibes_auth/models.py:80 msgid "attributes" msgstr "Atributy" -#: vibes_auth/models.py:158 +#: vibes_auth/models.py:110 msgid "user" msgstr "Uživatel" -#: vibes_auth/models.py:159 +#: vibes_auth/models.py:111 msgid "users" msgstr "Uživatelé" -#: vibes_auth/models.py:179 +#: vibes_auth/models.py:131 msgid "group" msgstr "Skupina" -#: vibes_auth/models.py:196 +#: vibes_auth/models.py:148 msgid "outstanding token" msgstr "Vynikající žeton" -#: vibes_auth/models.py:197 +#: vibes_auth/models.py:149 msgid "outstanding tokens" msgstr "Nevyplacené žetony" -#: vibes_auth/models.py:215 +#: vibes_auth/models.py:167 msgid "blacklisted token" msgstr "Token na černé listině" -#: vibes_auth/models.py:216 +#: vibes_auth/models.py:168 msgid "blacklisted tokens" msgstr "Tokeny na černé listině" @@ -408,12 +426,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "S pozdravem,
tým %(project_name)s" -#: vibes_auth/utils/emailing.py:27 +#: vibes_auth/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Aktivovat účet" -#: vibes_auth/utils/emailing.py:69 +#: vibes_auth/utils/emailing.py:63 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Obnovit heslo" @@ -467,7 +485,7 @@ msgstr "" msgid "the token is invalid" msgstr "Token je neplatný" -#: vibes_auth/viewsets.py:43 +#: vibes_auth/viewsets.py:44 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." @@ -475,10 +493,10 @@ 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 +#: vibes_auth/viewsets.py:98 msgid "password reset successfully" msgstr "Heslo bylo úspěšně resetováno!" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:131 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 094e963c..14122866 100644 Binary files a/vibes_auth/locale/da_DK/LC_MESSAGES/django.mo and b/vibes_auth/locale/da_DK/LC_MESSAGES/django.mo differ diff --git a/vibes_auth/locale/da_DK/LC_MESSAGES/django.po b/vibes_auth/locale/da_DK/LC_MESSAGES/django.po index 84a2796c..d2656f2d 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-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+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:82 +#: vibes_auth/viewsets.py:83 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:125 -#: vibes_auth/viewsets.py:144 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 +#: vibes_auth/viewsets.py:145 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:93 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 msgid "token is invalid!" msgstr "Token er ugyldig!" @@ -174,7 +174,7 @@ msgstr "" "De produkter, som denne bruger har set for nylig (maks. 48), i omvendt " "kronologisk rækkefølge." -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:180 +#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 msgid "groups" msgstr "Grupper" @@ -182,7 +182,7 @@ msgstr "Grupper" msgid "wishlist" msgstr "Ønskeliste" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:102 +#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 msgid "avatar" msgstr "Avatar" @@ -199,91 +199,109 @@ msgstr "Sprog er en af {LANGUAGES} med standard {LANGUAGE_CODE}." msgid "address set" msgstr "Adresser" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:30 +msgid "" +"Represents a User entity with customized fields and methods for extended " +"functionality. This class extends the AbstractUser model and integrates " +"additional features like custom email login, validation methods, " +"subscription status, verification, and attributes storage. It also provides " +"utilities for managing recently viewed items and token-based activation for " +"verifying accounts. The User model is designed to handle specific use cases " +"for enhanced user management." +msgstr "" +"Repræsenterer en User-enhed med tilpassede felter og metoder til udvidet " +"funktionalitet. Denne klasse udvider AbstractUser-modellen og integrerer " +"yderligere funktioner som brugerdefineret e-mail-login, valideringsmetoder, " +"abonnementsstatus, verificering og lagring af attributter. Den indeholder " +"også værktøjer til håndtering af nyligt viste elementer og tokenbaseret " +"aktivering til verificering af konti. User-modellen er designet til at " +"håndtere specifikke brugsscenarier for forbedret brugeradministration." + +#: vibes_auth/models.py:41 msgid "email" msgstr "E-mail" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:41 msgid "user email address" msgstr "Brugerens e-mailadresse" -#: vibes_auth/models.py:87 +#: vibes_auth/models.py:43 msgid "phone_number" msgstr "Telefonnummer" -#: vibes_auth/models.py:92 +#: vibes_auth/models.py:48 msgid "user phone number" msgstr "Brugerens telefonnummer" -#: vibes_auth/models.py:98 +#: vibes_auth/models.py:54 msgid "first_name" msgstr "Fornavn" -#: vibes_auth/models.py:99 +#: vibes_auth/models.py:55 msgid "last_name" msgstr "Efternavn" -#: vibes_auth/models.py:105 +#: vibes_auth/models.py:61 msgid "user profile image" msgstr "Billede af brugerprofil" -#: vibes_auth/models.py:110 +#: vibes_auth/models.py:66 msgid "is verified" msgstr "Er verificeret" -#: vibes_auth/models.py:111 +#: vibes_auth/models.py:67 msgid "user verification status" msgstr "Brugerens verifikationsstatus" -#: vibes_auth/models.py:114 +#: vibes_auth/models.py:70 msgid "is_active" msgstr "Er aktiv" -#: vibes_auth/models.py:116 +#: vibes_auth/models.py:72 msgid "unselect this instead of deleting accounts" msgstr "Fravælg dette i stedet for at slette konti" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "is_subscribed" msgstr "Er tilmeldt" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "user's newsletter subscription status" msgstr "Status for brugerens abonnement på nyhedsbrev" -#: vibes_auth/models.py:122 +#: vibes_auth/models.py:78 msgid "activation token" msgstr "Aktiveringstoken" -#: vibes_auth/models.py:124 +#: vibes_auth/models.py:80 msgid "attributes" msgstr "Egenskaber" -#: vibes_auth/models.py:158 +#: vibes_auth/models.py:110 msgid "user" msgstr "Bruger" -#: vibes_auth/models.py:159 +#: vibes_auth/models.py:111 msgid "users" msgstr "Brugere" -#: vibes_auth/models.py:179 +#: vibes_auth/models.py:131 msgid "group" msgstr "Gruppe" -#: vibes_auth/models.py:196 +#: vibes_auth/models.py:148 msgid "outstanding token" msgstr "Enestående token" -#: vibes_auth/models.py:197 +#: vibes_auth/models.py:149 msgid "outstanding tokens" msgstr "Udestående tokens" -#: vibes_auth/models.py:215 +#: vibes_auth/models.py:167 msgid "blacklisted token" msgstr "Sortlistet token" -#: vibes_auth/models.py:216 +#: vibes_auth/models.py:168 msgid "blacklisted tokens" msgstr "Sortlistede tokens" @@ -410,12 +428,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Med venlig hilsen,
teamet %(project_name)s." -#: vibes_auth/utils/emailing.py:27 +#: vibes_auth/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Aktiver konto" -#: vibes_auth/utils/emailing.py:69 +#: vibes_auth/utils/emailing.py:63 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Nulstil adgangskode" @@ -470,7 +488,7 @@ msgstr "" msgid "the token is invalid" msgstr "Tokenet er ugyldigt" -#: vibes_auth/viewsets.py:43 +#: vibes_auth/viewsets.py:44 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." @@ -478,10 +496,10 @@ 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 +#: vibes_auth/viewsets.py:98 msgid "password reset successfully" msgstr "Adgangskoden er blevet nulstillet med succes!" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:131 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 51835160..9b78bb81 100644 Binary files a/vibes_auth/locale/de_DE/LC_MESSAGES/django.mo and b/vibes_auth/locale/de_DE/LC_MESSAGES/django.mo differ diff --git a/vibes_auth/locale/de_DE/LC_MESSAGES/django.po b/vibes_auth/locale/de_DE/LC_MESSAGES/django.po index 5cbf2395..d84f064e 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-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+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:82 +#: vibes_auth/viewsets.py:83 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:125 -#: vibes_auth/viewsets.py:144 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 +#: vibes_auth/viewsets.py:145 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:93 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 msgid "token is invalid!" msgstr "Token ist ungültig!" @@ -178,7 +178,7 @@ msgstr "" "Die Produkte, die dieser Benutzer zuletzt angesehen hat (maximal 48), in " "umgekehrter chronologischer Reihenfolge." -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:180 +#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 msgid "groups" msgstr "Gruppen" @@ -186,7 +186,7 @@ msgstr "Gruppen" msgid "wishlist" msgstr "Wunschzettel" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:102 +#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 msgid "avatar" msgstr "Avatar" @@ -204,91 +204,111 @@ msgstr "Sprache ist eine der {LANGUAGES} mit Voreinstellung {LANGUAGE_CODE}" msgid "address set" msgstr "Adressen" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:30 +msgid "" +"Represents a User entity with customized fields and methods for extended " +"functionality. This class extends the AbstractUser model and integrates " +"additional features like custom email login, validation methods, " +"subscription status, verification, and attributes storage. It also provides " +"utilities for managing recently viewed items and token-based activation for " +"verifying accounts. The User model is designed to handle specific use cases " +"for enhanced user management." +msgstr "" +"Stellt eine Benutzerentität mit angepassten Feldern und Methoden für " +"erweiterte Funktionalität dar. Diese Klasse erweitert das AbstractUser-" +"Modell und integriert zusätzliche Funktionen wie benutzerdefinierte E-Mail-" +"Anmeldung, Validierungsmethoden, Abonnementstatus, Überprüfung und " +"Speicherung von Attributen. Außerdem bietet sie Dienstprogramme für die " +"Verwaltung der zuletzt angezeigten Elemente und die Token-basierte " +"Aktivierung zur Verifizierung von Konten. Das Benutzermodell wurde " +"entwickelt, um spezielle Anwendungsfälle für eine erweiterte " +"Benutzerverwaltung zu behandeln." + +#: vibes_auth/models.py:41 msgid "email" msgstr "E-Mail" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:41 msgid "user email address" msgstr "E-Mail Adresse des Benutzers" -#: vibes_auth/models.py:87 +#: vibes_auth/models.py:43 msgid "phone_number" msgstr "Rufnummer" -#: vibes_auth/models.py:92 +#: vibes_auth/models.py:48 msgid "user phone number" msgstr "Rufnummer des Benutzers" -#: vibes_auth/models.py:98 +#: vibes_auth/models.py:54 msgid "first_name" msgstr "Vornamen" -#: vibes_auth/models.py:99 +#: vibes_auth/models.py:55 msgid "last_name" msgstr "Nachname" -#: vibes_auth/models.py:105 +#: vibes_auth/models.py:61 msgid "user profile image" msgstr "Bild des Benutzerprofils" -#: vibes_auth/models.py:110 +#: vibes_auth/models.py:66 msgid "is verified" msgstr "Wird überprüft" -#: vibes_auth/models.py:111 +#: vibes_auth/models.py:67 msgid "user verification status" msgstr "Verifizierungsstatus des Benutzers" -#: vibes_auth/models.py:114 +#: vibes_auth/models.py:70 msgid "is_active" msgstr "Ist aktiv" -#: vibes_auth/models.py:116 +#: vibes_auth/models.py:72 msgid "unselect this instead of deleting accounts" msgstr "Deaktivieren Sie diese Option, anstatt Konten zu löschen" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "is_subscribed" msgstr "Ist abonniert" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "user's newsletter subscription status" msgstr "Status des Newsletter-Abonnements des Benutzers" -#: vibes_auth/models.py:122 +#: vibes_auth/models.py:78 msgid "activation token" msgstr "Aktivierungs-Token" -#: vibes_auth/models.py:124 +#: vibes_auth/models.py:80 msgid "attributes" msgstr "Attribute" -#: vibes_auth/models.py:158 +#: vibes_auth/models.py:110 msgid "user" msgstr "Benutzer" -#: vibes_auth/models.py:159 +#: vibes_auth/models.py:111 msgid "users" msgstr "Benutzer" -#: vibes_auth/models.py:179 +#: vibes_auth/models.py:131 msgid "group" msgstr "Gruppe" -#: vibes_auth/models.py:196 +#: vibes_auth/models.py:148 msgid "outstanding token" msgstr "Hervorragende Wertmarke" -#: vibes_auth/models.py:197 +#: vibes_auth/models.py:149 msgid "outstanding tokens" msgstr "Ausstehende Wertmarken" -#: vibes_auth/models.py:215 +#: vibes_auth/models.py:167 msgid "blacklisted token" msgstr "Token auf der schwarzen Liste" -#: vibes_auth/models.py:216 +#: vibes_auth/models.py:168 msgid "blacklisted tokens" msgstr "Token auf der schwarzen Liste" @@ -417,12 +437,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Mit freundlichen Grüßen,
das %(project_name)s-Team" -#: vibes_auth/utils/emailing.py:27 +#: vibes_auth/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Konto freischalten" -#: vibes_auth/utils/emailing.py:69 +#: vibes_auth/utils/emailing.py:63 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Passwort zurücksetzen" @@ -479,7 +499,7 @@ msgstr "" msgid "the token is invalid" msgstr "Das Token ist ungültig" -#: vibes_auth/viewsets.py:43 +#: vibes_auth/viewsets.py:44 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." @@ -487,10 +507,10 @@ 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 +#: vibes_auth/viewsets.py:98 msgid "password reset successfully" msgstr "Das Passwort wurde erfolgreich zurückgesetzt!" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:131 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 14b6b389..d7e8f52c 100644 Binary files a/vibes_auth/locale/en_GB/LC_MESSAGES/django.mo and b/vibes_auth/locale/en_GB/LC_MESSAGES/django.mo differ diff --git a/vibes_auth/locale/en_GB/LC_MESSAGES/django.po b/vibes_auth/locale/en_GB/LC_MESSAGES/django.po index 60176e47..96fcc53a 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-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+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:82 +#: vibes_auth/viewsets.py:83 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:125 -#: vibes_auth/viewsets.py:144 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 +#: vibes_auth/viewsets.py:145 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:93 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 msgid "token is invalid!" msgstr "Token is invalid!" @@ -176,7 +176,7 @@ msgstr "" "The products this user has viewed most recently (max 48), in reverse-" "chronological order." -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:180 +#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 msgid "groups" msgstr "Groups" @@ -184,7 +184,7 @@ msgstr "Groups" msgid "wishlist" msgstr "Wishlist" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:102 +#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 msgid "avatar" msgstr "Avatar" @@ -201,91 +201,109 @@ msgstr "Language is one of the {LANGUAGES} with default {LANGUAGE_CODE}" msgid "address set" msgstr "Adresses" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:30 +msgid "" +"Represents a User entity with customized fields and methods for extended " +"functionality. This class extends the AbstractUser model and integrates " +"additional features like custom email login, validation methods, " +"subscription status, verification, and attributes storage. It also provides " +"utilities for managing recently viewed items and token-based activation for " +"verifying accounts. The User model is designed to handle specific use cases " +"for enhanced user management." +msgstr "" +"Represents a User entity with customized fields and methods for extended " +"functionality. This class extends the AbstractUser model and integrates " +"additional features like custom email login, validation methods, " +"subscription status, verification, and attributes storage. It also provides " +"utilities for managing recently viewed items and token-based activation for " +"verifying accounts. The User model is designed to handle specific use cases " +"for enhanced user management." + +#: vibes_auth/models.py:41 msgid "email" msgstr "E-mail" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:41 msgid "user email address" msgstr "User's email address" -#: vibes_auth/models.py:87 +#: vibes_auth/models.py:43 msgid "phone_number" msgstr "Phone Number" -#: vibes_auth/models.py:92 +#: vibes_auth/models.py:48 msgid "user phone number" msgstr "User phone number" -#: vibes_auth/models.py:98 +#: vibes_auth/models.py:54 msgid "first_name" msgstr "First name" -#: vibes_auth/models.py:99 +#: vibes_auth/models.py:55 msgid "last_name" msgstr "Last name" -#: vibes_auth/models.py:105 +#: vibes_auth/models.py:61 msgid "user profile image" msgstr "User profile image" -#: vibes_auth/models.py:110 +#: vibes_auth/models.py:66 msgid "is verified" msgstr "Is verified" -#: vibes_auth/models.py:111 +#: vibes_auth/models.py:67 msgid "user verification status" msgstr "User's verification status" -#: vibes_auth/models.py:114 +#: vibes_auth/models.py:70 msgid "is_active" msgstr "Is active" -#: vibes_auth/models.py:116 +#: vibes_auth/models.py:72 msgid "unselect this instead of deleting accounts" msgstr "Unselect this instead of deleting accounts" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "is_subscribed" msgstr "Is subscribed" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "user's newsletter subscription status" msgstr "User's newsletter subscription status" -#: vibes_auth/models.py:122 +#: vibes_auth/models.py:78 msgid "activation token" msgstr "Activation token" -#: vibes_auth/models.py:124 +#: vibes_auth/models.py:80 msgid "attributes" msgstr "Attributes" -#: vibes_auth/models.py:158 +#: vibes_auth/models.py:110 msgid "user" msgstr "User" -#: vibes_auth/models.py:159 +#: vibes_auth/models.py:111 msgid "users" msgstr "Users" -#: vibes_auth/models.py:179 +#: vibes_auth/models.py:131 msgid "group" msgstr "Group" -#: vibes_auth/models.py:196 +#: vibes_auth/models.py:148 msgid "outstanding token" msgstr "Outstanding token" -#: vibes_auth/models.py:197 +#: vibes_auth/models.py:149 msgid "outstanding tokens" msgstr "Outstanding tokens" -#: vibes_auth/models.py:215 +#: vibes_auth/models.py:167 msgid "blacklisted token" msgstr "Blacklisted token" -#: vibes_auth/models.py:216 +#: vibes_auth/models.py:168 msgid "blacklisted tokens" msgstr "Blacklisted tokens" @@ -412,12 +430,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Best regards,
the %(project_name)s team" -#: vibes_auth/utils/emailing.py:27 +#: vibes_auth/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Activate Account" -#: vibes_auth/utils/emailing.py:69 +#: vibes_auth/utils/emailing.py:63 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Reset Password" @@ -470,7 +488,7 @@ msgstr "" msgid "the token is invalid" msgstr "The token is invalid" -#: vibes_auth/viewsets.py:43 +#: vibes_auth/viewsets.py:44 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." @@ -478,10 +496,10 @@ 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 +#: vibes_auth/viewsets.py:98 msgid "password reset successfully" msgstr "Password has been reset successfully!" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:131 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 5d301c5f..2d79ab07 100644 Binary files a/vibes_auth/locale/en_US/LC_MESSAGES/django.mo and b/vibes_auth/locale/en_US/LC_MESSAGES/django.mo differ diff --git a/vibes_auth/locale/en_US/LC_MESSAGES/django.po b/vibes_auth/locale/en_US/LC_MESSAGES/django.po index cc17c255..ef55d6d2 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-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+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:82 +#: vibes_auth/viewsets.py:83 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:125 -#: vibes_auth/viewsets.py:144 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 +#: vibes_auth/viewsets.py:145 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:93 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 msgid "token is invalid!" msgstr "Token is invalid!" @@ -172,7 +172,7 @@ msgstr "" "The products this user has viewed most recently (max 48), in reverse-" "chronological order." -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:180 +#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 msgid "groups" msgstr "Groups" @@ -180,7 +180,7 @@ msgstr "Groups" msgid "wishlist" msgstr "Wishlist" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:102 +#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 msgid "avatar" msgstr "Avatar" @@ -197,91 +197,109 @@ msgstr "Language is one of the {LANGUAGES} with default {LANGUAGE_CODE}" msgid "address set" msgstr "Adresses" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:30 +msgid "" +"Represents a User entity with customized fields and methods for extended " +"functionality. This class extends the AbstractUser model and integrates " +"additional features like custom email login, validation methods, " +"subscription status, verification, and attributes storage. It also provides " +"utilities for managing recently viewed items and token-based activation for " +"verifying accounts. The User model is designed to handle specific use cases " +"for enhanced user management." +msgstr "" +"Represents a User entity with customized fields and methods for extended " +"functionality. This class extends the AbstractUser model and integrates " +"additional features like custom email login, validation methods, " +"subscription status, verification, and attributes storage. It also provides " +"utilities for managing recently viewed items and token-based activation for " +"verifying accounts. The User model is designed to handle specific use cases " +"for enhanced user management." + +#: vibes_auth/models.py:41 msgid "email" msgstr "Email" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:41 msgid "user email address" msgstr "User's email address" -#: vibes_auth/models.py:87 +#: vibes_auth/models.py:43 msgid "phone_number" msgstr "Phone Number" -#: vibes_auth/models.py:92 +#: vibes_auth/models.py:48 msgid "user phone number" msgstr "User phone number" -#: vibes_auth/models.py:98 +#: vibes_auth/models.py:54 msgid "first_name" msgstr "First name" -#: vibes_auth/models.py:99 +#: vibes_auth/models.py:55 msgid "last_name" msgstr "Last name" -#: vibes_auth/models.py:105 +#: vibes_auth/models.py:61 msgid "user profile image" msgstr "User profile image" -#: vibes_auth/models.py:110 +#: vibes_auth/models.py:66 msgid "is verified" msgstr "Is verified" -#: vibes_auth/models.py:111 +#: vibes_auth/models.py:67 msgid "user verification status" msgstr "User's verification status" -#: vibes_auth/models.py:114 +#: vibes_auth/models.py:70 msgid "is_active" msgstr "Is active" -#: vibes_auth/models.py:116 +#: vibes_auth/models.py:72 msgid "unselect this instead of deleting accounts" msgstr "Unselect this instead of deleting accounts" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "is_subscribed" msgstr "Is subscribed" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "user's newsletter subscription status" msgstr "User's newsletter subscription status" -#: vibes_auth/models.py:122 +#: vibes_auth/models.py:78 msgid "activation token" msgstr "Activation token" -#: vibes_auth/models.py:124 +#: vibes_auth/models.py:80 msgid "attributes" msgstr "Attributes" -#: vibes_auth/models.py:158 +#: vibes_auth/models.py:110 msgid "user" msgstr "User" -#: vibes_auth/models.py:159 +#: vibes_auth/models.py:111 msgid "users" msgstr "Users" -#: vibes_auth/models.py:179 +#: vibes_auth/models.py:131 msgid "group" msgstr "Group" -#: vibes_auth/models.py:196 +#: vibes_auth/models.py:148 msgid "outstanding token" msgstr "Outstanding token" -#: vibes_auth/models.py:197 +#: vibes_auth/models.py:149 msgid "outstanding tokens" msgstr "Outstanding tokens" -#: vibes_auth/models.py:215 +#: vibes_auth/models.py:167 msgid "blacklisted token" msgstr "Blacklisted token" -#: vibes_auth/models.py:216 +#: vibes_auth/models.py:168 msgid "blacklisted tokens" msgstr "Blacklisted tokens" @@ -408,12 +426,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Best regards,
the %(project_name)s team" -#: vibes_auth/utils/emailing.py:27 +#: vibes_auth/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Activate Account" -#: vibes_auth/utils/emailing.py:69 +#: vibes_auth/utils/emailing.py:63 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Reset Password" @@ -466,7 +484,7 @@ msgstr "" msgid "the token is invalid" msgstr "The token is invalid" -#: vibes_auth/viewsets.py:43 +#: vibes_auth/viewsets.py:44 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." @@ -474,10 +492,10 @@ 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 +#: vibes_auth/viewsets.py:98 msgid "password reset successfully" msgstr "Password has been reset successfully!" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:131 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 10d01cfc..5b1b40fc 100644 Binary files a/vibes_auth/locale/es_ES/LC_MESSAGES/django.mo and b/vibes_auth/locale/es_ES/LC_MESSAGES/django.mo differ diff --git a/vibes_auth/locale/es_ES/LC_MESSAGES/django.po b/vibes_auth/locale/es_ES/LC_MESSAGES/django.po index d13bf67e..86a4c9e5 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-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+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:82 +#: vibes_auth/viewsets.py:83 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:125 -#: vibes_auth/viewsets.py:144 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 +#: vibes_auth/viewsets.py:145 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:93 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 msgid "token is invalid!" msgstr "¡La ficha no es válida!" @@ -175,7 +175,7 @@ msgstr "" "Los productos que este usuario ha visto más recientemente (máx. 48), en " "orden cronológico inverso." -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:180 +#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 msgid "groups" msgstr "Grupos" @@ -183,7 +183,7 @@ msgstr "Grupos" msgid "wishlist" msgstr "Lista de deseos" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:102 +#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 msgid "avatar" msgstr "Avatar" @@ -200,91 +200,110 @@ msgstr "El idioma es uno de los {LANGUAGES} con {LANGUAGE_CODE} por defecto" msgid "address set" msgstr "Direcciones" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:30 +msgid "" +"Represents a User entity with customized fields and methods for extended " +"functionality. This class extends the AbstractUser model and integrates " +"additional features like custom email login, validation methods, " +"subscription status, verification, and attributes storage. It also provides " +"utilities for managing recently viewed items and token-based activation for " +"verifying accounts. The User model is designed to handle specific use cases " +"for enhanced user management." +msgstr "" +"Representa una entidad Usuario con campos y métodos personalizados para una " +"funcionalidad ampliada. Esta clase amplía el modelo AbstractUser e integra " +"funciones adicionales como el inicio de sesión por correo electrónico " +"personalizado, métodos de validación, estado de suscripción, verificación y " +"almacenamiento de atributos. También proporciona utilidades para gestionar " +"los elementos vistos recientemente y la activación basada en tokens para " +"verificar las cuentas. El modelo User está diseñado para manejar casos de " +"uso específicos para una gestión de usuarios mejorada." + +#: vibes_auth/models.py:41 msgid "email" msgstr "Correo electrónico" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:41 msgid "user email address" msgstr "Dirección de correo electrónico del usuario" -#: vibes_auth/models.py:87 +#: vibes_auth/models.py:43 msgid "phone_number" msgstr "Número de teléfono" -#: vibes_auth/models.py:92 +#: vibes_auth/models.py:48 msgid "user phone number" msgstr "Número de teléfono del usuario" -#: vibes_auth/models.py:98 +#: vibes_auth/models.py:54 msgid "first_name" msgstr "Nombre" -#: vibes_auth/models.py:99 +#: vibes_auth/models.py:55 msgid "last_name" msgstr "Apellido" -#: vibes_auth/models.py:105 +#: vibes_auth/models.py:61 msgid "user profile image" msgstr "Imagen del perfil del usuario" -#: vibes_auth/models.py:110 +#: vibes_auth/models.py:66 msgid "is verified" msgstr "Se verifica" -#: vibes_auth/models.py:111 +#: vibes_auth/models.py:67 msgid "user verification status" msgstr "Estado de verificación del usuario" -#: vibes_auth/models.py:114 +#: vibes_auth/models.py:70 msgid "is_active" msgstr "Está activo" -#: vibes_auth/models.py:116 +#: vibes_auth/models.py:72 msgid "unselect this instead of deleting accounts" msgstr "Deseleccione esta opción en lugar de eliminar cuentas" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "is_subscribed" msgstr "Está suscrito" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "user's newsletter subscription status" msgstr "Estado de suscripción del usuario al boletín" -#: vibes_auth/models.py:122 +#: vibes_auth/models.py:78 msgid "activation token" msgstr "Ficha de activación" -#: vibes_auth/models.py:124 +#: vibes_auth/models.py:80 msgid "attributes" msgstr "Atributos" -#: vibes_auth/models.py:158 +#: vibes_auth/models.py:110 msgid "user" msgstr "Usuario" -#: vibes_auth/models.py:159 +#: vibes_auth/models.py:111 msgid "users" msgstr "Usuarios" -#: vibes_auth/models.py:179 +#: vibes_auth/models.py:131 msgid "group" msgstr "Grupo" -#: vibes_auth/models.py:196 +#: vibes_auth/models.py:148 msgid "outstanding token" msgstr "Ficha pendiente" -#: vibes_auth/models.py:197 +#: vibes_auth/models.py:149 msgid "outstanding tokens" msgstr "Fichas pendientes" -#: vibes_auth/models.py:215 +#: vibes_auth/models.py:167 msgid "blacklisted token" msgstr "Ficha en la lista negra" -#: vibes_auth/models.py:216 +#: vibes_auth/models.py:168 msgid "blacklisted tokens" msgstr "Fichas en la lista negra" @@ -412,12 +431,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Saludos cordiales,
el equipo %(project_name)s" -#: vibes_auth/utils/emailing.py:27 +#: vibes_auth/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Activar cuenta" -#: vibes_auth/utils/emailing.py:69 +#: vibes_auth/utils/emailing.py:63 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Restablecer contraseña" @@ -472,7 +491,7 @@ msgstr "" msgid "the token is invalid" msgstr "El token no es válido" -#: vibes_auth/viewsets.py:43 +#: vibes_auth/viewsets.py:44 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." @@ -480,10 +499,10 @@ 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 +#: vibes_auth/viewsets.py:98 msgid "password reset successfully" msgstr "La contraseña se ha restablecido correctamente." -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:131 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 ea19ea43..aeeef784 100644 --- a/vibes_auth/locale/fa_IR/LC_MESSAGES/django.po +++ b/vibes_auth/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-13 18:49+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:82 +#: vibes_auth/viewsets.py:83 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:125 -#: vibes_auth/viewsets.py:144 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 +#: vibes_auth/viewsets.py:145 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:93 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 msgid "token is invalid!" msgstr "" @@ -173,7 +173,7 @@ msgid "" "chronological order" msgstr "" -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:180 +#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 msgid "groups" msgstr "" @@ -181,7 +181,7 @@ msgstr "" msgid "wishlist" msgstr "" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:102 +#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 msgid "avatar" msgstr "" @@ -198,91 +198,102 @@ msgstr "" msgid "address set" msgstr "" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:30 +msgid "" +"Represents a User entity with customized fields and methods for extended " +"functionality. This class extends the AbstractUser model and integrates " +"additional features like custom email login, validation methods, " +"subscription status, verification, and attributes storage. It also provides " +"utilities for managing recently viewed items and token-based activation for " +"verifying accounts. The User model is designed to handle specific use cases " +"for enhanced user management." +msgstr "" + +#: vibes_auth/models.py:41 msgid "email" msgstr "" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:41 msgid "user email address" msgstr "" -#: vibes_auth/models.py:87 +#: vibes_auth/models.py:43 msgid "phone_number" msgstr "" -#: vibes_auth/models.py:92 +#: vibes_auth/models.py:48 msgid "user phone number" msgstr "" -#: vibes_auth/models.py:98 +#: vibes_auth/models.py:54 msgid "first_name" msgstr "" -#: vibes_auth/models.py:99 +#: vibes_auth/models.py:55 msgid "last_name" msgstr "" -#: vibes_auth/models.py:105 +#: vibes_auth/models.py:61 msgid "user profile image" msgstr "" -#: vibes_auth/models.py:110 +#: vibes_auth/models.py:66 msgid "is verified" msgstr "" -#: vibes_auth/models.py:111 +#: vibes_auth/models.py:67 msgid "user verification status" msgstr "" -#: vibes_auth/models.py:114 +#: vibes_auth/models.py:70 msgid "is_active" msgstr "" -#: vibes_auth/models.py:116 +#: vibes_auth/models.py:72 msgid "unselect this instead of deleting accounts" msgstr "" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "is_subscribed" msgstr "" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "user's newsletter subscription status" msgstr "" -#: vibes_auth/models.py:122 +#: vibes_auth/models.py:78 msgid "activation token" msgstr "" -#: vibes_auth/models.py:124 +#: vibes_auth/models.py:80 msgid "attributes" msgstr "" -#: vibes_auth/models.py:158 +#: vibes_auth/models.py:110 msgid "user" msgstr "" -#: vibes_auth/models.py:159 +#: vibes_auth/models.py:111 msgid "users" msgstr "" -#: vibes_auth/models.py:179 +#: vibes_auth/models.py:131 msgid "group" msgstr "" -#: vibes_auth/models.py:196 +#: vibes_auth/models.py:148 msgid "outstanding token" msgstr "" -#: vibes_auth/models.py:197 +#: vibes_auth/models.py:149 msgid "outstanding tokens" msgstr "" -#: vibes_auth/models.py:215 +#: vibes_auth/models.py:167 msgid "blacklisted token" msgstr "" -#: vibes_auth/models.py:216 +#: vibes_auth/models.py:168 msgid "blacklisted tokens" msgstr "" @@ -400,12 +411,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "" -#: vibes_auth/utils/emailing.py:27 +#: vibes_auth/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "" -#: vibes_auth/utils/emailing.py:69 +#: vibes_auth/utils/emailing.py:63 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "" @@ -444,7 +455,7 @@ msgstr "" msgid "the token is invalid" msgstr "" -#: vibes_auth/viewsets.py:43 +#: vibes_auth/viewsets.py:44 msgid "" "User view set implementation.\n" "Provides a set of actions that manage user-related data such as creation, " @@ -453,10 +464,10 @@ msgid "" "class extends the mixins and GenericViewSet for robust API handling." msgstr "" -#: vibes_auth/viewsets.py:97 +#: vibes_auth/viewsets.py:98 msgid "password reset successfully" msgstr "" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:131 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 729c3583..0fa4abc7 100644 Binary files a/vibes_auth/locale/fr_FR/LC_MESSAGES/django.mo and b/vibes_auth/locale/fr_FR/LC_MESSAGES/django.mo differ diff --git a/vibes_auth/locale/fr_FR/LC_MESSAGES/django.po b/vibes_auth/locale/fr_FR/LC_MESSAGES/django.po index 04fbb208..5fa8d119 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-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+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:82 +#: vibes_auth/viewsets.py:83 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:125 -#: vibes_auth/viewsets.py:144 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 +#: vibes_auth/viewsets.py:145 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:93 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 msgid "token is invalid!" msgstr "Le jeton n'est pas valide !" @@ -178,7 +178,7 @@ msgstr "" "Les produits que cet utilisateur a consultés le plus récemment (max 48), par" " ordre chronologique inverse." -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:180 +#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 msgid "groups" msgstr "Groupes" @@ -186,7 +186,7 @@ msgstr "Groupes" msgid "wishlist" msgstr "Liste de souhaits" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:102 +#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 msgid "avatar" msgstr "Avatar" @@ -206,91 +206,111 @@ msgstr "" msgid "address set" msgstr "Adresses" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:30 +msgid "" +"Represents a User entity with customized fields and methods for extended " +"functionality. This class extends the AbstractUser model and integrates " +"additional features like custom email login, validation methods, " +"subscription status, verification, and attributes storage. It also provides " +"utilities for managing recently viewed items and token-based activation for " +"verifying accounts. The User model is designed to handle specific use cases " +"for enhanced user management." +msgstr "" +"Représente une entité Utilisateur avec des champs et des méthodes " +"personnalisés pour des fonctionnalités étendues. Cette classe étend le " +"modèle AbstractUser et intègre des fonctionnalités supplémentaires telles " +"que la connexion par courrier électronique, les méthodes de validation, " +"l'état de l'abonnement, la vérification et le stockage des attributs. Elle " +"fournit également des utilitaires pour la gestion des éléments récemment " +"consultés et l'activation par jeton pour la vérification des comptes. Le " +"modèle User est conçu pour gérer des cas d'utilisation spécifiques en vue " +"d'une gestion améliorée des utilisateurs." + +#: vibes_auth/models.py:41 msgid "email" msgstr "Courriel" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:41 msgid "user email address" msgstr "Adresse électronique de l'utilisateur" -#: vibes_auth/models.py:87 +#: vibes_auth/models.py:43 msgid "phone_number" msgstr "Numéro de téléphone" -#: vibes_auth/models.py:92 +#: vibes_auth/models.py:48 msgid "user phone number" msgstr "Numéro de téléphone de l'utilisateur" -#: vibes_auth/models.py:98 +#: vibes_auth/models.py:54 msgid "first_name" msgstr "Prénom" -#: vibes_auth/models.py:99 +#: vibes_auth/models.py:55 msgid "last_name" msgstr "Nom de famille" -#: vibes_auth/models.py:105 +#: vibes_auth/models.py:61 msgid "user profile image" msgstr "Image du profil de l'utilisateur" -#: vibes_auth/models.py:110 +#: vibes_auth/models.py:66 msgid "is verified" msgstr "Est vérifié" -#: vibes_auth/models.py:111 +#: vibes_auth/models.py:67 msgid "user verification status" msgstr "Statut de vérification de l'utilisateur" -#: vibes_auth/models.py:114 +#: vibes_auth/models.py:70 msgid "is_active" msgstr "Est actif" -#: vibes_auth/models.py:116 +#: vibes_auth/models.py:72 msgid "unselect this instead of deleting accounts" msgstr "Désélectionner cette option au lieu de supprimer des comptes" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "is_subscribed" msgstr "Est abonné" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "user's newsletter subscription status" msgstr "Statut de l'abonnement à la lettre d'information de l'utilisateur" -#: vibes_auth/models.py:122 +#: vibes_auth/models.py:78 msgid "activation token" msgstr "Jeton d'activation" -#: vibes_auth/models.py:124 +#: vibes_auth/models.py:80 msgid "attributes" msgstr "Attributs" -#: vibes_auth/models.py:158 +#: vibes_auth/models.py:110 msgid "user" msgstr "Utilisateur" -#: vibes_auth/models.py:159 +#: vibes_auth/models.py:111 msgid "users" msgstr "Utilisateurs" -#: vibes_auth/models.py:179 +#: vibes_auth/models.py:131 msgid "group" msgstr "Groupe" -#: vibes_auth/models.py:196 +#: vibes_auth/models.py:148 msgid "outstanding token" msgstr "Jeton exceptionnel" -#: vibes_auth/models.py:197 +#: vibes_auth/models.py:149 msgid "outstanding tokens" msgstr "Jetons en circulation" -#: vibes_auth/models.py:215 +#: vibes_auth/models.py:167 msgid "blacklisted token" msgstr "Jeton sur liste noire" -#: vibes_auth/models.py:216 +#: vibes_auth/models.py:168 msgid "blacklisted tokens" msgstr "Jetons sur liste noire" @@ -421,12 +441,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Meilleures salutations,
l'équipe %(project_name)s" -#: vibes_auth/utils/emailing.py:27 +#: vibes_auth/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Activer le compte" -#: vibes_auth/utils/emailing.py:69 +#: vibes_auth/utils/emailing.py:63 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Réinitialiser le mot de passe" @@ -483,7 +503,7 @@ msgstr "" msgid "the token is invalid" msgstr "Le jeton n'est pas valide" -#: vibes_auth/viewsets.py:43 +#: vibes_auth/viewsets.py:44 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." @@ -491,10 +511,10 @@ 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 +#: vibes_auth/viewsets.py:98 msgid "password reset successfully" msgstr "Le mot de passe a été réinitialisé avec succès !" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:131 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 84f1bddd..90d63da2 100644 Binary files a/vibes_auth/locale/he_IL/LC_MESSAGES/django.mo and b/vibes_auth/locale/he_IL/LC_MESSAGES/django.mo differ diff --git a/vibes_auth/locale/he_IL/LC_MESSAGES/django.po b/vibes_auth/locale/he_IL/LC_MESSAGES/django.po index 0da0f27a..74864de0 100644 --- a/vibes_auth/locale/he_IL/LC_MESSAGES/django.po +++ b/vibes_auth/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-13 18:49+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:82 +#: vibes_auth/viewsets.py:83 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:125 -#: vibes_auth/viewsets.py:144 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 +#: vibes_auth/viewsets.py:145 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:93 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 msgid "token is invalid!" msgstr "האסימון אינו חוקי!" @@ -170,7 +170,7 @@ msgid "" "reverse‐chronological order" msgstr "המוצרים שהמשתמש צפה בהם לאחרונה (מקסימום 48), בסדר כרונולוגי הפוך." -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:180 +#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 msgid "groups" msgstr "קבוצות" @@ -178,7 +178,7 @@ msgstr "קבוצות" msgid "wishlist" msgstr "רשימת משאלות" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:102 +#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 msgid "avatar" msgstr "אוואטר" @@ -195,91 +195,107 @@ msgstr "השפה היא אחת ה-{LANGUAGES} עם ברירת מחדל {LANGUAGE msgid "address set" msgstr "כתובות" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:30 +msgid "" +"Represents a User entity with customized fields and methods for extended " +"functionality. This class extends the AbstractUser model and integrates " +"additional features like custom email login, validation methods, " +"subscription status, verification, and attributes storage. It also provides " +"utilities for managing recently viewed items and token-based activation for " +"verifying accounts. The User model is designed to handle specific use cases " +"for enhanced user management." +msgstr "" +"מייצג ישות משתמש עם שדות ושיטות מותאמים אישית לפונקציונליות מורחבת. מחלקה זו" +" מרחיבה את המודל AbstractUser ומשלבת תכונות נוספות כגון כניסה מותאמת אישית " +"באמצעות דוא\"ל, שיטות אימות, מצב מנוי, אימות ואחסון תכונות. היא מספקת גם כלי" +" עזר לניהול פריטים שנצפו לאחרונה והפעלה מבוססת אסימון לאימות חשבונות. המודל " +"User נועד לטפל במקרי שימוש ספציפיים לניהול משתמשים משופר." + +#: vibes_auth/models.py:41 msgid "email" msgstr "דוא\"ל" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:41 msgid "user email address" msgstr "כתובת הדוא\"ל של המשתמש" -#: vibes_auth/models.py:87 +#: vibes_auth/models.py:43 msgid "phone_number" msgstr "מספר טלפון" -#: vibes_auth/models.py:92 +#: vibes_auth/models.py:48 msgid "user phone number" msgstr "מספר הטלפון של המשתמש" -#: vibes_auth/models.py:98 +#: vibes_auth/models.py:54 msgid "first_name" msgstr "שם פרטי" -#: vibes_auth/models.py:99 +#: vibes_auth/models.py:55 msgid "last_name" msgstr "שם משפחה" -#: vibes_auth/models.py:105 +#: vibes_auth/models.py:61 msgid "user profile image" msgstr "תמונת פרופיל המשתמש" -#: vibes_auth/models.py:110 +#: vibes_auth/models.py:66 msgid "is verified" msgstr "מאומת" -#: vibes_auth/models.py:111 +#: vibes_auth/models.py:67 msgid "user verification status" msgstr "סטטוס אימות המשתמש" -#: vibes_auth/models.py:114 +#: vibes_auth/models.py:70 msgid "is_active" msgstr "פעיל" -#: vibes_auth/models.py:116 +#: vibes_auth/models.py:72 msgid "unselect this instead of deleting accounts" msgstr "בטל את הבחירה במקום למחוק חשבונות" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "is_subscribed" msgstr "מנוי" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "user's newsletter subscription status" msgstr "סטטוס המנוי לניוזלטר של המשתמש" -#: vibes_auth/models.py:122 +#: vibes_auth/models.py:78 msgid "activation token" msgstr "אסימון הפעלה" -#: vibes_auth/models.py:124 +#: vibes_auth/models.py:80 msgid "attributes" msgstr "תכונות" -#: vibes_auth/models.py:158 +#: vibes_auth/models.py:110 msgid "user" msgstr "משתמש" -#: vibes_auth/models.py:159 +#: vibes_auth/models.py:111 msgid "users" msgstr "משתמשים" -#: vibes_auth/models.py:179 +#: vibes_auth/models.py:131 msgid "group" msgstr "קבוצה" -#: vibes_auth/models.py:196 +#: vibes_auth/models.py:148 msgid "outstanding token" msgstr "אסימון יוצא מן הכלל" -#: vibes_auth/models.py:197 +#: vibes_auth/models.py:149 msgid "outstanding tokens" msgstr "אסימונים מצטיינים" -#: vibes_auth/models.py:215 +#: vibes_auth/models.py:167 msgid "blacklisted token" msgstr "אסימון ברשימה השחורה" -#: vibes_auth/models.py:216 +#: vibes_auth/models.py:168 msgid "blacklisted tokens" msgstr "אסימונים ברשימה השחורה" @@ -402,12 +418,12 @@ msgstr "הפעל חשבון" msgid "best regards,
the %(project_name)s team" msgstr "בברכה,
צוות %(project_name)s" -#: vibes_auth/utils/emailing.py:27 +#: vibes_auth/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | הפעל חשבון" -#: vibes_auth/utils/emailing.py:69 +#: vibes_auth/utils/emailing.py:63 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | איפוס סיסמה" @@ -458,7 +474,7 @@ msgstr "" msgid "the token is invalid" msgstr "האסימון אינו חוקי" -#: vibes_auth/viewsets.py:43 +#: vibes_auth/viewsets.py:44 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." @@ -468,10 +484,10 @@ msgstr "" "אווטאר, הפעלת חשבון ומיזוג פריטים שנצפו לאחרונה. מחלקה זו מרחיבה את mixins " "ו-GenericViewSet לטיפול חזק ב-API." -#: vibes_auth/viewsets.py:97 +#: vibes_auth/viewsets.py:98 msgid "password reset successfully" msgstr "הסיסמה אופסה בהצלחה!" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:131 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 53a0ee2c..22f1151f 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-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+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:82 +#: vibes_auth/viewsets.py:83 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:125 -#: vibes_auth/viewsets.py:144 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 +#: vibes_auth/viewsets.py:145 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:93 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 msgid "token is invalid!" msgstr "" @@ -173,7 +173,7 @@ msgid "" "chronological order" msgstr "" -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:180 +#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 msgid "groups" msgstr "" @@ -181,7 +181,7 @@ msgstr "" msgid "wishlist" msgstr "" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:102 +#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 msgid "avatar" msgstr "" @@ -198,91 +198,102 @@ msgstr "" msgid "address set" msgstr "" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:30 +msgid "" +"Represents a User entity with customized fields and methods for extended " +"functionality. This class extends the AbstractUser model and integrates " +"additional features like custom email login, validation methods, " +"subscription status, verification, and attributes storage. It also provides " +"utilities for managing recently viewed items and token-based activation for " +"verifying accounts. The User model is designed to handle specific use cases " +"for enhanced user management." +msgstr "" + +#: vibes_auth/models.py:41 msgid "email" msgstr "" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:41 msgid "user email address" msgstr "" -#: vibes_auth/models.py:87 +#: vibes_auth/models.py:43 msgid "phone_number" msgstr "" -#: vibes_auth/models.py:92 +#: vibes_auth/models.py:48 msgid "user phone number" msgstr "" -#: vibes_auth/models.py:98 +#: vibes_auth/models.py:54 msgid "first_name" msgstr "" -#: vibes_auth/models.py:99 +#: vibes_auth/models.py:55 msgid "last_name" msgstr "" -#: vibes_auth/models.py:105 +#: vibes_auth/models.py:61 msgid "user profile image" msgstr "" -#: vibes_auth/models.py:110 +#: vibes_auth/models.py:66 msgid "is verified" msgstr "" -#: vibes_auth/models.py:111 +#: vibes_auth/models.py:67 msgid "user verification status" msgstr "" -#: vibes_auth/models.py:114 +#: vibes_auth/models.py:70 msgid "is_active" msgstr "" -#: vibes_auth/models.py:116 +#: vibes_auth/models.py:72 msgid "unselect this instead of deleting accounts" msgstr "" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "is_subscribed" msgstr "" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "user's newsletter subscription status" msgstr "" -#: vibes_auth/models.py:122 +#: vibes_auth/models.py:78 msgid "activation token" msgstr "" -#: vibes_auth/models.py:124 +#: vibes_auth/models.py:80 msgid "attributes" msgstr "" -#: vibes_auth/models.py:158 +#: vibes_auth/models.py:110 msgid "user" msgstr "" -#: vibes_auth/models.py:159 +#: vibes_auth/models.py:111 msgid "users" msgstr "" -#: vibes_auth/models.py:179 +#: vibes_auth/models.py:131 msgid "group" msgstr "" -#: vibes_auth/models.py:196 +#: vibes_auth/models.py:148 msgid "outstanding token" msgstr "" -#: vibes_auth/models.py:197 +#: vibes_auth/models.py:149 msgid "outstanding tokens" msgstr "" -#: vibes_auth/models.py:215 +#: vibes_auth/models.py:167 msgid "blacklisted token" msgstr "" -#: vibes_auth/models.py:216 +#: vibes_auth/models.py:168 msgid "blacklisted tokens" msgstr "" @@ -400,12 +411,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "" -#: vibes_auth/utils/emailing.py:27 +#: vibes_auth/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "" -#: vibes_auth/utils/emailing.py:69 +#: vibes_auth/utils/emailing.py:63 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "" @@ -444,7 +455,7 @@ msgstr "" msgid "the token is invalid" msgstr "" -#: vibes_auth/viewsets.py:43 +#: vibes_auth/viewsets.py:44 msgid "" "User view set implementation.\n" "Provides a set of actions that manage user-related data such as creation, " @@ -453,10 +464,10 @@ msgid "" "class extends the mixins and GenericViewSet for robust API handling." msgstr "" -#: vibes_auth/viewsets.py:97 +#: vibes_auth/viewsets.py:98 msgid "password reset successfully" msgstr "" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:131 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 ea19ea43..aeeef784 100644 --- a/vibes_auth/locale/hr_HR/LC_MESSAGES/django.po +++ b/vibes_auth/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-13 18:49+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:82 +#: vibes_auth/viewsets.py:83 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:125 -#: vibes_auth/viewsets.py:144 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 +#: vibes_auth/viewsets.py:145 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:93 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 msgid "token is invalid!" msgstr "" @@ -173,7 +173,7 @@ msgid "" "chronological order" msgstr "" -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:180 +#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 msgid "groups" msgstr "" @@ -181,7 +181,7 @@ msgstr "" msgid "wishlist" msgstr "" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:102 +#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 msgid "avatar" msgstr "" @@ -198,91 +198,102 @@ msgstr "" msgid "address set" msgstr "" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:30 +msgid "" +"Represents a User entity with customized fields and methods for extended " +"functionality. This class extends the AbstractUser model and integrates " +"additional features like custom email login, validation methods, " +"subscription status, verification, and attributes storage. It also provides " +"utilities for managing recently viewed items and token-based activation for " +"verifying accounts. The User model is designed to handle specific use cases " +"for enhanced user management." +msgstr "" + +#: vibes_auth/models.py:41 msgid "email" msgstr "" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:41 msgid "user email address" msgstr "" -#: vibes_auth/models.py:87 +#: vibes_auth/models.py:43 msgid "phone_number" msgstr "" -#: vibes_auth/models.py:92 +#: vibes_auth/models.py:48 msgid "user phone number" msgstr "" -#: vibes_auth/models.py:98 +#: vibes_auth/models.py:54 msgid "first_name" msgstr "" -#: vibes_auth/models.py:99 +#: vibes_auth/models.py:55 msgid "last_name" msgstr "" -#: vibes_auth/models.py:105 +#: vibes_auth/models.py:61 msgid "user profile image" msgstr "" -#: vibes_auth/models.py:110 +#: vibes_auth/models.py:66 msgid "is verified" msgstr "" -#: vibes_auth/models.py:111 +#: vibes_auth/models.py:67 msgid "user verification status" msgstr "" -#: vibes_auth/models.py:114 +#: vibes_auth/models.py:70 msgid "is_active" msgstr "" -#: vibes_auth/models.py:116 +#: vibes_auth/models.py:72 msgid "unselect this instead of deleting accounts" msgstr "" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "is_subscribed" msgstr "" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "user's newsletter subscription status" msgstr "" -#: vibes_auth/models.py:122 +#: vibes_auth/models.py:78 msgid "activation token" msgstr "" -#: vibes_auth/models.py:124 +#: vibes_auth/models.py:80 msgid "attributes" msgstr "" -#: vibes_auth/models.py:158 +#: vibes_auth/models.py:110 msgid "user" msgstr "" -#: vibes_auth/models.py:159 +#: vibes_auth/models.py:111 msgid "users" msgstr "" -#: vibes_auth/models.py:179 +#: vibes_auth/models.py:131 msgid "group" msgstr "" -#: vibes_auth/models.py:196 +#: vibes_auth/models.py:148 msgid "outstanding token" msgstr "" -#: vibes_auth/models.py:197 +#: vibes_auth/models.py:149 msgid "outstanding tokens" msgstr "" -#: vibes_auth/models.py:215 +#: vibes_auth/models.py:167 msgid "blacklisted token" msgstr "" -#: vibes_auth/models.py:216 +#: vibes_auth/models.py:168 msgid "blacklisted tokens" msgstr "" @@ -400,12 +411,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "" -#: vibes_auth/utils/emailing.py:27 +#: vibes_auth/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "" -#: vibes_auth/utils/emailing.py:69 +#: vibes_auth/utils/emailing.py:63 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "" @@ -444,7 +455,7 @@ msgstr "" msgid "the token is invalid" msgstr "" -#: vibes_auth/viewsets.py:43 +#: vibes_auth/viewsets.py:44 msgid "" "User view set implementation.\n" "Provides a set of actions that manage user-related data such as creation, " @@ -453,10 +464,10 @@ msgid "" "class extends the mixins and GenericViewSet for robust API handling." msgstr "" -#: vibes_auth/viewsets.py:97 +#: vibes_auth/viewsets.py:98 msgid "password reset successfully" msgstr "" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:131 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 9d9ac1a4..f9f902b7 100644 Binary files a/vibes_auth/locale/id_ID/LC_MESSAGES/django.mo and b/vibes_auth/locale/id_ID/LC_MESSAGES/django.mo differ diff --git a/vibes_auth/locale/id_ID/LC_MESSAGES/django.po b/vibes_auth/locale/id_ID/LC_MESSAGES/django.po index 11634aec..d36723c2 100644 --- a/vibes_auth/locale/id_ID/LC_MESSAGES/django.po +++ b/vibes_auth/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-13 18:49+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:82 +#: vibes_auth/viewsets.py:83 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:125 -#: vibes_auth/viewsets.py:144 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 +#: vibes_auth/viewsets.py:145 msgid "activation link is invalid!" msgstr "Tautan aktivasi tidak valid!" @@ -163,7 +163,7 @@ 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:93 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 msgid "token is invalid!" msgstr "Token tidak valid!" @@ -175,7 +175,7 @@ msgstr "" "Produk yang terakhir dilihat pengguna ini (maksimal 48), dalam urutan " "kronologis terbalik." -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:180 +#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 msgid "groups" msgstr "Grup" @@ -183,7 +183,7 @@ msgstr "Grup" msgid "wishlist" msgstr "Daftar keinginan" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:102 +#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 msgid "avatar" msgstr "Avatar" @@ -201,91 +201,110 @@ msgstr "" msgid "address set" msgstr "Alamat" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:30 +msgid "" +"Represents a User entity with customized fields and methods for extended " +"functionality. This class extends the AbstractUser model and integrates " +"additional features like custom email login, validation methods, " +"subscription status, verification, and attributes storage. It also provides " +"utilities for managing recently viewed items and token-based activation for " +"verifying accounts. The User model is designed to handle specific use cases " +"for enhanced user management." +msgstr "" +"Mewakili entitas Pengguna dengan bidang dan metode yang disesuaikan untuk " +"fungsionalitas yang diperluas. Kelas ini memperluas model AbstractUser dan " +"mengintegrasikan fitur-fitur tambahan seperti login email khusus, metode " +"validasi, status langganan, verifikasi, dan penyimpanan atribut. Kelas ini " +"juga menyediakan utilitas untuk mengelola item yang baru saja dilihat dan " +"aktivasi berbasis token untuk memverifikasi akun. Model Pengguna dirancang " +"untuk menangani kasus penggunaan tertentu untuk meningkatkan manajemen " +"pengguna." + +#: vibes_auth/models.py:41 msgid "email" msgstr "Email" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:41 msgid "user email address" msgstr "Alamat email pengguna" -#: vibes_auth/models.py:87 +#: vibes_auth/models.py:43 msgid "phone_number" msgstr "Nomor Telepon" -#: vibes_auth/models.py:92 +#: vibes_auth/models.py:48 msgid "user phone number" msgstr "Nomor telepon pengguna" -#: vibes_auth/models.py:98 +#: vibes_auth/models.py:54 msgid "first_name" msgstr "Nama depan" -#: vibes_auth/models.py:99 +#: vibes_auth/models.py:55 msgid "last_name" msgstr "Nama belakang" -#: vibes_auth/models.py:105 +#: vibes_auth/models.py:61 msgid "user profile image" msgstr "Gambar profil pengguna" -#: vibes_auth/models.py:110 +#: vibes_auth/models.py:66 msgid "is verified" msgstr "Sudah diverifikasi" -#: vibes_auth/models.py:111 +#: vibes_auth/models.py:67 msgid "user verification status" msgstr "Status verifikasi pengguna" -#: vibes_auth/models.py:114 +#: vibes_auth/models.py:70 msgid "is_active" msgstr "Aktif" -#: vibes_auth/models.py:116 +#: vibes_auth/models.py:72 msgid "unselect this instead of deleting accounts" msgstr "Batalkan pilihan ini alih-alih menghapus akun" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "is_subscribed" msgstr "Sudah berlangganan" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "user's newsletter subscription status" msgstr "Status berlangganan buletin pengguna" -#: vibes_auth/models.py:122 +#: vibes_auth/models.py:78 msgid "activation token" msgstr "Token aktivasi" -#: vibes_auth/models.py:124 +#: vibes_auth/models.py:80 msgid "attributes" msgstr "Atribut" -#: vibes_auth/models.py:158 +#: vibes_auth/models.py:110 msgid "user" msgstr "Pengguna" -#: vibes_auth/models.py:159 +#: vibes_auth/models.py:111 msgid "users" msgstr "Pengguna" -#: vibes_auth/models.py:179 +#: vibes_auth/models.py:131 msgid "group" msgstr "Kelompok" -#: vibes_auth/models.py:196 +#: vibes_auth/models.py:148 msgid "outstanding token" msgstr "Token yang luar biasa" -#: vibes_auth/models.py:197 +#: vibes_auth/models.py:149 msgid "outstanding tokens" msgstr "Token yang beredar" -#: vibes_auth/models.py:215 +#: vibes_auth/models.py:167 msgid "blacklisted token" msgstr "Token yang masuk daftar hitam" -#: vibes_auth/models.py:216 +#: vibes_auth/models.py:168 msgid "blacklisted tokens" msgstr "Token yang masuk daftar hitam" @@ -412,12 +431,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Salam hormat, tim %(project_name)s" -#: vibes_auth/utils/emailing.py:27 +#: vibes_auth/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Aktifkan Akun" -#: vibes_auth/utils/emailing.py:69 +#: vibes_auth/utils/emailing.py:63 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Atur Ulang Kata Sandi" @@ -472,7 +491,7 @@ msgstr "" msgid "the token is invalid" msgstr "Token tidak valid" -#: vibes_auth/viewsets.py:43 +#: vibes_auth/viewsets.py:44 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." @@ -480,10 +499,10 @@ 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 +#: vibes_auth/viewsets.py:98 msgid "password reset successfully" msgstr "Kata sandi telah berhasil diatur ulang!" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:131 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 1bbaf254..cd66bc16 100644 Binary files a/vibes_auth/locale/it_IT/LC_MESSAGES/django.mo and b/vibes_auth/locale/it_IT/LC_MESSAGES/django.mo differ diff --git a/vibes_auth/locale/it_IT/LC_MESSAGES/django.po b/vibes_auth/locale/it_IT/LC_MESSAGES/django.po index 8edf226c..53934424 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-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+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:82 +#: vibes_auth/viewsets.py:83 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:125 -#: vibes_auth/viewsets.py:144 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 +#: vibes_auth/viewsets.py:145 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:93 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 msgid "token is invalid!" msgstr "Il gettone non è valido!" @@ -175,7 +175,7 @@ msgstr "" "I prodotti che questo utente ha visualizzato più di recente (max 48), in " "ordine cronologico inverso." -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:180 +#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 msgid "groups" msgstr "Gruppi" @@ -183,7 +183,7 @@ msgstr "Gruppi" msgid "wishlist" msgstr "Lista dei desideri" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:102 +#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 msgid "avatar" msgstr "Avatar" @@ -202,91 +202,110 @@ msgstr "" msgid "address set" msgstr "Indirizzi" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:30 +msgid "" +"Represents a User entity with customized fields and methods for extended " +"functionality. This class extends the AbstractUser model and integrates " +"additional features like custom email login, validation methods, " +"subscription status, verification, and attributes storage. It also provides " +"utilities for managing recently viewed items and token-based activation for " +"verifying accounts. The User model is designed to handle specific use cases " +"for enhanced user management." +msgstr "" +"Rappresenta un'entità Utente con campi e metodi personalizzati per " +"funzionalità estese. Questa classe estende il modello AbstractUser e integra" +" funzionalità aggiuntive come il login via e-mail personalizzato, i metodi " +"di convalida, lo stato di iscrizione, la verifica e la memorizzazione degli " +"attributi. Fornisce inoltre utilità per la gestione degli elementi " +"visualizzati di recente e l'attivazione basata su token per la verifica " +"degli account. Il modello User è progettato per gestire casi d'uso specifici" +" per una migliore gestione degli utenti." + +#: vibes_auth/models.py:41 msgid "email" msgstr "Email" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:41 msgid "user email address" msgstr "Indirizzo e-mail dell'utente" -#: vibes_auth/models.py:87 +#: vibes_auth/models.py:43 msgid "phone_number" msgstr "Numero di telefono" -#: vibes_auth/models.py:92 +#: vibes_auth/models.py:48 msgid "user phone number" msgstr "Numero di telefono dell'utente" -#: vibes_auth/models.py:98 +#: vibes_auth/models.py:54 msgid "first_name" msgstr "Nome" -#: vibes_auth/models.py:99 +#: vibes_auth/models.py:55 msgid "last_name" msgstr "Cognome" -#: vibes_auth/models.py:105 +#: vibes_auth/models.py:61 msgid "user profile image" msgstr "Immagine del profilo utente" -#: vibes_auth/models.py:110 +#: vibes_auth/models.py:66 msgid "is verified" msgstr "È verificato" -#: vibes_auth/models.py:111 +#: vibes_auth/models.py:67 msgid "user verification status" msgstr "Stato di verifica dell'utente" -#: vibes_auth/models.py:114 +#: vibes_auth/models.py:70 msgid "is_active" msgstr "È attivo" -#: vibes_auth/models.py:116 +#: vibes_auth/models.py:72 msgid "unselect this instead of deleting accounts" msgstr "Deselezionare questa opzione invece di eliminare gli account" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "is_subscribed" msgstr "È iscritto" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "user's newsletter subscription status" msgstr "Stato di iscrizione alla newsletter dell'utente" -#: vibes_auth/models.py:122 +#: vibes_auth/models.py:78 msgid "activation token" msgstr "Token di attivazione" -#: vibes_auth/models.py:124 +#: vibes_auth/models.py:80 msgid "attributes" msgstr "Attributi" -#: vibes_auth/models.py:158 +#: vibes_auth/models.py:110 msgid "user" msgstr "Utente" -#: vibes_auth/models.py:159 +#: vibes_auth/models.py:111 msgid "users" msgstr "Utenti" -#: vibes_auth/models.py:179 +#: vibes_auth/models.py:131 msgid "group" msgstr "Gruppo" -#: vibes_auth/models.py:196 +#: vibes_auth/models.py:148 msgid "outstanding token" msgstr "Gettone eccezionale" -#: vibes_auth/models.py:197 +#: vibes_auth/models.py:149 msgid "outstanding tokens" msgstr "Gettoni in sospeso" -#: vibes_auth/models.py:215 +#: vibes_auth/models.py:167 msgid "blacklisted token" msgstr "Token in lista nera" -#: vibes_auth/models.py:216 +#: vibes_auth/models.py:168 msgid "blacklisted tokens" msgstr "Gettoni nella lista nera" @@ -415,12 +434,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Cordiali saluti,
il team %(project_name)s" -#: vibes_auth/utils/emailing.py:27 +#: vibes_auth/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Attiva l'account" -#: vibes_auth/utils/emailing.py:69 +#: vibes_auth/utils/emailing.py:63 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Reimpostare la password" @@ -476,7 +495,7 @@ msgstr "" msgid "the token is invalid" msgstr "Il token non è valido" -#: vibes_auth/viewsets.py:43 +#: vibes_auth/viewsets.py:44 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." @@ -484,10 +503,10 @@ 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 +#: vibes_auth/viewsets.py:98 msgid "password reset successfully" msgstr "La password è stata reimpostata con successo!" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:131 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 35978612..6ebb33a4 100644 Binary files a/vibes_auth/locale/ja_JP/LC_MESSAGES/django.mo and b/vibes_auth/locale/ja_JP/LC_MESSAGES/django.mo differ diff --git a/vibes_auth/locale/ja_JP/LC_MESSAGES/django.po b/vibes_auth/locale/ja_JP/LC_MESSAGES/django.po index d569778c..2c386e38 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-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+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:82 +#: vibes_auth/viewsets.py:83 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:125 -#: vibes_auth/viewsets.py:144 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 +#: vibes_auth/viewsets.py:145 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:93 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 msgid "token is invalid!" msgstr "トークンが無効です!" @@ -170,7 +170,7 @@ msgid "" "reverse‐chronological order" msgstr "このユーザーが最近閲覧した商品(最大48件)を逆順に表示します。" -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:180 +#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 msgid "groups" msgstr "グループ" @@ -178,7 +178,7 @@ msgstr "グループ" msgid "wishlist" msgstr "ウィッシュリスト" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:102 +#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 msgid "avatar" msgstr "アバター" @@ -195,91 +195,104 @@ msgstr "言語は {LANGUAGES} のいずれかで、デフォルトは {LANGUAGE_ msgid "address set" msgstr "住所" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:30 +msgid "" +"Represents a User entity with customized fields and methods for extended " +"functionality. This class extends the AbstractUser model and integrates " +"additional features like custom email login, validation methods, " +"subscription status, verification, and attributes storage. It also provides " +"utilities for managing recently viewed items and token-based activation for " +"verifying accounts. The User model is designed to handle specific use cases " +"for enhanced user management." +msgstr "" +"拡張機能のためにカスタマイズされたフィールドとメソッドを持つ User エンティティを表します。このクラスは AbstractUser " +"モデルを拡張し、カスタムメールログイン、検証メソッド、購読ステータス、検証、属性保存などの追加機能を統合しています。また、最近閲覧したアイテムを管理するユーティリティや、アカウントを検証するためのトークンベースのアクティベーションも提供します。Userモデルは、ユーザ管理を強化するための特定のユースケースを扱うように設計されています。" + +#: vibes_auth/models.py:41 msgid "email" msgstr "電子メール" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:41 msgid "user email address" msgstr "ユーザーのメールアドレス" -#: vibes_auth/models.py:87 +#: vibes_auth/models.py:43 msgid "phone_number" msgstr "電話番号" -#: vibes_auth/models.py:92 +#: vibes_auth/models.py:48 msgid "user phone number" msgstr "ユーザー電話番号" -#: vibes_auth/models.py:98 +#: vibes_auth/models.py:54 msgid "first_name" msgstr "名前" -#: vibes_auth/models.py:99 +#: vibes_auth/models.py:55 msgid "last_name" msgstr "姓" -#: vibes_auth/models.py:105 +#: vibes_auth/models.py:61 msgid "user profile image" msgstr "ユーザープロフィール画像" -#: vibes_auth/models.py:110 +#: vibes_auth/models.py:66 msgid "is verified" msgstr "確認済み" -#: vibes_auth/models.py:111 +#: vibes_auth/models.py:67 msgid "user verification status" msgstr "ユーザーの認証状況" -#: vibes_auth/models.py:114 +#: vibes_auth/models.py:70 msgid "is_active" msgstr "アクティブ" -#: vibes_auth/models.py:116 +#: vibes_auth/models.py:72 msgid "unselect this instead of deleting accounts" msgstr "アカウントを削除する代わりに、この選択を解除する" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "is_subscribed" msgstr "購読中" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "user's newsletter subscription status" msgstr "ユーザーのニュースレター購読状況" -#: vibes_auth/models.py:122 +#: vibes_auth/models.py:78 msgid "activation token" msgstr "アクティベーション・トークン" -#: vibes_auth/models.py:124 +#: vibes_auth/models.py:80 msgid "attributes" msgstr "属性" -#: vibes_auth/models.py:158 +#: vibes_auth/models.py:110 msgid "user" msgstr "ユーザー" -#: vibes_auth/models.py:159 +#: vibes_auth/models.py:111 msgid "users" msgstr "ユーザー" -#: vibes_auth/models.py:179 +#: vibes_auth/models.py:131 msgid "group" msgstr "グループ" -#: vibes_auth/models.py:196 +#: vibes_auth/models.py:148 msgid "outstanding token" msgstr "卓越したトークン" -#: vibes_auth/models.py:197 +#: vibes_auth/models.py:149 msgid "outstanding tokens" msgstr "トークン残高" -#: vibes_auth/models.py:215 +#: vibes_auth/models.py:167 msgid "blacklisted token" msgstr "ブラックリストトークン" -#: vibes_auth/models.py:216 +#: vibes_auth/models.py:168 msgid "blacklisted tokens" msgstr "ブラックリストに載ったトークン" @@ -402,12 +415,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "よろしくお願いします、
%(project_name)sチーム" -#: vibes_auth/utils/emailing.py:27 +#: vibes_auth/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME}| アカウントの有効化| アカウントの有効化" -#: vibes_auth/utils/emailing.py:69 +#: vibes_auth/utils/emailing.py:63 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | パスワードのリセット" @@ -451,7 +464,7 @@ msgstr "特定のシリアライズと検証ロジックを使用して JSON ウ msgid "the token is invalid" msgstr "トークンが無効" -#: vibes_auth/viewsets.py:43 +#: vibes_auth/viewsets.py:44 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." @@ -459,10 +472,10 @@ msgstr "" "ユーザービューセットの実装。\n" "作成、取得、更新、削除、およびパスワードリセット、アバターアップロード、アカウントの有効化、最近見たアイテムのマージなどのカスタムアクションなど、ユーザ関連のデータを管理するアクションのセットを提供します。このクラスは、堅牢なAPIハンドリングのためにミキシンとGenericViewSetを拡張します。" -#: vibes_auth/viewsets.py:97 +#: vibes_auth/viewsets.py:98 msgid "password reset successfully" msgstr "パスワードのリセットに成功しました!" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:131 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 53a0ee2c..22f1151f 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-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+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:82 +#: vibes_auth/viewsets.py:83 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:125 -#: vibes_auth/viewsets.py:144 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 +#: vibes_auth/viewsets.py:145 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:93 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 msgid "token is invalid!" msgstr "" @@ -173,7 +173,7 @@ msgid "" "chronological order" msgstr "" -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:180 +#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 msgid "groups" msgstr "" @@ -181,7 +181,7 @@ msgstr "" msgid "wishlist" msgstr "" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:102 +#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 msgid "avatar" msgstr "" @@ -198,91 +198,102 @@ msgstr "" msgid "address set" msgstr "" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:30 +msgid "" +"Represents a User entity with customized fields and methods for extended " +"functionality. This class extends the AbstractUser model and integrates " +"additional features like custom email login, validation methods, " +"subscription status, verification, and attributes storage. It also provides " +"utilities for managing recently viewed items and token-based activation for " +"verifying accounts. The User model is designed to handle specific use cases " +"for enhanced user management." +msgstr "" + +#: vibes_auth/models.py:41 msgid "email" msgstr "" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:41 msgid "user email address" msgstr "" -#: vibes_auth/models.py:87 +#: vibes_auth/models.py:43 msgid "phone_number" msgstr "" -#: vibes_auth/models.py:92 +#: vibes_auth/models.py:48 msgid "user phone number" msgstr "" -#: vibes_auth/models.py:98 +#: vibes_auth/models.py:54 msgid "first_name" msgstr "" -#: vibes_auth/models.py:99 +#: vibes_auth/models.py:55 msgid "last_name" msgstr "" -#: vibes_auth/models.py:105 +#: vibes_auth/models.py:61 msgid "user profile image" msgstr "" -#: vibes_auth/models.py:110 +#: vibes_auth/models.py:66 msgid "is verified" msgstr "" -#: vibes_auth/models.py:111 +#: vibes_auth/models.py:67 msgid "user verification status" msgstr "" -#: vibes_auth/models.py:114 +#: vibes_auth/models.py:70 msgid "is_active" msgstr "" -#: vibes_auth/models.py:116 +#: vibes_auth/models.py:72 msgid "unselect this instead of deleting accounts" msgstr "" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "is_subscribed" msgstr "" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "user's newsletter subscription status" msgstr "" -#: vibes_auth/models.py:122 +#: vibes_auth/models.py:78 msgid "activation token" msgstr "" -#: vibes_auth/models.py:124 +#: vibes_auth/models.py:80 msgid "attributes" msgstr "" -#: vibes_auth/models.py:158 +#: vibes_auth/models.py:110 msgid "user" msgstr "" -#: vibes_auth/models.py:159 +#: vibes_auth/models.py:111 msgid "users" msgstr "" -#: vibes_auth/models.py:179 +#: vibes_auth/models.py:131 msgid "group" msgstr "" -#: vibes_auth/models.py:196 +#: vibes_auth/models.py:148 msgid "outstanding token" msgstr "" -#: vibes_auth/models.py:197 +#: vibes_auth/models.py:149 msgid "outstanding tokens" msgstr "" -#: vibes_auth/models.py:215 +#: vibes_auth/models.py:167 msgid "blacklisted token" msgstr "" -#: vibes_auth/models.py:216 +#: vibes_auth/models.py:168 msgid "blacklisted tokens" msgstr "" @@ -400,12 +411,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "" -#: vibes_auth/utils/emailing.py:27 +#: vibes_auth/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "" -#: vibes_auth/utils/emailing.py:69 +#: vibes_auth/utils/emailing.py:63 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "" @@ -444,7 +455,7 @@ msgstr "" msgid "the token is invalid" msgstr "" -#: vibes_auth/viewsets.py:43 +#: vibes_auth/viewsets.py:44 msgid "" "User view set implementation.\n" "Provides a set of actions that manage user-related data such as creation, " @@ -453,10 +464,10 @@ msgid "" "class extends the mixins and GenericViewSet for robust API handling." msgstr "" -#: vibes_auth/viewsets.py:97 +#: vibes_auth/viewsets.py:98 msgid "password reset successfully" msgstr "" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:131 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 9a2f72ea..27369195 100644 Binary files a/vibes_auth/locale/ko_KR/LC_MESSAGES/django.mo and b/vibes_auth/locale/ko_KR/LC_MESSAGES/django.mo differ diff --git a/vibes_auth/locale/ko_KR/LC_MESSAGES/django.po b/vibes_auth/locale/ko_KR/LC_MESSAGES/django.po index 5feef920..cdf54526 100644 --- a/vibes_auth/locale/ko_KR/LC_MESSAGES/django.po +++ b/vibes_auth/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-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+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:82 +#: vibes_auth/viewsets.py:83 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:125 -#: vibes_auth/viewsets.py:144 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 +#: vibes_auth/viewsets.py:145 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:93 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 msgid "token is invalid!" msgstr "토큰이 유효하지 않습니다!" @@ -170,7 +170,7 @@ msgid "" "reverse‐chronological order" msgstr "이 사용자가 가장 최근에 본 제품(최대 48개)을 시간 역순으로 표시합니다." -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:180 +#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 msgid "groups" msgstr "그룹" @@ -178,7 +178,7 @@ msgstr "그룹" msgid "wishlist" msgstr "위시리스트" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:102 +#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 msgid "avatar" msgstr "아바타" @@ -195,91 +195,106 @@ msgstr "언어는 {LANGUAGES} 중 하나이며 기본값은 {LANGUAGE_CODE}입 msgid "address set" msgstr "주소" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:30 +msgid "" +"Represents a User entity with customized fields and methods for extended " +"functionality. This class extends the AbstractUser model and integrates " +"additional features like custom email login, validation methods, " +"subscription status, verification, and attributes storage. It also provides " +"utilities for managing recently viewed items and token-based activation for " +"verifying accounts. The User model is designed to handle specific use cases " +"for enhanced user management." +msgstr "" +"확장 기능을 위한 사용자 정의 필드 및 메서드가 있는 사용자 엔티티를 나타냅니다. 이 클래스는 AbstractUser 모델을 확장하여 " +"사용자 지정 이메일 로그인, 유효성 검사 방법, 가입 상태, 인증 및 속성 저장과 같은 추가 기능을 통합합니다. 또한 최근에 본 항목을 " +"관리하기 위한 유틸리티와 계정 인증을 위한 토큰 기반 활성화도 제공합니다. 사용자 모델은 향상된 사용자 관리를 위한 특정 사용 사례를 " +"처리하도록 설계되었습니다." + +#: vibes_auth/models.py:41 msgid "email" msgstr "이메일" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:41 msgid "user email address" msgstr "사용자의 이메일 주소" -#: vibes_auth/models.py:87 +#: vibes_auth/models.py:43 msgid "phone_number" msgstr "전화 번호" -#: vibes_auth/models.py:92 +#: vibes_auth/models.py:48 msgid "user phone number" msgstr "사용자 전화번호" -#: vibes_auth/models.py:98 +#: vibes_auth/models.py:54 msgid "first_name" msgstr "이름" -#: vibes_auth/models.py:99 +#: vibes_auth/models.py:55 msgid "last_name" msgstr "성" -#: vibes_auth/models.py:105 +#: vibes_auth/models.py:61 msgid "user profile image" msgstr "사용자 프로필 이미지" -#: vibes_auth/models.py:110 +#: vibes_auth/models.py:66 msgid "is verified" msgstr "확인됨" -#: vibes_auth/models.py:111 +#: vibes_auth/models.py:67 msgid "user verification status" msgstr "사용자 인증 상태" -#: vibes_auth/models.py:114 +#: vibes_auth/models.py:70 msgid "is_active" msgstr "활성화됨" -#: vibes_auth/models.py:116 +#: vibes_auth/models.py:72 msgid "unselect this instead of deleting accounts" msgstr "계정을 삭제하는 대신 이 옵션을 선택 해제합니다." -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "is_subscribed" msgstr "구독 중" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "user's newsletter subscription status" msgstr "사용자의 뉴스레터 구독 상태" -#: vibes_auth/models.py:122 +#: vibes_auth/models.py:78 msgid "activation token" msgstr "활성화 토큰" -#: vibes_auth/models.py:124 +#: vibes_auth/models.py:80 msgid "attributes" msgstr "속성" -#: vibes_auth/models.py:158 +#: vibes_auth/models.py:110 msgid "user" msgstr "사용자" -#: vibes_auth/models.py:159 +#: vibes_auth/models.py:111 msgid "users" msgstr "사용자" -#: vibes_auth/models.py:179 +#: vibes_auth/models.py:131 msgid "group" msgstr "그룹" -#: vibes_auth/models.py:196 +#: vibes_auth/models.py:148 msgid "outstanding token" msgstr "뛰어난 토큰" -#: vibes_auth/models.py:197 +#: vibes_auth/models.py:149 msgid "outstanding tokens" msgstr "우수 토큰" -#: vibes_auth/models.py:215 +#: vibes_auth/models.py:167 msgid "blacklisted token" msgstr "블랙리스트에 오른 토큰" -#: vibes_auth/models.py:216 +#: vibes_auth/models.py:168 msgid "blacklisted tokens" msgstr "블랙리스트에 오른 토큰" @@ -402,12 +417,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "감사합니다,
%(project_name)s 팀" -#: vibes_auth/utils/emailing.py:27 +#: vibes_auth/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | 계정 활성화" -#: vibes_auth/utils/emailing.py:69 +#: vibes_auth/utils/emailing.py:63 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | 비밀번호 재설정" @@ -454,7 +469,7 @@ msgstr "특정 직렬화 및 유효성 검사 로직을 사용하여 JSON 웹 msgid "the token is invalid" msgstr "토큰이 유효하지 않습니다." -#: vibes_auth/viewsets.py:43 +#: vibes_auth/viewsets.py:44 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." @@ -462,10 +477,10 @@ msgstr "" "사용자 보기 세트 구현.\n" "생성, 검색, 업데이트, 삭제, 비밀번호 재설정, 아바타 업로드, 계정 활성화, 최근에 본 항목 병합 등의 사용자 관련 데이터와 사용자 지정 작업을 관리하는 일련의 작업을 제공합니다. 이 클래스는 강력한 API 처리를 위해 믹스인 및 GenericViewSet을 확장합니다." -#: vibes_auth/viewsets.py:97 +#: vibes_auth/viewsets.py:98 msgid "password reset successfully" msgstr "비밀번호가 성공적으로 재설정되었습니다!" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:131 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 7ec828df..8ca1dd4c 100644 Binary files a/vibes_auth/locale/nl_NL/LC_MESSAGES/django.mo and b/vibes_auth/locale/nl_NL/LC_MESSAGES/django.mo differ diff --git a/vibes_auth/locale/nl_NL/LC_MESSAGES/django.po b/vibes_auth/locale/nl_NL/LC_MESSAGES/django.po index abe949d8..c73b257e 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-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+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:82 +#: vibes_auth/viewsets.py:83 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:125 -#: vibes_auth/viewsets.py:144 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 +#: vibes_auth/viewsets.py:145 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:93 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 msgid "token is invalid!" msgstr "Token is invalid!" @@ -176,7 +176,7 @@ msgstr "" "De producten die deze gebruiker het laatst heeft bekeken (max 48), in " "omgekeerd-chronologische volgorde." -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:180 +#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 msgid "groups" msgstr "Groepen" @@ -184,7 +184,7 @@ msgstr "Groepen" msgid "wishlist" msgstr "Verlanglijst" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:102 +#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 msgid "avatar" msgstr "Avatar" @@ -201,91 +201,110 @@ msgstr "Taal is een van de {LANGUAGES} met standaard {LANGUAGE_CODE}" msgid "address set" msgstr "Adressen" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:30 +msgid "" +"Represents a User entity with customized fields and methods for extended " +"functionality. This class extends the AbstractUser model and integrates " +"additional features like custom email login, validation methods, " +"subscription status, verification, and attributes storage. It also provides " +"utilities for managing recently viewed items and token-based activation for " +"verifying accounts. The User model is designed to handle specific use cases " +"for enhanced user management." +msgstr "" +"Representeert een User entiteit met aangepaste velden en methodes voor " +"uitgebreide functionaliteit. Deze klasse breidt het AbstractUser-model uit " +"en integreert extra functies zoals aangepaste e-mailaanmelding, " +"validatiemethoden, abonnementsstatus, verificatie en opslag van attributen. " +"Het biedt ook hulpprogramma's voor het beheren van recent bekeken items en " +"op token gebaseerde activering voor het verifiëren van accounts. Het User-" +"model is ontworpen voor specifieke gebruikssituaties voor verbeterd " +"gebruikersbeheer." + +#: vibes_auth/models.py:41 msgid "email" msgstr "E-mail" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:41 msgid "user email address" msgstr "E-mailadres gebruiker" -#: vibes_auth/models.py:87 +#: vibes_auth/models.py:43 msgid "phone_number" msgstr "Telefoonnummer" -#: vibes_auth/models.py:92 +#: vibes_auth/models.py:48 msgid "user phone number" msgstr "Telefoonnummer gebruiker" -#: vibes_auth/models.py:98 +#: vibes_auth/models.py:54 msgid "first_name" msgstr "Voornaam" -#: vibes_auth/models.py:99 +#: vibes_auth/models.py:55 msgid "last_name" msgstr "Achternaam" -#: vibes_auth/models.py:105 +#: vibes_auth/models.py:61 msgid "user profile image" msgstr "Afbeelding gebruikersprofiel" -#: vibes_auth/models.py:110 +#: vibes_auth/models.py:66 msgid "is verified" msgstr "Is geverifieerd" -#: vibes_auth/models.py:111 +#: vibes_auth/models.py:67 msgid "user verification status" msgstr "Verificatiestatus van de gebruiker" -#: vibes_auth/models.py:114 +#: vibes_auth/models.py:70 msgid "is_active" msgstr "Is actief" -#: vibes_auth/models.py:116 +#: vibes_auth/models.py:72 msgid "unselect this instead of deleting accounts" msgstr "Deselecteer dit in plaats van accounts te verwijderen" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "is_subscribed" msgstr "Is geabonneerd" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "user's newsletter subscription status" msgstr "Inschrijvingsstatus nieuwsbrief gebruiker" -#: vibes_auth/models.py:122 +#: vibes_auth/models.py:78 msgid "activation token" msgstr "Activeringstoken" -#: vibes_auth/models.py:124 +#: vibes_auth/models.py:80 msgid "attributes" msgstr "Attributen" -#: vibes_auth/models.py:158 +#: vibes_auth/models.py:110 msgid "user" msgstr "Gebruiker" -#: vibes_auth/models.py:159 +#: vibes_auth/models.py:111 msgid "users" msgstr "Gebruikers" -#: vibes_auth/models.py:179 +#: vibes_auth/models.py:131 msgid "group" msgstr "Groep" -#: vibes_auth/models.py:196 +#: vibes_auth/models.py:148 msgid "outstanding token" msgstr "Uitstekende penning" -#: vibes_auth/models.py:197 +#: vibes_auth/models.py:149 msgid "outstanding tokens" msgstr "Uitstaande tokens" -#: vibes_auth/models.py:215 +#: vibes_auth/models.py:167 msgid "blacklisted token" msgstr "Token op zwarte lijst" -#: vibes_auth/models.py:216 +#: vibes_auth/models.py:168 msgid "blacklisted tokens" msgstr "Tokens op de zwarte lijst" @@ -412,12 +431,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Vriendelijke groeten,
het %(project_name)s team" -#: vibes_auth/utils/emailing.py:27 +#: vibes_auth/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Account activeren" -#: vibes_auth/utils/emailing.py:69 +#: vibes_auth/utils/emailing.py:63 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Wachtwoord opnieuw instellen" @@ -472,7 +491,7 @@ msgstr "" msgid "the token is invalid" msgstr "Het token is ongeldig" -#: vibes_auth/viewsets.py:43 +#: vibes_auth/viewsets.py:44 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." @@ -480,10 +499,10 @@ 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 +#: vibes_auth/viewsets.py:98 msgid "password reset successfully" msgstr "Wachtwoord is succesvol gereset!" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:131 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 43ec4ea3..9744e19d 100644 Binary files a/vibes_auth/locale/no_NO/LC_MESSAGES/django.mo and b/vibes_auth/locale/no_NO/LC_MESSAGES/django.mo differ diff --git a/vibes_auth/locale/no_NO/LC_MESSAGES/django.po b/vibes_auth/locale/no_NO/LC_MESSAGES/django.po index 0276e543..98e24211 100644 --- a/vibes_auth/locale/no_NO/LC_MESSAGES/django.po +++ b/vibes_auth/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-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+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:82 +#: vibes_auth/viewsets.py:83 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:125 -#: vibes_auth/viewsets.py:144 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 +#: vibes_auth/viewsets.py:145 msgid "activation link is invalid!" msgstr "Aktiveringslenken er ugyldig!" @@ -162,7 +162,7 @@ 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:93 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 msgid "token is invalid!" msgstr "Tokenet er ugyldig!" @@ -174,7 +174,7 @@ msgstr "" "Produktene som denne brukeren har sett på sist (maks. 48), i omvendt " "kronologisk rekkefølge." -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:180 +#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 msgid "groups" msgstr "Grupper" @@ -182,7 +182,7 @@ msgstr "Grupper" msgid "wishlist" msgstr "Ønskeliste" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:102 +#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 msgid "avatar" msgstr "Avatar" @@ -199,91 +199,109 @@ msgstr "Språket er en av {LANGUAGES} med standard {LANGUAGE_CODE}." msgid "address set" msgstr "Adresser" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:30 +msgid "" +"Represents a User entity with customized fields and methods for extended " +"functionality. This class extends the AbstractUser model and integrates " +"additional features like custom email login, validation methods, " +"subscription status, verification, and attributes storage. It also provides " +"utilities for managing recently viewed items and token-based activation for " +"verifying accounts. The User model is designed to handle specific use cases " +"for enhanced user management." +msgstr "" +"Representerer en User-enhet med tilpassede felt og metoder for utvidet " +"funksjonalitet. Denne klassen utvider AbstractUser-modellen og integrerer " +"tilleggsfunksjoner som egendefinert e-postinnlogging, valideringsmetoder, " +"abonnementsstatus, verifisering og lagring av attributter. Den inneholder " +"også verktøy for håndtering av nylig viste elementer og tokenbasert " +"aktivering for å verifisere kontoer. User-modellen er utformet for å " +"håndtere spesifikke brukstilfeller for forbedret brukeradministrasjon." + +#: vibes_auth/models.py:41 msgid "email" msgstr "E-post" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:41 msgid "user email address" msgstr "Brukerens e-postadresse" -#: vibes_auth/models.py:87 +#: vibes_auth/models.py:43 msgid "phone_number" msgstr "Telefonnummer" -#: vibes_auth/models.py:92 +#: vibes_auth/models.py:48 msgid "user phone number" msgstr "Brukerens telefonnummer" -#: vibes_auth/models.py:98 +#: vibes_auth/models.py:54 msgid "first_name" msgstr "Fornavn" -#: vibes_auth/models.py:99 +#: vibes_auth/models.py:55 msgid "last_name" msgstr "Etternavn" -#: vibes_auth/models.py:105 +#: vibes_auth/models.py:61 msgid "user profile image" msgstr "Bilde av brukerprofil" -#: vibes_auth/models.py:110 +#: vibes_auth/models.py:66 msgid "is verified" msgstr "Er verifisert" -#: vibes_auth/models.py:111 +#: vibes_auth/models.py:67 msgid "user verification status" msgstr "Brukerens bekreftelsesstatus" -#: vibes_auth/models.py:114 +#: vibes_auth/models.py:70 msgid "is_active" msgstr "Er aktiv" -#: vibes_auth/models.py:116 +#: vibes_auth/models.py:72 msgid "unselect this instead of deleting accounts" msgstr "Fjern dette valget i stedet for å slette kontoer" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "is_subscribed" msgstr "Er abonnert" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "user's newsletter subscription status" msgstr "Status for brukerens abonnement på nyhetsbrev" -#: vibes_auth/models.py:122 +#: vibes_auth/models.py:78 msgid "activation token" msgstr "Aktiveringstoken" -#: vibes_auth/models.py:124 +#: vibes_auth/models.py:80 msgid "attributes" msgstr "Egenskaper" -#: vibes_auth/models.py:158 +#: vibes_auth/models.py:110 msgid "user" msgstr "Bruker" -#: vibes_auth/models.py:159 +#: vibes_auth/models.py:111 msgid "users" msgstr "Brukere" -#: vibes_auth/models.py:179 +#: vibes_auth/models.py:131 msgid "group" msgstr "Gruppe" -#: vibes_auth/models.py:196 +#: vibes_auth/models.py:148 msgid "outstanding token" msgstr "Enestående symbol" -#: vibes_auth/models.py:197 +#: vibes_auth/models.py:149 msgid "outstanding tokens" msgstr "Outstanding tokens" -#: vibes_auth/models.py:215 +#: vibes_auth/models.py:167 msgid "blacklisted token" msgstr "Svartelistet token" -#: vibes_auth/models.py:216 +#: vibes_auth/models.py:168 msgid "blacklisted tokens" msgstr "Svartelistede tokens" @@ -411,12 +429,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Med vennlig hilsen,
teamet %(project_name)s" -#: vibes_auth/utils/emailing.py:27 +#: vibes_auth/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Aktiver konto" -#: vibes_auth/utils/emailing.py:69 +#: vibes_auth/utils/emailing.py:63 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Tilbakestill passord" @@ -471,7 +489,7 @@ msgstr "" msgid "the token is invalid" msgstr "Tokenet er ugyldig" -#: vibes_auth/viewsets.py:43 +#: vibes_auth/viewsets.py:44 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." @@ -479,10 +497,10 @@ 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 +#: vibes_auth/viewsets.py:98 msgid "password reset successfully" msgstr "Passordet har blitt tilbakestilt!" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:131 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 1f11975b..b8f1690f 100644 Binary files a/vibes_auth/locale/pl_PL/LC_MESSAGES/django.mo and b/vibes_auth/locale/pl_PL/LC_MESSAGES/django.mo differ diff --git a/vibes_auth/locale/pl_PL/LC_MESSAGES/django.po b/vibes_auth/locale/pl_PL/LC_MESSAGES/django.po index e5e59fd1..b18273c4 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-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+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 "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:82 +#: vibes_auth/viewsets.py:83 msgid "passwords do not match" msgstr "Hasła nie są zgodne" @@ -152,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:125 -#: vibes_auth/viewsets.py:144 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 +#: vibes_auth/viewsets.py:145 msgid "activation link is invalid!" msgstr "Link aktywacyjny jest nieprawidłowy!" @@ -165,7 +165,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:93 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 msgid "token is invalid!" msgstr "Token jest nieprawidłowy!" @@ -177,7 +177,7 @@ msgstr "" "Produkty ostatnio przeglądane przez tego użytkownika (maks. 48), w " "kolejności odwrotnej do chronologicznej." -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:180 +#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 msgid "groups" msgstr "Grupy" @@ -185,7 +185,7 @@ msgstr "Grupy" msgid "wishlist" msgstr "Lista życzeń" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:102 +#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 msgid "avatar" msgstr "Awatar" @@ -202,91 +202,110 @@ msgstr "Język jest jednym z {LANGUAGES} z domyślnym {LANGUAGE_CODE}." msgid "address set" msgstr "Adresy" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:30 +msgid "" +"Represents a User entity with customized fields and methods for extended " +"functionality. This class extends the AbstractUser model and integrates " +"additional features like custom email login, validation methods, " +"subscription status, verification, and attributes storage. It also provides " +"utilities for managing recently viewed items and token-based activation for " +"verifying accounts. The User model is designed to handle specific use cases " +"for enhanced user management." +msgstr "" +"Reprezentuje encję User z niestandardowymi polami i metodami dla " +"rozszerzonej funkcjonalności. Ta klasa rozszerza model AbstractUser i " +"integruje dodatkowe funkcje, takie jak niestandardowy login e-mail, metody " +"walidacji, status subskrypcji, weryfikacja i przechowywanie atrybutów. " +"Zapewnia również narzędzia do zarządzania ostatnio przeglądanymi elementami " +"i aktywację opartą na tokenach do weryfikacji kont. Model User został " +"zaprojektowany do obsługi określonych przypadków użycia w celu ulepszonego " +"zarządzania użytkownikami." + +#: vibes_auth/models.py:41 msgid "email" msgstr "E-mail" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:41 msgid "user email address" msgstr "Adres e-mail użytkownika" -#: vibes_auth/models.py:87 +#: vibes_auth/models.py:43 msgid "phone_number" msgstr "Numer telefonu" -#: vibes_auth/models.py:92 +#: vibes_auth/models.py:48 msgid "user phone number" msgstr "Numer telefonu użytkownika" -#: vibes_auth/models.py:98 +#: vibes_auth/models.py:54 msgid "first_name" msgstr "Imię" -#: vibes_auth/models.py:99 +#: vibes_auth/models.py:55 msgid "last_name" msgstr "Nazwisko" -#: vibes_auth/models.py:105 +#: vibes_auth/models.py:61 msgid "user profile image" msgstr "Obraz profilu użytkownika" -#: vibes_auth/models.py:110 +#: vibes_auth/models.py:66 msgid "is verified" msgstr "Czy zweryfikowano" -#: vibes_auth/models.py:111 +#: vibes_auth/models.py:67 msgid "user verification status" msgstr "Status weryfikacji użytkownika" -#: vibes_auth/models.py:114 +#: vibes_auth/models.py:70 msgid "is_active" msgstr "Jest aktywny" -#: vibes_auth/models.py:116 +#: vibes_auth/models.py:72 msgid "unselect this instead of deleting accounts" msgstr "Odznacz to zamiast usuwać konta" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "is_subscribed" msgstr "Jest subskrybowany" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "user's newsletter subscription status" msgstr "Status subskrypcji newslettera użytkownika" -#: vibes_auth/models.py:122 +#: vibes_auth/models.py:78 msgid "activation token" msgstr "Token aktywacyjny" -#: vibes_auth/models.py:124 +#: vibes_auth/models.py:80 msgid "attributes" msgstr "Atrybuty" -#: vibes_auth/models.py:158 +#: vibes_auth/models.py:110 msgid "user" msgstr "Użytkownik" -#: vibes_auth/models.py:159 +#: vibes_auth/models.py:111 msgid "users" msgstr "Użytkownicy" -#: vibes_auth/models.py:179 +#: vibes_auth/models.py:131 msgid "group" msgstr "Grupa" -#: vibes_auth/models.py:196 +#: vibes_auth/models.py:148 msgid "outstanding token" msgstr "Wyjątkowy token" -#: vibes_auth/models.py:197 +#: vibes_auth/models.py:149 msgid "outstanding tokens" msgstr "Zaległe tokeny" -#: vibes_auth/models.py:215 +#: vibes_auth/models.py:167 msgid "blacklisted token" msgstr "Token na czarnej liście" -#: vibes_auth/models.py:216 +#: vibes_auth/models.py:168 msgid "blacklisted tokens" msgstr "Tokeny znajdujące się na czarnej liście" @@ -413,12 +432,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Najlepsze pozdrowienia,
zespół %(project_name)s" -#: vibes_auth/utils/emailing.py:27 +#: vibes_auth/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Aktywuj konto" -#: vibes_auth/utils/emailing.py:69 +#: vibes_auth/utils/emailing.py:63 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Resetuj hasło" @@ -473,7 +492,7 @@ msgstr "" msgid "the token is invalid" msgstr "Token jest nieprawidłowy" -#: vibes_auth/viewsets.py:43 +#: vibes_auth/viewsets.py:44 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." @@ -481,10 +500,10 @@ 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 +#: vibes_auth/viewsets.py:98 msgid "password reset successfully" msgstr "Hasło zostało pomyślnie zresetowane!" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:131 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 280de48d..aeda5494 100644 Binary files a/vibes_auth/locale/pt_BR/LC_MESSAGES/django.mo and b/vibes_auth/locale/pt_BR/LC_MESSAGES/django.mo differ diff --git a/vibes_auth/locale/pt_BR/LC_MESSAGES/django.po b/vibes_auth/locale/pt_BR/LC_MESSAGES/django.po index ba391915..1e3284ed 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-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+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:82 +#: vibes_auth/viewsets.py:83 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:125 -#: vibes_auth/viewsets.py:144 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 +#: vibes_auth/viewsets.py:145 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:93 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 msgid "token is invalid!" msgstr "O token é inválido!" @@ -173,7 +173,7 @@ msgstr "" "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 +#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 msgid "groups" msgstr "Grupos" @@ -181,7 +181,7 @@ msgstr "Grupos" msgid "wishlist" msgstr "Lista de desejos" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:102 +#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 msgid "avatar" msgstr "Avatar" @@ -198,91 +198,110 @@ msgstr "O idioma é um dos {LANGUAGES} com o padrão {LANGUAGE_CODE}" msgid "address set" msgstr "Endereços" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:30 +msgid "" +"Represents a User entity with customized fields and methods for extended " +"functionality. This class extends the AbstractUser model and integrates " +"additional features like custom email login, validation methods, " +"subscription status, verification, and attributes storage. It also provides " +"utilities for managing recently viewed items and token-based activation for " +"verifying accounts. The User model is designed to handle specific use cases " +"for enhanced user management." +msgstr "" +"Representa uma entidade de usuário com campos e métodos personalizados para " +"funcionalidade estendida. Essa classe estende o modelo AbstractUser e " +"integra recursos adicionais, como login de e-mail personalizado, métodos de " +"validação, status de assinatura, verificação e armazenamento de atributos. " +"Ela também fornece utilitários para gerenciar itens visualizados " +"recentemente e ativação baseada em token para verificação de contas. O " +"modelo User foi projetado para lidar com casos de uso específicos para o " +"gerenciamento aprimorado de usuários." + +#: vibes_auth/models.py:41 msgid "email" msgstr "E-mail" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:41 msgid "user email address" msgstr "Endereço de e-mail do usuário" -#: vibes_auth/models.py:87 +#: vibes_auth/models.py:43 msgid "phone_number" msgstr "Número de telefone" -#: vibes_auth/models.py:92 +#: vibes_auth/models.py:48 msgid "user phone number" msgstr "Número de telefone do usuário" -#: vibes_auth/models.py:98 +#: vibes_auth/models.py:54 msgid "first_name" msgstr "Primeiro nome" -#: vibes_auth/models.py:99 +#: vibes_auth/models.py:55 msgid "last_name" msgstr "Sobrenome" -#: vibes_auth/models.py:105 +#: vibes_auth/models.py:61 msgid "user profile image" msgstr "Imagem do perfil do usuário" -#: vibes_auth/models.py:110 +#: vibes_auth/models.py:66 msgid "is verified" msgstr "É verificado" -#: vibes_auth/models.py:111 +#: vibes_auth/models.py:67 msgid "user verification status" msgstr "Status de verificação do usuário" -#: vibes_auth/models.py:114 +#: vibes_auth/models.py:70 msgid "is_active" msgstr "Está ativo" -#: vibes_auth/models.py:116 +#: vibes_auth/models.py:72 msgid "unselect this instead of deleting accounts" msgstr "Desmarque essa opção em vez de excluir contas" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "is_subscribed" msgstr "Está inscrito" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "user's newsletter subscription status" msgstr "Status da assinatura do boletim informativo do usuário" -#: vibes_auth/models.py:122 +#: vibes_auth/models.py:78 msgid "activation token" msgstr "Token de ativação" -#: vibes_auth/models.py:124 +#: vibes_auth/models.py:80 msgid "attributes" msgstr "Atributos" -#: vibes_auth/models.py:158 +#: vibes_auth/models.py:110 msgid "user" msgstr "Usuário" -#: vibes_auth/models.py:159 +#: vibes_auth/models.py:111 msgid "users" msgstr "Usuários" -#: vibes_auth/models.py:179 +#: vibes_auth/models.py:131 msgid "group" msgstr "Grupo" -#: vibes_auth/models.py:196 +#: vibes_auth/models.py:148 msgid "outstanding token" msgstr "Token excepcional" -#: vibes_auth/models.py:197 +#: vibes_auth/models.py:149 msgid "outstanding tokens" msgstr "Tokens pendentes" -#: vibes_auth/models.py:215 +#: vibes_auth/models.py:167 msgid "blacklisted token" msgstr "Token na lista negra" -#: vibes_auth/models.py:216 +#: vibes_auth/models.py:168 msgid "blacklisted tokens" msgstr "Tokens na lista negra" @@ -410,12 +429,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Atenciosamente,
a equipe %(project_name)s" -#: vibes_auth/utils/emailing.py:27 +#: vibes_auth/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Ativar conta" -#: vibes_auth/utils/emailing.py:69 +#: vibes_auth/utils/emailing.py:63 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Redefinir senha" @@ -471,7 +490,7 @@ msgstr "" msgid "the token is invalid" msgstr "O token é inválido" -#: vibes_auth/viewsets.py:43 +#: vibes_auth/viewsets.py:44 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." @@ -479,10 +498,10 @@ 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 +#: vibes_auth/viewsets.py:98 msgid "password reset successfully" msgstr "A senha foi redefinida com sucesso!" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:131 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 05b1ea79..af4349ca 100644 Binary files a/vibes_auth/locale/ro_RO/LC_MESSAGES/django.mo and b/vibes_auth/locale/ro_RO/LC_MESSAGES/django.mo differ diff --git a/vibes_auth/locale/ro_RO/LC_MESSAGES/django.po b/vibes_auth/locale/ro_RO/LC_MESSAGES/django.po index 580678b5..d17932ce 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-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+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:82 +#: vibes_auth/viewsets.py:83 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:125 -#: vibes_auth/viewsets.py:144 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 +#: vibes_auth/viewsets.py:145 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:93 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 msgid "token is invalid!" msgstr "Token-ul nu este valabil!" @@ -176,7 +176,7 @@ msgstr "" "Produsele pe care acest utilizator le-a vizualizat cel mai recent (max 48), " "în ordine cronologică inversă." -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:180 +#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 msgid "groups" msgstr "Grupuri" @@ -184,7 +184,7 @@ msgstr "Grupuri" msgid "wishlist" msgstr "Lista dorințelor" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:102 +#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 msgid "avatar" msgstr "Avatar" @@ -201,91 +201,110 @@ msgstr "Limba este una dintre {LANGUAGES} cu implicit {LANGUAGE_CODE}" msgid "address set" msgstr "Adrese" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:30 +msgid "" +"Represents a User entity with customized fields and methods for extended " +"functionality. This class extends the AbstractUser model and integrates " +"additional features like custom email login, validation methods, " +"subscription status, verification, and attributes storage. It also provides " +"utilities for managing recently viewed items and token-based activation for " +"verifying accounts. The User model is designed to handle specific use cases " +"for enhanced user management." +msgstr "" +"Reprezintă o entitate utilizator cu câmpuri și metode personalizate pentru " +"funcționalitate extinsă. Această clasă extinde modelul AbstractUser și " +"integrează caracteristici suplimentare, cum ar fi autentificarea prin e-mail" +" personalizat, metode de validare, starea abonamentului, verificarea și " +"stocarea atributelor. De asemenea, oferă utilitare pentru gestionarea " +"elementelor vizualizate recent și activare pe bază de token pentru " +"verificarea conturilor. Modelul User este conceput pentru a gestiona cazuri " +"de utilizare specifice pentru gestionarea îmbunătățită a utilizatorilor." + +#: vibes_auth/models.py:41 msgid "email" msgstr "E-mail" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:41 msgid "user email address" msgstr "Adresa de e-mail a utilizatorului" -#: vibes_auth/models.py:87 +#: vibes_auth/models.py:43 msgid "phone_number" msgstr "Număr de telefon" -#: vibes_auth/models.py:92 +#: vibes_auth/models.py:48 msgid "user phone number" msgstr "Numărul de telefon al utilizatorului" -#: vibes_auth/models.py:98 +#: vibes_auth/models.py:54 msgid "first_name" msgstr "Numele și prenumele" -#: vibes_auth/models.py:99 +#: vibes_auth/models.py:55 msgid "last_name" msgstr "Numele de familie" -#: vibes_auth/models.py:105 +#: vibes_auth/models.py:61 msgid "user profile image" msgstr "Imagine profil utilizator" -#: vibes_auth/models.py:110 +#: vibes_auth/models.py:66 msgid "is verified" msgstr "Este verificat" -#: vibes_auth/models.py:111 +#: vibes_auth/models.py:67 msgid "user verification status" msgstr "Statutul de verificare al utilizatorului" -#: vibes_auth/models.py:114 +#: vibes_auth/models.py:70 msgid "is_active" msgstr "Este activ" -#: vibes_auth/models.py:116 +#: vibes_auth/models.py:72 msgid "unselect this instead of deleting accounts" msgstr "Deselectați acest lucru în loc să ștergeți conturile" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "is_subscribed" msgstr "Este abonat" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "user's newsletter subscription status" msgstr "Starea abonării utilizatorului la buletinul informativ" -#: vibes_auth/models.py:122 +#: vibes_auth/models.py:78 msgid "activation token" msgstr "Jeton de activare" -#: vibes_auth/models.py:124 +#: vibes_auth/models.py:80 msgid "attributes" msgstr "Atribute" -#: vibes_auth/models.py:158 +#: vibes_auth/models.py:110 msgid "user" msgstr "Utilizator" -#: vibes_auth/models.py:159 +#: vibes_auth/models.py:111 msgid "users" msgstr "Utilizatori" -#: vibes_auth/models.py:179 +#: vibes_auth/models.py:131 msgid "group" msgstr "Grup" -#: vibes_auth/models.py:196 +#: vibes_auth/models.py:148 msgid "outstanding token" msgstr "Simbol excepțional" -#: vibes_auth/models.py:197 +#: vibes_auth/models.py:149 msgid "outstanding tokens" msgstr "Jetoane restante" -#: vibes_auth/models.py:215 +#: vibes_auth/models.py:167 msgid "blacklisted token" msgstr "Token pe lista neagră" -#: vibes_auth/models.py:216 +#: vibes_auth/models.py:168 msgid "blacklisted tokens" msgstr "Jetoane pe lista neagră" @@ -414,12 +433,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Cele mai bune salutări,
echipa %(project_name)s" -#: vibes_auth/utils/emailing.py:27 +#: vibes_auth/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Activare cont" -#: vibes_auth/utils/emailing.py:69 +#: vibes_auth/utils/emailing.py:63 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Resetați parola" @@ -476,7 +495,7 @@ msgstr "" msgid "the token is invalid" msgstr "Jetonul nu este valabil" -#: vibes_auth/viewsets.py:43 +#: vibes_auth/viewsets.py:44 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." @@ -484,10 +503,10 @@ 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 +#: vibes_auth/viewsets.py:98 msgid "password reset successfully" msgstr "Parola a fost resetată cu succes!" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:131 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 4a6e0a62..ca06fe9d 100644 Binary files a/vibes_auth/locale/ru_RU/LC_MESSAGES/django.mo and b/vibes_auth/locale/ru_RU/LC_MESSAGES/django.mo differ diff --git a/vibes_auth/locale/ru_RU/LC_MESSAGES/django.po b/vibes_auth/locale/ru_RU/LC_MESSAGES/django.po index 039a9368..d957f6df 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-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+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:82 +#: vibes_auth/viewsets.py:83 msgid "passwords do not match" msgstr "Пароли не совпадают" @@ -152,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:125 -#: vibes_auth/viewsets.py:144 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 +#: vibes_auth/viewsets.py:145 msgid "activation link is invalid!" msgstr "Ссылка на активацию недействительна!" @@ -165,7 +165,7 @@ msgstr "Аккаунт уже активирован..." msgid "something went wrong: {e!s}" msgstr "Что-то пошло не так: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:93 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 msgid "token is invalid!" msgstr "Токен недействителен!" @@ -177,7 +177,7 @@ msgstr "" "Продукты, которые этот пользователь просматривал в последнее время (не более" " 48), в обратном хронологическом порядке." -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:180 +#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 msgid "groups" msgstr "Группы" @@ -185,7 +185,7 @@ msgstr "Группы" msgid "wishlist" msgstr "Список желаний" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:102 +#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 msgid "avatar" msgstr "Аватар" @@ -202,91 +202,110 @@ msgstr "Язык - один из {LANGUAGES}, по умолчанию {LANGUAGE_ msgid "address set" msgstr "Адреса" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:30 +msgid "" +"Represents a User entity with customized fields and methods for extended " +"functionality. This class extends the AbstractUser model and integrates " +"additional features like custom email login, validation methods, " +"subscription status, verification, and attributes storage. It also provides " +"utilities for managing recently viewed items and token-based activation for " +"verifying accounts. The User model is designed to handle specific use cases " +"for enhanced user management." +msgstr "" +"Представляет сущность User с настраиваемыми полями и методами для расширения" +" функциональности. Этот класс расширяет модель AbstractUser и включает в " +"себя дополнительные возможности, такие как пользовательский вход по " +"электронной почте, методы проверки, статус подписки, верификация и хранение " +"атрибутов. Он также предоставляет утилиты для управления недавно " +"просмотренными элементами и активации на основе токенов для проверки учетных" +" записей. Модель User предназначена для обработки конкретных случаев " +"использования для расширенного управления пользователями." + +#: vibes_auth/models.py:41 msgid "email" msgstr "Электронная почта" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:41 msgid "user email address" msgstr "Адрес электронной почты пользователя" -#: vibes_auth/models.py:87 +#: vibes_auth/models.py:43 msgid "phone_number" msgstr "Номер телефона" -#: vibes_auth/models.py:92 +#: vibes_auth/models.py:48 msgid "user phone number" msgstr "Номер телефона пользователя" -#: vibes_auth/models.py:98 +#: vibes_auth/models.py:54 msgid "first_name" msgstr "Имя" -#: vibes_auth/models.py:99 +#: vibes_auth/models.py:55 msgid "last_name" msgstr "Фамилия" -#: vibes_auth/models.py:105 +#: vibes_auth/models.py:61 msgid "user profile image" msgstr "Изображение профиля пользователя" -#: vibes_auth/models.py:110 +#: vibes_auth/models.py:66 msgid "is verified" msgstr "Проверено" -#: vibes_auth/models.py:111 +#: vibes_auth/models.py:67 msgid "user verification status" msgstr "Статус верификации пользователя" -#: vibes_auth/models.py:114 +#: vibes_auth/models.py:70 msgid "is_active" msgstr "Активен" -#: vibes_auth/models.py:116 +#: vibes_auth/models.py:72 msgid "unselect this instead of deleting accounts" msgstr "Снимите этот флажок вместо удаления учетных записей" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "is_subscribed" msgstr "Подписан" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "user's newsletter subscription status" msgstr "Статус подписки пользователя на рассылку новостей" -#: vibes_auth/models.py:122 +#: vibes_auth/models.py:78 msgid "activation token" msgstr "Активационный токен" -#: vibes_auth/models.py:124 +#: vibes_auth/models.py:80 msgid "attributes" msgstr "Атрибуты" -#: vibes_auth/models.py:158 +#: vibes_auth/models.py:110 msgid "user" msgstr "Пользователь" -#: vibes_auth/models.py:159 +#: vibes_auth/models.py:111 msgid "users" msgstr "Пользователи" -#: vibes_auth/models.py:179 +#: vibes_auth/models.py:131 msgid "group" msgstr "Группа" -#: vibes_auth/models.py:196 +#: vibes_auth/models.py:148 msgid "outstanding token" msgstr "Выдающийся жетон" -#: vibes_auth/models.py:197 +#: vibes_auth/models.py:149 msgid "outstanding tokens" msgstr "Выпущенные токены" -#: vibes_auth/models.py:215 +#: vibes_auth/models.py:167 msgid "blacklisted token" msgstr "Токен в черном списке" -#: vibes_auth/models.py:216 +#: vibes_auth/models.py:168 msgid "blacklisted tokens" msgstr "Чёрный список токенов" @@ -412,12 +431,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "С наилучшими пожеланиями,
команда %(project_name)s" -#: vibes_auth/utils/emailing.py:27 +#: vibes_auth/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Активировать учетную запись" -#: vibes_auth/utils/emailing.py:69 +#: vibes_auth/utils/emailing.py:63 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Сброс пароля" @@ -472,7 +491,7 @@ msgstr "" msgid "the token is invalid" msgstr "Токен недействителен" -#: vibes_auth/viewsets.py:43 +#: vibes_auth/viewsets.py:44 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." @@ -480,10 +499,10 @@ msgstr "" "Реализация набора пользовательских представлений.\n" "Предоставляет набор действий, которые управляют пользовательскими данными, такими как создание, получение, обновление, удаление, а также пользовательскими действиями, включая сброс пароля, загрузку аватара, активацию учетной записи и объединение недавно просмотренных элементов. Этот класс расширяет миксины и GenericViewSet для надежной работы с API." -#: vibes_auth/viewsets.py:97 +#: vibes_auth/viewsets.py:98 msgid "password reset successfully" msgstr "Пароль был успешно сброшен!" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:131 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 ca17463c..eb48ac07 100644 Binary files a/vibes_auth/locale/sv_SE/LC_MESSAGES/django.mo and b/vibes_auth/locale/sv_SE/LC_MESSAGES/django.mo differ diff --git a/vibes_auth/locale/sv_SE/LC_MESSAGES/django.po b/vibes_auth/locale/sv_SE/LC_MESSAGES/django.po index d07def8d..318ccdb8 100644 --- a/vibes_auth/locale/sv_SE/LC_MESSAGES/django.po +++ b/vibes_auth/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-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+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:82 +#: vibes_auth/viewsets.py:83 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:125 -#: vibes_auth/viewsets.py:144 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 +#: vibes_auth/viewsets.py:145 msgid "activation link is invalid!" msgstr "Aktiveringslänken är ogiltig!" @@ -163,7 +163,7 @@ 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:93 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 msgid "token is invalid!" msgstr "Token är ogiltig!" @@ -175,7 +175,7 @@ msgstr "" "De produkter som den här användaren har tittat på senast (max 48), i omvänd " "kronologisk ordning." -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:180 +#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 msgid "groups" msgstr "Grupper" @@ -183,7 +183,7 @@ msgstr "Grupper" msgid "wishlist" msgstr "Önskelista" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:102 +#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 msgid "avatar" msgstr "Avatar" @@ -200,91 +200,109 @@ msgstr "Språk är en av {LANGUAGES} med standard {LANGUAGE_CODE}." msgid "address set" msgstr "Adresser" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:30 +msgid "" +"Represents a User entity with customized fields and methods for extended " +"functionality. This class extends the AbstractUser model and integrates " +"additional features like custom email login, validation methods, " +"subscription status, verification, and attributes storage. It also provides " +"utilities for managing recently viewed items and token-based activation for " +"verifying accounts. The User model is designed to handle specific use cases " +"for enhanced user management." +msgstr "" +"Representerar en User-entitet med anpassade fält och metoder för utökad " +"funktionalitet. Denna klass utökar AbstractUser-modellen och integrerar " +"ytterligare funktioner som anpassad e-postinloggning, valideringsmetoder, " +"prenumerationsstatus, verifiering och lagring av attribut. Den innehåller " +"också verktyg för att hantera nyligen visade objekt och tokenbaserad " +"aktivering för att verifiera konton. User-modellen är utformad för att " +"hantera specifika användningsfall för förbättrad användarhantering." + +#: vibes_auth/models.py:41 msgid "email" msgstr "E-post" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:41 msgid "user email address" msgstr "Användarens e-postadress" -#: vibes_auth/models.py:87 +#: vibes_auth/models.py:43 msgid "phone_number" msgstr "Telefonnummer" -#: vibes_auth/models.py:92 +#: vibes_auth/models.py:48 msgid "user phone number" msgstr "Användarens telefonnummer" -#: vibes_auth/models.py:98 +#: vibes_auth/models.py:54 msgid "first_name" msgstr "Förnamn" -#: vibes_auth/models.py:99 +#: vibes_auth/models.py:55 msgid "last_name" msgstr "Efternamn" -#: vibes_auth/models.py:105 +#: vibes_auth/models.py:61 msgid "user profile image" msgstr "Bild på användarprofil" -#: vibes_auth/models.py:110 +#: vibes_auth/models.py:66 msgid "is verified" msgstr "Är verifierad" -#: vibes_auth/models.py:111 +#: vibes_auth/models.py:67 msgid "user verification status" msgstr "Användarens verifieringsstatus" -#: vibes_auth/models.py:114 +#: vibes_auth/models.py:70 msgid "is_active" msgstr "Är aktiv" -#: vibes_auth/models.py:116 +#: vibes_auth/models.py:72 msgid "unselect this instead of deleting accounts" msgstr "Avmarkera detta istället för att radera konton" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "is_subscribed" msgstr "Är prenumererad" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "user's newsletter subscription status" msgstr "Användarens status för prenumeration på nyhetsbrev" -#: vibes_auth/models.py:122 +#: vibes_auth/models.py:78 msgid "activation token" msgstr "Aktiveringstoken" -#: vibes_auth/models.py:124 +#: vibes_auth/models.py:80 msgid "attributes" msgstr "Attribut" -#: vibes_auth/models.py:158 +#: vibes_auth/models.py:110 msgid "user" msgstr "Användare" -#: vibes_auth/models.py:159 +#: vibes_auth/models.py:111 msgid "users" msgstr "Användare" -#: vibes_auth/models.py:179 +#: vibes_auth/models.py:131 msgid "group" msgstr "Grupp" -#: vibes_auth/models.py:196 +#: vibes_auth/models.py:148 msgid "outstanding token" msgstr "Utestående symbol" -#: vibes_auth/models.py:197 +#: vibes_auth/models.py:149 msgid "outstanding tokens" msgstr "Utestående polletter" -#: vibes_auth/models.py:215 +#: vibes_auth/models.py:167 msgid "blacklisted token" msgstr "Svartlistad token" -#: vibes_auth/models.py:216 +#: vibes_auth/models.py:168 msgid "blacklisted tokens" msgstr "Svartlistade tokens" @@ -411,12 +429,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Bästa hälsningar,
teamet %(project_name)s" -#: vibes_auth/utils/emailing.py:27 +#: vibes_auth/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Aktivera konto" -#: vibes_auth/utils/emailing.py:69 +#: vibes_auth/utils/emailing.py:63 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Återställ lösenord" @@ -471,7 +489,7 @@ msgstr "" msgid "the token is invalid" msgstr "Token är ogiltig" -#: vibes_auth/viewsets.py:43 +#: vibes_auth/viewsets.py:44 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." @@ -479,10 +497,10 @@ 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 +#: vibes_auth/viewsets.py:98 msgid "password reset successfully" msgstr "Lösenordet har återställts framgångsrikt!" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:131 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 ca69505a..dee454c8 100644 Binary files a/vibes_auth/locale/th_TH/LC_MESSAGES/django.mo and b/vibes_auth/locale/th_TH/LC_MESSAGES/django.mo differ diff --git a/vibes_auth/locale/th_TH/LC_MESSAGES/django.po b/vibes_auth/locale/th_TH/LC_MESSAGES/django.po index b9219c5b..a74f4485 100644 --- a/vibes_auth/locale/th_TH/LC_MESSAGES/django.po +++ b/vibes_auth/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-13 18:49+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:82 +#: vibes_auth/viewsets.py:83 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:125 -#: vibes_auth/viewsets.py:144 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 +#: vibes_auth/viewsets.py:145 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:93 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 msgid "token is invalid!" msgstr "โทเคนไม่ถูกต้อง!" @@ -171,7 +171,7 @@ msgid "" msgstr "" "สินค้าที่ผู้ใช้รายนี้ดูล่าสุด (สูงสุด 48 รายการ) เรียงตามลำดับเวลาล่าสุด" -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:180 +#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 msgid "groups" msgstr "กลุ่ม" @@ -179,7 +179,7 @@ msgstr "กลุ่ม" msgid "wishlist" msgstr "รายการสิ่งที่ต้องการ" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:102 +#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 msgid "avatar" msgstr "อวตาร" @@ -196,91 +196,109 @@ msgstr "ภาษาเป็นหนึ่งใน {LANGUAGES} ที่ม msgid "address set" msgstr "ที่อยู่" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:30 +msgid "" +"Represents a User entity with customized fields and methods for extended " +"functionality. This class extends the AbstractUser model and integrates " +"additional features like custom email login, validation methods, " +"subscription status, verification, and attributes storage. It also provides " +"utilities for managing recently viewed items and token-based activation for " +"verifying accounts. The User model is designed to handle specific use cases " +"for enhanced user management." +msgstr "" +"แทนที่เอนทิตีผู้ใช้ที่มีฟิลด์และเมธอดที่ปรับแต่งได้สำหรับฟังก์ชันการทำงานที่ขยายออกไป" +" คลาสนี้สืบทอดมาจากโมเดล AbstractUser และรวมคุณสมบัติเพิ่มเติม เช่น " +"การเข้าสู่ระบบด้วยอีเมลที่กำหนดเอง วิธีการตรวจสอบความถูกต้อง " +"สถานะการสมัครสมาชิก การยืนยัน และการจัดเก็บแอตทริบิวต์ " +"นอกจากนี้ยังมียูทิลิตี้สำหรับจัดการรายการที่ดูล่าสุดและการเปิดใช้งานแบบใช้โทเค็นเพื่อยืนยันบัญชี" +" " +"โมเดลผู้ใช้ได้รับการออกแบบมาเพื่อจัดการกรณีการใช้งานเฉพาะสำหรับการจัดการผู้ใช้ที่ดียิ่งขึ้น" + +#: vibes_auth/models.py:41 msgid "email" msgstr "อีเมล" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:41 msgid "user email address" msgstr "ที่อยู่อีเมลของผู้ใช้" -#: vibes_auth/models.py:87 +#: vibes_auth/models.py:43 msgid "phone_number" msgstr "หมายเลขโทรศัพท์" -#: vibes_auth/models.py:92 +#: vibes_auth/models.py:48 msgid "user phone number" msgstr "หมายเลขโทรศัพท์ผู้ใช้" -#: vibes_auth/models.py:98 +#: vibes_auth/models.py:54 msgid "first_name" msgstr "ชื่อ" -#: vibes_auth/models.py:99 +#: vibes_auth/models.py:55 msgid "last_name" msgstr "นามสกุล" -#: vibes_auth/models.py:105 +#: vibes_auth/models.py:61 msgid "user profile image" msgstr "รูปภาพโปรไฟล์ผู้ใช้" -#: vibes_auth/models.py:110 +#: vibes_auth/models.py:66 msgid "is verified" msgstr "ได้รับการยืนยันแล้ว" -#: vibes_auth/models.py:111 +#: vibes_auth/models.py:67 msgid "user verification status" msgstr "สถานะการยืนยันของผู้ใช้" -#: vibes_auth/models.py:114 +#: vibes_auth/models.py:70 msgid "is_active" msgstr "กำลังใช้งานอยู่" -#: vibes_auth/models.py:116 +#: vibes_auth/models.py:72 msgid "unselect this instead of deleting accounts" msgstr "ยกเลิกการเลือกสิ่งนี้แทนการลบบัญชี" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "is_subscribed" msgstr "สมัครสมาชิกแล้ว" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "user's newsletter subscription status" msgstr "สถานะการสมัครสมาชิกจดหมายข่าวของผู้ใช้" -#: vibes_auth/models.py:122 +#: vibes_auth/models.py:78 msgid "activation token" msgstr "โทเค็นการเปิดใช้งาน" -#: vibes_auth/models.py:124 +#: vibes_auth/models.py:80 msgid "attributes" msgstr "คุณลักษณะ" -#: vibes_auth/models.py:158 +#: vibes_auth/models.py:110 msgid "user" msgstr "ผู้ใช้" -#: vibes_auth/models.py:159 +#: vibes_auth/models.py:111 msgid "users" msgstr "ผู้ใช้" -#: vibes_auth/models.py:179 +#: vibes_auth/models.py:131 msgid "group" msgstr "กลุ่ม" -#: vibes_auth/models.py:196 +#: vibes_auth/models.py:148 msgid "outstanding token" msgstr "โทเค็นที่ยังไม่ได้ใช้" -#: vibes_auth/models.py:197 +#: vibes_auth/models.py:149 msgid "outstanding tokens" msgstr "โทเค็นที่ยังไม่ได้ใช้" -#: vibes_auth/models.py:215 +#: vibes_auth/models.py:167 msgid "blacklisted token" msgstr "โทเค็นที่ถูกขึ้นบัญชีดำ" -#: vibes_auth/models.py:216 +#: vibes_auth/models.py:168 msgid "blacklisted tokens" msgstr "โทเค็นที่ถูกขึ้นบัญชีดำ" @@ -403,12 +421,12 @@ msgstr "เปิดใช้งานบัญชี" msgid "best regards,
the %(project_name)s team" msgstr "ขอแสดงความนับถือ
ทีมงาน %(project_name)s" -#: vibes_auth/utils/emailing.py:27 +#: vibes_auth/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | เปิดใช้งานบัญชี" -#: vibes_auth/utils/emailing.py:69 +#: vibes_auth/utils/emailing.py:63 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | ตั้งค่ารหัสผ่านใหม่" @@ -463,7 +481,7 @@ msgstr "" msgid "the token is invalid" msgstr "โทเค็นไม่ถูกต้อง" -#: vibes_auth/viewsets.py:43 +#: vibes_auth/viewsets.py:44 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." @@ -475,10 +493,10 @@ msgstr "" "และการรวมรายการที่ดูล่าสุด คลาสนี้ขยายส่วนผสมและ GenericViewSet " "เพื่อการจัดการ API ที่มีความแข็งแกร่ง" -#: vibes_auth/viewsets.py:97 +#: vibes_auth/viewsets.py:98 msgid "password reset successfully" msgstr "รหัสผ่านได้รับการรีเซ็ตเรียบร้อยแล้ว!" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:131 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 8d967b72..8b34ce4f 100644 Binary files a/vibes_auth/locale/tr_TR/LC_MESSAGES/django.mo and b/vibes_auth/locale/tr_TR/LC_MESSAGES/django.mo differ diff --git a/vibes_auth/locale/tr_TR/LC_MESSAGES/django.po b/vibes_auth/locale/tr_TR/LC_MESSAGES/django.po index 9508747f..67cecd84 100644 --- a/vibes_auth/locale/tr_TR/LC_MESSAGES/django.po +++ b/vibes_auth/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-13 18:49+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:82 +#: vibes_auth/viewsets.py:83 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:125 -#: vibes_auth/viewsets.py:144 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 +#: vibes_auth/viewsets.py:145 msgid "activation link is invalid!" msgstr "Aktivasyon bağlantısı geçersiz!" @@ -161,7 +161,7 @@ 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:93 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 msgid "token is invalid!" msgstr "Jeton geçersiz!" @@ -173,7 +173,7 @@ msgstr "" "Bu kullanıcının en son görüntülediği ürünler (en fazla 48), ters kronolojik " "sırayla." -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:180 +#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 msgid "groups" msgstr "Gruplar" @@ -181,7 +181,7 @@ msgstr "Gruplar" msgid "wishlist" msgstr "İstek Listesi" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:102 +#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 msgid "avatar" msgstr "Avatar" @@ -198,91 +198,110 @@ msgstr "Dil, varsayılan {LANGUAGE_CODE} ile {LANGUAGES}'dan biridir" msgid "address set" msgstr "Adresler" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:30 +msgid "" +"Represents a User entity with customized fields and methods for extended " +"functionality. This class extends the AbstractUser model and integrates " +"additional features like custom email login, validation methods, " +"subscription status, verification, and attributes storage. It also provides " +"utilities for managing recently viewed items and token-based activation for " +"verifying accounts. The User model is designed to handle specific use cases " +"for enhanced user management." +msgstr "" +"Genişletilmiş işlevsellik için özelleştirilmiş alanlara ve yöntemlere sahip " +"bir Kullanıcı varlığını temsil eder. Bu sınıf AbstractUser modelini " +"genişletir ve özel e-posta girişi, doğrulama yöntemleri, abonelik durumu, " +"doğrulama ve öznitelik depolama gibi ek özellikleri entegre eder. Ayrıca son" +" görüntülenen öğeleri yönetmek için yardımcı programlar ve hesapları " +"doğrulamak için token tabanlı aktivasyon sağlar. User modeli, gelişmiş " +"kullanıcı yönetimi için belirli kullanım durumlarını ele almak üzere " +"tasarlanmıştır." + +#: vibes_auth/models.py:41 msgid "email" msgstr "E-posta" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:41 msgid "user email address" msgstr "Kullanıcının e-posta adresi" -#: vibes_auth/models.py:87 +#: vibes_auth/models.py:43 msgid "phone_number" msgstr "Telefon Numarası" -#: vibes_auth/models.py:92 +#: vibes_auth/models.py:48 msgid "user phone number" msgstr "Kullanıcı telefon numarası" -#: vibes_auth/models.py:98 +#: vibes_auth/models.py:54 msgid "first_name" msgstr "İlk isim" -#: vibes_auth/models.py:99 +#: vibes_auth/models.py:55 msgid "last_name" msgstr "Soyadı" -#: vibes_auth/models.py:105 +#: vibes_auth/models.py:61 msgid "user profile image" msgstr "Kullanıcı profili resmi" -#: vibes_auth/models.py:110 +#: vibes_auth/models.py:66 msgid "is verified" msgstr "Doğrulandı" -#: vibes_auth/models.py:111 +#: vibes_auth/models.py:67 msgid "user verification status" msgstr "Kullanıcının doğrulama durumu" -#: vibes_auth/models.py:114 +#: vibes_auth/models.py:70 msgid "is_active" msgstr "Aktif" -#: vibes_auth/models.py:116 +#: vibes_auth/models.py:72 msgid "unselect this instead of deleting accounts" msgstr "Hesapları silmek yerine bunun seçimini kaldırın" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "is_subscribed" msgstr "Abone olundu" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "user's newsletter subscription status" msgstr "Kullanıcının haber bülteni abonelik durumu" -#: vibes_auth/models.py:122 +#: vibes_auth/models.py:78 msgid "activation token" msgstr "Etkinleştirme belirteci" -#: vibes_auth/models.py:124 +#: vibes_auth/models.py:80 msgid "attributes" msgstr "Nitelikler" -#: vibes_auth/models.py:158 +#: vibes_auth/models.py:110 msgid "user" msgstr "Kullanıcı" -#: vibes_auth/models.py:159 +#: vibes_auth/models.py:111 msgid "users" msgstr "Kullanıcılar" -#: vibes_auth/models.py:179 +#: vibes_auth/models.py:131 msgid "group" msgstr "Grup" -#: vibes_auth/models.py:196 +#: vibes_auth/models.py:148 msgid "outstanding token" msgstr "Olağanüstü belirteç" -#: vibes_auth/models.py:197 +#: vibes_auth/models.py:149 msgid "outstanding tokens" msgstr "Ödenmemiş jetonlar" -#: vibes_auth/models.py:215 +#: vibes_auth/models.py:167 msgid "blacklisted token" msgstr "Kara listeye alınmış belirteç" -#: vibes_auth/models.py:216 +#: vibes_auth/models.py:168 msgid "blacklisted tokens" msgstr "Kara listeye alınmış belirteçler" @@ -409,12 +428,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Saygılarımla,
the %(project_name)s team" -#: vibes_auth/utils/emailing.py:27 +#: vibes_auth/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Hesabı Etkinleştir" -#: vibes_auth/utils/emailing.py:69 +#: vibes_auth/utils/emailing.py:63 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Şifreyi Sıfırla" @@ -469,7 +488,7 @@ msgstr "" msgid "the token is invalid" msgstr "Belirteç geçersiz" -#: vibes_auth/viewsets.py:43 +#: vibes_auth/viewsets.py:44 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." @@ -477,10 +496,10 @@ 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 +#: vibes_auth/viewsets.py:98 msgid "password reset successfully" msgstr "Şifre başarıyla sıfırlandı!" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:131 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 5b1ad7ed..59f32890 100644 Binary files a/vibes_auth/locale/vi_VN/LC_MESSAGES/django.mo and b/vibes_auth/locale/vi_VN/LC_MESSAGES/django.mo differ diff --git a/vibes_auth/locale/vi_VN/LC_MESSAGES/django.po b/vibes_auth/locale/vi_VN/LC_MESSAGES/django.po index ee038b7b..a6d660f6 100644 --- a/vibes_auth/locale/vi_VN/LC_MESSAGES/django.po +++ b/vibes_auth/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-13 18:49+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:82 +#: vibes_auth/viewsets.py:83 msgid "passwords do not match" msgstr "Mật khẩu không khớp." @@ -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:125 -#: vibes_auth/viewsets.py:144 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 +#: vibes_auth/viewsets.py:145 msgid "activation link is invalid!" msgstr "Liên kết kích hoạt không hợp lệ!" @@ -163,7 +163,7 @@ 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:93 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 msgid "token is invalid!" msgstr "Token không hợp lệ!" @@ -175,7 +175,7 @@ msgstr "" "Các sản phẩm mà người dùng này đã xem gần đây nhất (tối đa 48), theo thứ tự " "thời gian ngược." -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:180 +#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 msgid "groups" msgstr "Nhóm" @@ -183,7 +183,7 @@ msgstr "Nhóm" msgid "wishlist" msgstr "Danh sách mong muốn" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:102 +#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 msgid "avatar" msgstr "Avatar" @@ -200,91 +200,109 @@ msgstr "Ngôn ngữ là một trong những {LANGUAGES} với mặc định {LAN msgid "address set" msgstr "Địa chỉ" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:30 +msgid "" +"Represents a User entity with customized fields and methods for extended " +"functionality. This class extends the AbstractUser model and integrates " +"additional features like custom email login, validation methods, " +"subscription status, verification, and attributes storage. It also provides " +"utilities for managing recently viewed items and token-based activation for " +"verifying accounts. The User model is designed to handle specific use cases " +"for enhanced user management." +msgstr "" +"Đại diện cho thực thể Người dùng với các trường và phương thức tùy chỉnh để " +"mở rộng chức năng. Lớp này kế thừa từ mô hình AbstractUser và tích hợp các " +"tính năng bổ sung như đăng nhập bằng email tùy chỉnh, phương thức xác thực, " +"trạng thái đăng ký, xác minh và lưu trữ thuộc tính. Nó cũng cung cấp các " +"công cụ để quản lý các mục đã xem gần đây và kích hoạt dựa trên token để xác" +" minh tài khoản. Mô hình Người dùng được thiết kế để xử lý các trường hợp sử" +" dụng cụ thể nhằm nâng cao quản lý người dùng." + +#: vibes_auth/models.py:41 msgid "email" msgstr "Email" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:41 msgid "user email address" msgstr "Địa chỉ email của người dùng" -#: vibes_auth/models.py:87 +#: vibes_auth/models.py:43 msgid "phone_number" msgstr "Số điện thoại" -#: vibes_auth/models.py:92 +#: vibes_auth/models.py:48 msgid "user phone number" msgstr "Số điện thoại của người dùng" -#: vibes_auth/models.py:98 +#: vibes_auth/models.py:54 msgid "first_name" msgstr "Họ" -#: vibes_auth/models.py:99 +#: vibes_auth/models.py:55 msgid "last_name" msgstr "Họ" -#: vibes_auth/models.py:105 +#: vibes_auth/models.py:61 msgid "user profile image" msgstr "Hình ảnh hồ sơ người dùng" -#: vibes_auth/models.py:110 +#: vibes_auth/models.py:66 msgid "is verified" msgstr "Đã được xác minh" -#: vibes_auth/models.py:111 +#: vibes_auth/models.py:67 msgid "user verification status" msgstr "Trạng thái xác minh của người dùng" -#: vibes_auth/models.py:114 +#: vibes_auth/models.py:70 msgid "is_active" msgstr "Đang hoạt động" -#: vibes_auth/models.py:116 +#: vibes_auth/models.py:72 msgid "unselect this instead of deleting accounts" msgstr "Hủy chọn tùy chọn này thay vì xóa tài khoản." -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "is_subscribed" msgstr "Đã đăng ký" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "user's newsletter subscription status" msgstr "Tình trạng đăng ký bản tin của người dùng" -#: vibes_auth/models.py:122 +#: vibes_auth/models.py:78 msgid "activation token" msgstr "Mã kích hoạt" -#: vibes_auth/models.py:124 +#: vibes_auth/models.py:80 msgid "attributes" msgstr "Thuộc tính" -#: vibes_auth/models.py:158 +#: vibes_auth/models.py:110 msgid "user" msgstr "Người dùng" -#: vibes_auth/models.py:159 +#: vibes_auth/models.py:111 msgid "users" msgstr "Người dùng" -#: vibes_auth/models.py:179 +#: vibes_auth/models.py:131 msgid "group" msgstr "Nhóm" -#: vibes_auth/models.py:196 +#: vibes_auth/models.py:148 msgid "outstanding token" msgstr "Token xuất sắc" -#: vibes_auth/models.py:197 +#: vibes_auth/models.py:149 msgid "outstanding tokens" msgstr "Token xuất sắc" -#: vibes_auth/models.py:215 +#: vibes_auth/models.py:167 msgid "blacklisted token" msgstr "Token bị đưa vào danh sách đen" -#: vibes_auth/models.py:216 +#: vibes_auth/models.py:168 msgid "blacklisted tokens" msgstr "Các token bị đưa vào danh sách đen" @@ -407,12 +425,12 @@ msgstr "Kích hoạt tài khoản" msgid "best regards,
the %(project_name)s team" msgstr "Trân trọng,
Đội ngũ %(project_name)s" -#: vibes_auth/utils/emailing.py:27 +#: vibes_auth/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Kích hoạt tài khoản" -#: vibes_auth/utils/emailing.py:69 +#: vibes_auth/utils/emailing.py:63 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Đặt lại mật khẩu" @@ -467,7 +485,7 @@ msgstr "" msgid "the token is invalid" msgstr "Token không hợp lệ" -#: vibes_auth/viewsets.py:43 +#: vibes_auth/viewsets.py:44 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." @@ -478,10 +496,10 @@ msgstr "" " 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 +#: vibes_auth/viewsets.py:98 msgid "password reset successfully" msgstr "Mật khẩu đã được đặt lại thành công!" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:131 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 04141343..f14e069e 100644 Binary files a/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.mo and b/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.mo differ diff --git a/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.po b/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.po index 0f362680..9785b891 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-10-06 15:52+0300\n" +"POT-Creation-Date: 2025-10-13 18:49+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:82 +#: vibes_auth/viewsets.py:83 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:125 -#: vibes_auth/viewsets.py:144 +#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 +#: vibes_auth/viewsets.py:145 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:93 +#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 msgid "token is invalid!" msgstr "令牌无效!" @@ -170,7 +170,7 @@ msgid "" "reverse‐chronological order" msgstr "该用户最近查看过的产品(最多 48 个),按倒序排列。" -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:180 +#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 msgid "groups" msgstr "组别" @@ -178,7 +178,7 @@ msgstr "组别" msgid "wishlist" msgstr "愿望清单" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:102 +#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 msgid "avatar" msgstr "阿凡达" @@ -195,91 +195,104 @@ msgstr "语言是{LANGUAGES}之一,默认为{LANGUAGE_CODE}。" msgid "address set" msgstr "地址" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:30 +msgid "" +"Represents a User entity with customized fields and methods for extended " +"functionality. This class extends the AbstractUser model and integrates " +"additional features like custom email login, validation methods, " +"subscription status, verification, and attributes storage. It also provides " +"utilities for managing recently viewed items and token-based activation for " +"verifying accounts. The User model is designed to handle specific use cases " +"for enhanced user management." +msgstr "" +"代表具有自定义字段和方法以扩展功能的用户实体。该类扩展了 AbstractUser " +"模型,并集成了其他功能,如自定义电子邮件登录、验证方法、订阅状态、验证和属性存储。它还为管理最近查看的项目和基于令牌的激活提供了实用工具,以便验证账户。用户模型旨在处理增强用户管理的特定用例。" + +#: vibes_auth/models.py:41 msgid "email" msgstr "电子邮件" -#: vibes_auth/models.py:85 +#: vibes_auth/models.py:41 msgid "user email address" msgstr "用户电子邮件地址" -#: vibes_auth/models.py:87 +#: vibes_auth/models.py:43 msgid "phone_number" msgstr "电话号码" -#: vibes_auth/models.py:92 +#: vibes_auth/models.py:48 msgid "user phone number" msgstr "用户电话号码" -#: vibes_auth/models.py:98 +#: vibes_auth/models.py:54 msgid "first_name" msgstr "姓名" -#: vibes_auth/models.py:99 +#: vibes_auth/models.py:55 msgid "last_name" msgstr "姓氏" -#: vibes_auth/models.py:105 +#: vibes_auth/models.py:61 msgid "user profile image" msgstr "用户配置文件图像" -#: vibes_auth/models.py:110 +#: vibes_auth/models.py:66 msgid "is verified" msgstr "已核实" -#: vibes_auth/models.py:111 +#: vibes_auth/models.py:67 msgid "user verification status" msgstr "用户验证状态" -#: vibes_auth/models.py:114 +#: vibes_auth/models.py:70 msgid "is_active" msgstr "处于活动状态" -#: vibes_auth/models.py:116 +#: vibes_auth/models.py:72 msgid "unselect this instead of deleting accounts" msgstr "取消选择此选项,而不是删除账户" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "is_subscribed" msgstr "已订阅" -#: vibes_auth/models.py:119 +#: vibes_auth/models.py:75 msgid "user's newsletter subscription status" msgstr "用户的通讯订阅状态" -#: vibes_auth/models.py:122 +#: vibes_auth/models.py:78 msgid "activation token" msgstr "激活令牌" -#: vibes_auth/models.py:124 +#: vibes_auth/models.py:80 msgid "attributes" msgstr "属性" -#: vibes_auth/models.py:158 +#: vibes_auth/models.py:110 msgid "user" msgstr "用户" -#: vibes_auth/models.py:159 +#: vibes_auth/models.py:111 msgid "users" msgstr "用户" -#: vibes_auth/models.py:179 +#: vibes_auth/models.py:131 msgid "group" msgstr "组别" -#: vibes_auth/models.py:196 +#: vibes_auth/models.py:148 msgid "outstanding token" msgstr "出色的代币" -#: vibes_auth/models.py:197 +#: vibes_auth/models.py:149 msgid "outstanding tokens" msgstr "未兑代币" -#: vibes_auth/models.py:215 +#: vibes_auth/models.py:167 msgid "blacklisted token" msgstr "黑名单令牌" -#: vibes_auth/models.py:216 +#: vibes_auth/models.py:168 msgid "blacklisted tokens" msgstr "黑名单令牌" @@ -402,12 +415,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "致以最崇高的敬意,
%(project_name)s_团队" -#: vibes_auth/utils/emailing.py:27 +#: vibes_auth/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME}| 激活帐户" -#: vibes_auth/utils/emailing.py:69 +#: vibes_auth/utils/emailing.py:63 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME}| 重置密码" @@ -449,7 +462,7 @@ msgstr "代表使用特定序列化和验证逻辑验证 JSON Web 标记 (JWT) msgid "the token is invalid" msgstr "令牌无效" -#: vibes_auth/viewsets.py:43 +#: vibes_auth/viewsets.py:44 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." @@ -457,10 +470,10 @@ msgstr "" "用户视图集实施。\n" "该类提供了一组操作,用于管理用户相关数据,如创建、检索、更新、删除以及自定义操作,包括密码重置、上传头像、激活账户和合并最近查看的项目。该类对 mixins 和 GenericViewSet 进行了扩展,以实现强大的 API 处理功能。" -#: vibes_auth/viewsets.py:97 +#: vibes_auth/viewsets.py:98 msgid "password reset successfully" msgstr "密码已重置成功!" -#: vibes_auth/viewsets.py:130 +#: vibes_auth/viewsets.py:131 msgid "account already activated!" msgstr "您已经激活了账户..." diff --git a/vibes_auth/models.py b/vibes_auth/models.py index 2133a8ab..2eb00d04 100644 --- a/vibes_auth/models.py +++ b/vibes_auth/models.py @@ -9,7 +9,6 @@ from django.db.models import ( EmailField, ImageField, JSONField, - QuerySet, UUIDField, ) from django.utils.translation import gettext_lazy as _ @@ -21,63 +20,20 @@ from rest_framework_simplejwt.token_blacklist.models import ( ) from core.abstract import NiceModel -from core.models import Order, Wishlist from evibes.settings import LANGUAGE_CODE, LANGUAGES -from payments.models import Balance from vibes_auth.managers import UserManager from vibes_auth.validators import validate_phone_number class User(AbstractUser, NiceModel): # type: ignore [django-manager-missing] - """ - Represents a User entity with customized fields and methods for extended functionality. - - This class extends the AbstractUser model and integrates additional features like - custom email login, validation methods, subscription status, verification, and - attributes storage. It also provides utilities for managing recently viewed items and - token-based activation for verifying accounts. The User model is designed to handle - specific use cases for enhanced user management. - - Attributes: - email: EmailField to store the user's email address. - phone_number: CharField for the user's phone number, allowing for optional storage and validation. - username: Has been set to None as email is the primary unique identifier. - first_name: Optional CharField for the user's first name. - last_name: Optional CharField for the user's last name. - avatar: ImageField for storing the path to the user's profile picture. - is_verified: BooleanField indicating whether the user's email has been verified. - is_active: BooleanField to toggle user activity without deleting the account. - is_subscribed: BooleanField indicating the user's newsletter subscription status. - activation_token: UUIDField for assigning a unique activation token to the user. - language: CharField storing the user's preferred language setting. - attributes: JSONField for custom storage of user-specific additional attributes. - USERNAME_FIELD: Specifies the unique identifier for the user (email in this case). - REQUIRED_FIELDS: A list of fields required when creating a user via createsuperuser, left empty here. - objects: Custom manager for the User model providing additional methods for user creation. - payments_balance: Reference to the user's payment balance (related to the external model). - user_related_wishlist: Reference to the user's wishlist (related to the external model). - orders: QuerySet representing the user's associated orders. - - Methods: - add_to_recently_viewed(product_uuid): - Adds a product's UUID to the user's recently viewed items cache. Keeps a maximum - of 48 items and maintains their order of viewing. - - recently_viewed: (read-only property) - Retrieves a list of UUIDs representing the products recently viewed by the user - from the cache. - - check_token(token): - Validates the input token against the user's activation token. - - __str__(): - Returns the string representation of the user, which is the email address. - - Meta: - swappable: Configures the model to be replaceable with another user model. - verbose_name: Sets the human-readable name for singular instances of the model. - verbose_name_plural: Sets the human-readable name for multiple instances of the model. - """ + __doc__ = _( + "Represents a User entity with customized fields and methods for extended functionality. " # type: ignore + "This class extends the AbstractUser model and integrates additional features like " + "custom email login, validation methods, subscription status, verification, and " + "attributes storage. It also provides utilities for managing recently viewed items and " + "token-based activation for verifying accounts. The User model is designed to handle " + "specific use cases for enhanced user management." + ) def get_uuid_as_path(self, *args): return "users/" + str(self.uuid) + "/" + args[0] @@ -128,10 +84,6 @@ class User(AbstractUser, NiceModel): # type: ignore [django-manager-missing] # noinspection PyClassVar objects = UserManager() # type: ignore [misc, assignment] - payments_balance: "Balance" - user_related_wishlist: "Wishlist" - orders: QuerySet["Order"] - def add_to_recently_viewed(self, product_uuid): recently_viewed = self.recently_viewed if product_uuid not in recently_viewed: diff --git a/vibes_auth/tests.py b/vibes_auth/tests.py index c43a3687..e69de29b 100644 --- a/vibes_auth/tests.py +++ b/vibes_auth/tests.py @@ -1,116 +0,0 @@ -from django.contrib.auth.tokens import PasswordResetTokenGenerator -from django.test import TestCase -from django.urls import reverse -from django.utils.http import urlsafe_base64_encode -from graphene.test import Client -from rest_framework.test import APIClient - -from core.graphene.schema import schema -from vibes_auth.models import User - - -class AuthTests(TestCase): - def setUp(self): - self.client = Client(schema) - self.api_client = APIClient() - self.user = User.objects.create_user( - email="testuser@example.com", - password="testpassword", - first_name="Test", - last_name="User", - ) - self.admin = User.objects.create_superuser( - email="admin@example.com", - password="adminpassword", - first_name="Admin", - last_name="User", - ) - - def test_create_user(self): - query = """ - mutation { - createUser(email: "newuser@example.com", password: "newpassword", confirmPassword: "newpassword") { - user { - email - firstName - lastName - } - } - } - """ - result = self.client.post(query) - self.assertIsNone(result.get("errors")) - data = result["data"] - self.assertEqual(data, "newuser@example.com") - self.assertEqual(User.objects.count(), 3) # Initial two + new user - - def test_obtain_token_view(self): - url = reverse("token_obtain_pair") - response = self.api_client.post(url, {"email": self.user.email, "password": "testpassword"}) - self.assertEqual(response.status_code, 200) - self.assertIn("access", response.data) - self.assertIn("refresh", response.data) - - def test_refresh_token_view(self): - obtain_url = reverse("token_obtain_pair") - refresh_url = reverse("token_refresh") - - # Obtain tokens - obtain_response = self.api_client.post(obtain_url, {"email": self.user.email, "password": "testpassword"}) - refresh_token = obtain_response.data["refresh"] - - # Refresh tokens - response = self.api_client.post(refresh_url, {"refresh": refresh_token}) - self.assertEqual(response.status_code, 200) - self.assertIn("access", response.data) - - def test_verify_token_view(self): - obtain_url = reverse("token_obtain_pair") - verify_url = reverse("token_verify") - - # Obtain tokens - obtain_response = self.api_client.post(obtain_url, {"email": self.user.email, "password": "testpassword"}) - access_token = obtain_response.data["access"] - - # Verify token - response = self.api_client.post(verify_url, {"token": access_token}) - self.assertEqual(response.status_code, 200) - self.assertEqual(response.data["token"], "The token is valid") - - def test_reset_password(self): - url = reverse("user-reset-password") - response = self.api_client.post(url, {"email": self.user.email}) - self.assertEqual(response.status_code, 200) - - def test_confirm_password_reset(self): - url = reverse("user-confirm-password-reset") - uid = urlsafe_base64_encode(str(self.user.pk).encode()) - token = PasswordResetTokenGenerator().make_token(self.user) - - response = self.api_client.post( - url, - { - "uidb64": uid, - "token": token, - "password": "newpassword", - "confirm_password": "newpassword", - }, - ) - self.assertEqual(response.status_code, 200) - - def test_upload_avatar(self): - url = reverse("user-upload-avatar", kwargs={"pk": self.user.pk}) - self.api_client.force_authenticate(user=self.user) - - with open("path/to/avatar.png", "rb") as avatar: - response = self.api_client.put(url, {"avatar": avatar}) - self.assertEqual(response.status_code, 200) - - def test_activate_user(self): - url = reverse("user-activate") - uid = urlsafe_base64_encode(str(self.user.pk).encode()) - token = PasswordResetTokenGenerator().make_token(self.user) - - response = self.api_client.post(url, {"uidb64": uid, "token": token}) - self.assertEqual(response.status_code, 200) - self.assertTrue(User.objects.get(pk=self.user.pk).is_active) diff --git a/vibes_auth/utils/emailing.py b/vibes_auth/utils/emailing.py index de97955f..611fa705 100644 --- a/vibes_auth/utils/emailing.py +++ b/vibes_auth/utils/emailing.py @@ -1,7 +1,6 @@ from celery.app import shared_task from constance import config from django.contrib.auth.tokens import PasswordResetTokenGenerator -from django.core import mail from django.core.mail import EmailMessage from django.template.loader import render_to_string from django.utils.encoding import force_bytes @@ -9,7 +8,7 @@ from django.utils.http import urlsafe_base64_encode from django.utils.translation import activate from django.utils.translation import gettext_lazy as _ -from core.utils.constance import set_email_settings +from core.utils import get_dynamic_email_connection from vibes_auth.models import User @@ -21,9 +20,6 @@ def send_verification_email_task(user_pk: str) -> tuple[bool, str]: activate(user.language) - set_email_settings() - connection = mail.get_connection() - email_subject = _(f"{config.PROJECT_NAME} | Activate Account") email_body = render_to_string( "user_verification_email.html", @@ -40,7 +36,7 @@ def send_verification_email_task(user_pk: str) -> tuple[bool, str]: body=email_body, from_email=f"{config.PROJECT_NAME} <{config.EMAIL_FROM}>", to=[user.email], - connection=connection, + connection=get_dynamic_email_connection(), ) email.content_subtype = "html" email.send() @@ -63,9 +59,6 @@ def send_reset_password_email_task(user_pk: str) -> tuple[bool, str]: activate(user.language) - set_email_settings() - connection = mail.get_connection() - email_subject = _(f"{config.PROJECT_NAME} | Reset Password") email_body = render_to_string( "user_reset_password_email.html", @@ -83,7 +76,7 @@ def send_reset_password_email_task(user_pk: str) -> tuple[bool, str]: body=email_body, from_email=f"{config.PROJECT_NAME} <{config.EMAIL_FROM}>", to=[user.email], - connection=connection, + connection=get_dynamic_email_connection(), ) email.content_subtype = "html" email.send() diff --git a/vibes_auth/validators.py b/vibes_auth/validators.py index c171bb11..300cf8ca 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: str): +def validate_phone_number(value: str) -> None: 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: str): ) -def is_valid_email(value: str): +def is_valid_email(value: str) -> bool: validator = EmailValidator() try: validator(value) @@ -25,7 +25,7 @@ def is_valid_email(value: str): return False -def is_valid_phone_number(value: str): +def is_valid_phone_number(value: str) -> bool: try: validate_phone_number(value) return True diff --git a/vibes_auth/views.py b/vibes_auth/views.py index 52826bb3..7cd1609c 100644 --- a/vibes_auth/views.py +++ b/vibes_auth/views.py @@ -1,4 +1,5 @@ import logging +from typing import Any from django.utils.decorators import method_decorator from django.utils.translation import gettext_lazy as _ @@ -25,7 +26,7 @@ logger = logging.getLogger("django") @extend_schema_view(**TOKEN_OBTAIN_SCHEMA) class TokenObtainPairView(TokenViewBase): - __doc__ = _( + __doc__ = _( # type: ignore [assignment] "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 " @@ -37,13 +38,13 @@ class TokenObtainPairView(TokenViewBase): _serializer_class = TokenObtainPairSerializer # type: ignore [assignment] @method_decorator(ratelimit(key="ip", rate="10/h" if not DEBUG else "888/h")) - def post(self, request: Request, *args, **kwargs) -> Response: + def post(self, request: Request, *args: list[Any], **kwargs: dict[Any, Any]) -> Response: return super().post(request, *args, **kwargs) @extend_schema_view(**TOKEN_REFRESH_SCHEMA) class TokenRefreshView(TokenViewBase): - __doc__ = _( + __doc__ = _( # type: ignore [assignment] "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 " @@ -56,20 +57,20 @@ class TokenRefreshView(TokenViewBase): _serializer_class = TokenRefreshSerializer # type: ignore [assignment] @method_decorator(ratelimit(key="ip", rate="10/h" if not DEBUG else "888/h")) - def post(self, request: Request, *args, **kwargs) -> Response: + def post(self, request: Request, *args: list[Any], **kwargs: dict[Any, Any]) -> Response: return super().post(request, *args, **kwargs) @extend_schema_view(**TOKEN_VERIFY_SCHEMA) class TokenVerifyView(TokenViewBase): - __doc__ = _( + __doc__ = _( # type: ignore [assignment] "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: Request, *args, **kwargs) -> Response: + def post(self, request: Request, *args: list[Any], **kwargs: dict[Any, Any]) -> 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 be1881f7..cd5ffb1c 100644 --- a/vibes_auth/viewsets.py +++ b/vibes_auth/viewsets.py @@ -2,6 +2,7 @@ import logging import traceback from contextlib import suppress from secrets import compare_digest +from typing import Type from django.contrib.auth.password_validation import validate_password from django.contrib.auth.tokens import PasswordResetTokenGenerator @@ -31,6 +32,7 @@ from vibes_auth.utils.emailing import send_reset_password_email_task logger = logging.getLogger("django") +# noinspection PyUnusedLocal @extend_schema_view(**USER_SCHEMA) class UserViewSet( mixins.CreateModelMixin, @@ -39,7 +41,7 @@ class UserViewSet( mixins.DestroyModelMixin, GenericViewSet, ): - __doc__ = _( + __doc__ = _( # type: ignore [assignment] "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, " @@ -58,7 +60,7 @@ class UserViewSet( with suppress(User.DoesNotExist): user = User.objects.get(email=request.data.get("email")) if user: - send_reset_password_email_task.delay(user_pk=user.uuid) + send_reset_password_email_task.delay(user_pk=user.uuid) # type: ignore [attr-defined] return Response(status=status.HTTP_200_OK) @action(detail=True, methods=["put"], permission_classes=[IsAuthenticated]) @@ -77,16 +79,16 @@ class UserViewSet( @method_decorator(ratelimit(key="ip", rate="2/h" if not DEBUG else "888/h")) def confirm_password_reset(self, request: Request, *args, **kwargs) -> Response: try: - if not compare_digest(request.data.get("password"), request.data.get("confirm_password")): + if not compare_digest(request.data.get("password"), request.data.get("confirm_password")): # type: ignore [arg-type] return Response( {"error": _("passwords do not match")}, status=status.HTTP_400_BAD_REQUEST, ) - uuid = urlsafe_base64_decode(request.data.get("uidb_64")).decode() + uuid = urlsafe_base64_decode(request.data.get("uidb_64")).decode() # type: ignore [arg-type] user = User.objects.get(pk=uuid) - validate_password(password=request.data.get("password"), user=user) + validate_password(password=request.data.get("password"), user=user) # type: ignore [arg-type] password_reset_token = PasswordResetTokenGenerator() if not password_reset_token.check_token(user, request.data.get("token")): @@ -116,11 +118,11 @@ class UserViewSet( @method_decorator(ratelimit(key="ip", rate="2/h" if not DEBUG else "888/h")) def activate(self, request: Request) -> Response: detail = "" - activation_error = None + activation_error: Type[Exception] | None = None try: - uuid = urlsafe_base64_decode(request.data.get("uidb_64")).decode() - user = User.objects.nocache().get(pk=uuid) - if not user.check_token(urlsafe_base64_decode(request.data.get("token")).decode()): + uuid = urlsafe_base64_decode(request.data.get("uidb_64")).decode() # type: ignore [arg-type] + user = User.objects.get(pk=uuid) + if not user.check_token(urlsafe_base64_decode(request.data.get("token")).decode()): # type: ignore [arg-type] return Response( {"error": _("activation link is invalid!")}, status=status.HTTP_400_BAD_REQUEST, @@ -139,7 +141,7 @@ class UserViewSet( detail = str(traceback.format_exc()) if user is None: if DEBUG: - raise Exception from activation_error + raise Exception from activation_error # type: ignore [misc] return Response( {"error": _("activation link is invalid!"), "detail": detail}, status=status.HTTP_400_BAD_REQUEST,